CX_TRANSACTION::TriggeredStateMonitorWrapper
Beschreibung:
Diese Funktion versucht den Status-Monitor (gewählt nach STRING-Parameter (= _uniqueID des Wrappers)) weiterzuschalten und liefert das neue Status-Monitor-Objekt (gewrappt) zurück.
1. Aktueller Zustand
Der aktuelle Zustandswrapper wird anhand der übergebenen _uniqueID aus der monitors-Relation rausgesucht. Dessen _object-POINTER zeigt auf den aktuellen Zustand der Transaktion.
2. Transitionen durchschalten
Ausgehend vom startState (nicht vom aktuellen Zustand!) des Zustandswrappers werden die Zustandsübergänge aus transitions bis zu dem Zustand ausgewertet (CX_CONDITIONED_BAG::Pick), dessen Übergänge keinen weiteren Zustand liefern (NULL). Dies ist der neue Zustand.
3. Neuer Zustand
In der nachfolgenden Abbildung sind die geänderten Verbindungen in grün hervorgehoben. Wie man sieht, wird kein neuer Wrapper erzeugt, sondern lediglich der bestehende Wrapper auf den neuen Zustand umgebogen und der gleiche Wrapper wird zurückgegeben.
Wenn auf einen anderen Status-Monitor weitergeschaltet wurde, kann eine Message getriggert werden. Der Name der Message ist im CX_TRANSACTION-Objekt im Slot "post.message" abzulegen, z.B. "INSPECT_OBJECT". Der Stack enthält neben dem CX_TRANSACTION-Objekt auch den neuen Status:
Position | Objekttyp | Kurzbeschreibung |
---|---|---|
Top | CX_TRANSACTION | Transaktion |
Top-1 | CX_STATE_MONITOR | Status |
Code-Beispiel:
Define(SetValues)
Var(tmp)
-> tmp
// set order number if widget isn't empty
GetValue(, OrderNumber) Dup "" = ifnot { tmp Put(confirmed.number) } else Drop
tmp DeleteSlot(dunned.date)
tmp DeleteSlot(dunned.level)
"CONFIRMATION" tmp Call(TriggeredStateMonitorWrapper)
;
Stack | Position | Objekttyp | Kurzbeschreibung |
---|---|---|---|
Stack(In) | Top | CX_TRANSACTION | Eine Transaktion |
Top-1 | STRING | uniqueID des Wrappers | |
Stack(Out) | Top | CX_OVERWRITING_REF | Status-Monitor-Wrapper |