Start-Ereignisse und Event-Variablen
Start-Ereignisse
Zum Start von Prozessen steht Ihnen im technischen Modell ein bedingtes Start-Ereignis zur Verfügung, das durch folgende Angaben definiert wird:
Ereignis: Das Ereignis, welches den Prozess startet.
Entität: Der Entitätsname falls gewünscht. Das Ereignis wird dann an diese Entität gebunden.
Bedingung: Ein Groovy-Skript, welches als Ergebnis
true
bzw.false
liefern muss.
Im Folgenden finden Sie eine Übersicht über alle Start-Ereignisse und ihre jeweiligen Besonderheiten und Parameter.
Die Parameter eventName
, entityName
usw. sind Variablen, die im Script des Start-Ereignisses und allen Skripten des Prozesses zur Verfügung stehen.
// eventName ist vom Typ String und kann Werte aus der Tabelle annehmen
if(ScriptUtils.equal(eventName, "BusinessEntityBeforeCreateEvent", "BusinessEntityBeforeChangeEvent"))
{
...
}
In einem Prozess können auch mehrere Prozess-Startereignisse definiert werden. Thematisch zusammenhängende Prozesse z.B. "Kopieren (vorher)" und "Kopieren (nachher)" können in einem Prozess zusammen gefasst werden.
Bei der Neuanlage von mehreren Startpunkten ist darauf zu achten, dass ein Ereignis nur ein Mal verwendet werden darf. Das Ereignis "Immer ausführen" sollte nicht mehr verwendet werden.
![](../../../__attachments/8094958/image2018-1-18_14-26-40.png?inst-v=01ce9f95-f40d-424e-a7da-0f3a4bad5824)
Abbildung: Mehrere Startpunkte in einem Prozess
Das Modell wurde noch präziser, da jedem Ereignis ein eigener Nachverarbeitungsschritt zugeordnet werden kann.
Neuanlegen (vorher)
✅ Entitätsauswahl nötig
Dieses Ereignis wird beispielsweise dann ausgelöst, wenn ein Anwender im System die Daten eines neuen Datensatzes in die Maske eingegeben hat und auf Speichern geklickt hat.
Der Datensatz ist jetzt noch unterwegs in die Datenbank, andere Systemteile können ihn noch nicht sehen.
Auch hat er noch keinen Primärschlüssel. Man kann daher beispielsweise keine anderen Datensätze mit ihm verknüpfen.
Die Neuanlage ist somit noch nicht ganz abgeschlossen.
Nutzen: der BPM-Prozess kann hier alle Felder des Datensatzes weiter verändern.
Beispielsweise kann er aus zwei Feldern ein drittes berechnen.
Der Datensatz wird am Ende des Prozesses automatisch gespeichert. Man muss also nicht saveEntry dazu aufrufen.
Andere Folgeaktionen sollten erst im Ereignis Neuanlegen (nachher) erfolgen.
Parameter
eventName:
BusinessEntityBeforeCreateEvent
entityName: Der Entitätsname
relationName: Der interne Relationsname oder leer
masterTable: Der interne Name der übergeordneten Entität oder leer
masterPk: Der Primärschlüssel der übergeordneten Entität oder leer
container: Der aktuelle Datensatz (Datentyp:
IContainer
)container_New: identisch zu Variable container
workSpace: Der aktuelle Datenbereich (Datentyp:
IScriptWorkSpace
)
Neuanlegen (nachher)
✅ Entitätsauswahl nötig
Nach der Neuanlage können weitere abhängige Daten erstellt oder verknüpft werden. Der Satz steht nun mit Primärschlüssel zur Verfügung und wurde persistiert.
Parameter
eventName:
BusinessEntityCreateEvent
entityName: Der Entitätsname
relationName: Der interne Relationsname oder leer
masterTable: Der interne Name der übergeordneten Entität oder leer
masterPk: Der Primärschlüssel der übergeordneten Entität oder leer
container: Der aktuelle Datensatz (Datentyp:
IContainer
)container_New: identisch zu Variable container
workSpace: Der aktuelle Datenbereich (Datentyp:
IScriptWorkSpace
)
Speichern (vorher)
✅ Entitätsauswahl nötig
Der Datensatz ist noch unterwegs in die Datenbank.
Nutzen: der BPM-Prozess kann hier alle Felder des Datensatzes (container_New) weiter verändern.
Beispielsweise kann er aus zwei Feldern ein drittes berechnen.
Änderungen von Feldwerten erkennt man dabei durch Vergleich container_New/container_Old.
Andere Folgeaktionen sollten erst im Ereignis Speichern (nachher) erfolgen.
container_New wird am Ende des Prozesses automatisch gespeichert. Man muss also nicht saveEntry dazu aufrufen.
Dieses Ereignis wird NICHT durchlaufen, wenn der Datensatz über den Zuordnungsbrowser zugeordnet oder weggeordnet wurde, selbst wenn durch diesen Vorgang ein Nachschlagefeld verändert wurde. Man muss daher zusätzlich auf die Verknüpfungs-Ereignisse reagieren.
Parameter
eventName:
BusinessEntityBeforeChangeEvent
entityName: Der Entitätsname
relationName: Der interne Relationsname oder leer
masterTable: Der interne Name der übergeordneten Entität oder leer
masterPk: Der Primärschlüssel der übergeordneten Entität oder leer
container_Old: Der aktuelle Datensatz mit den Werten vor der Änderung (Datentyp:
IContainer
)container_New: Der aktuelle Datensatz mit den geänderten Werten (Datentyp:
IContainer
)workSpace: Der aktuelle Datenbereich (Datentyp:
IScriptWorkSpace
)positionInWorkSpace: Die Position des Satzes im Datenbereich
Speichern (nachher)
✅ Entitätsauswahl nötig
Der Datensatz ist nun gespeichert.
Nutzen: der Datensatz selbst sollte an dieser Stelle nicht mehr verändert werden (dafür ist Speichern (vorher) geeignet). Man kann Folgeaktionen durchführen, etwa abhängige Daten erstellen oder bearbeiten, oder eine E-Mail senden. Änderungen von Feldwerten erkennt man dabei durch Vergleich container_New/container_Old.
Dieses Ereignis wird NICHT durchlaufen, wenn der Datensatz über den Zuordnungsbrowser zugeordnet oder weggeordnet wurde, selbst wenn durch diesen Vorgang ein Nachschlagefeld verändert wurde. Man muss daher zusätzlich auf die Verknüpfungs-Ereignisse reagieren.
Parameter
eventName:
BusinessEntityChangeEvent
entityName: Der Entitätsname
relationName: Der interne Relationsname oder leer
masterTable: Der interne Name der übergeordneten Entität oder leer
masterPk: Der Primärschlüssel der übergeordneten Entität oder leer
container_Old: Der aktuelle Datensatz mit den Werten vor der Änderung (Datentyp:
IContainer
)container_New: Der aktuelle Datensatz mit den geänderten Werten (Datentyp:
IContainer
)workSpace: Der aktuelle Datenbereich (Datentyp:
IScriptWorkSpace
)positionInWorkSpace: Die Position des Satzes im Datenbereich
Löschen
✅ Entitätsauswahl nötig
Der Datensatz wird inaktiv gesetzt. Zum Zeitpunkt des Ereignisses ist der Datensatz noch aktiv.
Parameter
eventName:
BusinessEntityRemoveEvent
entityName: Der Entitätsname
relationName
:
Der interne Relationsname oder leermasterTable: Der interne Name der übergeordneten Entität oder leer
masterPk: Der Primärschlüssel der übergeordneten Entität oder leer
container: Der zu löschende Datensatz (Datentyp:
IContainer
)workSpace: Der aktuelle Datenbereich (Datentyp:
IScriptWorkSpace
)
Kopieren (vorher)
✅ Entitätsauswahl nötig
Datensatz wird kopiert, zum Zeitpunkt des Events ist der kopierte Datensatz noch nicht gespeichert und kann vor dem Kopieren manipuliert werden.
Parameter
eventName:
BusinessEntityBeforeCopyEvent
entityName: Der Entitätsname
relationName: Der interne Relationsname oder leer
masterTable: Der interne Name der übergeordneten Entität oder leer
masterPk: Der Primärschlüssel der übergeordneten Entität oder leer
container_Old: Der Ursprungsdatensatz (Datentyp:
IContainer
)container_New: Die Kopie zum Ändern von Daten (Datentyp:
IContainer
)workSpace: Der aktuelle Datenbereich (Datentyp:
IScriptWorkSpace
)
Kopieren (nachher)
✅ Entitätsauswahl nötig
Nach dem Kopieren können weitere abhängige Daten erstellt oder verknüpft werden. Der Satz steht nun mit Primärschlüssel zur Verfügung und wurde persistiert.
Parameter
eventName:
BusinessEntityCopyEvent
entityName: Der Entitätsname
relationName: Der interne Relationsname oder leer
masterTable: Der interne Name der übergeordneten Entität oder leer
masterPk: Der Primärschlüssel der übergeordneten Entität oder leer
container_Old: Der Ursprungsdatensatz (Datentyp:
IContainer
)container_New: Die Kopie zum Ändern von Daten (Datentyp:
IContainer
)workSpace: Der aktuelle Datenbereich (Datentyp:
IScriptWorkSpace
)
Speichern von Positionen (nachher)
✅ Entitätsauswahl nötig
Der Prozess wird beim Speichern von Angebots- oder Vertragspositionen gestartet.
Parameter
eventName:
BusinessItemWorkSpaceUpdateEvent
entityName: Die Positions-Entität
relationName
:
Der interne Relationsname oder leermasterTable: Der interne Name der übergeordneten Entität oder leer
masterPk: Der Primärschlüssel der übergeordneten Entität oder leer
workSpace: Der aktuelle Datenbereich (Datentyp:
IScriptWorkSpace
)
Zuordnen (vorher)
❌ keine Entitätsauswahl nötig
Alle Daten die im Zuordnungsbrowser für das Zuordnen und das Entfernen der Zuordnung ausgewählt wurden, bevor die Operation ausgeführt wird.
Parameter
eventName:
BusinessBeforeAddRemoveLinkEvent
relationName: Der interne Relationsname
masterTable: Der interne Name der Hauptentität.
masterPk: Der Primärschlüssel der Hauptentität.
slaveTable: Der interne Name der abhängigen Entität.
workSpace: Der abhängige Datensatz-Container (Datentyp:
IScriptWorkSpace
)containers_Add: Hinzugefügte abhängige Datensätze (Datentyp:
IContainer[]
).containers_Remove: Datensätze die nicht mehr mit dem Hauptdatensatz verknüpft sein sollen (Datentyp:
IContainer[]
).
Zuordnen (nachher)
❌ keine Entitätsauswahl nötig
Alle Daten die im Zuordnungsbrowser für das Zuordnen und das Entfernen der Zuordnung ausgewählt wurden. Die Änderungen wurden in der Datenbank persistiert.
Parameter
eventName:
BusinessAddRemoveLinkEvent
relationName: Der interne Relationsname
masterTable: Der interne Name der Hauptentität.
masterPk: Der Primärschlüssel der Hauptentität.
slaveTable: Der interne Name der abhängigen Entität.
workSpace: Der abhängige Datensatz-Container (Datentyp:
IScriptWorkSpace
)containers_Add: Hinzugefügte abhängige Datensätze (Datentyp:
IContainer[]
).containers_Remove: Datensätze die nicht mehr mit dem Hauptdatensatz verknüpft sind (Datentyp:
IContainer[]
).
Link erzeugen
❌ keine Entitätsauswahl nötig
Eine Verknüpfung zwischen zwei Datensätzen wird erzeugt. Im Gegensatz zu Zuordnen wird dieses Ereignis für jeden Link einzeln ausgelöst, Zuordnen für die gesamte Operation.
Parameter
eventName:
BusinessInsertLinkEvent
relationName: Der interne Relationsname.
masterTable: Der interne Name der Hauptentität.
masterPk: Der Primärschlüssel der Hauptentität.
slaveTable: Der interne Name der abhängigen Entität.
slavePk: Der Primärschlüssel der abhängigen Entität.
relationAttributesMap: Feldwerte der Attributierten-Beziehung. Zugriff über den voll qualifizierten Feldnamen.
Link löschen
❌ keine Entitätsauswahl nötig
Das Entfernen einer Verknüpfung zwischen zwei Datensätzen. Im Gegensatz zu Zuordnen wird dieses Ereignis wird für jeden Link einzeln gefeuert, Zuordnen für die gesamte Operation.
Parameter
eventName:
BusinessDeleteLinkEvent
relationName: Der interne Relationsname
masterTable: Der interne Name der Hauptentität.
masterPk: Der Primärschlüssel der Hauptentität.
slaveTable: Der interne Name der abhängigen Entität.
slavePk: Der Primärschlüssel der abhängigen Entität.
relationAttributesMap: Feldwerte der Attributierten-Beziehung. Zugriff über den voll qualifizierten Feldnamen.
E-Mail-Import
✅ Entitätsauswahl nötig
Eine Aktivität wird durch den Mail-Import/Abgleich angelegt oder aktualisiert.
Parameter
eventName:
ActivityImportEvent
container: Der aus dem Mailimport generierte Aktivität -Datensatz (Datentyp:
IContainer
)NewMail:
true
für einen neuen Datensatz,false
für die Aktualisierung.Sender: Die E-Mail-Adresse des Senders.
Recipients: Eine Liste von E-Mail-Adressen der Empfänger.
CCRecipients: Eine Liste von E-Mail-Adressen der CC-Empfänger.
MailConfigId: Die ID der E-Mail-Konfiguration.
Datensatz-Rechteänderung
✅ Entitätsauswahl nötig
Die Rechte eines Datensatzes wurden geändert.
Parameter
eventName:
BusinessEntityRightChangeEvent
container: Der geänderte Datensatz (Datentyp:
IContainer
)rightIdentifier: Die ID der neuen Rechtevorlage
Datensatz-Mandantenänderung
✅ Entitätsauswahl nötig
Die Mandantenzuordnung eines Datensatzes wurden geändert.
Parameter
eventName:
BusinessEntityUnitChangeEvent
container: Der geänderte Datensatz (Datentyp:
IContainer
). Zugriff mitUnitUtils.getUnits(container)
.
Maskenskript
⚠ Entitätsauswahl optional
Prozess wird per Maskenskript in einer Entitätsmaske (z.B. via Schalter) zum aktuell geöffneten Datensatz gestartet.
Parameter
eventName:
CLIENT_EVENT
ProcessID: Id des gestarten Prozesses
container: Der geöffnete Datensatz (Datentyp:
IContainer
)workSpace: Der aktuelle Datenbereich (Datentyp:
IScriptWorkSpace
)positionInWorkSpace: Die Position des Satzes im Datenbereich
Weitere Parameter können als optionale Übergabeparameter in einer HashMap<String, Object>
dem Prozess übergeben werden und sollten in der Startbedingung auf deren Existenz (ProcessUtils.isVariablesSet(key)
) geprüft werden. Der Zugriff erfolgt über ProcessUtils.getVariable(key)
.
Wenn im Start-Ereignis auf eine Entität eingeschränkt wurde, so startet der Prozess nur aus dem Maskenskript der betroffenen Entität. Ist die Auswahl leer, so kann der Prozess aus jeder beliebigen Entität gestartet werden. Der Administrator hat dafür Sorge zu tragen, dass er im Prozess auf verschiedenen Entitäten reagiert.
Rückgabe
Im Start-Ereignis können Rückgabe-Variablen definiert werden, die im Maskenskript bei synchronem Aufruf, weiterverarbeitet werden können. Die Variablen sind mit den Daten gefüllt, die im Prozess bis zum ersten Wartezustand eingefügt wurden.
Aktionsbox
⚠ Entitätsauswahl optional
Prozess wird aus der Aktionsbox gestartet und enthält alle selektierten Datensätze aus der Listenansicht
Parameter
eventName:
ACTION_BOX
ProcessID: Id des gestarten Prozesses
entityName: Der Name der Entität
containers: Die Liste der selektierten Datensätze vom Typ
IContainer
workSpace: Der aktuelle Datenbereich (Datentyp:
IScriptWorkSpace
)
Wenn im Start-Ereignis auf eine Entität eingeschränkt wurde, so kann der Prozess nur in der Aktionsbox zur jeweiligen Entität ausgewählt werden. Ist die Auswahl leer, so kann der Prozess aus jeder beliebigen Entität gestartet werden. Der Administrator hat dafür Sorge zu tragen, dass er im Prozess auf verschiedenen Entitäten reagiert.
Anwender-Start (myCRM)
❌ Entitätsauswahl nicht möglich
Der Prozess wird aus myCRM heraus gestartet. Alle verfügbaren Prozesse werden in der Systemlasche Prozesse angezeigt und können als Favoriten in myCRM abgelegt werden. Neue Prozesse stehen erst nach der Client-Neuanmeldung zur Verfügung.
Parameter
eventName:
MYCRM
ProcessID: Id des gestarteten Prozesses
System-Start (Web Service, Timer)
❌ Entitätsauswahl nicht möglich
Der Prozess wird durch einen Web Service oder zeitgesteuert gestartet.
Parameter
eventName:
MANUAL
ProcessID: Id des gestarteten Prozesses
Details sind unter Web Service in CURSOR-BPM bzw. Zeitgesteuerte Aktion zu finden.
Rückgabe
Im Webservice Start-Ereignis können Rückgabe-Variablen definiert werden, die dem Aufrufer zur Weiterverarbeitung zurück geliefert werden. Die Variablen sind mit den Daten gefüllt, die im Prozess bis zum ersten Wartezustand eingefügt wurden.
Eingehender Anruf
❌ Entitätsauswahl nicht möglich
Der Prozess wird durch einen neuen eingehenden Anruf über die serverseitige CTI-Schnittstelle gestartet.
Parameter
eventName:
CTI_INBOUND
entityName: CtiCall
container: Der Datensatz in der Tabelle CTI-Anruf
callNumber: Die anrufende Nummer
CTI-Server Statusänderung
❌ Entitätsauswahl nicht möglich
Der Prozess wird durch die Änderung des Status am CTI Server oder CTI Telefon gestartet.
Parameter
eventName:
CTI_STATE_CHANGE
ctiStateEvent: Die Statusinformation des CTI Servers als
CstaServerEvent
-Objekt. Dieses kann über die KlasseCstaScriptUtils
verarbeitet werden.
Dokumentvorlage
❌ Entitätsauswahl nicht möglich
Der Prozess wird mit der Auswahl einer speziellen Dokumentvorlage gestartet, der die Aufgabe des Einzelbriefassistenten in Kombination einer externen Dokumentenverwaltung übernimmt.
Die spezielle Dokumentvorlage muss zu einer dokumentenfähigen Enität erstellt worden sein (diese nutzen den Einzelbriefassistenten) und referenziert den Prozess zur Steuerung der Dokumentengenerierung.
Parameter
eventName:
DOCUMENT_TEMPLATE
documentTemplate: Der Name der Dokumentvorlage
entityName: Der Entitätsname des aktiven Datensatzes
container: Der aktive Datensatz
Immer ausführen
⚠ Entitätsauswahl optional
Dieser Prozess wird bei jedem Ereignis geprüft. In der Startbedingung sind der eventName
und die Parameter zu prüfen.
Soll dieser Prozess in myCRM sichtbar sein, so muss der Prozess zuvor mit dem Start-Ereignis myCRM veröffentlicht werden und aus der Prozess-Lasche in einen System-Ordner (sichtbar für alle Anwender) in myCRM kopiert werden. Erst jetzt kann das Ereignis auf 'Immer ausführen' gesetzt werden.
Parameter
eventName: EventName des aktuellen Ereignisses (s.o.)
Die weiteren Parameter entsprechen dem aktuellen Ereignis (s.o.)
Achtung: Die Verwendung dieses Ereignisses führt zu Performanceeinbußen, wenn die Startprüfung inperformant formuliert ist. Die Nutzung dieses Events sollte mit Bedacht erfolgen.