Nutzen von Web-API-Aktionen

 

Veröffentlicht: Januar 2017

Gilt für: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Aktionen und Funktionen stellen wiederverwendbare Vorgänge dar, die Sie mithilfe derb Web-API ausführen können. Nutzen Sie eine POST-Anforderung mit den Aktionen, die in Web API Action Reference aufgeführt sind, um Vorgänge ausführen, die keine Nebenwirkungen haben. Sie können benutzerdefinierte Aktionen definieren, die für Ihre Verwendung bereitstehen.

In diesem Thema

Ungebundene Aktionen

Gebundene Aktionen

Nutzen einer benutzerdefinierten Aktion

Geben Sie Entitätsparametertyp an

Ungebundene Aktionen

Aktionen werden in d80cfb87-d4f1-4c75-bcc8-4f54d1351e26#bkmk_csdl definiert. Als Beispiel wird die folgende Definition der WinOpportunity Action in der CSDL dargestellt.

<Action Name="WinOpportunity">
  <Parameter Name="OpportunityClose" Type="mscrm.opportunityclose" Nullable="false" />
  <Parameter Name="Status" Type="Edm.Int32" Nullable="false" />
</Action>

Die WinOpportunity Aktion entspricht dem WinOpportunityRequest wenn das Organisationsservice verwendet wird. Verwenden Sie diese Aktion, um den Status einer Verkaufschance auf "Gewonnen" festzulegen und einen opportunityclose EntityType-Datensatz zur Aufzeichnung des Ereignisses zu erstellen. Diese Aktion umfasst keinen Rückgabewert. Wenn der Vorgang erfolgreich ausgeführt wird, ist er abgeschlossen.

Der OpportunityClose Parameter wird eine JSON Entität, in der Darstellung opportunityclose Entität, um den Vorgang zu erstellen. Diese Entität muss mit der Verkaufschance verbunden sein, die die opportunityid einzelbewertete Navigationseigenschaft ausstellt. In JSON wird dies mithilfe der @odata.bind-Anmerkung festgelegt, siehe Entitäten bei Erstellung zuordnen.

Der Parameter Status müssen auf den Status für opportunity gesetzt werden, wenn er geschlossen ist. Sie finden den Standardwert dafür in der opportunity EntityTypestatuscode-Eigenschaft. Die Option Gewonnen hat einen Wert von 3. Sie fragen sich möglicherweise, warum der Wert festgelegt werden muss, wenn es nur eine Statusgrund-Option gibt, die Gewonnen darstellt. Der Grund dafür ist, dass Sie möglicherweise benutzerdefinierte Statusoptionen definieren, um einen Gewinn darzustellen, beispielsweise einen großen oder kleinen Gewinn, sodass sich der Wert in dieser Situation möglicherweise von drei unterscheidet.

Das folgende Beispiel ist die HTTP-Anforderung und -Antwort zum Aufruf der WinOpportunity-Aktion für eine Verkaufschance mit einem opportunityid-Wert von b3828ac8-917a-e511-80d2-00155d2a68d2.

  • Anforderung

    POST cc_WebAPI_ServiceURI/WinOpportunity HTTP/1.1
    Accept: application/json
    Content-Type: application/json; charset=utf-8
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    
    {
     "Status": 3,
     "OpportunityClose": {
      "subject": "Won Opportunity",
      "opportunityid@odata.bind": "cc_WebAPI_ServiceURI/opportunities(b3828ac8-917a-e511-80d2-00155d2a68d2)"
     }
    }
    
  • Antwort

    HTTP/1.1 204 No Content
    OData-Version: 4.0
    

Gebundene Aktionen

Im d80cfb87-d4f1-4c75-bcc8-4f54d1351e26#bkmk_csdl, wenn ein Action-Element eine gebundene Aktion darstellt, besitzt es ein IsBound-Attribut mit dem Wert true. Das erste definierte Parameter-Element innerhalb der Aktion repräsentiert die Entität, an die die Operation geknüpft ist. Wenn das Attribut Type des Parameters eine Sammlung ist, wird der Vorgang an eine Entitätssammlung gebunden. Als Beispiel wird die folgende Definition der AddToQueue Action in der CSDL dargestellt:

 <ComplexType Name="AddToQueueResponse">
 <Property Name="QueueItemId" Type="Edm.Guid" Nullable="false" />
 </ComplexType>
 <Action Name="AddToQueue" IsBound="true">
  <Parameter Name="entity" Type="mscrm.queue" Nullable="false" />
  <Parameter Name="Target" Type="mscrm.crmbaseentity" Nullable="false" />
  <Parameter Name="SourceQueue" Type="mscrm.queue" />
  <Parameter Name="QueueItemProperties" Type="mscrm.queueitem" />
  <ReturnType Type="mscrm.AddToQueueResponse" Nullable="false" />
