ESM-kuuntelija - Virheenkorjaus ja koodiesimerkkejä
ESM-kuuntelija - Virheenkorjaus ja koodiesimerkkejä
Virheenjäljitys
Kun uusi ladataan, ESM validoi sisällön, eikä toimimattomia osia voida lisätä.
- Annettu virheilmoitus on usein tulkimaton, kuten ”XML ei voi olla tyhjä”.
- Tarkista, että olet sulkenut kaikki komponentit </> ja että kaikki kenttäkoodit ovat oikein jne.
- Tarkista kuuntelijan dokumentaatio ja varmista, ettet yritä tehdä mahdottomia asioita, kuten vertailla tekstikenttiä tai ulkoisia viittauskenttiä.
- Yritä poistaa tai muokata epäilyttäviä komponentteja ja yritä ilman niitä.
Voit yrittää poimia lisätietoja avaamalla joitakin näistä luokista ajonaikaista lokikirjausta varten ja asettamalla DEBUG-tason, kun yrität tuoda XML:n:
- 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
Jos sinulla on yleisesti hyväksyttävä kuuntelija, joka ei toimi haluamallasi tavalla:
Voit yrittää saada lisätietoja avaamalla luokat, jotka vastaavat ajonaikaisen lokikirjauksen ehtojasi, ja asettamalla DEBUG-tason. Sinun pitäisi nähdä, mikä laukaisee ja mikä ei:
- com.efecte.datamodel.entity.listener.condition.(?????)
- com.efecte.datamodel.entity.action.chain.condition.(?????)
- com.efecte.datamodel.entity.action.implementations.(?????)
- (?????) = jokainen XML-komponentti
Muista asettaa lokitiedostot takaisin INFO-tasolle kuuntelijoiden korjaamisen jälkeen, muuten tuotat valtavia määriä lokitiedostoja!!
Koodiesimerkkejä
Rakenteiden erikoisalat
<?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>Laitteiden linkittäminen laitemalleihin
<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>
Laitemallien nimien lisääminen tuonnin yhteydessä Luotu Tyhjä Uusi
<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>
Sähköpostin lähettäminen
<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>