Freigeben über


Workflowerweiterungen

Sie können die Optionen erweitern, die innerhalb des Designers für Workflows zur Verfügung stehen, die in Microsoft Dataverse verwendet werden. Diese Erweiterungen werden hinzufügt, indem eine Assembly hinzufügt wird, die eine Klasse enthält, welche die CodeActivity-Klasse erweitert. Diese Erweiterungen werden allgemein als Workflow-Assemblys oder Workflow-Aktivitäten bezeichnet.

Sie können diese angepassten Erweiterungen innerhalb des Workflow-Designers, der benutzerdefinierten Aktionen und der Dialoge verwenden (außer Betrieb genommen).

Wichtig

Wenn immer möglich, sollten Sie zunächst erwägen, eine von mehreren deklarativen Optionen zur Definition der Geschäftslogik anzuwenden. Weitere Informationen: Anwenden von Geschäftslogik in Dataverse

Verwenden Sie Workflowerweiterungen, wenn ein deklarativer Prozess nicht Ihre Bedingung erfüllt.

Wann eine Workflowerweiterung zu erstellen ist

Wenn Sie mithilfe der Standardprozessaktivitäten nicht die erforderliche Funktion finden, können Sie benutzerdefinierte Aktivitäten hinzufügen, sodass sie im Editor verfügbar sind, der zum Erstellen von Workflow-, Dialog- und Aktionsprozessen verwendet wird.

Standardmäßig umfassen diese Prozesse einen allgemeinen Satz von Aktivitäten, die Sie ausführen können, wie in der folgenden Tabelle gezeigt:

Aktivität Workflow Aktion Dialogfeld
Daten abfragen X
Wert zuweisen X X
Datensatz erstellen X X X
Datensatz aktualisieren X X X
Datensatz zuweisen X X X
E-Mail senden X X X
Untergeordneten Workflow starten X X X
Aktion durchführen X X
Untergeordnetes Dialogfeld verknüpfen X
Status ändern X X X
Workflow beenden X X
Dialog anhalten X

Sie können die Aktivität Aktion durchführen verwenden, um sämtliche benutzerdefinierten Aktionen oder die folgenden Systemmeldungen, die als Befehlsaktionen bezeichnet werden, auszuführen:

Aktionen Aktionen (Fortsetzung) Aktionen (Fortsetzung)
AddToQueue AddUserToRecordTeam RemoveUserFromRecordTeam
SetProcess SetWordTemplate

Wenn Sie über Dynamics 365 Sales- oder Service-Lösungen verfügen, können Sie je nach Lösung andere Befehlsaktionen finden:

Aktionen Aktionen (Fortsetzung) Aktionen (Fortsetzung)
ApplyRoutingRule CalculateActualValue Verkaufschance schließen
GetQuoteProductsFromOpportunity GetSalesOrderProductsFromOpportunity LockInvoicePricing
LockSalesOrderPricing QualifyLead RemoveUserFromRecordTeam
ResolveIncident ResolveQuote Überarbeiten
UnlockInvoicePricing UnlockSalesOrderPricing

Weitere Informationen:

Verwendete Technik

Sie können eine Assembly registrieren, die mit der .NET Framework Activity Library erstellt wurde, die benutzerdefinierte Aktivitäten definiert, die im Webanwendungseditor erscheinen und beim Ausführen des Prozesses aufgerufen werden.

Benutzerdefinierte Workflowaktivitäten erfordern das Erstellen einer .NET Framework-Assembly, die mindestens eine Klasse enthält, die aus der Zusammenfassung abgeleitet ist CodeActivity-Klasse. Diese Klasse stellt die Execute(CodeActivityContext)-Methode bereit, die von der Dataverse-Plattform aufgerufen wird, wenn die Aktivität ausgeführt wird. Jede Klasse in Ihrer Assembly definiert eine bestimmte Aktivität.

