ESM Listener Overview
Data Card Listenerit Matrix42 Professionalissa
Data card listenerit ovat mekanismi liiketoimintalogiikan toteuttamiseen Matrix42 Professionalissa (ESM). Ne on suunniteltu reagoimaan tiettyihin tapahtumiin M42 Pro -templateissa, mahdollistaen automatisoituja toimintoja määriteltyjen ehtojen perusteella. Kun templatella on listener, kaikki luodut data cardit voivat laukaista listenerin, kun ne tallennetaan:

Suoritusjärjestys: katso artikkeli "Save Process in M42 Pro".
Data Card Listenerien määrittäminen
Data card listenerit määritetään XML-tiedostoilla, jotka määrittelevät listenerin ominaisuudet ja toiminnan. Määritysprosessi sisältää seuraavat vaiheet:
- XML-määrityksen luominen: Listenerin toiminta ja ehdot määritellään XML-tiedostossa. Tämä tiedosto määrittää, miten listener toimii yhdessä data card -tapahtumien kanssa.
- Tuonti M42 Pro -templateen: Kun XML-määritys on luotu, se täytyy tuoda asianomaiseen M42 Pro -templateen. Tämä vaihe aktivoi listenerin templatessa.
- Listenerien järjestyksen säätäminen: Pre save -listenerit suoritetaan ensin niiden järjestyksessä, sen jälkeen post save -listenerit samalla tavalla. Sillä on merkitystä, mikä suoritetaan ensin. Esimerkiksi laita validointi-listenerit ensimmäiseksi pre save -vaiheeseen. Siirrä listenerejä niin, että suoritusjärjestys on oikea.
Listenerit voidaan myös viedä osana koko M42 Pro -konfiguraation XML:ää, mikä mahdollistaa helpon monistamisen ja käyttöönoton eri ympäristöissä.
Listenerin toiminta ja laukaisuasetukset
Jokainen M42 Pro -template voi sisältää yhden tai useamman listenerin. Kun templateen liittyvä data card tallennetaan, kaikille templateen rekisteröidyille listenereille ilmoitetaan tapahtumasta.
Listenerit on määritetty reagoimaan tiettyihin tapahtumiin niiden laukaisuasetusten (Trigger Settings) perusteella, jotka voivat olla joko:
- Pre-Save Trigger: Listener aktivoituu ennen data cardin tallentamista. Se muokkaa vain lähde-data cardia.
-
Post-Save Trigger: Listener aktivoituu data cardin tallentamisen jälkeen. Se muokkaa vain muita data cardeja.
- Ellei ole erityistä tarvetta muokata lähde-datacardia ja tarkoituksella laukaista sille toista tallennuskierrosta. Esimerkkitilanne on tikettien tilan vaihtaminen listenerillä, mutta halutaan silti laukaista DataCardHiddenState- ja ValueChange-handlerit heijastamaan muutosta tehtäessä sitä.

