Freigeben über


Erstellen Ihrer eigenen Aktionen

 

Veröffentlicht: November 2016

Gilt für: Dynamics CRM 2015

Sie können die Funktionen von Microsoft Dynamics 365 erweitern, indem Sie benutzerdefinierte Meldungen erstellen, die als Aktionen bekannt sind. Diese Aktionen haben zugeordnete Anforderungs-/Antwortklassen. Momentan sind Aktionen für Geschäftsanwendungen und Erweiterungen nur über Organisationswebdienstaufrufe verfügbar. Aktionen werden in der Regel verwendet, um neue domänenspezifische Funktionen zum Organisationswebdienst hinzuzufügen oder um mehrere Webdienstmeldungsanforderungen einer Organisation zu einer einzelnen Anforderung zu kombinieren. Beispielsweise können Sie in einem Supportcallcenter die Meldungen Create, Assign und Setstate zu einer einzigen neuen Escalate-Meldung kombinieren.

Die Geschäftslogik einer Aktion wird mithilfe eines Workflows implementiert. Wenn Sie eine Aktion erstellen, wird der zugeordnete Echtzeitworkflow automatisch registriert, um in Phase 30 (Kernvorgang) der Ausführungspipeline ausgeführt zu werden. Weitere Informationen zu Echtzeitworkflows finden Sie unter Workflow-Kategorien.

Während Aktionen in Microsoft Dynamics CRM 2015 und Microsoft Dynamics CRM Online 2015-Update unterstützt werden, wird das Erstellen einer Aktion (mit XAML) nur von Microsoft Dynamics CRM 2015 lokal und IFD unterstützt. Onlinekunden müssen Aktionen interaktiv in der Webanwendung erstellen.

In diesem Thema

Informationen zu Aktionsdefinitionen

Erforderliche Berechtigungen

Erstellen einer Aktion mithilfe von Code

Packen einer Aktion zur Verteilung

Generieren von Typen mit früher Bindung für eine Aktion

Ausführen einer Aktion mithilfe des Webdiensts

Ausführen einer Aktion mithilfe eines Prozesses

Achten auf lang laufende Aktionen

Informationen zu Aktionsdefinitionen

Eine Aktion wird mithilfe eines Workflow-Entitätsdatensatzes definiert, der ähnlich wie ein Echtzeitworkflow ist. Einige wichtige Punkte dazu, was eine Aktion ist und wie sie funktioniert, sind in der folgenden Liste enthalten:

  • Kann einer einzelnen Entität oder global (keiner bestimmten Entität) zugeordnet werden.

  • Wird in der Kernvorgangsphase 30 der Ereignisausführungspipeline ausgeführt.

  • Unterstützt den Aufruf von Plug-Ins, die in den vorgelagerten und nachgelagerten Vorgangsphasen der Ereignisausführungspipeline registriert werden.

  • Kann die Plug-Ins in den vorgelagerten und nachgelagerten Vorgangsphasen nur registrieren, wenn der Aktionsstatus aktiviert ist.

  • Verfügbar durch dieorganization.svc und organization.svc-Internet-Endpunkte, aber nicht den organizationdata.svc (OData)-Endpunkt.

  • Kann mit einer JavaScript-Webressource ausgeführt werden.Weitere Informationen:Ausführen einer Aktion mithilfe einer JavaScript-Webressource

  • Wird immer im Sicherheitskontext des aufrufenden Benutzers ausgeführt.

  • Datensatz kann nicht gelöscht werden, während Plug-In-Schritte auf der Aktion registriert sind.

  • Kann optional, durch eine Konfigurationseinstellung, an der aktuellen Datenbanktransaktion teilnehmen.

  • Unterstützt einen Umfang nicht, in dem die Ausführung auf einen Benutzer, eine Unternehmenseinheit oder eine Organisation begrenzt ist. Aktionen werden immer im Organisationsumfang ausgeführt.

  • Unterstützt Ein- und Ausgabeargumente.

  • Unterstützt die Überwachung von Datenänderungen.

  • Wird nicht mit Offline-Clients unterstützt.

  • Kann mit einem Webdienstmethodenaufruf aufgerufen werden.

Hinweis

  • Kann direkt in einem Workflow aufgerufen werden.

Für Microsoft Dynamics CRM Online-Organisationen steht diese Funktion nur zur Verfügung, wenn die Organisation auf Dynamics CRM Online 2015 Update 1 aktualisiert hat. Sind Sie an diesem Feature interessiert? CRM-Administrator oder Supportmitarbeiter suchen. Diese Funktion ist nicht für Dynamics CRM (lokal) verfügbar.