</Action>

Diese Bindungsaktion ähnelt AddToQueueRequest, was vom Organisationsservice verwendet wird. In der Web-API ist diese Aktion an queue EntityType gebunden, der die AddToQueueRequest.DestinationQueueId-Eigenschaft darstellt. Diese Aktion akzeptiert mehrere zusätzliche Parameter und gibt dann eine AddToQueueResponse ComplexType entsprechend der AddToQueueResponse vom Organisationsservice zurück. Wenn eine Aktion einen komplexen Datentyp zurückgibt, so wird dessen Definition direkt über der Definition der Aktion in CSDL angezeigt.

Eine Aktion muss mithilfe einer URI aufgerufen werden, um den ersten Parameterwert festzulegen. Sie können es nicht als Parameterwert mit Namen festlegen.

Beim Aufruf einer gebundenen Funktion müssen Sie den vollständigen Namen der Funktion einschließlich den Microsoft.Dynamics.CRM-Namespace angeben. Wenn Sie nicht den vollständigen Namen einschließen, wird die folgende Fehlermeldung angezeigt: Status Code:400 Request message has unresolved parameters.

Im folgenden Beispiel wird das Hinzufügen eines Schreibens zu einer Warteschlange mittels AddToQueue Action gezeigt. Da der Typ des Target-Parametertyps nicht spezifisch ist,(mscrm.crmbaseentity), müssen Sie explizit den typ des Objekts deklarierten, indem Sie den @odata.type-Eigenschaftswert des vollständigen Namens der Entität verwenden, einschließlich des Microsoft.Dynamics.CRM-Namespace. In diesem Fall: Microsoft.Dynamics.CRM.letter.Weitere Informationen:Geben Sie Entitätsparametertyp an

  • Anforderung

    POST cc_WebAPI_ServiceURI/queues(56ae8258-4878-e511-80d4-00155d2a68d1)/Microsoft.Dynamics.CRM.AddToQueue HTTP/1.1
    Accept: application/json
    Content-Type: application/json; charset=utf-8
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    
    {
     "Target": {
      "activityid": "59ae8258-4878-e511-80d4-00155d2a68d1",
      "@odata.type": "Microsoft.Dynamics.CRM.letter"
     }
    }
    
  • Antwort

    HTTP/1.1 200 OK
    Content-Type: application/json; odata.metadata=minimal
    OData-Version: 4.0
    
    {
     "@odata.context": "cc_WebAPI_ServiceURI/$metadata#Microsoft.Dynamics.CRM.AddToQueueResponse",
     "QueueItemId": "5aae8258-4878-e511-80d4-00155d2a68d1"
    }
    

Nutzen einer benutzerdefinierten Aktion

Wenn Sie benutzerdefinierte Aktionen für Ihre Organisation oder Lösung definieren, sind diese auch im d80cfb87-d4f1-4c75-bcc8-4f54d1351e26#bkmk_csdl enthalten. Informationen zum Erstellen von Aktionen mithilfe der Anpassungstools in der Anwendung finden Sie im TechNet-Thema Aktionen. Informationen zum Erstellen und Verwenden eigener benutzerdefinierter Aktionen finden Sie unter Erstellen Ihrer eigenen Aktionen.

Unabhängig davon, ob die Vorgänge in der benutzerdefinierten Aktion Nebenwirkungen haben, können sie möglicherweise Daten ändern und gelten daher eher als Aktionen und nicht als Funktionen. Es gibt keine Möglichkeit, eine benutzerdefinierte Funktion zu erstellen.

Benutzerdefiniertes Aktionsbeispiel: Hinzufügen einer Notiz zu einem Kontakt

Nehmen wir an, dass Sie eine benutzerdefinierte Aktion erstellen möchten, mit der eine neue Notiz zu einem bestimmten Kontakt hinzugefügt wird. Sie können eine benutzerdefinierte Aktionsgrenze zur Kontaktentität mit den folgenden Eigenschaften erstellen.

UI-Beschriftung

Wert

Prozessname

AddNoteToContact

Eindeutiger Name

new_AddNoteToContact

Entität

Kontakt

Kateg.

Aktion

Argumente verarbeiten

Name

Typ

Erforderlich

Richtung

Notizentitel

Zeichenfolge

Erforderlich

Eingabe

Notizentext

Zeichenfolge

Erforderlich

Eingabe

Notizenreferenz

EntityReference

Erforderlich

Ausgabe

Schritte

