ESM Listener Übersicht
Datenkarten-Listener in Matrix42 Professional
Datenkarten-Listener sind ein Mechanismus zur Implementierung von Geschäftslogik in Matrix42 Professional (ESM). Sie reagieren auf bestimmte Ereignisse in M42 Pro -Vorlagen und ermöglichen automatisierte Aktionen basierend auf definierten Bedingungen. Wenn eine Vorlage über einen Listener verfügt, können alle erstellten Datenkarten den Listener beim Speichern auslösen:

Ausführungsreihenfolge: siehe Artikel „ Pro speichern in M42 Pro “.
Konfigurieren von Datenkarten-Listenern
Datenkarten-Listener werden mithilfe von XML-Dateien konfiguriert, die die Eigenschaften und das Verhalten des Listeners definieren. Der Konfigurationsprozess umfasst:
- Erstellen einer XML-Konfiguration : Das Verhalten und die Bedingungen des Listeners werden in einer XML-Datei definiert. Diese Datei gibt an, wie der Listener mit den Datenkartenereignissen interagiert.
- Importieren in M42 Pro Vorlage : Sobald die XML-Konfiguration erstellt ist, muss sie in die entsprechende M42 Pro -Vorlage importiert werden. Dieser Schritt aktiviert den Listener innerhalb der Vorlage.
- Passen Sie die Reihenfolge der Listener an : Vorabspeicherungen werden zuerst in der angegebenen Reihenfolge ausgeführt, Nachabspeicherungen dann in der gleichen Reihenfolge. Es ist relevant, welche zuerst ausgeführt wird. Platzieren Sie beispielsweise die Validator-Listener bei der Vorabspeicherung zuerst. Verschieben Sie die Listener, um die korrekte Ausführungsreihenfolge widerzuspiegeln.
Listener können auch als Teil der gesamten M42 Pro Konfigurations-XML exportiert werden, was eine einfache Replikation und Bereitstellung in verschiedenen Umgebungen ermöglicht.
Listener-Funktionalität und Trigger-Einstellungen
Jede M42 Pro Vorlage kann einen oder mehrere Listener enthalten. Wenn die einer Vorlage zugeordnete Datenkarte gespeichert wird, wird jeder für diese Vorlage registrierte Listener über das Ereignis benachrichtigt.
Listener werden so konfiguriert, dass sie auf bestimmte Ereignisse basierend auf ihren Trigger-Einstellungen reagieren. Diese können entweder sein:
- Pre-Save-Trigger : Der Listener wird aktiviert, bevor die Datenkarte gespeichert wird. Er ändert nur die Quelldatenkarte .
- Post-Save-Trigger : Der Listener wird nach dem Speichern der Datenkarte aktiviert. Er ändert nur andere Datenkarten.
- Es sei denn, es besteht ein besonderer Bedarf, eine Quelldatenkarte zu ändern und absichtlich einen zweiten Speicherzyklus darauf auszulösen. Eine Beispielsituation ist, einen Statuswert auf einem Ticket mit einem Listener zu ändern, aber die Handler DataCardHiddenState und ValueChange auszulösen, um die Änderung dabei widerzuspiegeln.