Erforderliche Berechtigungen

Ein Sicherheitsrecht mit der Bezeichnung Echtzeitprozesse aktivieren (prvActivateSynchronousWorkflow) ist erforderlich, um einen Echtzeitworkflow der Aktion zu aktivieren, damit sie ausgeführt werden kann. Dies wird zusätzlich zu beliebigen Rechten benötigt, um einen Workflow erstellen. Weitere Informationen zu den Berechtigungen finden Sie in der Rechte-UI-Zuordnung in Registerkarte Anpassung.

Erstellen einer Aktion mithilfe von Code

In der Regel wird eine Aktion von Anpasser mithilfe des interaktiven Workflowdesigners der Webanwendung implementiert. Entwickler können jedoch mithilfe von SDK-Aufrufen Aktionen implementieren und bei Bedarf auf einem lokalen oder IFD-Server bereitstellen.

Die Workflowentitätsattribute, die für eine Aktion verwendet werden, sind in der folgenden Tabelle beschrieben. Beispielcode für einen Echtzeitworkflow finden Sie im Thema Erstellen eines Echtzeitworkflows im Code.

Workflowattribut

Beschreibung

Category

Festgelegt auf WorkflowCategory.CustomOperation.

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.

Mode

Nicht verwendet.

IsTransacted

Festgelegt auf true, wenn die Aktion an der Datenbanktransaktion teilnehmen soll; andernfalls false. Der Standardwert ist true.

UniqueName

Ein eindeutiger Name für die Aktion. Der Name besteht aus einem Herausgeberpräfix + "_" + dem eindeutigen Namen.

Xaml

Legen Sie den XAML-Code fest, der den Echtzeitworkflow der Aktion definiert. Es gibt keine Möglichkeit, um auf einen anderen Echtzeitworkflow zu verweisen.

Hinzufügen von Ein- und Ausgabeargumenten

Aktionen unterstützen Ein- und Ausgabeargumente, die dem Workflow mithilfe des Typs DynamicActivityProperty hinzugefügt werden können. Wenn Sie diese Argumente zum Workflow einer Aktion hinzufügen, werden sie zu Eigenschaften in der Nachrichtenanforderung und den Antwortklassen, die dieser Aktion zugeordnet sind. Beispielsweise zeigt das folgende Beispiel C#- und XAML-Code für zwei Eingabeargumente und ein Ausgabeargument.

DynamicActivityProperty inputProperty1 = new DynamicActivityProperty     { Name = "Subject", Type = typeof(InArgument<string>) };
DynamicActivityProperty inputProperty2 = new DynamicActivityProperty     { Name = "EntityCollection", Type = typeof(InArgument<EntityCollection>) };
DynamicActivityProperty outputProperty1 = new DynamicActivityProperty     { Name = "Output", Type = typeof(OutArgument<string>) };

inputProperty1.Attributes.Add(new ArgumentRequiredAttribute(true));
inputProperty1.Attributes.Add(new ArgumentDescriptionAttribute("The subject"));
inputProperty1.Attributes.Add(new ArgumentDirectionAttribute(Microsoft.Xrm.Sdk.Workflow.ArgumentDirection.Input));

inputProperty2.Attributes.Add(new ArgumentRequiredAttribute(false));
inputProperty2.Attributes.Add(new ArgumentDescriptionAttribute("The entity collection"));
inputProperty2.Attributes.Add(new ArgumentDirectionAttribute(Microsoft.Xrm.Sdk.Workflow.ArgumentDirection.Input));

outputProperty1.Attributes.Add(new ArgumentRequiredAttribute(false));
outputProperty1.Attributes.Add(new ArgumentDescriptionAttribute("The output"));
outputProperty1.Attributes.Add(new ArgumentDirectionAttribute(Microsoft.Xrm.Sdk.Workflow.ArgumentDirection.Output));
<x:Property Name="Subject"
            Type="InArgument(x:String)">
 <x:Property.Attributes>
  <mxsw:ArgumentRequiredAttribute Value="True" />
  <mxsw:ArgumentTargetAttribute Value="False" />
  <mxsw:ArgumentDescriptionAttribute Value="The subject " />
  <mxsw:ArgumentDirectionAttribute Value="Input" />
  <mxsw:ArgumentEntityAttribute Value="" />
 </x:Property.Attributes>