Kun listener laukeaa, se arvioi, tulisiko sen reagoida tapahtumaan. Tämä päätös perustuu määriteltyihin Source Conditions -ehtoihin, jotka ovat listenerin määrityksessä asetettuja kriteerejä. Source condition -ehdot määrittävät, vastaako lähde-data card (eli tallennettu data card) vaadittuja parametreja, jotta listener toimisi. Vastaavasti, kohdistaakseen muutokset tietyn toisen templaten kohde-data card(e)ille, action chain -osion alussa olevat target condition -ehdot määrittävät kohteet.
- Useita Listenereitä: Yksi template voi tukea useita listenereitä, joista jokainen reagoi eri laukaisimiin tai ehtoihin.
- Ehdollinen logiikka: Listenerit reagoivat tapahtumiin vain, jos määritetyt ehdot täyttyvät, mikä mahdollistaa tarkan hallinnan siitä, milloin ja miten liiketoimintalogiikkaa sovelletaan.
Parhaat käytännöt
Varo: Sellaisten rakenteiden luomista, joissa samaa data cardia päivitetään useaan kertaan eri post save -listenereillä. Konflikteja listenerien ja muiden handler-pohjaisten toimintojen välillä.
Yleistä
Listener-XML voidaan kommentoida <!-- foobar --> -osiolla, mutta kommentit poistetaan, kun listener tuodaan M42 Proon (eli listenerien kommentointi on hyödyllistä vain, jos listenerin "master data" on tallennettu muualle).
- Voit lisätä useamman kuin yhden action chainin
- Esimerkiksi, jos sinun täytyy koskea useita eri kohdetemplatejen data cardeja post save -listenerissä, samojen lähde-ehtojen perusteella
- Vältä syvien/monitasoisten yhdistettyjen AND-OR-AND... -ehtojen käyttöä, jotta listener-koodi pysyisi ymmärrettävämpänä, ja yritä sen sijaan joko yksinkertaistaa ehtoja tai tehdä monimutkaisempi logiikka expression-koodilla apuattribuutissa
- Vihje: expression-apuattribuutti voidaan asettaa monivalintaiseksi merkkijonoksi, jolloin yhteen apuattribuuttiin voidaan asettaa useita arvoja listenerien käytettäväksi eri laukaisimina
XML
- Perinteinen tapa luoda liiketoimintalogiikkaa / ajaa ei-kenttäpohjaisia automaattisia toimintoja tietyllä templatella.
Määritetään luomalla asianmukainen XML-määritys.- Listenerit otetaan käyttöön tuomalla tämä XML M42 Pro -templateen.
- Listenerit voidaan viedä osana M42 Pro -konfiguraation XML:ää.
- Järjestyksen suunnittelu on huomioitava asia.
- Ensin pre save -vaiheet järjestyksessä, sitten post save -vaiheet järjestyksessä templatea kohden.
- Pre-save-listenerit:
- Ajetaan ja tarkistetaan jokaisella datacardin tallennuksella, kaikkien handlerien jälkeen paitsi AutoMailSenderin ja TargetDeleterin.
- Käytetään "tämän" templaten datacardeilla.
- Post-save-listenerit:
- Käytetään yleensä muiden, "tämän" templaten data cardiin liittyvien templatejen data cardeilla.
- Voivat sisältää target condition -ehtoja.
- Voivat laukaista uuden sekvenssin toisella templatella.
- Kohdetemplaten handlerit ajetaan näiden jälkeen
Merkkijonodatan työntäminen reference-kenttään change- tai copy-toiminnolla ei välttämättä toimi.
- Perinteisesti sinun täytyisi työntää entityid, jos haluat linkittää tiettyyn datacardiin.
- Reference-kentän kopioiminen toiseen reference-kenttään pitäisi toimia.
- Referenssien linkittäminen expressioilla on useimmissa tapauksissa helpompaa, mutta esimerkiksi transformaatioita tehdessä saatat joutua käyttämään listenereitä tehdäksesi joitakin referenssejä jälkikäteen.
Varo:
- Sellaisten rakenteiden luomista, joissa samaa datacardia päivitetään useaan kertaan eri post save -listenereillä.
- Konflikteja listenerien ja muiden handler-pohjaisten toimintojen välillä.
- Suoritusjärjestyksen päättämistä.
MUISTA: Sinun täytyy päivittää tilastolliset datetime-tagit listenerillä, jos suljet datacardeja datechecker-listener-automaatiolla. Tämä menetelmä on aloittelijan tapa tehdä se puutteellisesti ja kovakoodatusti, mikä ei ole joustava pitkällä aikavälillä. Huomaa, että tämä ei ole mahdollista tilanteessa, jossa sinun täytyisi luoda ValueChangeja. Joustavampi mutta monimutkaisempi tapa on käyttää post savea ja sitten laukaista asianmukaiset handlerit (jotka voivat sitten vaihdella niiden määrityksen mukaan sen jälkeen, kun listenerit olisi luotu).
Listenerin tuominen
Kun listeneriä tuodaan, M42 Pro validoi XML:n sisällön ja rakenteen:
- Annettu virheilmoitus on usein tulkitsematon, kuten "XML cannot be empty".
- Tarkista, että olet sulkenut kaikki XML-tagit </> ja että kaikki attribuuttikoodit ovat oikein jne.
- Tarkista listener-dokumentaatio, jotta et yritä tehdä asioita, jotka eivät ole mahdollisia, kuten tekstikenttien tai ulkoisten reference-kenttien vertailua.
- Yritä poistaa tai muokata epäilyttäviä komponentteja ja kokeile ilman niitä.
Lokituksen ja DEBUGin käyttäminen
- Voit yrittää saada lisätietoa avaamalla joitakin näistä luokista ajonaikaista lokitusta varten ja asettamalla DEBUG-tason yrittäessäsi tuoda XML:ää
- com.bitmount.equipment.action.TemplateListenerImport tarkista tämä useimmissa tapauksissa
- 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
- Muista asettaa lokitus takaisin INFO-tasolle listenerien korjaamisen jälkeen, tai tuotat valtavia määriä lokitiedostoja!!
- Listener tuotiin onnistuneesti, mutta ei toimi halutulla tavalla
- Tarkista ajonaikaiset lokit ja aseta DEBUG-taso, niin näet mikä laukeaa ja mikä ei
- Source conditions
- com.efecte.datamodel.entity.listener.condition.(?????)
- Target conditions
- com.efecte.datamodel.entity.action.chain.condition.(?????)
- Actions
- com.efecte.datamodel.entity.action.implementations.(?????)
- (?????) = jokainen XML-komponentti
- Source conditions
- Muista asettaa lokitus takaisin INFO-tasolle listenerien korjaamisen jälkeen, tai tuotat valtavia määriä lokitiedostoja!!
- Platform settings listenereille
- datacard.listeners.run.as.root
Tiketin tilan muutos
Jos muutat tiketin tila-arvoa listenerillä, ota huomioon seuraavat:
- Tilastolliset aikaleimat päivittyvät vastaavasti
- Tilan ValueChange-historia päivittyy vastaavasti
- Datacardin piilottaminen/näkyväksi asettaminen päivittyy mahdollisesti vastaavasti
- Jos asetat kentän pre-save-listenerillä, älä odota expressionin ajavan sen perusteella, ellet tee sitä listenerin sisällä!
- Jos poistat listeneriin liittyvän attribuutin, listener rikkoutuu
- Listener täytyy poistaa, jotta konfiguraatio saadaan vietyä
- Useimmissa tapauksissa voidaan korjata luomalla poistettu attribuutti uudelleen samalla attribuuttikoodilla
GuiEdit
GuiEdit-ehto ei toimi näissä tilanteissa:
- ValueButton-handleria klikattu näyttötilassa
- TicketReservation-handleria klikattu näyttötilassa
- EntityStateMail lähetetty näyttötilassa
- WorklogHandler-kommentti lisätty näyttötilassa
Lisää aina GuiEdit tehdessäsi AlwaysFailDataCardActionia varmistaaksesi, ettei se estä integraatiomuokkauksia, ja pidä nämä aina ensimmäisinä listenereinä järjestyksessä.
- Admin-käyttöliittymän kautta näet vain listenerien nimet ja järjestyksen, ja sinun täytyy viedä koko konfiguraatio XML:nä tutkiaksesi listenerien todellista toimintaa
Listenerien järjestys
Pidä listenerit ajojärjestyksessä: Pre save -vaiheet ajetaan ensin, sitten post save -vaiheet.
Nimeäminen
Pidä kiinni yhdenmukaisesta nimeämistavasta!
- Harkitse niiden nimeämistä siististi ja informatiivisesti, esimerkiksi sisällyttäen useimmat näistä:
- Presave tai postsave
- Järjestysnumero
- Lyhyt kuvaus
- mitä se tekee
- mitä/miksi se laukaisee
- Jos useita henkilöitä hallinnoi tai kehittää
- Muokkauspäivämäärä
- Ehkä jopa nimikirjaimet tai lyhenne muokkaajasta
Esimerkkejä:
- presave.Copy development team if value empty and service selected-09.10.2019-AA
- presave.SET Resolved within SLA_04052021_MK
- postsave.4. Set references if incoming email generated-04.05.2017
Listenerit – Current value true vs Current value false
current_value false = Vanha / Edellinen arvo
current_value true = Uusi / Nykyinen arvo
<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>
Table of Contents