Handler - Expression
Expression -handler käyttää Python-lauseketta arvon luomiseen pääattribuutille. Handler laskee lausekkeen ja palauttaa tuloksen automaattisesti pääattribuutin datakenttään sen jälkeen, kun tietokortti on tallennettu. Huomaa, että tuloksen sisältämiä HTML-tageja ei koodata (escape).
Mukautetut moduulit voidaan tallentaa hakemistoon, joka on määritetty alustan asetuksena python.path. Katso esimerkki alta.
ExpressionHandler ei toimi pakollisilla attribuuteilla.
ExpressionHandler toimii monivalintaisilla attribuuteilla. Monivalintaisilla attribuuteilla olemassa olevat arvot korvataan arvoilla, jotka on luonut ExpressionHandler. Huomaa, että jos ExpressionHandler tuottaa useita arvoja yksiarvoiselle attribuutille, tietokortin tallennus epäonnistuu.
Oletusnimike kohteelle Expression -handlerin painike on esitystekstin arvo text_calculate. Nimikkeen arvon voi ylikirjoittaa mallin lokalisointieditorissa.
Lisätietoja Pythonista saat osoitteesta https://www.python.org . Seuraavasta osoitteesta https://wiki.python.org/moin/BeginnersGuide/ löydät Pythonin aloittelijan oppaan.
Voit käyttää Expression-handleria esimerkiksi laskutoimituksiin, jotka kohdistuvat muiden attribuuttien arvoihin, jotka on merkitty pääattribuutin metatiedoissa niiden yksittäisillä attribuuttikoodeilla.
Expression-handleria voidaan käyttää viiteattribuutissa. Jos lauseke palauttaa PythonEntity, jota käytetään viitteen arvon asettamiseen. Jos lauseke palauttaa merkkijonon (String), sitä käytetään kohdetietokortin hakemiseen.
Jos esimerkiksi haluat laskea keskiarvon attribuuteista attribuutit Q1, Q2, Q3, ja Q4, liitä Expression-handler attribuuttiin Average ja merkitse seuraava Python-lauseke kohteen Average metatietoihin: ([attributeCodeQ1]+[attributeCodeQ2]+[attributeCodeQ3]+[attributeCodeQ4])/4 . Expression-handler laskee merkittyjen attribuuttiarvojen keskiarvon ja asettaa sen attribuutin Average arvoksi seuraavan kuvan mukaisesti.
Arvo Average, joka on luotu Expression-handlerilla:

Seuraavat taulukot sisältävät tietoa attribuuttiasetuksista ja metatietovaatimuksista Expression-handlerille. Pakolliset metatiedot on esitetty pakollisten attribuuttien metatietotaulukossa.
Expression-handlerin määritys poikkeaa muista handlereista. Tarvittavat metatietonimet on annettu valmiiksi, ylläpitäjän tarvitsee antaa vain arvot.

