CX_EXPANDABLE::ConditionedFilter
Beschreibung:
Dieses Objekt wird für die Dauer der Formelauswertung in einen neuen Plugspace gestellt. Der übergebene Formelausdruck wird gegen diesen Plugspace ausgewertet und falls das Ergebnis zu TRUE ausgewertet wird, dann wird dieses Objekt zurückgegeben, ansonsten wird NULL zurückgegeben.
Die Funktionsweise von ConditionedFilter ist äquivalent zu folgendem InstantView-Code:
Var(expandable formula, result) -> expandable CreateTransObject(CX_FORMULA) -> formula formula Put PlugSpacePush [ expandable ] PlugSpace formula Call(Evaluate) -> result PlugSpacePop result if expandable else NULL
Hinweis:
Wird eine Formel ausgeführt, so werden alle Objekte sequentiell im Plugspace nach dem gesuchten Datenfeld durchsucht. Sind im Plugspace nun aber nicht nur Belege, die zum Beispiel ein Datenmember "transaction" haben, sondern auch einfache Werte als Objekte, dann würde die Auswertung der Formel einen Fehler bringen, weil auch vom einfachen Wert versucht wird, das Datenfeld "transaction" auszulesen, was es aber nicht hat. Hier ist die Lösung, vor das gewünschte Datenfeld den ConditionedFilter zu setzen.
(Für weniger komplexe Zugriffspfade s.a ClassFilter.)
Code-Beispiel (wird gern in Übergangsbeschreibungen von Geschäftsprozessen oder Bedingungen in Transaktionsbeschreibungen benutzt):
ConditionedFilter("inherited(this, CX_LINK_TXN)").FirstSuccessorByCondition("type(TopTransaction())=CX_ITEM_DEMAND")
// 2. Beispiel
"type(this)=CX_OFFER | type(this)=CX_STOCK_ORDER | type(this)=CX_BUDGET_OFFER" object Call(ConditionedFilter)
| Stack | Position | Objekttyp | Kurzbeschreibung |
|---|---|---|---|
| Stack(In) | Top | CX_EXPANDABLE | Dieses Objekt |
| Top-1 | STRING | Auszuwertender Formelausdruck | |
| Stack(Out) | Top | CX_EXPANDABLE | NULL | Dieses Objekt, falls die Formel zu TRUE ausgewertet wurde, ansonsten NULL |