====== MessageSelector ======
Der Jobstep **MessageSelector** selektiert Nachrichten, welche Eigenschaft gem. Funktionsargumenten angegeben sind((Zur Laufzeit aus dem internen Objekt ebiss.ClassLib.MessageSelector.SelectionBase)).
^Name ^Bedeutung |
|//Description//|Hier kann ggf. eine Beschreibung der konkreten Aufgabe des Jobsteps in diesem Job eingetragen werden.|
|//Expression//|Funktion, deren Ergebnis wahr oder falsch zurückliefert. Alle Messages auf denen die Funktion zutrifft, werden aus der eingehenden Messagebox (Inbox, SelectionBase/InputMessages) selektiert.\\ Häufig wird die Message-Struktur(//[[kommunikation:nachrichten:selectionbase|SelectionBase]]//) benötigt um Bedingungen formulieren zu können. |
|//Name//|Name des //MessageSelector Jobsteps//. Hier sollte nach Möglichkeit ein aussagekräftiger Name gewählt werden.|
|//XPath Aufrufe loggen//|Wenn aktiviert, werden die vom „XPath Ausdruck“ ausgewerteten Werte bei aktivem Debug Log ausgegeben.|
Die ausgehenden Konnektoren des **MessageSelector** haben unterschiedliche Effekte:
* **OnMessgeSelection** gibt die ganze Selektion raus, wird also einmal bedient
* **OnMessage** gibt die einzelne Message, wird also so oft bedient wie Anzahl Nachrichten in der Selektion sind.
{{:images:sign_warning.png?nolink|}}**Hinweis:** siehe auch [[kommunikation:nachrichten:start#auswertung_bzw_filterung_von_nachrichten_in_jobs|Auswertung bzw. Filterung von Nachrichten in Jobs]]
{{:images:sign_warning.png?nolink|}}**Hinweis:** Sie können den Ausdruck mit der Mapping Funktion [[transformation:mappings:funktionen:allgemein:getmessageasselectionbase|]] im MapDebugger testen.
===== Beispiele: =====
* Selektiere alle Messages aus dem Nachrichtenkorb **To.Partner**://SelectionBase/OutputMessages[@MessageBoxName = 'To.Partner']
* Selektiere alle Nachrichten, die kein Attachment haben.//SelectionBase/InputMessages[ count(Attachments) = 0]
* Selektiere alle Eingangsnachrichten, die im Subject den Text 'desadv' enthalten.//SelectionBase/InputMessages[contains(@Subject,'desadv')]
* Selektiere alle Ausgangsnachrichten, deren Dateiname Test.txt ist.//SelectionBase/OutputMessages[Attachments/@Filename = 'Test.txt']
* Selektiere alle Eingangsnachrichten, deren Dokumenttyp Pricat ist.//SelectionBase/InputMessages[Documents/@DocType = 'PRICAT']
* Selektiere alle Eingangsnachrichten, deren Dokument EntityType Desadv D96A ist.//SelectionBase/InputMessages[Match(Documents/EntityType/@Name, '.*Desadv.*D96A')]
* Selektiere alle Eingangsnachrichten, deren EntryDate gleich 2007-01-29T17:50:00 ist.//SelectionBase/InputMessages[CompareDateTime(@EntryDate, '2007-01-29T17:50:00') > 0]
* Selektiere alle Nachrichten mit zip Anhängen.//SelectionBase/InputMessages[contains(Attachments/@Filename, '.ZIP')]
* Selektiere alle Nachrichten wo bei dem Handelspartner die Variable 'Test' gesetzt ist.//SelectionBase/InputMessages[IsTrue(GetTradingPartnerLocationVariable("Test", @PartnerGLN))]
* **[[partnerverwaltung:lokation:variablen:partnervariable]]** auswerten:/SelectionBase/InputMessages[GetTradingPartnerVariable('No.EDI', @PartnerGLN) != 'True' ]
{{:images:sign_warning.png?nolink|}}**Hinweis:** Die wichtigste Unterscheidung ist der Pfad **/SelectionBase/InputMessages** und **/SelectionBase/OutputMessages**. Hierbei sind Nachrichten die innerhalb eines Jobs mit dem [[prozessdefinition:jobs:jobsteps:allgemein:entitymessagecreator|MessageCreator]] erzeugt werden im selben Job mit **/SelectionBase/OutputMessages** und alle an eine Job übergebenen Nachrichten mit **/SelectionBase/InputMessages** zu selektieren.
{{:images:sign_warning.png?nolink|}}**Hinweis:** Alle Nachrichteneigenschaften((Objekt-Attribute)), die das Nachrichten Objekt beinhaltet, können innerhalb der Funktion verwendet werden. Eine Auflistung dieser Attribute erhalten Sie, wenn Sie mittels Map-Editor ein neues Mapping anlegen, und als Quellobjekt die **eBiss.ClassLib.MessageSelector.Selectionbase**((Siehe auch [[kommunikation:nachrichten:selectionbase_pfade]])) auswählen.
===== Kaskadieren von Selektoren =====
Es ist möglich, die Messageselektoren kaskadiert anzuwenden. Hierbei wird noch eine zweite Selektionsstufe durch einen weiteren MessageSelector nachgeschaltet.\\
Die Nachrichten der ersten Selektion werden durch eine zweite Selektion noch einmal gefiltert.\\
**Wichtig:** Der kaskadierte MessageSelector (zweite Selektionsstufe) hat nun die **/SelectionBase/SelectedMessages** als MessageListen-Auswahl zur Verfügung.
===== Folgende JobSteps werden i.d.R. mit dem MessageSelector verbunden =====
* [[prozessdefinition:jobs:jobsteps:allgemein:delegatorjob]]
* [[prozessdefinition:jobs:jobsteps:allgemein:EntitySelector]]
* [[prozessdefinition:jobs:jobsteps:allgemein:messageloader]]
* [[prozessdefinition:jobs:jobsteps:allgemein:MessageSelector]]
* [[prozessdefinition:jobs:jobsteps:allgemein:MessageStateSetter]]
* [[prozessdefinition:jobs:jobsteps:allgemein:TaskNotification]]
* [[prozessdefinition:jobs:jobsteps:allgemein:TaskNotificatorEx]]
* [[prozessdefinition:jobs:jobsteps:supplier:articlesubscriptionselectordirectsql]]