Taulukko 1. Attribuutin asetukset
| Handlerin nimi | Tietotyyppi |
|---|---|
Expression |
Mikä tahansa tietotyyppi paitsi embedded reference tai back reference.
|
Taulukko 2. Pakolliset attribuutin metatiedot
| Nimi | Arvo | Kuvaus |
|---|---|---|
expression |
[Python expression] |
Kelvollinen Python-lauseke (tai skripti, jos Jos lauseketta ei voida jäsentää, viitatun attribuutin arvo on tyhjä tai tapahtuu virhe, tulos on tyhjä. |
isScript |
[Checked | unchecked] |
Kun tämä valinta on valittuna, lauseke tulkitaan Python-skriptinä. Skriptit ovat lausekkeita monipuolisempia ja voivat sisältää useita rivejä, silmukoita ja muita kontrollirakenteita. Ne ovat myös monimutkaisempia määrittää. Katso skriptiesimerkkejä alta. Jos haluat, että lauseke tulkitaan skriptinä, valitse tämä valintaruutu. Tulosarvo täytyy asettaa muuttujaan Lisää esimerkkimäärityksiä alla. |
Taulukko 3. Valinnaiset attribuutin metatiedot
| Nimi | Arvo | Kuvaus |
|---|---|---|
debug |
true/false |
Oletuksena " Huomio: ÄLÄ käytä tätä tuotantoympäristössä. Tämä voi rikkoa kaikki tietokortin tallennustoiminnot, kuten monivalintamuokkauksen, siirron, roskakoriin siirron ja roskakorin tyhjentämisen, jos lauseke on virheellinen. |
showButton |
true/false |
Oletuksena count -painike näytetään. Jos tämä metatieto asetetaan arvoon false, count -painiketta ei näytetä. Painike laskee arvot (tallennettuna muuttujaan _result) vain nykyiselle attribuutille. |
alwaysExecute |
true/false |
Jos tämä on true, lauseke suoritetaan (pääkäyttäjänä) aina, kun tietokortti tallennetaan. Oletusarvo on false: lauseke suoritetaan (nykyisenä käyttäjänä) vain, jos tietokortin tallentavalla käyttäjällä on oikeudet tähän attribuuttiin. |
searchAttribute |
attributeCode |
Kohdemallin/-mallien attribuuttikoodi. Viitehaku rajataan tähän attribuuttiin. Tätä asetusta voidaan käyttää, kun Huomio: Tämän attribuutin on oltava yksilöllinen kohdemallissa/-malleissa. Huomio: Jos |
createEmptyReferences |
true/false |
Jos tämä on true ja viitteen kohdetietokorttia ei löydy, se luodaan ja tallennetaan kansioon, joka on määritetty metatiedossa referenceTargetFolder. Tätä asetusta voidaan käyttää, kun ExpressionHandler-handleria käytetään viiteattribuutissa ja referenceTargetFolder-metatiedolla on arvo. |
referenceTargetFolder |
folderCode |
Sen kansion koodi, johon viitteen kohdetietokortit luodaan. Tätä asetusta voidaan käyttää, kun ExpressionHandler-handleria käytetään viiteattribuutissa ja createEmptyReferences on true. |
isHtmlOutput |
true/false |
Oletuksena lausekkeen tulos käsitellään merkkijonona. Jos tämä metatieto asetetaan arvoon Huomio: Tämä asetus on merkityksellinen vain merkkijono- ja tekstiattribuuteille. Huomio: Tämä asetus ei ole käytettävissä E6-sarjan tuoteperheessä |
executeEarly |
true/false |
Oletuksena lauseke suoritetaan samaan aikaan muiden handlereiden kanssa sen jälkeen, kun oletusarvot on asetettu ja ehdolliset attribuutit (" Huomio: Tätä metatietoa ei ole tarkoitettu käytettäväksi yhdessä
Kun metatieto asetetaan arvoon true, seuraava tulee mahdolliseksi:
Huomio: Metatieto on suunniteltu edellä kuvattua käyttötapausta varten, joten muita käyttötapauksia ei tueta. |
executeLate |
true/false |
Oletuksena lauseke suoritetaan samaan aikaan muiden handlereiden kanssa sen jälkeen, kun oletusarvot on asetettu ja ehdolliset attribuutit (" Huomio: Tätä metatietoa ei ole tarkoitettu käytettäväksi yhdessä
Kun metatieto asetetaan arvoon
Huomio: Metatieto on suunniteltu edellä kuvattua käyttötapausta varten, joten muita käyttötapauksia ei tueta. |
Expression-handler mahdollistaa myös pääsyn viitattuihin tietokortteihin. Nykyiseen korttiin voidaan viitata sanalla this, ja muihin tietokortteihin niiden luokka-attribuutin koodilla, joka on määritetty pääkortissa. Tällä hetkellä tuetut menetelmät viitatuille tietokorteille ovat:
Taulukko 4. Tietokortin käyttömenetelmät
| Nimi | Palauttaa | Esimerkki |
|---|---|---|
get(attributecode) |
Yksittäinen arvo, joka löytyy annetulla attribuuttikoodilla varustetusta kentästä. Jos attribuutti on monivalintainen, palautetaan ensimmäinen arvo. Jos attribuutti on viite, palautetaan PythonEntity-objekti. |
this.get("$support_person:email$") |
getAll(attributecode) |
Taulukko, joka sisältää annetulla attribuuttikoodilla varustetusta kentästä löytyvät arvot. Jos attribuutti on viite, palautetaan taulukko PythonEntity-objekteja. |
max(getAll("product_prices")) |
getTemplateName() |
Yksittäinen merkkijonoarvo, joka sisältää tietokortin mallin nimen. | this.getTemplateName() |
getTemplateCode() |
Yksittäinen merkkijonoarvo, joka sisältää tietokortin mallin koodin. | this.getTemplateCode() |
getFolderCode() |
Yksittäinen merkkijonoarvo, joka sisältää sen kansion koodin, johon tietokortti tallennetaan. Jos tuodun tietokortin XML sisältää arvon tälle attribuutille, se lasketaan uudelleen oikeaksi. | this.getFolderCode() |
getFolderName() |
Yksittäinen merkkijonoarvo, joka sisältää sen kansion nimen, johon tietokortti tallennetaan. Jos tuodun tietokortin XML sisältää arvon tälle attribuutille, se lasketaan uudelleen oikeaksi. | this.getFolderName() |
getFolderModuleCode() |
Yksittäinen merkkijonoarvo, joka sisältää sen moduulin koodin, johon tämä tietokortti on tallennettu. Mahdolliset arvot ovat: equipment - CMDB; contract - Contract; job - Service Desk; solution - Solution; change - Change Management; procurement - Procurement; client - Organization; admin - Users; system - vain sisäiset järjestelmän tietokortit. Käytettävissä olevat moduulit otetaan käyttöön lisensoinnin mukaan. Jotkin tuotteet saattavat olla vanhentuneita eivätkä enää käytettävissä. |
this.getFolderModuleCode() |
getEntityId() |
Yksittäinen merkkijonoarvo, joka sisältää tietokortin id-tunnisteen. Tämän menetelmän palautusarvoa voidaan käyttää tarkistamaan, onko tietokortti tallennettu vai ei. Jos palautusarvo on 'none', tietokorttia ei ole vielä tallennettu. |
this.getEntityId() |
getReferrers(templateCode) |
Taulukko, joka sisältää PythonEntities-objektit, jotka liittyvät malliin, joka on määritetty parametrilla templateCode. Jos parametri jätetään tyhjäksi, menetelmä palauttaa taulukon, joka sisältää PythonEntities-objektit, jotka liittyvät kaikkiin malleihin. |
this.getReferrers('incident') this.getReferrers() |
isHidden() |
Yksittäinen true/false-arvo. Tämän menetelmän palautusarvoa voidaan käyttää tarkistamaan, onko tietokortti piilotettu vai ei. |
this.isHidden() |
Taulukko 5. Tietokortin muokkausmenetelmät
| Nimi | Toiminnallisuus | Esimerkki |
|---|---|---|
set(attributecode, value) |
Muuttaa attribuutin arvoa. Huomio: Älä muuta viitattujen tietokorttien arvoja äläkä käytä viitepolkuja. Huomio: Älä muuta viitattujen tietokorttien arvoja äläkä käytä viitepolkuja.
|
this.set("priority", 1) |
add(attributecode, value) |
Lisää arvon attribuuttiin. Huomio: Älä muuta viitattujen tietokorttien arvoja äläkä käytä viitepolkuja. Katso lisätiedot kohdasta |
this.add("keywords", "email") |
Skriptiesimerkkejä
Oletetaan: 1) "car" on monivalintainen viite of _this_ template 2) "limit" on kokonaislukuattribuutti of _car_ template 3) Hae raja yksittäisestä car-viitteestä:
car.get("car_limit")Laske autojen rajojen kokonaissumma. Tämä edellyttää isScript -vaihtoehtoa:
_result=0
for i in car:
_result+=i.get("car_limit")Määritä kentän arvo kahden muun perusteella. Edellyttää isScript-vaihtoehtoa:
_result='No'
if client_status=='Accepted' and dealer_status=='Yes':
_result='Yes'Tietokortin näkyvyys (joko this tai tietokortin käyttömenetelmillä löydetty tietokortti) voidaan tarkistaa menetelmällä isHidden. Huomaa, että jos tarkistat sen tietokortin näkyvyyden, johon attribuutti kuuluu, attribuutin, jossa on DatacardHiddenState-handler, on oltava ennen Expression-attribuuttia, jotta menetelmä toimii!
if this.isHidden():
_result = 'This data card is hidden'
car = this.get("car")
if car.isHidden():
_result = 'Car is hidden'
else:
_result = 'Car is visible'Equals-funktiolla voit selvittää esimerkiksi, viittaavatko kaksi viitettä samaan tietokorttiin.
ref1 = this.get("ref1")
ref2 = this.get("ref2")
if ref1 != None and ref2 != None:
if ref1.equals(ref2):
_result = 'Ref1 and ref2 refer to the same data card'
else:
_result = 'Ref1 and ref2 refer to different data cards' Attribuutit ilman arvoja
Alla oleva skripti havainnollistaa tavan tarkistaa, että tietyllä attribuutilla on arvo. Jos attribuuttia koodilla myDate1 tai myDate2 ei ole olemassa, tai jos tällä tietokortilla ei ole arvoa kummallekaan näistä attribuuteista, tulos on 0. Jos molemmat attribuutit ovat olemassa ja niillä on arvo, palautetaan 1.
date1 = this.get("myDate1")
date2 = this.get("myDate2")
if date1 is None or date2 is None:
_result = 0
else:
_result = 1 Jos haluat käyttää lyhyempää tapaa tarkistaa, onko attribuutilla arvo, käytä tätä (tässä attr_code on attribuutin koodi):
if attr_code:
_result = '...'Jos haluat tarkistaa, ettei attribuutilla ole arvoa, käytä tätä (tässä attr_code on attribuutin koodi):
if not attr_code:
_result = '...'Erikoismerkkejä sisältävien merkkijonojen käsittely
Virheellisten merkkien välttämiseksi on suositeltavaa käyttää aina u-etuliitettä unicode-merkkijonojen edessä erikoismerkkien sijaan. Esimerkiksi:
_result = u'Text with some special characters like: ä, ö, ź, ć, ę, ð etc.' On myös tärkeää käyttää u-etuliitettä merkkijonoja vertailtaessa. Seuraava vertailu palauttaa aina arvon false:
string_attribute_value == 'ää' Yllä oleva vertailu tulisi tehdä näin:
string_attribute_value == u'ää' Satunnaislukujen generointi
Oletetaan, että attribuutin koodi on "random_figure" ja haluamme laskea luvun vain kerran. Tämä skripti antaa sinulle luvun väliltä 1–100. isScript-vaihtoehto tarvitaan moduulien tuomiseen.
import random
if random_figure is None:
_result = random.randint(1, 100)
else:
_result = random_figure Laskeminen päivämäärillä
Erityistä DateUtil-luokkaa voidaan käyttää päivämäärillä laskemiseen. DateUtil.daysBetween(date1, date2) laskee, kuinka monta päivää on date1 ja date2-päivämäärän välillä. Vastaavat menetelmät kaikille aikaväleille:
DateUtil.yearsBetween(date1, date2)
DateUtil.monthsBetween(date1, date2)
DateUtil.daysBetween(date1, date2)
DateUtil.hoursBetween(date1, date2)
DateUtil.minutesBetween(date1, date2)
DateUtil.secondsBetween(date1, date2)DateUtil.addDays(date, number) lisää annetun määrän päiviä annettuun päivämäärään ja palauttaa uuden päivämäärän. Jos annettu luku on negatiivinen, päiviä vähennetään annetusta päivämäärästä. Vastaavia menetelmiä on olemassa myös muille aikaväleille:
DateUtil.addYears(date, number)
DateUtil.addMonths(date, number)
DateUtil.addDays(date, number)
DateUtil.addHours(date, number)
DateUtil.addMinutes(date, number)
DateUtil.addSeconds(date, number)DateUtil.currentDate() palauttaa nykyisen päivämäärän ja kellonajan. Tätä voidaan käyttää muiden menetelmien kanssa, kuten alla olevassa lausekkeessa:
_result = DateUtil.addHours(DateUtil.currentDate(), this.get("priority_high") Tässä tapauksessa lauseke lisää kentässä "priority_high" olevan tuntimäärän nykyiseen päivämäärään.
Viitteet ja viitepolut
Arvoja voi hakea viitteistä kahdella tavalla. Suositeltu tapa on käyttää viitepolkuja. Tällä $code1:code2$-merkinnällä ei tarvitse tarkistaa, onko arvoa kohteelle code1 todella olemassa. Jos muokkaat Company-value-arvoa, sinun täytyy lisätä None-tarkistus sille. Kaikki koodit on tietenkin kirjoitettava oikein. Voit käyttää this.getAll("$person:company$") useiden arvojen hakemiseen.
this.get("$person:company$") Seuraava esimerkki on vanha ja vanhentunut tapa, jota ei enää suositella. Hakemalla jokaisen polun osan erikseen sinun täytyy lisätä None-tarkistukset jokaiselle osalle (this.get("person") != None).
this.get("person").get("company") Muiden attribuuttien arvojen muuttaminen
Yksittäisen arvon asettaminen
this.set("priority", 1)
this.set("description", (description or "") + "\n(For more information, contact service desk)") Useiden arvojen asettaminen
this.set("keywords", ["email", "communication"])Arvojen lisääminen
this.add("keywords", "email")
---
this.add("keywords", ["email", "communication"])
---
if this.get("rollback_count") == None:
this.set("rollback_count", 0)
else:
this.set("rollback_count", (this.get("rollback_count")+1)) Arvojen kopioiminen viitepoluista
this.set("prices", this.getAll("$items:price$"))
this.set("total_price", sum(this.getAll("$items:price$") or []))Arvojen tyhjentäminen
this.set("keywords", None)
this.set("keywords", [])
# Calling add with the same parameters doesn't do anything.Attribuutit, joissa on CommentHandler
CommentHandler tallentaa kommentit tietokortteina. Lausekkeille kommentit palautetaan muodossa PythonComments. PythonComment sisältää menetelmiä kommentin viestin, kirjoittajan ja päivämäärän hakemiseen. Kirjoittaja on viite henkilön tietokorttiin. Kirjoittaja palautetaan muodossa PythonEntity. Päivämäärä palautetaan päivämäärä-aika-arvona kuten muillakin entiteettitiedoilla. Kommentteja ei voi muokata lausekkeissa. Olemassa olevia kommentteja ei voi asettaa minkään viiteattribuutin kohdearvoksi (eli niitä ei voi siirtää). CommentUtil voidaan käyttää uuden kommentin luomiseen. Kommentin viesti on annettava kommenttia luotaessa. Uusia kommentteja voidaan lisätä CommentHandler-attribuuttiin (set-menetelmää ei tueta). Päivämääräksi asetetaan kommentin luontiajankohta. Kirjoittajaksi asetetaan nykyisen käyttäjän henkilön tietokortti. Jos nykyisellä käyttäjällä ei ole henkilön tietokorttia, kommentin luonti epäonnistuu.
Oikeudet kommentteihin annetaan CommentHandler -attribuutin oikeuksien perusteella. Yleensä käyttäjillä ei ole oikeuksia kommentoida tietokortteja itse. Käyttäjillä ei myöskään välttämättä ole oikeuksia kirjoittajiin. Näistä syistä saattaa olla tarpeen asettaa alwaysExecute -metatieto joissakin tapauksissa kommentteja käsitteleville lausekkeille.
Taulukko 6. PythonComment-käyttömenetelmät
| Menetelmä | Palauttaa |
|---|---|
getAuthor() |
PythonEntity |
getComment() |
Kommentin viesti merkkijonoarvona. |
getDate() |
Kommentin luontiajankohta muodossa Date. |
getType() |
Kommentin tyyppi merkkijonoarvona. Arvo on 'file-attached' kommenteille, jotka luodaan automaattisesti, kun käyttäjät liittävät tiedostoja. Muut mahdolliset tyypit ovat 'user-written' ja 'pythonapi-generated'. |
setComment |
Asettaa kommentin viestin. Voidaan käyttää olemassa olevan kommentin viestin muuttamiseen. Viesti voidaan tyhjentää, mutta sitä ei voi asettaa arvoon null. |
Taulukko 7. CommentUtil -menetelmät
| Menetelmä | Palauttaa | Esimerkki |
|---|---|---|
createComment(message) |
Palauttaa PythonComment joka sisältää parametrina annetun kommentin viestin. Kirjoittajaksi tulee nykyisen käyttäjän henkilön tietokortti ja päivämääräksi luontiajankohta |
CommentUtil.createComment(message) |
createComment(message, date, author, type) |
Luo
|
CommentUtil.createComment(message) |
deleteComment(comment) |
Poistaa taustalla olevan kommenttientiteetin, jota edustaa PythonComment annettu parametrina. Poistaminen tekee PythonComment -instanssista käyttökelvottoman (älä kutsu sen gettereitä/settereitä, aseta sitä CommentHandler -attribuutin arvoksi tai yritä poistaa sitä uudelleen). |
CommentUtil.deleteComment(comment) |
Taulukko 8. Kommentteihin liittyvät PythonEntity-menetelmät
| Menetelmä | Palauttaa | Esimerkki |
|---|---|---|
getAllCommentsOrdered(attribute_code) |
Palauttaa kommentit muodossa PythonComments järjestettynä uusimmasta vanhimpaan comment handler-attribuutista |
this.getAllCommentsOrdered("ngss_comments") |
getLatestComment(attribute_code) |
Palauttaa uusimman kommentin muodossa PythonComment comment handler -attribuutista |
this.getLatestComment("ngss_comments") |
Alla on esimerkkejä kommenttien käytöstä lausekkeissa.
Asettaa kaikki ei-tyhjät kirjoittajat toiseen monivalintaiseen viitekenttään.
_result = []
comments = this.getAll("ngss_comments")
for comment in comments:
if comment.getAuthor() != None:
_result.append(comment.getAuthor())Luo uuden kommentin ja liittää sen CommentHandler -attribuuttiin:
this.add("ngss_comments", CommentUtil.createComment("Added by expression"))Luo uuden kommentin tietyllä päivämäärällä, kirjoittajalla ja tyypillä ja liittää sen CommentHandler -attribuuttiin:
this.add("ngss_comments", CommentUtil.createComment("Added by expression", "2020-01-01", "admin", "pythonapi-generated")) Poistaa kommentin kommentin viestin arvon perusteella:
comments = this.getAll("ngss_comments")
for comment in comments:
if comment.getComment() != None and 'secret' in comment.getComment():
CommentUtil.deleteComment(comment)Tyhjentää kommenttien viestit niiden sisällön perusteella:
comments = this.getAll("ngss_comments")
for comment in comments:
if comment.getComment() != None and 'secret' in comment.getComment():
comment.setComment('') Hakee kaikki tämän entiteetin kommentit järjestettynä luontiajan mukaan laskevasti:
comments = this.getAllCommentsOrdered("ngss_comments")
for comment in comments:
if comment.getComment() != None:
comment.getComment() Hakee uusimman kommentin:
comment = this.getLatestComment("ngss_comments")
if comment != None and comment.getComment() != None:
comment.getComment()Mukautettujen moduulien käyttö
Moduulin määrittäminen: Luo tiedosto stringutils.py seuraavalla sisällöllä hakemistoon, joka on ilmoitettu alustan asetuksessa python.path:
def reverse(value):
if value is None:
return None
else:
return str(value)[::-1]Moduulin tuominen ja käyttäminen. isScript-vaihtoehto tarvitaan moduulien tuomiseen.
import stringutils
_result = stringutils.reverse(attribute_to_be_reversed)Funktioiden tuominen ja käyttäminen moduulista. Useita funktioita voidaan tuoda erottamalla funktioiden nimet pilkuilla.
from stringutils import reverse
_result = reverse(attribute_to_be_reversed)Moduuleja kehitettäessä käytä reload(module) moduulitiedoston muutosten käyttöönottamiseksi. Moduulin uudelleenlataus heikentää suorituskykyä, joten poista rivi, kun moduuli on valmis käytettäväksi tuotantoympäristössä.
import stringutils
reload(stringutils) #remove this line when module is readyPython-versio
Python-versiota voidaan hallita alustan asetuksella python.version. Tarkista nykyinen versio tällä.
import sys
_result = sys.versionTable of Contents