Nutzen von Web-API-Funktionen

Funktionen sind wiederverwendbare Vorgänge, die Sie über die Web-API ausführen können. Es gibt zwei Arten von Funktionen im Web API:

  • Funktionen: Verwenden Sie eine GET-Abfrage mit den unter Web API Function Reference aufgeführten Funktionen, um Vorgänge auszuführen, die keine Nebeneffekte haben. Diese Funktionen rufen im Allgemeinen Daten ab, entweder eine Sammlung oder einen komplexen Typ. Für jede Funktion gibt es eine entsprechende Nachricht im Organisationsdienst.

  • Abfragefunktionen: Verwenden Sie die in Web API Query Function Reference aufgeführten Funktionen, um Eigenschaften und Werte in der Zusammensetzung einer Abfrage auszuwerten. Jede Abfragefunktion hat einen entsprechenden ConditionOperator-Wert.

Übergeben von Parametern an eine Funktion

Für Funktionen, die Parameter benötigen, wird empfohlen, die Werte mithilfe von Parametern zu übergeben.

Wenn Sie zum Beispiel die Funktion GetTimeZoneCodeByLocalizedName verwenden, müssen die Parameterwerte LocalizedStandardName und LocaleId eingeschlossen werden. Sie können die folgende Inline-Syntax verwenden:

GET [Organization URI]/api/data/v9.0/GetTimeZoneCodeByLocalizedName(LocalizedStandardName='Pacific Standard Time',LocaleId=1033)  

Es gibt jedoch ein Problem bei der Verwendung von DateTimeOffset-Werten mit der Inline-Syntax, wie im folgenden Artikel erläutert: DateTimeOffset als Abfrageparameter #204.

Umgehen Sie das DateTimeOffset-Problem, indem Sie die Werte als Parameter übergeben, wie im folgenden Codebeispiel gezeigt:

GET [Organization URI]/api/data/v9.0/GetTimeZoneCodeByLocalizedName(LocalizedStandardName=@p1,LocaleId=@p2)?@p1='Pacific Standard Time'&@p2=1033  

Wenn ein Parameterwert mehrfach verwendet wird, lassen Parameter-Aliase die Wiederverwendung zu, um die Länge der URL zu reduzieren.

Referenz auf einen Datensatz an eine Funktion übergeben

Bestimmte Funktionen erfordern die Übergabe eines Verweises auf einen vorhandenen Datensatz. Beispielsweise haben die folgenden Funktionen einen Parameter, der einen crmbaseentity-Entitätstyp erfordert:

Funktionen    
CalculateRollupField IncrementKnowledgeArticleViewCount InitializeFrom
IsValidStateTransition RetrieveDuplicates RetrieveLocLabels
RetrievePrincipalAccess RetrieveRecordWall ValidateRecurrenceRule

Wenn Sie einen Verweis an einen vorhandenen Datensatz übergeben, verwenden Sie die @odata.id-Anmerkung zum URI für den Datensatz. Wenn Sie zum Beispiel die Funktion RetrievePrincipalAccess verwenden, können Sie die folgende Uri verwenden, um den Zugriff auf einen bestimmten Datensatz anzugeben:

GET [Organization URI]/api/data/v9.0/systemusers(af9b3cf6-f654-4cd9-97a6-cf9526662797)/Microsoft.Dynamics.CRM.RetrievePrincipalAccess(Target=@tid)?@tid={'@odata.id':'contacts(9f3162f6-804a-e611-80d1-00155d4333fa)'}

Die Anmerkung @odata.id kann entweder die vollständige URI oder eine relative URI sein.

Gebundene und ungebundene Funktionen

Nur Funktionen, die in Web API Function Reference gefunden oder als Custom-API erstellt wurden, dürfen gebunden werden. Abfragefunktionen sind nie gebunden.

Gebundene Funktionen

Wenn im CSDL $metadata-Dokument ein Function-Element eine gebundene Funktion darstellt, enthält es ein IsBound-Attribut mit dem Wert true. Das erste Parameter-Element innerhalb der Funktion repräsentiert die Entität, an die die Funktion geknüpft ist. Wenn das Attribut Type des Parameters eine Sammlung ist, wird die Funktion an eine Entitätssammlung gebunden.

Das folgende Beispiel ist die Definition der Funktion RetrieveUserPrivileges und des komplexen Typs RetrieveUserPrivilegesResponse in der CSDL.

<ComplexType Name="RetrieveUserPrivilegesResponse">
  <Property Name="RolePrivileges" Type="Collection(mscrm.RolePrivilege)" />
</ComplexType
<Function Name="RetrieveUserPrivileges" IsBound="true">
    <Parameter Name="entity" Type="mscrm.systemuser" Nullable="false" />
    <ReturnType Type="mscrm.RetrieveUserPrivilegesResponse" Nullable="false" />
</Function>