Name

Schritt-Typ

Beschreibung

Erstellen der Notiz

Datensatz erstellen

Titel = {NoteTitle(Argumente)}

Notizen-Text = (Anfragen {NoteText})

Bezug = {Contact{Contact}}

Rückgabe eines Verweises zur Notiz

Wert zuweisen

NoteReference-Wert = {Erstellen der Notiz (Hinweis)}

Nachdem Sie die angepasste Aktion veröffentlicht und aktiviert haben, finden Sie, wenn Sie das CSDL herunterladen, diese neue Aktion definiert.

<Action Name="new_AddNoteToContact" IsBound="true">
  <Parameter Name="entity" Type="mscrm.contact" Nullable="false" />
  <Parameter Name="NoteTitle" Type="Edm.String" Nullable="false" Unicode="false" />
  <Parameter Name="NoteText" Type="Edm.String" Nullable="false" Unicode="false" />
  <ReturnType Type="mscrm.annotation" Nullable="false" />
</Action>

Die folgende HTTP-Anforderung und -Antwort zeigt, wie die benutzerdefinierte Aktion und Antwort, die bei Erfolg zurückgegeben wird, aufgerufen werden.

  • Anforderung

    POST cc_WebAPI_ServiceURI/contacts(94d8c461-a27a-e511-80d2-00155d2a68d2)/Microsoft.Dynamics.CRM.new_AddNoteToContact HTTP/1.1
    Accept: application/json
    Content-Type: application/json; charset=utf-8
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    
    {
     "NoteTitle": "New Note Title",
     "NoteText": "This is the text of the note"
    }
    
  • Antwort

    HTTP/1.1 200 OK
    Content-Type: application/json; odata.metadata=minimal
    OData-Version: 4.0
    
    {
     "@odata.context": "cc_WebAPI_ServiceURI/$metadata#annotations/$entity",
     "annotationid": "9ad8c461-a27a-e511-80d2-00155d2a68d2"
    }
    

Geben Sie Entitätsparametertyp an

Wenn bei einer Aktion eine Entität erforderlich ist, weil ein Parameter und die Verwendungsart der Entität mehrdeutig ist, müssen Sie die @odata.type-Eigenschaft verwenden, um den Typ der Entität anzugeben. Der Wert dieser Eigenschaft ist der vollqualifizierte Name der Entität, der dem Muster folgt:
Microsoft.Dynamics.CRM.+<Logischer Name der Entität>.

Wie im Abschnitt Gebundene Aktionen angezeigt, ist der Target-Parameter für AddToQueue Action eine Aktivität. Aber da alle Aktivitäten von activitypointer EntityType erben, müssen Sie folgende Eigenschaft in der Entität JSON aufnehmen, um zu definieren, dass der Typ der Entität ein Buchstabe ist: "@odata.type": "Microsoft.Dynamics.CRM.letter".

Zwei weitere Beispiele sind AddMembersTeam Action und RemoveMembersTeam Action weil der Members Parameter eine Sammlung von systemuser EntityType die den ownerid Primärschlüssel von principal EntityType erben. Wenn Sie die folgende JSON ausführen, um einem einzelnen Benutzer in der Sammlung anzuzeigen, ist es klar, dass die Entität ein Systemnutzer und nicht ein team EntityType ist, der auch von Haupt-Entitätstyp erbt.

    {
     "Members": [{
      "@odata.type": "Microsoft.Dynamics.CRM.systemuser",
      "ownerid": "5dbf5efc-4507-e611-80de-5065f38a7b01"
     }] 
    }

Wenn Sie nicht den Typ der Entität in dieser Situation angeben, erhalten Sie möglicherweise folgenden Fehler: "EdmEntityObject passed should have the key property value set.".

Siehe auch

Internet-API-Funktionen- und Aktionen-Beispiel (C#)
Beispiele von Web API-Funktionen und Aktionen (clientseitiges JavaScript)
Vorgänge mithilfe der Web-API ausführen
HTTP-Anforderungen verfassen und Fehler beheben
Datenabfrage mit Web-API
Erstellen einer Entität mithilfe des Web-API
Abrufen einer Entität mithilfe des Web-API
Entitäten aktualisieren und löschen mithilfe der Web API
Entitäten zuordnen und Zuordnungen aufheben mithilfe der Web API
Nutzen von Web-API-Funktionen
Ausführen von Batchbetrieben mithilfe der Web-API
Annehmen eines anderen Benutzerkontos mit Web API
Bedingte Vorgänge mithilfe der Web-API ausführen

Microsoft Dynamics 365

© 2017 Microsoft. Alle Rechte vorbehalten. Copyright