ESM Listener – Debugging und Codebeispiele
ESM Listener – Debugging und Codebeispiele
Debuggen
Beim Neuladen validiert ESM den Inhalt und nicht funktionsfähige Inhalte können nicht eingefügt werden.
- Die ausgegebene Fehlermeldung ist oft nicht interpretierbar, beispielsweise „XML darf nicht leer sein“.
- Überprüfen Sie, ob Sie alle Komponenten geschlossen haben </> und alle Feldcodes 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.
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.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
- com.bitmount.equipment.action.TemplateListenerImport
Wenn Sie einen allgemein akzeptablen Listener haben, der nicht wie gewünscht funktioniert:
Sie könnten versuchen, weitere Informationen zu extrahieren, indem Sie die Klassen öffnen, die Ihren Bedingungen für die Laufzeitprotokollierung entsprechen, und die DEBUG-Ebene festlegen. Sie sollten dann sehen, was ausgelöst wird und was nicht:
- com.efecte.datamodel.entity.listener.condition.(?????)
- com.efecte.datamodel.entity.action.chain.condition.(?????)
- com.efecte.datamodel.entity.action.implementations.(?????)
- (?????) = jede XML-Komponente
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!!
Codebeispiele
Strukturspezialitäten
<?xml version="1.0" encoding="iso-8859-1"?>
<template code=”template code where listener is run">
<listener>
<name>Name of the listener</name>
<trigger>post save</trigger>
<source_conditions boolean="AND">
<source_condition>
...
</source_condition>
<combined_source_condition boolean=”OR”>
<source_condition>
...
</source_condition>
</combined_source_condition>
</source_conditions>
<action_chain>
<name>Set something</name>
<root_target_condition>
<template_condition>
<code>template code of target if used</code>
</template_condition>
<combined_target_condition boolean="AND">
<target_condition>
...
</target_condition>
</combined_target_condition>
</root_target_condition>
<action>
...
</action>
<action>
...
</action>
</action_chain>
</listener>
</template>Verknüpfen von Geräten mit Gerätemodellen
<template code="computer_model">
<listener>
<name>postsave.1.Link workstation to computer model if system type matches and no link exists</name>
<trigger>post save</trigger>
<source_conditions boolean="AND">
<source_condition>
<always_true/>
</source_condition>
</source_conditions>
<action_chain>
<name>Link to computer model</name>
<root_target_condition>
<template_condition>
<code>workstation</code>
</template_condition>
<combined_target_condition boolean="AND">
<target_condition>
<value>
<attribute>
<code>computer_model</code>
</attribute>
<operator>IS NULL</operator>
<compared_value></compared_value>
</value>
</target_condition>
<target_condition>
<source_property>
<attribute>
<code>system_type</code>
</attribute>
<operator>=</operator>
<compared_attribute>
<code>sccm_model</code>
<current_value>true</current_value>
</compared_attribute>
</source_property>
</target_condition>
<target_condition>
<entity>
<state>entityIsHidden</state>
<value>false</value>
</entity>
</target_condition>
</combined_target_condition>
</root_target_condition>
<action>
<name>Link to computer model</name>
<class>com.efecte.datamodel.entity.action.implementations.CopySourceReferenceAction</class>
<configuration_item>
<name>Code</name>
<value>computer_model</value>
</configuration_item>
</action>
</action_chain>
</listener>
</template>
Einfügen von Gerätemodellnamen beim Importieren von „Leer neu“
<template code="workstation">
<listener>
<name>postsave.2.Insert model name from linked datacard if empty</name>
<trigger>post save</trigger>
<source_conditions boolean="AND">
<source_condition>
<value>
<attribute>
<code>workstation_model</code>
<current_value>true</current_value>
</attribute>
<operator>IS NOT NULL</operator>
<compared_value/>
</value>
</source_condition>
<source_condition>
<value>
<attribute>
<code>workstation_model_text</code>
<current_value>true</current_value>
</attribute>
<operator>IS NOT NULL</operator>
<compared_value/>
</value>
</source_condition>
<source_condition>
<reference_path_value>
<reference>
<path>$workstation_model:workstation_model$</path>
<current_value>true</current_value>
</reference>
<operator>IS NULL</operator>
<compared_value/>
</reference_path_value>
</source_condition>
</source_conditions>
<action_chain>
<name>Copy model name</name>
<root_target_condition>
<template_condition>
<code>workstation_model</code>
</template_condition>
<combined_target_condition boolean="AND">
<target_condition>
<reference_from_source>
<source_attribute>
<code>workstation_model</code>
</source_attribute>
</reference_from_source>
</target_condition>
<target_condition>
<entity>
<state>entityIsHidden</state>
<value>false</value>
</entity>
</target_condition>
</combined_target_condition>
</root_target_condition>
<action>
<name>Copy model name</name>
<class>com.efecte.datamodel.entity.action.implementations.CopyDataCardValuesAction</class>
<configuration_item>
<name>Value</name>
<value>workstation_model_text</value>
</configuration_item>
<configuration_item>
<name>Code</name>
<value>workstation_model</value>
</configuration_item>
</action>
</action_chain>
</listener>
</template>
E-Mail senden
<template code="standard_change">
<listener>
<name>postsave.5. Notify development team on incoming email changing timestamps-04.05.2017</name>
<trigger>post save</trigger>
<source_conditions boolean="AND">
<combined_source_condition boolean="OR">
<source_condition>
<property>
<attribute>
<code>implementation_start</code>
<current_value>false</current_value>
</attribute>
<operator>!=</operator>
<compared_attribute>
<code>implementation_start</code>
<current_value>true</current_value>
</compared_attribute>
</property>
</source_condition>
<source_condition>
<property>
<attribute>
<code>implementation_end</code>
<current_value>false</current_value>
</attribute>
<operator>!=</operator>
<compared_attribute>
<code>implementation_end</code>
<current_value>true</current_value>
</compared_attribute>
</property>
</source_condition>
</combined_source_condition>
<source_condition>
<value>
<attribute>
<code>incoming_emails</code>
<current_value>true</current_value>
</attribute>
<operator>IS NOT NULL</operator>
<compared_value/>
</value>
</source_condition>
<source_condition>
<value>
<attribute>
<code>development_team</code>
<current_value>true</current_value>
</attribute>
<operator>IS NOT NULL</operator>
<compared_value/>
</value>
</source_condition>
</source_conditions>
<action_chain>
<name>Notify</name>
<action>
<name>Send mail</name>
<class>com.efecte.datamodel.entity.action.implementations.SendMailAction</class>
<configuration_item>
<name>Message</name>
<value>Your requested Standard change $efecte_id$ has a changed scheduled datetime
Subject: $subject$
Description: $description$
Latest worklog comment:
$worklog$
This is an automatic mail from https://efecteitsm.dna.fi</value>
</configuration_item>
<configuration_item>
<name>To</name>
<value>$development_team:members_emails$</value>
</configuration_item>
<configuration_item>
<name>From</name>
<value>efecte-no-reply@dna.fi</value>
</configuration_item>
<configuration_item>
<name>Subject</name>
<value>Your requested Standard change $efecte_id$ has a changed scheduled datetime</value>
</configuration_item>
</action>
</action_chain>
</listener>
</template>