Workflow-Aktivitäten sollten Ein- und Ausgabeparameter definieren, die im Prozessdesigner sichtbar sind und es jemandem ermöglichen, Daten in die Workflow-Aktivität zu übergeben und die verarbeitete Ausgabe zu erhalten. Wenn Sie die Klasse schreiben, fügen Sie Eigenschaften für diese Parameter hinzu, und kommentieren Sie sie mit .NET-Attributen, um die Metadaten bereitzustellen, die Dataverse verwenden wird, um Ihre benutzerdefinierte Workflowaktivität mit sämtlichen Parametern im Designer verfügbar zu machen.

Erstellen einer benutzerdefinierten Workflowaktivitäts-Assembly

Im Folgenden werden allgemeine Schritte angegeben, die verwendet werden, um eine benutzerdefinierte Workflowaktivität mithilfe von Visual Studio zu erstellen. Ein vollständiges Beispiel mit einer Schritt-für-Schritt-Anleitung finden Sie unter Tutorial: Erstellen einer Workflow-Erweiterung.

  1. Erstellen Sie ein Klassenbibliotheksprojekt mit .NET Framework 4.6.2 als Zielframework.

    Wichtig

    Während die Assemblys, die spätere Versionen verwenden, im Allgemeinen funktionieren. Wenn sie eine Funktion verwenden, die nach 4.6.2 eingeführt wurde, tritt ein Fehler auf.

  2. Installieren Sie das Microsoft.CrmSdk.Workflow-NuGet-Paket.

    Dieses Paket umfasst das Microsoft.CrmSdk.CoreAssemblies-Paket.

  3. (Optional) Wenn Sie früh gebundene Tabellenklassen verwenden möchten, nehmen Sie diese in das Projekt auf.

    Weitere Informationen:

  4. Fügen Sie eine öffentliche Klasse hinzu. Der Name der Klasse sollte der von der Aktivität auszuführenden Aktion entsprechen.

  5. Die folgenden using-Direktiven hinzufügen

    using System.Activities;
    using Microsoft.Xrm.Sdk;
    using Microsoft.Xrm.Sdk.Workflow;
    
  6. Fügen Sie Eigenschaften der Klasse hinzu, um alle Eingabe- oder Ausgabeparameter darzustellen und verwenden Sie .NET-Attribute, um die erforderlichen Metadaten bereitzustellen, um diese Eigenschaften dem Workflowprozess-Designer verfügbar zu machen.

    Weitere Informationen: Parameter hinzufügen

  7. Stellen Sie sicher, dass Ihre Klasse von der CodeActivity-Klasse abgeleitet ist, und implementieren Sie die Execute(CodeActivityContext)-Methode, die die Vorgänge enthält, die Ihre Aktivität ausführen wird.

    Weitere Informationen: Fügen Sie Ihren Code der Execute-Methode hinzu

  8. Signieren Sie Ihre Assembly

  9. Erstellen Sie Ihre Assembly.

  10. Registrieren Sie Ihre Assembly mit dem Plug-in Registration Tool und legen Sie die Eigenschaften Name und WorkflowActivityGroupName fest, um den Text zu definieren, der im Workflow-Designer sichtbar sein wird.

    Weitere Informationen: Ihre Assembly registrieren

  11. Testen Sie Ihre Workflow-Aktivität, indem Sie sie aus einem Workflow-, Dialog- oder Aktionsprozess heraus aufrufen

  12. (Empfohlen) Fügen Sie Ihrer Workflowaktivität einer Lösung hinzu.

Parameter hinzufügen

Wenn Sie Parameter für Ihre Klasse definieren, müssen Sie sie als InArgument<T>-, OutArgument<T>- oder InOutArgument<T>-Typen definieren. Diese Typen stellen Methoden bereit, die von einer allgemeinen Argument-Klasse geerbt werden zum Abrufen oder Festlegen der Parameter. Ihr Code verwendet diese Methoden in der Execute-Methode. Weitere Informationen: Fügen Sie Ihren Code der Execute-Methode hinzu

Wenn Ihre angepasste Workflow-Aktivität Eingabe- oder Ausgabeparameter verwendet, müssen Sie die entsprechenden .NET-Attribute zu den öffentlichen Klasseneigenschaften hinzufügen, die sie definieren. Die Daten werden vom Prozess-Designer gelesen, um zu definieren, wie die Parameter im Prozess-Designer festgelegt werden können.

