2017-07-28 4 views
0

Ich versuche, einen Fall zu erstellen und einen Kontakt im Feld primarycontactId zuzuordnen. Ich verwende einen alternativen Schlüssel, um den Kontakt wie folgt nachzuschlagen.Associate primarycontactid zu Case-Dynamics CRM-Web-API

POST https://xxxxx.crm.dynamics.com/api/data/v8.2/incidents HTTP/1.1 
Accept: application/json 
OData-MaxVersion: 4.0 
OData-Version: 4.0 
Content-Type: application/json; charset=utf-8 
Host: xxxxxx.crm.dynamics.com 
Content-Length: 161 

{ 
    "title": "case101", 
    "[email protected]": "https://xxxxx.crm.dynamics.com/api/data/v8.2/contacts(xxi_xxx='2533274975913147')" 
} 

-Code wie unten

using (HttpClient httpClient = new HttpClient()) 
      { 
       var method2 = new HttpMethod("POST"); 
       Uri requesturi = new Uri(string.Format("{0}/api/data/v8.2/", url)); 
       httpClient.BaseAddress = requesturi; 
       httpClient.Timeout = new TimeSpan(0, 0, 4); // 10 minutes 
       httpClient.DefaultRequestHeaders.Accept.Clear(); 
       httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
       result = GetS2SAccessToken(url, pwd); 
       httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result); 
       httpClient.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0"); 
       httpClient.DefaultRequestHeaders.Add("OData-Version", "4.0"); 
       HttpRequestMessage request = new HttpRequestMessage(method,string.Format("contacts(xxxxx_xxxx='{0}')",xxxx.ToString())); 
       request.Content = new StringContent(props.ToString(), Encoding.UTF8, "application/json"); 
       HttpRequestMessage request2 = new HttpRequestMessage(method2, string.Format("incidents")); 
       request2.Content = new StringContent(props1.ToString(), Encoding.UTF8, "application/json"); 

       HttpResponseMessage createResponse1; 
       createResponse1 = await httpClient.SendAsync(request2); 
       return createResponse1.Content; 
     } 

Allerdings erhalte ich:.

Ein unerwarteter Fehler ist aufgetreten "" innererror ": { "message":" Ein unerwarteter Fehler ist aufgetreten. "," type ":" System.ServiceModel.FaultException. "," type ":" System.ServiceModel.FaultException 1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Crm.Extensibility.OData.CrmODataServiceDataProvider.CreateEdmEntity(CrmODataExecutionContext context, String edmEntityName, EdmEntityObject entityObject, Boolean isUpsert)\r\n at Microsoft.Xrm.Sdk, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]","stacktrace":" at Microsoft.Crm.Extensibility.OrganizationSdkServiceInternal.Create(Entity entity, CorrelationToken correlationToken, CallerOriginToken callerOriginToken, WebServiceType serviceType, Boolean checkAdminMode, Dictionary 2 optionaleParameter "\ r \ n bei Microsoft.Crm.Extensibility.OData.CrmODataExecutionContext.Create (Entity entity) \ r \ na t Microsoft.Crm.Extensibility.OData.EntityController.PostEntitySet (String entitySetName, EdmEntityObject EntityObject) \ r \

Hat jemand zuvor erlebt?

Antwort

0

Sie verwechselt. Überprüfen Sie, ob & den Schemanamen korrigiert.

Vorfall hat 2 optionale Kontaktabfragen & Schemaname ist primarycontactid & responsiblecontactid.

[email protected] 

Aber Vorfall hat eine Pflicht Kunden Lookup & Schemaname CustomerID. Ohne diesen Vorfall kann nicht erstellt werden. Übergeben Sie dies, die Anfrage wird erfolgreich sein.

[email protected] 
+0

Ich bekomme den folgenden Fehler, wenn ich customerIderror verwende ": { " code ":" "," Nachricht ":" Eine nicht deklarierte Eigenschaft 'customerid', die nur Eigenschaften-Annotationen in der Payload hat, aber kein Eigenschaftswert in der Payload gefunden wurde. In OData können nur deklarierte Navigationseigenschaften und deklarierte benannte Datenströme als Eigenschaften ohne Werte dargestellt werden. "," Innererror ": { " message ":" Eine nicht deklarierte Eigenschaft 'customerid', die nur Eigenschaften-Annotationen in der Payload hat, aber keine p –

+0

Irgendwelche Vorschläge, wie ich das mit einem Jobject wie in meinem Code weitergeben kann? Schätze die Hilfe! –

+0

Versuchen Sie, die Anforderung mithilfe des CRM-Rest-Builders zu erstellen. –

0

Ich bin mir nicht sicher, ob die Web-API das Auffüllen eines Nachschlagefeldes über einen alternativen Schlüssel erlaubt.

Dieser zweistufige Prozess sollte funktionieren ...

  1. Abrufen der Kontakt GUID durch seinen stell Schlüssel
  2. die Nachschlag-Auffüllen der ID anstatt der alternativen Schlüssel, das heißt:

"[email protected]": "/contacts(F56D5D25-8B0D-E711-8104-00155D6FD705)"

+0

Ich versuchte mit GUID auch für eine KontaktID, schien den gleichen Fehler zu bekommen –

+0

In welcher Sprache machst du das? Das Posten des Codes könnte helfen ... – Aron

+0

Ich mache dies mit C#, ein JObject (Requisiten) zu erstellen, um mit einer HTTP-Anfrage zu string und übergeben. –