Nach der Auslösung prüft der Listener, ob er auf das Ereignis reagieren soll. Diese Entscheidung basiert auf definierten Quellbedingungen, die in der Listener-Konfiguration festgelegte Kriterien sind. Die Quellbedingungen bestimmen, ob die Quelldatenkarte (d. h. die gespeicherte Datenkarte) den für die Aktion des Listeners erforderlichen Parametern entspricht. Um Änderungen auf bestimmte Zieldatenkarten einer anderen Vorlage auszurichten, legen Zielbedingungen am Anfang des Aktionskettenabschnitts die Ziele fest.
- Mehrere Listener : Eine einzelne Vorlage kann mehrere Listener unterstützen, die jeweils auf unterschiedliche Auslöser oder Bedingungen reagieren.
- Bedingte Logik : Listener reagieren nur auf Ereignisse, wenn die angegebenen Bedingungen erfüllt sind. Dies ermöglicht eine präzise Kontrolle darüber, wann und wie die Geschäftslogik angewendet wird.
Bewährte Methoden
Vorsicht bei: Erstellen von Konstruktionen, bei denen Sie dieselbe Datenkarte mehrmals mit unterschiedlichen Post-Save-Listenern aktualisieren. Konflikte zwischen Listenern und anderen Handler-basierten Funktionen.
Allgemein
Listener-XML kann mit einem Abschnitt <!-- foobar --> kommentiert werden, aber die Kommentare werden entfernt, sobald der Listener in M42 Pro importiert wird (d. h., das Kommentieren von Listenern ist nur dann sinnvoll, wenn die „Stammdaten“ des Listeners woanders gespeichert sind).
- Sie können mehr als eine Aktionskette hinzufügen
- Wenn Sie beispielsweise mehrere verschiedene Zielvorlagen-Datenkarten in einem Post-Save-Listener berühren müssen, basierend auf den gleichen Quellbedingungen
- Vermeiden Sie die Verwendung tiefer/mehrstufiger kombinierter UND-ODER-UND-Bedingungen, um den Listener-Code verständlicher zu halten. Versuchen Sie stattdessen, entweder die Bedingungen zu vereinfachen oder die komplexere Logik im Ausdruckscode in einem Hilfsattribut auszuführen.
- Hinweis: Das Hilfsattribut für Ausdrücke kann als mehrwertige Zeichenfolge festgelegt werden, um das Festlegen mehrerer Werte in einem Hilfsattribut zu ermöglichen, die die Listener als unterschiedliche Auslöser verwenden können.
XML
- Traditionelle Methode zum Erstellen von Geschäftslogik/Ausführen nicht feldbasierter automatischer Funktionen auf einer bestimmten Vorlage.
Konfiguriert durch Erstellen einer entsprechenden XML-Konfiguration.- Listener werden verwendet, indem dieses XML in eine M42 Pro -Vorlage importiert wird.
- Listener können als Teil der M42 Pro Konfigurations-XML exportiert werden.
- Die Reihenfolge der Bestellung muss berücksichtigt werden.
- Zuerst Vorspeicherungen in der Reihenfolge, dann Nachspeicherungen in der Reihenfolge pro Vorlage.
- Vorab gespeicherte Listener:
- Wird bei jedem Speichern der Datenkarte ausgeführt und überprüft, nach allen Handlern außer AutoMailSender und TargetDeleter.
- Wird auf Datenkarten „dieser“ Vorlage verwendet.
- Post-Save-Listener:
- Wird normalerweise auf Datenkarten anderer Vorlagen verwendet, die mit der Datenkarte „dieser“ Vorlage in Zusammenhang stehen.
- Kann Zielbedingungen enthalten.
- Kann eine Sequenz auf einer anderen Vorlage erneut auslösen.
- Handler auf der Zielvorlage werden nach diesen ausgeführt
Das Übertragen von Zeichenfolgendaten in ein Referenzfeld mit Änderungs- oder Kopieraktion funktioniert möglicherweise nicht.
- Normalerweise müssten Sie die Entity-ID pushen, wenn Sie eine Verknüpfung zu einer bestimmten Datenkarte herstellen möchten.
- Das Kopieren von Referenz zu Referenz sollte funktionieren.
- In den meisten Fällen ist es einfacher, Referenzen mit Ausdrücken zu verknüpfen, aber wenn Sie beispielsweise Transformationen durchführen, müssen Sie möglicherweise Listener verwenden, um anschließend einige Referenzen durchzuführen.
Vorsicht vor:
- Erstellen von Konstruktionen, bei denen Sie dieselbe Datenkarte mehrmals mit unterschiedlichen Post-Save-Listenern aktualisieren.
- Konflikte zwischen Listenern und anderen Handler-basierten Funktionen.
- Festlegung der Startreihenfolge.
HINWEIS : Sie müssen statistische Datums-/Uhrzeit-Tags mit dem Listener aktualisieren, wenn Sie Datenkarten mit Datechecker – Listener-Automatisierung – schließen. Diese Methode ist eine Anfängermethode, die unvollständig und fest codiert ist und auf lange Sicht nicht flexibel ist. Beachten Sie, dass dies nicht möglich ist, wenn Sie ValueChanges erstellen müssen. Eine flexiblere, aber kompliziertere Methode besteht darin, nach dem Speichern die entsprechenden Handler auszulösen (deren Konfiguration nach dem Erstellen der Listener variieren kann).
Importieren eines Listeners
Beim Importieren eines Listeners validiert M42 Pro den Inhalt und die Struktur von XML:
- Die ausgegebene Fehlermeldung ist oft nicht interpretierbar, beispielsweise „XML darf nicht leer sein“.
- Überprüfen Sie, ob Sie alle XML-Tags </> geschlossen haben und alle Attributcodes korrekt sind usw.
- Überprüfen Sie die Listener-Dokumentation, um sicherzustellen, dass Sie nicht versuchen, Dinge zu tun, die nicht möglich sind, wie z. B. das Vergleichen von Textfeldern oder externen Referenzfeldern.
- Versuchen Sie, verdächtige Komponenten zu entfernen oder zu ändern und versuchen Sie es ohne sie.
Verwenden von Protokollierung und DEBUG
- Sie könnten versuchen, weitere Informationen zu extrahieren, indem Sie einige dieser Klassen für die Laufzeitprotokollierung öffnen und die DEBUG-Ebene festlegen, wenn Sie versuchen, das XML zu importieren
- com.bitmount.equipment.action.TemplateListenerImport in den meisten Fällen aktivieren
- com.bitmount.equipment.importing.ValidatingEntityXMLImporter
- com.efecte.datamodel.entity.listener.importing.XMLActionChainImporter
- com.efecte.datamodel.entity.listener.importing.XMLDataCardListenerImporter
- com.efecte.datamodel.entity.listener.importing.XMLSourceConditionsImporter
- com.efecte.datamodel.entity.listener.importing.XMLTemplatesDataCardListenerImporter
- Denken Sie daran, die Protokollierung nach der Reparatur der Listener wieder auf die INFO-Ebene zurückzusetzen, da Sie sonst riesige Mengen an Protokolldateien produzieren!!
- Listener erfolgreich importiert, funktioniert aber nicht wie gewünscht
- Überprüfen Sie die Laufzeitprotokolle und legen Sie die DEBUG-Ebene fest. Sie sollten sehen, was ausgelöst wird und was nicht
- Quellbedingungen
- com.efecte.datamodel.entity.listener.condition.(?????)
- Zielbedingungen
- com.efecte.datamodel.entity.action.chain.condition.(?????)
- Aktionen
- com.efecte.datamodel.entity.action.implementations.(?????)
- (?????) = jede XML-Komponente
- Quellbedingungen
- Denken Sie daran, die Protokollierung nach der Reparatur der Listener wieder auf die INFO-Ebene zurückzusetzen, da Sie sonst riesige Mengen an Protokolldateien produzieren!!
- Plattformeinstellungen für Zuhörer
- datacard.listeners.run.as.root
Ticketstatusänderung
Wenn Sie einen Ticketstatuswert mit dem Listener ändern, sollten Sie Folgendes berücksichtigen:
- Statistik-Zeitstempel werden entsprechend aktualisiert
- Der ValueChange-Verlauf des Status wird entsprechend aktualisiert
- Eventuell ausblenden / sichtbar machen der Datenkarte wird entsprechend aktualisiert
- Wenn Sie ein Feld mit einem Pre-Save-Listener festlegen, erwarten Sie nicht, dass ein darauf basierender Ausdruck ausgeführt wird, es sei denn, Sie tun dies innerhalb des Listeners!
- Wenn Sie ein Attribut löschen, das mit einem Listener verknüpft ist, wird der Listener beschädigt
- Der Listener muss gelöscht werden, damit die Konfiguration exportiert werden kann
- In den meisten Fällen kann das Problem behoben werden, indem das gelöschte Attribut mit demselben Attributcode neu erstellt wird.
GuiBearbeiten
GuiEdit –condition funktioniert in diesen Szenarien nicht:
- ValueButton-Handler im Ansichtsmodus angeklickt
- TicketReservierungshandler im Ansichtsmodus angeklickt
- EntityStateMail im Ansichtsmodus gesendet
- WorklogHandler-Kommentar im Ansichtsmodus hinzugefügt
Fügen Sie bei der Ausführung von AlwaysFailDataCardAction immer GuiEdit hinzu, um sicherzustellen, dass Integrationsbearbeitungen dadurch nicht blockiert werden, und haben Sie diese immer als erste Listener in der Reihenfolge.
- Über die Admin-Benutzeroberfläche können Sie nur die Namen und die Reihenfolge der Listener sehen und Sie müssen die gesamte Konfiguration in XML exportieren, um die tatsächlichen Funktionen der Listener zu untersuchen
Hörerreihenfolge
Halten Sie die Listener in der laufenden Reihenfolge: Vorabspeicherungen werden zuerst ausgeführt, dann Nachabspeicherungen.
Benennung
Behalten Sie eine einheitliche Benennungsmethode bei!
- Denken Sie daran, sie klar und aussagekräftig zu benennen, beispielsweise die folgenden:
- Vorabspeichern oder Nachabspeichern
- Bestellnummer
- Kurzbeschreibung
- was es tut
- was/warum es auslöst
- Wenn mehrere Personen verwalten oder entwickeln
- Änderungsdatum
- Vielleicht sogar Initialen oder Abkürzungen desjenigen, der geändert hat
Beispiele:
- presave.Copy-Entwicklungsteam, wenn Wert leer und Dienst ausgewählt-09.10.2019-AA
- presave.SET innerhalb von SLA_04052021_MK behoben
- postsave.4. Referenzen setzen, wenn eingehende E-Mails generiert werden - 04.05.2017
Listener – Aktueller Wert wahr vs. Aktueller Wert falsch
current_value false = Alter / Vorheriger Wert
current_value true = Neuer / Aktueller Wert
<source_condition>
<value>
<attribute>
<code>status</code>
<current_value>false</current_value>
</attribute>
<operator>=</operator>
<compared_value>01 - New</compared_value>
</value>
</source_condition>
<source_condition>
<value>
<attribute>
<code>status</code>
<current_value>true</current_value>
</attribute>
<operator>=</operator>
<compared_value>02 - Solving</compared_value>
</value>
</source_condition>