</x:Property>
<x:Property Name="EntityCollection"
            Type="InArgument(mxs:EntityCollection)">
 <x:Property.Attributes>
  <mxsw:ArgumentRequiredAttribute Value="False" />
  <mxsw:ArgumentTargetAttribute Value="False" />
  <mxsw:ArgumentDescriptionAttribute Value="The entity collection" />
  <mxsw:ArgumentDirectionAttribute Value="Input" />
  <mxsw:ArgumentEntityAttribute Value="" />
 </x:Property.Attributes>
</x:Property>
<x:Property Name="Output"
            Type="OutArgument(x:String)">
 <x:Property.Attributes>
  <mxsw:ArgumentRequiredAttribute Value="False" />
  <mxsw:ArgumentTargetAttribute Value="False" />
  <mxsw:ArgumentDescriptionAttribute Value="The output" />
  <mxsw:ArgumentDirectionAttribute Value="Output" />
  <mxsw:ArgumentEntityAttribute Value="" />
 </x:Property.Attributes>
</x:Property>

Die Namen, die für die Eigenschaften verwendet werden, sollten konsistent mit den Argumentnamen sein, da die Codegenerierung diese Namen als Anforderungs- oder Antworteigenschaften definiert.

Unterstützte Argumenttypen für die Eingabe- und Ausgabeargumente werden in der folgenden Tabelle gezeigt.

.NET-Typ

Argumenttyp

System.Int32

Integer

System.String

String

EntityReference

EntityReference

Entity

Entity

EntityCollection

EntityCollection

System.DateTime

DateTime

System.Double

Float

System.Decimal

Decimal

Money

Money

System.Boolean

Boolean

OptionSetValue

Picklist

Unterstützte Argumentattribute werden in der folgenden Tabelle aufgelistet.

Argumentattribut

Beschreibung

ArgumentRequiredAttribute

Gibt an, ob das Argument erforderlich ist.

ArgumentDirectionAttribute

Gibt an, ob die Richtung des Arguments eine Ein- oder Ausgabe ist.

ArgumentDescriptionAttribute

Gibt eine Beschreibung für das Argument an.

ArgumentEntityAttribute

Wird verwendet, wenn Sie eine Entität übergeben möchten.

ArgumentTargetAttribute

Dieses Attribut wird automatisch generiert oder hinzugefügt. Es verweist auf die primäre Entität, für die der Workflow ausgeführt wird. Dieses Attribut ist optional für globale Aktionen.

Packen einer Aktion zur Verteilung

Um die Aktion zu verteilen, sodass sie in eine Microsoft Dynamics 365-Organisation importiert werden kann, fügen Sie die Aktion zu einer Dynamics 365-Lösung hinzu. Dies funktioniert mit der Webanwendung 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.

Generieren von Typen mit früher Bindung für eine Aktion

Mithilfe des CrmSvcUtil-Tools im SDK-Paket können Sie Anforderungs- und Antwortklassen für Ihre Aktion generieren, um sie in Ihren Anwendungscode aufzunehmen. Bevor Sie jedoch diese Klassen erstellen, müssen Sie die Aktion aktivieren.

Laden Sie das Microsoft Dynamics CRM SDK-Paket herunter.

Im folgenden Beispiel wird das Format für die Ausführung von Tools in der Befehlszeile für eine lokale Installation von Dynamics 365 gezeigt. Sie stellen die Parameterwerte für die Installation bereit.

CrmSvcUtil.exe /url:http://<serverName>/<organizationName>/XRMServices/2011/Organization.svc /out:<outputFilename>.cs /username:<username> /password:<password> /domain:<domainName> /namespace:<outputNamespace> /serviceContextName:<serviceContextName> /generateActions

Im folgenden Beispiel wird das Format für die Ausführung von Tools in der Befehlszeile mit Microsoft Dynamics CRM Online gezeigt. Sie stellen die geeigneten Parameterwerte für Ihr Konto und Ihren Server bereit.

CrmSvcUtil.exe /url:https://<organizationUrlName>.api.crm.dynamics.com/XRMServices/2011/Organization.svc /out:<outputFilename>.cs /username:<username> /password:<password> /namespace:<outputNamespace> /serviceContextName:<serviceContextName> /generateActions

Beachten Sie die Verwendung des /generateActions-Parameters.Weitere Informationen:Entitätsklassen mit früher Bindung mit dem Codegenerierungstool erstellen (CrmSvcUtil.exe).

Sie können Typen mit früher oder später Bindung mit den erstellen Anforderungs- und Antwortklassen für die Aktion verwenden.

