2017-07-28 3 views
0

J'essaie de créer un cas et d'associer un contact dans le champ primarycontactId. J'utilise une autre touche pour rechercher le contact comme ci-dessous.Associer primarycontactid à l'API web de Case-Dynamics CRM

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 comme ci-dessous

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; 
     } 

Cependant je reçois.

Une erreur inattendue est survenue "" innererror ": { "message":" Une erreur inattendue est survenue. "," 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 paramètres facultatifs) \ r \ n à Microsoft.Crm.Extensibility.OData.CrmODataExecutionContext.Create (entité entité) \ r \ na t Microsoft.Crm.Extensibility.OData.EntityController.PostEntitySet (String entitySetName, EdmEntityObject EntityObject) \ r \

Quelqu'un at-il connu avant?

Répondre

0

Vous avez mélangé. Vérifiez ce & corriger le nom de schéma.

Incident a 2 contacts en option lookups & nom de schéma est primarycontactid & responsiblecontactid.

[email protected] 

Mais l'incident a un nom de schéma obligatoire de recherche client & est customerId. Sans cet incident ne peut pas être créé. Passez ceci, la requête réussira.

[email protected] 
+0

Je reçois l'erreur ci-dessous lorsque j'utilise customerIderror ": { " code ":" "," message ":" Une propriété non déclarée 'customerid' qui n'a que des annotations de propriété dans la charge utile mais aucune valeur de propriété n'a été trouvée dans la charge utile. Dans OData, seules les propriétés de navigation déclarées et déclarées peuvent être représentées comme des propriétés sans valeurs. "," Innererror ": { " message ":" Une propriété non déclarée 'customerid' qui n'a que des annotations de propriété dans la charge utile –

+0

Une suggestion sur la façon dont je transmets cela avec un Jobject comme dans mon code? Appréciez l'aide! –

+0

Essayez de générer la requête à l'aide du générateur de repos CRM –

0

Je ne suis pas sûr si l'API Web permet de remplir un champ de recherche via une autre clé.

Ce processus en deux étapes devrait fonctionner ...

  1. Récupérer le contact GUID par sa clé alternative
  2. Peupler la recherche en utilisant l'identifiant plutôt que la clé alternative, à savoir:

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

+0

J'ai essayé d'utiliser GUID aussi pour un contactid, semblait avoir la même erreur –

+0

Dans quelle langue faites-vous cela? Publier le code pourrait aider ... – Aron

+0

Je le fais en utilisant C#, en créant un objet JObject (props1) en chaîne et en passant avec une requête HTTP. –