Diese gebundene Funktion entspricht der Klasse RetrieveUserPrivilegesRequest, die vom SDK für .NET verwendet wird. In der Web-API ist diese Funktion an den Typ systemuser gebunden, der die Eigenschaft RetrieveUserPrivilegesRequest.UserId darstellt. Anstatt eine Instanz der Klasse RetrieveUserPrivilegesResponse zurückzugeben, gibt diese Funktion einen komplexen Typ RetrieveUserPrivilegesResponse zurück. Wenn eine Funktion einen komplexen Typ zurückgibt, erscheint ihre Definition normalerweise direkt über der Definition der Funktion in der CSDL.

Um eine gebundene Funktion aufzurufen, hängen Sie den vollständigen Namen der Funktion an die URL an und fügen alle benannten Parameter in Klammern nach dem Funktionsnamen ein. Der vollständige Funktionsname enthält den Namespace Microsoft.Dynamics.CRM. Für nicht gebundene Funktionen das nicht der vollständige Name verwendet werden.

Wichtig

Rufen Sie eine gebundene Funktion über einen URI auf, um den ersten Parameterwert zu setzen. Sie können es nicht als Parameterwert mit Namen festlegen.

Das folgende Beispiel verwendet die Funktion RetrieveUserPrivileges, die an die Tabelle systemuser gebunden ist.

Anforderung:

GET [Organization URI]/api/data/v9.2/systemusers(da455fec-68b7-ec11-9840-000d3a13d713)/Microsoft.Dynamics.CRM.RetrieveUserPrivileges HTTP/1.1
Accept: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0  

Antwort:

HTTP/1.1 200 OK  
Content-Type: application/json; odata.metadata=minimal  
OData-Version: 4.0  

{
  "@odata.context": "[Organization URI]/api/data/v8.2/$metadata#Microsoft.Dynamics.CRM.RetrieveUserPrivilegesResponse",
  "RolePrivileges": [
    {
      "Depth": "Global",
      "PrivilegeId": "20db4bf7-60c4-4eb9-ab95-0949766fef1a",
      "BusinessUnitId": "dfe37870-c8ac-ec11-9841-0022482088be",
      "PrivilegeName": "prvCreateflowsession"
    },
    {
      "Depth": "Global",
      "PrivilegeId": "d8db8e4c-5b76-48eb-b5ec-171b8c661917",
      "BusinessUnitId": "dfe37870-c8ac-ec11-9841-0022482088be",
      "PrivilegeName": "prvWriteworkflowbinary"
    },
    ... <full list of privileges removed for brevity>
    {
      "Depth": "Global",
      "PrivilegeId": "b234db9f-27a2-4d12-8b51-fc34fbef9d87",
      "BusinessUnitId": "dfe37870-c8ac-ec11-9841-0022482088be",
      "PrivilegeName": "prvWriteflowsession"
    }
  ]
}
 

Ungebundene Funktionen

Die Funktion WhoAmI ist nicht an eine Entität gebunden. Er ist in der CSDL ohne ein IsBound-Attribut definiert.

<ComplexType Name="WhoAmIResponse">  
  <Property Name="BusinessUnitId" Type="Edm.Guid" Nullable="false" />  
  <Property Name="UserId" Type="Edm.Guid" Nullable="false" />  
  <Property Name="OrganizationId" Type="Edm.Guid" Nullable="false" />  
</ComplexType>  
<Function Name="WhoAmI">  
  <ReturnType Type="mscrm.WhoAmIResponse" Nullable="false" />  
</Function>  

Diese Funktion entspricht der Klasse WhoAmIRequest und gibt einen komplexen Typ WhoAmIResponse zurück, der der Klasse WhoAmIResponse entspricht, die vom SDK für .NET verwendet wird. Diese Funktion verfügt über keine Parameter.

Wenn Sie eine ungebundene Funktion aufrufen, verwenden Sie nur den Funktionsnamen, wie im folgenden Beispiel gezeigt:

Anforderung:

GET [Organization URI]/api/data/v9.0/WhoAmI() HTTP/1.1  
Accept: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0  

Antwort:

HTTP/1.1 200 OK  
Content-Type: application/json; odata.metadata=minimal  
OData-Version: 4.0  
{  
 "@odata.context": "[Organization URI]/api/data/v9.0/$metadata#Microsoft.Dynamics.CRM.WhoAmIResponse",  
 "BusinessUnitId": "ded5a64f-f06d-e511-80d0-00155db07cb1",  
 "UserId": "d96e9f55-f06d-e511-80d0-00155db07cb1",  
 "OrganizationId": "4faf1f34-f06d-e511-80d0-00155db07cb1"  
}  

Eine Abfrage mit Funktionen verfassen

