CX_STRUCTURED::TriggeredStateStructureWrapper
Beschreibung:
Diese Funktion versucht die Status-Struktur (gewählt nach STRING-Parameter (= _uniqueID des Wrappers)) weiterzuschalten und liefert das neue Status-Struktur-Objekt (gewrappt) zurück.
1. Aktueller Zustand
Der aktuelle Zustandswrapper wird anhand der übergebenen _uniqueID aus der structures-Relation rausgesucht. Dessen _object-POINTER zeigt auf den aktuellen Zustand (CX_STATE_STRUCTURE) des Strukturobjekts (CX_STRUCTURED).
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 eine andere Status-Struktur weitergeschaltet wurde, kann eine Message getriggert werden. Der Name der Message ist im CX_STRUCTURED-Objekt im Slot "post.message" abzulegen, z.B. "INSPECT_OBJECT". Der Stack enthält neben dem CX_STRUCTURED-Objekt auch den neuen Status:
Position | Objekttyp | Kurzbeschreibung |
---|---|---|
Top | CX_STRUCTURED | Struktur |
Top-1 | CX_STATE_STRUCTURE | 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(TriggeredStateStructureWrapper)
;
Stack | Position | Objekttyp | Kurzbeschreibung |
---|---|---|---|
Stack(In) | Top | CX_STRUCTURED | Eine Struktur |
Top-1 | STRING | uniqueID des Wrappers | |
Stack(Out) | Top | CX_OVERWRITING_REF | Status-Struktur-Wrapper |