Sie können die folgenden Eigenschaftstypen als Eingabe- oder Ausgabeparameter verwenden:

Eigenschaften Eigenschaften (Fortsetzung) Eigenschaften (Fortsetzung)
Boolesch DateTime Dezimalzahl
Doppelt EntityReference int
Money OptionSetValue Zeichenfolge

Eingabe- und Ausgabeparameter

Um den Text zu definieren, der für ein Eingabe- oder Ausgabeparameter im Prozess-Designer angezeigt werden soll, verwenden Sie das folgende Muster mithilfe von .NET Attributen.

[Input("Integer input")]
public InArgument<int> IntInput { get; set; }

or

[Output("Integer output")]
public OutArgument<int> IntOutput { get; set; }

Eine einzelne Eigenschaft in Ihrer Klasse kann sowohl ein Eingabe- als auch ein Ausgabeparameter sein, indem beide Attribute eingeschlossen werden:

[Input("Int input")]  
[Output("Int output")]  
public InOutArgument<int> IntParameter { get; set; }

Erforderliche Werte

Wenn Sie einen Eingabeparameter erstellen möchten, der bei der Verwendung der Workflowaktivität in einem Prozess erforderlich ist, müssen Sie das [RequiredArgument]-Attribut verwenden.

Standardwerte

Wird ein Wert, der als Eingabeparameter übergeben wird oder als Ausgabeparameter festgelegt wird, nicht definiert wird, können Sie einen Standardwert angeben. So legen Sie beispielsweise den Standardwert für eine boolesche Eigenschaft fest:

[Input("Bool input")]
[Default("True")]
public InArgument<bool> Bool { get; set; }

Das Format für den Standardwert hängt vom Typ der Eigenschaft ab. In der folgenden Tabelle sind einige Beispiele:

Typ Beispiel
Boolesch [Default("True")]
DateTime [Default("2004-07-09T02:54:00Z")]
Dezimalzahl [Default("23.45")]
Doppelt [Default("23.45")]
Money [Default("23.45")]
EntityReference [Default("3B036E3E-94F9-DE11-B508-00155DBA2902", "account")]
int [Default("23")]
OptionSetValue [Default("3")]
Zeichenfolge [Default("string default")]

EntityReference-Parameter

Wenn Sie eine Eigenschaft für einen EntityReference-Parameter definieren, müssen Sie das Attribut ReferenceTarget verwenden. Damit wird festgelegt, welche Art von Tabelle zulässig ist. Beispiel: ''

[Input("EntityReference input")]
[Output("EntityReference output")]
[ReferenceTarget("account")]
public InOutArgument<EntityReference> AccountReference { get; set; }

OptionSetValue-Parameter

Wenn Sie eine Eigenschaft für einen OptionSetValue-Parameter definieren, müssen Sie das Attribut AttributeTarget verwenden. Dieses Attribut legt fest, welche Tabelle und Spalte den gültigen Wertesatz für den Parameter enthält. Beispiel: ''

[Input("Account IndustryCode value")]
[AttributeTarget("account", "industrycode")]
[Default("3")]
public InArgument<OptionSetValue> IndustryCode { get; set; }

Fügen Sie Ihren Code der Execute-Methode hinzu

Die Logik, die Sie in die CodeActivity.Execute(CodeActivityContext)-Methode-Methode einbeziehen, definiert, was Ihre Workflowaktivität ausführt.

Wichtig

Der Code in der Execute-Methode sollte als statusfrei geschrieben werden. Es wird nicht empfohlen, globale oder Membervariablen zu verwenden, um Daten von einem Aufruf zum nächsten zu übergeben. Zur Verbesserung der Leistung werden benutzerdefinierte Workflowaktivitätsinstanzen von Dataverse zwischengespeichert. Deshalb wird der Konstruktor nicht für jeden Aufruf der benutzerdefinierten Workflowaktivität aufgerufen. Außerdem könnten mehrere Systemthreads die benutzerdefinierte Workflowaktivität gleichzeitig ausführen. Sie sollten nur die Informationen verwenden, die über den Parameter CodeActivityContext an die Execute-Methode übergeben werden.

