ESM Listener - Débogage et exemples de code
ESM Listener - Débogage et exemples de code
Débogage
Lors du chargement, ESM valide le contenu et les éléments non fonctionnels ne peuvent pas être insérés.
- Le message d’erreur affiché est souvent ininterprétable, comme par exemple « XML ne peut pas être vide ».
- Vérifiez que vous avez fermé tous les composants </> et que tous les codes de champ sont corrects, etc.
- Consultez la documentation de l'auditeur pour vous assurer que vous n'essayez pas de faire des choses qui ne sont pas possibles, comme comparer des champs de texte ou des champs de référence externes.
- Essayez de supprimer ou de modifier les composants suspects et essayez sans eux.
Vous pouvez essayer d'extraire des informations supplémentaires en ouvrant certaines de ces classes pour la journalisation d'exécution et définir le niveau DEBUG lorsque vous essayez d'importer le XML :
- 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
Si vous avez un auditeur généralement acceptable qui ne travaille pas comme vous le souhaiteriez :
Vous pouvez essayer d'extraire des informations supplémentaires en ouvrant les classes qui correspondent à vos conditions de journalisation d'exécution et en définissant le niveau DEBUG et vous devriez voir ce qui se déclenche et ce qui ne se déclenche pas :
- com.effet.datamodel.entity.listener.condition.(?????)
- com.effet.modèle de données.entité.action.chaîne.condition.(?????)
- com.efecte.datamodel.entity.action.implementations.(?????)
- (?????) = chaque composant XML
N'oubliez pas de redéfinir la journalisation au niveau INFO après avoir corrigé les écouteurs, sinon vous produirez d'énormes quantités de fichiers journaux !!
Exemples de code
Spécialités de structure
<?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>Liaison des appareils aux modèles d'appareils
<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>
Insertion des noms de modèles d'appareils lors de la création d'un nouveau fichier vierge
<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>
Envoi d'e-mails
<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>