Lade...
 

CX_TRANSACTION::TriggeredStateMonitorWrapper

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.

TriggeredStateMonitor 1

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.

TriggeredStateMonitor 2

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
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
Funktionsaufruf: Call(TriggeredStateMonitorWrapper)