Parameter referenzieren

Um auf Parameter, die für Ihre Klasse definiert sind, zu verweisen, verwenden Sie die Methoden Argument.Get oder Argument.Set(ActivityContext, Object), die sie bereitstellen. Diese erfordern die Instanz CodeActivityContext, die an die Execute-Methode übergeben wird. Im folgenden Beispiel wird gezeigt, wie auf den Wert eines Eingabeparameters zugegriffen wird und wie der Wert eines Ausgabeparameters festgelegt wird.

using Microsoft.Xrm.Sdk.Workflow;
using System.Activities;

namespace SampleWorkflowActivity
{
  public class IncrementByTen : CodeActivity
  {
    [RequiredArgument]
    [Input("Decimal input")]
    public InArgument<decimal> DecInput { get; set; }

    [Output("Decimal output")]
    public OutArgument<decimal> DecOutput { get; set; }

    protected override void Execute(CodeActivityContext context)
    {
      decimal input = DecInput.Get(context);
      DecOutput.Set(context, input + 10);
    }
  }
}

Kontextbezogene Informationen abrufen

Wenn Ihr Code Kontextinformationen benötigt, können Sie darauf mit der Methode CodeActivityContext.GetExtension<T> mit der Schnittstelle IWorkflowContext zugreifen. Dieses Objekt ist von der IExecutionContext-Schnittstelle abgeleitet, die den Zugriff auf viele schreibgeschützte Eigenschaften ermöglicht, die den Kontext des Vorgangs beschreiben. Der IWorkflowContext stellt ähnliche kontextbezogene Informationen bereit, die für den ausführenden Workflow spezifisch sind, der Ihre Workflowassembly verwendet.

Verwenden Sie den folgenden Code in Ihrer Execute-Funktion, um auf IWorkflowContext zuzugreifen:

protected override void Execute(CodeActivityContext context)
{
 IWorkflowContext workflowContext = context.GetExtension<IWorkflowContext>();
...

Wichtig

Sie sollten keine Logikabhängigkeiten basierend auf Kontextinformationen einfügen. Wenn eine benutzerdefinierte Workflowaktivität in einem Workflow verwendet wird, sollten alle relevanten Eingabeparameter innerhalb des Designers festgelegt werden. Der Ausgabewert oder das Verhalten der benutzerdefinierten Aktivität sollte immer alleine durch die Eingabeparameter bestimmt werden, sodass es keine versteckten Faktoren gibt, die das Verhalten ändern. Wenn jemand die benutzerdefinierte Aktivität im Designer verwendet, sollte das Verhalten immer vorhersagbar sein.

Das SDK für .NET verwenden

Wenn Sie Datenvorgänge mithilfe des SDK für .NET ausführen müssen, können Sie darauf mithilfe der CodeActivityContext.GetExtension<T>-Methode mit der IOrganizationServiceFactory-Schnittstelle zugreifen. Von dort aus können Sie die CreateOrganizationService(Nullable<Guid>)-Methode verwenden, um auf eine Instanz oder den Service-Proxy zuzugreifen, den Sie für die Durchführung von Datenvorgängen verwenden können. Im IWorkflowContext.InitiatingUserId kann verwendet werden, um den zu verwendenden Benutzerkontext zu bestimmen, wenn Sie möchten, dass der Vorgang im selben Kontext wie der aufrufende Prozess ausgeführt wird. Verwenden Sie den folgenden Code in Ihrer Execute-Funktion, um Zugriff auf den Organisationsdienst zu erhalten:

protected override void Execute(CodeActivityContext context)
{
 IWorkflowContext workflowContext = context.GetExtension<IWorkflowContext>();
 IOrganizationServiceFactory serviceFactory = context.GetExtension<IOrganizationServiceFactory>();

 // Use the context service to create an instance of IOrganizationService.             
 IOrganizationService service = serviceFactory.CreateOrganizationService(workflowContext.InitiatingUserId);
...

Registrieren Ihrer Assembly

Sie werden das Plug-In-Registrierungstool (PRT) verwenden, um Assemblys zu registrieren, die angepasste Workflow-Aktivitäten enthalten. Dies ist dasselbe Tool, das Sie verwenden, um Plug-Ins zu registrieren. Sowohl bei Plug-Ins als auch bei benutzerdefinierten Workflowaktivitäten müssen Sie die Assembly registrieren, die sie in die Umgebung hochladen wird. Sie registrieren jedoch keine Schritte für benutzerdefinierte Workflowaktivitäten.

Bei benutzerdefinierten Workflow-Aktivitäten müssen Sie die folgenden Eigenschaften angeben, um zu steuern, was im Workflow-Prozessdesigner angezeigt wird.

Feld Beschreibung
Description Dieses Tool ist in der Benutzeroberfläche des Prozess-Designers nicht sichtbar, kann aber nützlich sein, wenn Sie Dokumentation aus Daten aus der Tabelle PluginType generieren, in der diese Informationen gespeichert sind.
FriendlyName Anzeigename des Benutzers für das Plug-In.
Name Der Name des dargestellten Menüs.
WorkflowActivityGroupName Der Name des Untermenüs, das dem Hauptmenü im Dataverse-Prozessdesigner hinzugefügt wurde.

Beschreibende Eigenschaften festlegen.

Hinweis

Diese Werte werden in der nicht verwalteten Lösung nicht angezeigt, wenn Sie Ihre Workflowaktivität testen. Wenn Sie allerdings eine verwaltete Lösung exportieren, die diese Workflowaktivität enthält, werden diese Werte im Prozessdesigner angezeigt.

Workflowaktivitäten debuggen

Mit angepassten Workflow-Aktivitäten, die auf Dataverse bereitgestellt werden, können Sie Profile erfassen, um sie für das lokale Debugging wiederzugeben und den Tracing-Dienst zu verwenden, um Informationen in eine Tabelle zu schreiben.

Das folgende Bespiel zeigt, wie mithilfe des Ablaufverfolgungsdiensts die folgende Nachricht geschrieben wird: Add your message.

protected override void Execute(CodeActivityContext context)
{
//Create the tracing service
ITracingService tracingService = context.GetExtension<ITracingService>();

//Use the tracing service
tracingService.Trace("{0} {1} {2}.", "Add", "your", "message");
...

Weitere Informationen:

Zur Lösung hinzufügen

Wenn Sie Assemblys mithilfe des Plug-In-Registrierungstools registrieren, werden sie der Standardlösung hinzugefügt, die nicht mit der Common Data Service-Standardlösung zu verwechseln ist. Da die Standardlösung alle nicht verwalteten Anpassungen enthält, die auf die Umgebung angewendet werden, bevor Sie Ihre benutzerdefinierte Workflowaktivität mithilfe einer Lösung verteilen können, müssen Sie sie einer nicht verwalteten Lösung hinzufügen. Sie könnten sie beispielsweise der Common Data Service-Standardlösung oder einer beliebigen nicht verwalteten Lösung hinzufügen, die Sie erstellt haben.

Änderungen an benutzerdefinierten Workflowaktivitäten verwalten

Sie müssen den Code für Ihre benutzerdefinierten Workflowaktivitäten verwalten. Da Codeänderungen Fehler verursachende Änderungen enthalten können, müssen Sie diese Änderung verwalten. Sie verwenden verschiedene Schritte, um Ihre benutzerdefinierten Workflowassemblys zu aktualisieren oder ein Upgrade an ihnen auszuführen.

Wenn Sie eine Assembly registrieren, die benutzerdefinierte Workflowaktivitäten enthält, wird die Version der Assembly einbezogen. Diese Informationen werden mithilfe der Reflektion von der Assembly extrahiert. Sie können die Versionsnummer mithilfe der Datei AssemblyInfo.cs in Ihrem Visual Studio-Projekt steuern.

Sie finden einen Abschnitt unten, der so aussieht:

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version 
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below:
//[assembly: AssemblyVersion("1.0.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

Diese Versionsinformationen sind wichtig, da sie es Ihnen ermöglichen, Updates auf bereitgestellte Assemblys anzuwenden oder Upgrade bei Assemblys auszuführen, wenn Sie neue Funktionen einschließen möchten.

Eine benutzerdefinierte Workflowaktivitäts-Assembly aktualisieren

Wenn Sie Änderungen vornehmen, um Bugs zu beheben oder Code umzugestalten, die zu keinen bedeutenden Änderungen bei öffentlichen Klassen oder Methodensignaturen führen, können Sie die Assembly aktualisieren, sodass alle Prozesse, die ausgeführt werden, automatisch mithilfe der neuen Version der Assembly starten.

So wird eine Assembly aktualisiert

  1. Ändern Sie nur die Buildnummer und die Revisionswerte in Ihrem AssemblyInfo.cs AssemblyVersion-Attribut. Beispielsweise eine Änderung von 1.0.0.0 zu 1.0.10.5.
  2. Verwenden Sie das Plug-in Registration Tool, um die Assembly zu aktualisieren. Weitere Informationen: Aktualisieren einer Assembly

Ein Upgrade bei einer benutzerdefinierten Workflowaktivitäts-Assembly durchführen

Wenn Sie Änderungen vornehmen, die signifikante Änderungen an öffentlichen Klassen oder Methodensignaturen umfassen, wie das Ändern der Parameter, würden Sie sämtliche aktuell ausgeführten Prozesse unterbrechen, die so definiert sind, dass sie die ursprünglichen Signaturen verwenden. In diesem Fall müssen Sie ein Upgrade an der Assembly ausführen. Dadurch wird eine neue benutzerdefinierte Workflowaktivität erstellt, die Optionen zur Verfügung stellt, die definieren, welche Version im Prozess-Designer anzuwenden ist. So kann jeder Prozess der diese Aktivität nutzt, neu konfiguriert werden, um sich an die Änderungen anzupassen, die in der neuen Assembly enthalten sind. Nachdem alle Prozesse, die die ursprüngliche Assembly verwenden, aktualisiert sind, um die aktualisierte Assembly zu verwenden, können Sie die Registrierung der älteren Assembly aufheben.

So wird ein Upgrade an einer Assembly ausgeführt

  1. Stellen Sie sicher, dass die neue Assembly denselben/dieselbe Name, PublicKeyToken und Culture, wie die vorhandene Assembly hat.

  2. Ändern Sie die Werte Hauptversion und/oder Nebenversion in Ihrem AssemblyInfo.cs AssemblyVersion-Attribut. Beispielsweise eine Änderung von 1.0.0.0 zu 2.0.0.0.

  3. Verwenden Sie das Plug-in Registration Tool, um die Assembly als neue Assembly zu registrieren. Weitere Informationen: Eine Assembly registrieren

  4. Für jeden Prozess, der die benutzerdefinierte Workflowaktivität verwendet, müssen Sie den Prozess deaktivieren und die Schritte bearbeiten, welche die benutzerdefinierte Workflowaktivität verwenden.

    Sie finden einen Version-Selektor im Prozess-Designer, mit dem Sie wählen können, welche Version der Assembly verwendet werden soll.

    Workflow-Version festlegen.

Wenn alle Prozesse so umgestellt sind, dass sie die neue Assembly verwenden, können Sie das Plug-in Registration Tool verwenden, um die Registrierung der Assembly aufzuheben, sodass sie nicht mehr verfügbar ist. Weitere Informationen: Registrierung für Komponenten aufheben

Leistungs-Anweisungen

Leistungsüberlegungen für die Workflowerweiterungen stimmen mit denen wie für gewöhnliche Plug-Ins überein. Weitere Informationen: Analysieren von Plug-In-Leistung

Im Gegensatz zu gewöhnlichen Plug-Ins haben Sie bei Workflowerweiterungen nicht die Möglichkeit, Ihren Code explizit für einen bestimmten Schritt zu registrieren. Das bedeutet, dass Sie nicht festlegen, ob der Code in Ihrer Workflowerweiterung synchron oder asynchron ausgeführt wird. Besonders muss auf Code geachtet werden, der synchron ausgeführt wird, weil er sich direkt auf die Benutzererfahrung der Anwendung auswirkt.

Da es sich um wiederverwendbare Komponenten handelt, können Workflowerweiterungen zu beliebigen Workflows oder zu benutzerdefinierten Aktionen hinzugefügt werden. Der Workflow kann als Echtzeit-Workflow konfiguriert werden, wodurch die Anwendung synchron ausgeführt wird. Angepasste Aktionen sind immer synchron, aber sie nehmen nicht an einer Datenbanktransaktion teil, es sei denn, sie haben Rollback aktivieren festgelegt.

Wichtig

Wenn Ihre Workflowerweiterung in einem synchronen Workflow oder in einer benutzerdefinierte Aktion verwendet wird, wirkt sie die Zeit für das Ausführen des Code direkt auf die Benutzererfahrung aus. Daher sollten Workflowerweiterungen nicht mehr als zwei Sekunden zum Abschließen erfordern, wenn sie synchron verwendet werden. Wenn Ihre Erweiterung mehr Zeit benötigt, sollten Sie dies dokumentieren und die Verwendung der Erweiterung in synchronen Workflows oder benutzerdefinierten Aktionen nicht empfehlen.

Sie sollten sich auch bewusst sein, dass in einem synchronen Workflow oder einer benutzerdefinierten Aktion, die an der Transaktion teilnimmt, jeder Fehler, der von Ihrer Workflow-Erweiterung verursacht wird, dazu führt, dass die gesamte Transaktion zurückgesetzt wird, was ein sehr teurer Vorgang ist, der sich auf die Leistung auswirken kann.

Sie können den Wert in der Eigenschaft IWorkflowContext.WorkflowMode Eigenschaft, um festzustellen, ob der Workflow synchron ausgeführt wird.

Echtzeit-Workflowphasen

Wenn eine Workflowerweiterung in einem Echtzeit-Workflow (synchron) verwendet wird, wird sie in den Ereignisausführungspipeline-Phasen aufgerufen, die in der folgenden Tabelle veranschaulicht werden. Weitere Informationen: Ereignisausführungspipeline

Meldung Phase
Erstellen PostOperation
Löschen PreOperation
Update PreOperation oder
PostOperation

Sie können den Wert in der Eigenschaft IWorkflowContext.StageName verwenden, um die Phase zu ermitteln.

Für den Vorgang Aktualisieren ist die Phase mithilfe der Optionen Vor oder Danach im Workflow-Designer konfigurierbar. Weitere Informationen: Echtzeitworkflows verwenden

Wenn Ihre Workflowerweiterung von Daten abhängig ist, die an den Ausführungskontext übergeben werden, steuert die Phase, in der sie ausgeführt wird, ob die Daten hier verfügbar sind: IWorkflowContextInputParameters und IWorkflowContext.OutputParameters.

Hinweis

Wir empfehlen nicht, Logikabhängigkeiten basierend auf InputParameters und OutputParameters aufzunehmen. Workflowerweiterungen sollten von den konfigurierten Ein- und Ausgabeparametern abhängen, sodass die Person, die die Workflowerweiterung verwendet, das erwartete Verhalten verstehen kann, ohne dass etwas vor ihr verborgen ist.

Entitätsbilder für Workflow-Erweiterungen

Es gibt keine Möglichkeit, Entitätsbilder für Workflow-Erweiterungen zu konfigurieren, da Sie nur die Assembly registrieren und die Workflowaktivität im Kontext des Workflows ausgeführt wird. Workflow-Erweiterungen Entity-Images sind mit den Schlüsselwerten PreBusinessEntity bzw. PostBusinessEntity für die Pre- und Post-Entity-Images verfügbar. Weitere Informationen: Entitätsbilder

Siehe auch

Bewährte Methoden und Anweisungen zu Workflowentwicklung Plug-In- und Lernprogramm: Erstellen einer Workflow-Erweiterung
Beispiel: Eine benutzerdefinierte Workflowaktivität erstellen
Beispiel: Aktualisieren des nächsten Geburtstags mithilfe einer benutzerdefinierten Workflowaktivität
Beispiel: Berechnen Sie mit einer benutzerdefinierten Workflowaktivität einen Kreditscore

Hinweis

Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)

Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).