Ausführen einer Aktion mithilfe des Webdiensts

Damit Sie eine Aktion unter Verwendung des Organisationswebdiensts mithilfe von verwaltetem Code ausführen können, führen Sie die folgenden Schritte aus.

  1. Nehmen Sie die früh gebundene Typendatei auf, die Sie mithilfe des CrmSvcUtil-Tools im Projekt Ihrer Anwendung erstellt haben.

  2. Instanziieren Sie in Ihrem Anwendungscode die Aktionsanforderung, und füllen Sie die erforderlichen Eigenschaften aus.

  3. Rufen Sie Execute auf, und übergeben Sie die Anforderung als Argument.

Bevor Sie den Anwendungscode ausführen, stellen Sie sicher, dass die Aktion aktiviert ist. Andernfalls erhalten Sie einen Laufzeitfehler.

Ausführen einer Aktion mithilfe einer JavaScript-Webressource

Die Sdk.Soap.js-Beispielbibliothek zeigt, wie Meldungen mit den JavaScript-Webressourcen und dem SOAP-Endpunkt der Modern App (organization.svc/web) verwendet werden können. Verwenden Sie das Begleitbeispiel Sdk.Soap.js Action Message Generator, um JavaScript-Bibliotheken zu generieren, die mit Sdk.Soap.js verwendet werden können, genau wie Sie die Bibliotheken für Systemmeldungen verwenden können, die in diesem Beispiel bereitgestellt werden. Die dateien, die mit dem Sdk.Soap.js Action Message Generator erstelt werden, sind separate JavaScript-Bibliotheken für jede Aktion. Jede Bibliothek enthält eine Anforderungs- und Antwortklasse, die den Klassen entspricht, die von CrmSvcUtil generiert wurden.

Ausführen einer Aktion mithilfe eines Prozesses

Sie können eine Aktion aus Workflows, Dialogen oder anderen Prozessaktionen ausführen. Aktivierte benutzerdefinierte Aktionen sind für Prozesse verfügbar, indem Sie das Element Aktion durchführen in der Dropdownliste Schritt hinzufügen des Webanwendungsprozessformulars auswählen. Nachdem der Schritt dem Prozess hinzugefügt wurde, können Sie die neue benutzerdefinierte Aktion (oder eine andere Aktion) aus der Liste Aktion auswählen, die in dem Schritt bereitgestellt wird. Wählen Sie Eigenschaften festlegen in dem Schritt, um Eingabeparameter, die für die benutzerdefinierte Aktionen erforderlich sind, anzugeben.

Hinweis

Wenn eine benutzerdefinierte Aktion nicht unterstützte Parametertypen aufweist, z. B. "Auswahlliste", "Entität" oder "Entitätssammlung", wird die benutzerdefinierte Aktion nicht in der Liste Aktion aufgeführt.

Die Möglichkeit, eine Aktion aus einem Prozess durchzuführen, wurde mit Microsoft Dynamics CRM Online 2015-Update 1 eingeführt.

Die vorhandenen Depth-Plattformprüfungen stellen sicher, dass keine Endlosschleife auftritt. Weitere Informationen zu diesen Tiefenlimits finden Sie unter MaxDepth.

Achten auf lang laufende Aktionen

Wenn einer der Schritte im Echtzeitworkflow der Aktion eine benutzerdefinierte Workflowaktivität ist, wird diese benutzerdefinierte Workflowaktivität innerhalb der isolierten Laufzeitumgebung des Sandkastens ausgeführt und unterliegt dem zweiminütigen Timeoutlimit, ähnlich wie Plug-Ins in Sandkästen verwaltet werden. Es gibt allerdings keine Einschränkungen für die Gesamtzeit, die die Aktion selbst benötigen kann. Wenn eine Aktion an einer Transaktion teilnimmt, in der Rollback aktiviert ist, gelten außerdem SQL Server-Timeouts.

Tipp

Eine bewährte Vorgehensweise ist, dass lang laufende Vorgänge außerhalb von Microsoft Dynamics 365 mithilfe von asynchronen oder im Hintergrund laufenden .NET-Prozessen ausgeführt werden.

Siehe auch

Erstellen von Echtzeitworkflows
Verwenden von Dialogen für Kundeninteraktionen
Ereignisausführungspipeline
Erstellen von Workflows zum Automatisieren von Geschäftsprozessen
TechNet: Anpassen des Systems

© 2017 Microsoft. Alle Rechte vorbehalten. Copyright