Erstellen von Echtzeitworkflows
Ähnlich wie die asynchronen Workflows können Echtzeitworkflows verwendet werden, um echte Geschäftsprozesse zu modellieren und zu automatisieren. Sie können optional Benutzereingaben erfordern, basierend auf angegebenen Ereignisbedingungen automatisch starten oder von einem Benutzer manuell gestartet werden. Echtzeitworkflows ermöglichen es Unternehmensbenutzern, z. B. Business Analysts, ohne .NET Framework-Programmiererfahrung ähnliche Funktionen wie bei synchronen Plug-Ins zu implementieren. Sie können asynchrone oder Echtzeitworkflows in der Dynamics 365 Customer Engagement (on-premises)-Webanwendung oder im Code erstellen.
Zu den wichtigen Punkten bezüglich eines Echtzeitworkflows gehören die folgenden Elemente:
Wird mithilfe eines
Workflow
-Entitätsdatensatzes definiert, ähnlich wie bei einem asynchronen Workflow.Wird in einer Phase der Ereignisausführungspipeline ausgeführt, wie die synchronen Plug-Ins. Der Echtzeitworkflow kann vor (Vor-Vorgang), nach (Nach-Vorgang) oder im Kernvorgang ausgeführt werden. Ein Echtzeitworkflow, der während des Kernvorgangs ausgeführt wird, ist die Implementierung einer benutzerdefinierten Aktion. Echtzeit-Workflows können innerhalb einer Stufe eingestuft werden, genau wie Sie es mit Plug-ins tun können. Weitere Informationen: Pipeline zur Ausführung von Ereignissen
Unabhängig davon, ob ein Echtzeitworkflow konfiguriert wurde, um bedarfsgesteuert oder als Reaktion auf ein Ereignis ausgeführt zu werden, wird er sofort ausgeführt und nicht in eine Warteschlange gestellt, um zu einem späteren Zeitpunkt ausgeführt zu werden.
Kann im Sicherheitskontext des angemeldeten Benutzers oder Besitzers des Workflows ausgeführt werden. Workflows, für die eine bedarfsgesteuerte Ausführung festgelegt wurde, werden jedoch immer im Sicherheitskontext des angemeldeten Benutzers ausgeführt.
Kann keine Verzögerungs- oder Warteaktivitäten enthalten.
Führt nur eine Fehlerprotokollierung durch, und nur dann, wenn die Protokollierung aktiviert ist.
Wird in der aktuellen Transaktion ausgeführt. Alle Aktivitäten im Workflow sowie in allen untergeordneten Workflows, asynchrone Workflows ausgenommen, sind Teil einer einzelnen Transaktion. Asynchrone untergeordnete Workflows werden in die Warteschlange eingereiht und in einer separaten Transaktion ausgeführt.
Kann in einen asynchronen Workflow und zurück in einen Echtzeitworkflow konvertiert werden.
Erforderliche Sicherheitsrechte
Ein Sicherheitsrecht mit der Bezeichnung Echtzeitprozesse aktivieren (prvActivateSynchronousWorkflow
) ist erforderlich, um Echtzeitworkflows zu aktivieren, damit sie ausgeführt werden können. Das Recht Workflowauftrag ausführen (prvWorkflowExecution
) ist erforderlich, um den Workflow zu starten. Da ein Echtzeitworkflow Auswirkungen auf den Kernsystemvorgang hat, wird empfohlen, dass nur einer kleinen Gruppe erfahrener Benutzer das Recht zur Aktivierung erteilt wird.
Erstellen eines Echtzeitworkflows im Code
Dynamics 365 for Customer Engagement unterstützt zwar Echtzeit-Workflows, diese müssen jedoch interaktiv in der Webanwendung erstellt werden. XAML-basierte Workflows, die in diesem Abschnitt behandelt werden, werden nur von einem lokalen bzw. IFD-Server unterstützt.
Sie können einen Echtzeitworkflow im Code erstellen, indem Sie einen Workflow
-Datensatz erstellen. Überprüfen Sie die Workflow
-Attributmetadaten der Entität, indem Sie die Metadaten-Tool Browser verwenden. Zum Anzeigen der Entitätsmetadaten für Ihre Organisation installieren Sie die Metadatenbrowserlösung, die in Durchsuchen der Metadaten für Ihre Organisation beschrieben ist. Sie können die Referenzdokumentation für Entitäten auch in der Entitätsreferenz durchsuchen.
Das folgende Bespiel vergleicht Code, der einen asynchronen Workflow erstellt, mit Code, der einen Echtzeitworkflow erstellt.
// Create an asynchronous workflow.
// The workflow should execute after a new opportunity is created.
Workflow workflow = new Workflow()
{
// These properties map to the New Process form settings in the web application.
Name = "Set closeprobability on opportunity create (async)",
Type = new OptionSetValue((int)WorkflowType.Definition),
Category = new OptionSetValue((int)WorkflowCategory.Workflow),
PrimaryEntity = Opportunity.EntityLogicalName,
Mode = new OptionSetValue((int)WorkflowMode.Background),
// Additional settings from the second New Process form.
Description = @"When an opportunity is created, this workflow" +
" sets the closeprobability field of the opportunity record to 40%.",
OnDemand = false,
Subprocess = false,
Scope = new OptionSetValue((int)WorkflowScope.User),
TriggerOnCreate = true,
AsyncAutoDelete = true,
Xaml = xamlWF,
// Other properties not in the web forms.
LanguageCode = 1033, // U.S. English
};
_workflowId = _serviceProxy.Create(workflow);
// Create a real-time workflow.
// The workflow should execute after a new opportunity is created
// and run in the context of the logged on user.
Workflow workflow = new Workflow()
{
// These properties map to the New Process form settings in the web application.
Name = "Set closeprobability on opportunity create (real-time)",
Type = new OptionSetValue((int)WorkflowType.Definition),
Category = new OptionSetValue((int)WorkflowCategory.Workflow),
PrimaryEntity = Opportunity.EntityLogicalName,
Mode = new OptionSetValue((int)WorkflowMode.Realtime),
// Additional settings from the second New Process form.
Description = @"When an opportunity is created, this workflow" +
" sets the closeprobability field of the opportunity record to 40%.",
OnDemand = false,
Subprocess = false,
Scope = new OptionSetValue((int)WorkflowScope.User),
RunAs = new OptionSetValue((int)workflow_runas.CallingUser),
SyncWorkflowLogOnFailure = true,
TriggerOnCreate = true,
CreateStage = new OptionSetValue((int)workflow_stage.Postoperation),
Xaml = xamlWF,
// Other properties not in the web forms.
LanguageCode = 1033, // U.S. English
};
_workflowId = _serviceProxy.Create(workflow);
Für den Echtzeitworkflow sind einige zusätzliche Eigenschaften festgelegt, über die der asynchrone Workflow nicht verfügt:
Workflowattribut | Beschreibung |
---|---|
Category |
Festgelegt auf WorkflowCategory.Workflow . |
RunAs |
Gibt an, dass der Workflow im Sicherheitskontext des Workflowbesitzers (workflow_runas.Owner ) oder des angemeldeten Benutzers (workflow_runas.CallingUser ) auszuführen ist. |
SyncWorkflowLogOnError |
Wenn true , werden Fehler in ProcessSession -Datensätzen protokolliert. Im Gegensatz zu asynchronen Workflows wird die Ausführung von Echtzeitworkflows nicht in System Job -Datensätzen protokolliert. |
CreateStage , DeleteStage , or UpdateStage |
Identifiziert die Phase in der Ereignisausführungs-Pipeline, in der der Workflow ausgeführt werden soll: vor dem Kernvorgang (workflow_stage.Preoperation ) oder danach (workflow_stage.Postoperation ). Sie müssen die Phase an den Auslöser für den vorgesehenen Vorgang anpassen. Wenn beispielsweise TriggerOnUpdate auf true festgelegt ist, müssen Sie auch UpdateStage festlegen.Echtzeitworkflows können nicht in Abrufvorgängen ausgeführt werden. Abgesehen von den Abrufvorgängen wird der Rest der unterstützten Webdienstnachrichten einem der drei unterstützten Ereignisse zugeordnet. Beispielsweise ist ein Zuweisungs- oder Statusfestlegungsvorgang letztendlich identisch mit einem Update. |
Mode |
Dies ist der Ausführungsmodus. Legen Sie dies auf WorkflowMode.Realtime fest. |
Rank |
Sie können die Reihenfolge für die Ausführung von Plug-Ins und Echtzeitworkflows in einer Phase angeben, indem Sie einen Rang festlegen. Alle Plug-Ins oder Echtzeitworkflows mit dem Rang 1 werden vor denjenigen mit dem Rang 2 ausgeführt, usw. |
Xaml |
Legen Sie den XAML-Code fest, der den Echtzeitworkflow definiert. |
Den vollständigen Beispielcode für das Erstellen eines Echtzeitworkflows finden Sie im Thema Beispiel: Erstellen eines Echtzeitworkflow im Code.
Konvertieren eines asynchronen Workflows in einen Echtzeitworkflow und zurück
Mithilfe von UpdateRequest können Sie asynchrone Workflows in Echtzeitworkflows und zurück konvertieren, ohne den Workflow erneut schreiben zu müssen, solange der asynchrone Workflow keine Warte- oder Verzögerungsaktivitäten enthält. Sie können die Konvertierung auch interaktiv durchführen, indem Sie die Webanwendung verwenden. Der Workflow muss sich im Entwurfszustand befinden (nicht-aktiviert), bevor die Konvertierung ausgeführt wird.
Konvertieren eines asynchronen Workflows in einen Echtzeitworkflow
Erstellen Sie eine UpdateRequest für den Workflow.
Legen Sie die
Mode
-Eigenschaft des Workflows aufWorkflowMode.Realtime
fest.Legen Sie
CreateStage
,UpdateStage
oderDeleteStage
für den Workflow nach Bedarf fest. Wenn für den Workflow beispielsweiseTriggerOnDelete
festgelegt ist, dann legen Sie auch die EigenschaftDeleteStage
fest.Rufen Sie die Methode Execute auf, welche die Updateanforderung als Parameter übergibt.
Konvertieren eines Echtzeitworkflows in einen asynchronen Workflow
Erstellen Sie eine UpdateRequest für den Workflow.
Legen Sie die
Mode
-Eigenschaft des Workflows aufWorkflowMode.Background
fest.Rufen Sie die Methode Execute auf, welche die Updateanforderung als Parameter übergibt.
Fehlerbehandlung und Rollback
Jede Workflowaktivität, die während der Datenbanktransaktion ausgeführt wird und eine Ausnahme an die Plattform zurückgibt, führt zum Abbruch des Kernvorgangs. Dies führt zu einem Rollback des Kernvorgangs, wenn dieser bereits stattgefunden hat. Außerdem alle registrierten Pre-Event- oder Post-Event-Plug-Ins oder -Echtzeitworkflows, die noch nicht ausgeführt wurden. Alle asynchronen Workflows, die über das gleiche Ereignis ausgelöst werden, werden nicht ausgeführt.
Wenn Sie eine Aktivität zum Anhalten des Workflows (TerminateWorkflow class) mit der Option Abbrechen in Ihren Workflow aufnehmen, können Sie dieser Aktivität eine angepasste Statusnachricht (Eigenschaft Reason
) hinzufügen, die eine einzelne Zeile Text enthält, die dem Benutzer im Dialog Business Process Error angezeigt wird.
Wenn SyncWorkflowLogOnError
auf true
festgelegt ist, werden Echtzeitworkflowfehler in ProcessSession
-Entitätsdatensätzen protokolliert.
Packen eines Echtzeitworkflows für die Verteilung
Um den Workflow zu verteilen, sodass er in eine Dynamics 365 Customer Engagement (on-premises)-Organisation importiert werden kann, fügen Sie den Workflow in einer Dynamics 365 Customer Engagement (on-premises)-Lösung hinzu. Mit der Webanwendung ist das ganz einfach, indem Sie zu EINSTELLUNGEN > ANPASSUNGEN > Lösungen navigieren. Sie können auch Code schreiben, um die Lösung zu erstellen. Weitere Informationen zur Verwendung von Lösungen finden Sie unter Packen und Verteilen von Erweiterungen.
Siehe auch
Erstellen von Workflows zum Automatisieren von Geschäftsprozessen
Erstellen Ihrer eigenen Aktionen
Ereignisausführungspipeline
Schreiben von Plug-Ins, um Geschäftsprozesse zu erweitern