ESM-lyssnare - felsökning och kodexempel
ESM-lyssnare - felsökning och kodexempel
Felsökning
När en ny fil laddas validerar ESM innehållet och icke-funktionella filer kan inte infogas.
- Felmeddelandet som visas är ofta otolkbart, till exempel ”XML kan inte vara tomt”.
- Kontrollera att du har stängt alla komponenter </> och att alla fältkoder är korrekta etc.
- Granska lyssnardokumentationen och se till att du inte försöker göra saker som inte är möjliga, som att jämföra textfält eller externa referensfält.
- Försök att ta bort eller modifiera misstänkta komponenter och försök utan dem.
Du kan försöka extrahera ytterligare information genom att öppna några av dessa klasser för runtime-loggning och ställa in DEBUG-nivån när du försöker importera 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
Om du har en allmänt acceptabel lyssnare som inte fungerar som den ska, skulle du vilja:
Du kan försöka extrahera ytterligare information genom att öppna de klasser som matchar dina villkor för runtime-loggning och ställa in DEBUG-nivån, så bör du se vad som utlöses och vad som inte gör det:
- com.efecte.datamodel.entity.listener.condition.(?????)
- com.efecte.datamodel.entity.action.chain.condition.(?????)
- com.efecte.datamodel.entity.action.implementations.(?????)
- (?????) = varje XML-komponent
Kom ihåg att ställa tillbaka loggningen till INFO-nivå efter att du har åtgärdat lyssnarna, annars kommer du att producera enorma mängder loggfiler!!
Kodexempel
Strukturspecialiteter
<?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>Länka enheter till enhetsmodeller
<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>
Infogar enhetsmodellnamn när import skapas tomt nytt
<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>
Skickar e-post
<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>