Erstellen von Echtzeitworkflows
Veröffentlicht: Januar 2017
Gilt für: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
Ä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 Microsoft Dynamics 365-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ührungs-Pipeline ausgeführt, ähnlich wie bei synchronen Plug-Ins. Der Echtzeitworkflow kann vor dem Kernvorgang (vorgelagerter Vorgang), nach dem Kernvorgang (nachgelagerter Vorgang) oder während des Kernvorgangs ausgeführt werden. Ein Echtzeitworkflow, der während des Kernvorgangs ausgeführt wird, ist die Implementierung einer benutzerdefinierten Aktion. Echtzeitworkflows können in einer Phase angeordnet werden, genauso wie Plug-Ins.Weitere Informationen:Pipelinephasen
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.
In diesem Thema
Erforderliche Sicherheitsrechte
Erstellen eines Echtzeitworkflows im Code
Konvertieren eines asynchronen Workflows in einen Echtzeitworkflow und zurück
Fehlerbehandlung und Rollback
Packen eines Echtzeitworkflows für die Verteilung
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.
Weitere Informationen zu diesen Rechten finden Sie unter Registerkarte Anpassung.
Erstellen eines Echtzeitworkflows im Code
In Microsoft Dynamics 365 (online) werden Echtzeitworkflows zwar unterstützt, sie 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. Weitere Informationen zur XAML-Workflows finden Sie unter Benutzerdefinierte XAML-Workflows.
Sie können einen Echtzeitworkflow im Code erstellen, indem Sie einen Workflow-Datensatz erstellen. Überprüfen Sie die Attributmetadaten der Workflow-Entität, indem Sie das Metadaten-Browsertool oder die EntityMetadata.xlsx-Tabellenkalkulation im SDK-Paket verwenden.Zum Anzeigen der Entitätsmetadaten für Ihre Organisation installieren Sie die Metadatenbrowserlösung, die in Durchsuchen der Metadaten für die Organisation beschrieben ist. Sie können auch die Metadaten für ein nicht angepasstes Unternehmen in einer Excel-Tabellenkalkulation mit der Bezeichnung EntityMetadata.xlsx anzeigen, die im obersten Ordner des SDK-Downloads enthalten ist. Laden Sie das Microsoft Dynamics CRM SDK-Paket herunter.
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 oder 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. |
Sie können den vollständigen Beispielcode zum Erstellen eines Echtzeitworkflows im Thema Beispiel: Erstellen eines Echtzeit-Workflows in Code finden.
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 auf WorkflowMode.Realtime fest.
Legen Sie CreateStage, UpdateStage oder DeleteStage für den Workflow nach Bedarf fest. Wenn für den Workflow beispielsweise TriggerOnDelete festgelegt ist, dann legen Sie auch die Eigenschaft DeleteStage 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 auf WorkflowMode.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 Beenden des Workflows (TerminateWorkflow-Klasse) mit der abgebrochenen Option in den Workflow einschließen, können Sie zu dieser Aktivität eine benutzerdefinierte Statusmeldung (Reason-Eigenschaft) mit einer einzelnen Textzeile hinzufügen, die dem Benutzer im Dialog Geschäftsprozessfehler 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 Microsoft Dynamics 365-Organisation importiert werden kann, fügen Sie den Workflow in einer Microsoft Dynamics 365-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 zu Lösungen finden Sie unter Packen und Verteilen von Erweiterungen mithilfe von Lösungen.
Siehe auch
Automatisieren Sie Geschäftsprozesse mithilfe des Dynamics 365-Prozesses
Erstellen Ihrer eigenen Aktionen
Ereignisausführungspipeline
Schreiben von Plug-Ins, um Geschäftsprozesse zu erweitern
Microsoft Dynamics 365
© 2017 Microsoft. Alle Rechte vorbehalten. Copyright