Es gibt zwei Möglichkeiten, Funktionen zur Steuerung der mit Abfragen zurückgegebenen Daten zu verwenden. Bestimmte Funktionen lassen die Kontrolle über die Spalten oder Bedingungen zu, die sie zurückgeben, und Sie können Abfragefunktionen verwenden, um Bedingungen in einer Abfrage auszuwerten.

Verfassbare Funktionen

Einige der in Web API Function Reference aufgeführten Funktionen geben eine Sammlung von Entitäten zurück. Eine Teilmenge dieser Funktionen ist komponierbar, d.h. Sie können eine $select- oder $filter-Systemabfrageoption einfügen, um zu steuern, welche Spalten in den Ergebnissen zurückgegeben werden. Diese Funktionen haben ein IsComposable-Attribut im CDSL. Für jede dieser Funktionen gibt es eine entsprechende Nachricht im SDK, die entweder einen Parameter vom Typ ColumnSet oder QueryBase akzeptiert. Die OData-Systemabfrageoptionen bieten dieselbe Funktionalität, sodass diese Funktionen nicht dieselben Parameter haben wie ihre entsprechenden Nachrichten im SDK. Die folgende Tabelle enthält eine Liste dieser zusammensetzbaren Funktionen in dieser Version.

Funktionen    
RetrieveAllChildUsersSystemUser RetrieveBusinessHierarchyBusinessUnit RetrieveUnpublishedMultiple
SearchByBodyKbArticle SearchByKeywordsKbArticle SearchByTitleKbArticle

Abfragefunktionen

Die unter Web API Query Function Reference aufgeführten Funktionen sind dazu gedacht, eine Abfrage zusammenzustellen. Sie können sie ähnlich wie die OData Abfragefunktionen verwenden, aber es gibt einige wichtige Unterschiede. Sie müssen den vollständigen Namen der Funktion eingeben und die Parameternamen mit einschließen.

Das folgende Beispiel verwendet die Abfragefunktion LastXHours, um alle Entitäten des Kontos zurückzugeben, die in den letzten 12 Stunden geändert wurden:

GET [Organization URI]/api/data/v9.0/accounts?$select=name,accountnumber&$filter=Microsoft.Dynamics.CRM.LastXHours(PropertyName=@p1,PropertyValue=@p2)&@p1='modifiedon'&@p2=12  

Einschränkungen der Abfragefunktionen

Eine der Einschränkungen von Abfragefunktionen ist, dass Sie den Operator not nicht verwenden können, um Abfragefunktionen zu negieren.

Die folgende Abfrage zum Beispiel, die EqualUserId verwendet, schlägt mit der Fehlermeldung fehl: Not operator along with the Custom Named Condition operators is not allowed.

GET [Organization URI]/api/data/v9.1/systemusers?$select=fullname,systemuserid&$filter=not Microsoft.Dynamics.CRM.EqualUserId(PropertyName=@p1)&@p1='systemuserid'

Mehrere Abfragefunktionen verfügen über eine ergänzende negierte Abfragefunktion. Beispiel: NotEqualUserId negiert EqualUserId, sodass die folgende Abfrage die erwarteten Ergebnisse liefert:

GET [Organization URI]/api/data/v9.1/systemusers?$select=fullname,systemuserid&$filter=Microsoft.Dynamics.CRM.NotEqualUserId(PropertyName=@p1)&@p1='systemuserid'

Andere Abfragefunktionen können auf unterschiedliche Weise negiert werden. Anstatt zu versuchen, die Last7Days Abfragefunktion wie hier zu negieren (was mit dem gleichen Fehler wie oben beschrieben fehlschlägt):

GET [Organization URI]/api/data/v9.1/accounts?$select=name&$filter=not Microsoft.Dynamics.CRM.Last7Days(PropertyName=@p1)&@p1='createdon'

Verwenden Sie die Abfragefunktion OlderThanXDays wie folgt:

GET [Organization URI]/api/data/v9.1/accounts?$select=name&$filter=Microsoft.Dynamics.CRM.OlderThanXDays(PropertyName=@p1,PropertyValue=@p2)&@p1='createdon'&@p2=7

Siehe auch

Web-API-Funktionen und -Aktionen Beispiel (C#)
Web-API-Funktionen und -Aktionen Beispiel (Client-seitiges JavaScript)
Vorgänge mithilfe der Web-API ausführen
HTTP-Anforderungen erstellen und Fehler behandeln
Abfrage von Daten über die Web-API
Erstellen einer Tabellenzeile über die Web-API
Abrufen einer Tabellenzeile über die Web-API
Aktualisieren und Löschen von Tabellenzeilen über die Web-API
Zuordnen und Aufheben der Zuordnung von Tabellenzeilen über die Web-API
Nutzen von Web-API-Aktionen
Ausführen von Batchbetrieben mithilfe der Web-API
Annehmen eines anderen Benutzerkontos mit Web API
Bedingte Vorgänge mithilfe der Web-API ausführen

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).