2016-04-20 5 views
0

Alle,Batch Anfrage - Dynamics CRM

Ich versuche, eine Batch-Anforderung an Dynamics CRM mit dem folgenden Quellcode zu implementieren:

public async Task<HttpResponseMessage> HttpPatchCrmApi(string resource, string data) 
{ 
    string uniq = Guid.NewGuid().ToString(); 
    MultipartContent content = new MultipartContent("mixed", "batch_" + uniq); 
    HttpRequestMessage batchRequest = new HttpRequestMessage(HttpMethod.Post, CrmBaseUrl + "/api/data/v8.0/$batch"); 
    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, CrmBaseUrl + resource); 
    request.Content = new StringContent(data, Encoding.UTF8, "application/json"); 
    HttpMessageContent query = new HttpMessageContent(request); 

    content.Add(query); 

    batchRequest.Content = content; 

    HttpResponseMessage response = await RbWebApi.SendAsync(batchRequest); 

    return response; 
} 

Das Problem ist, dass ich "400 Bad Anfrage bin immer "

EDIT: Wie in den Kommentaren hier vorgeschlagene ist der Stack-Trace des Antrags von Fiedler:

POST https://Hidden.api.crm4.dynamics.com/api/data/v8.0/$batch HTTP/1.1 
Authorization: Bearer eyJ0eXAiOiJKV.... very long string 
Content-Type: multipart/mixed; boundary="batch_7b6e3c60-1284-4958-a39a-4653af21833c" 
Host: Hidden.api.crm4.dynamics.com 
Content-Length: 313 
Expect: 100-continue 

--batch_7b6e3c60-1284-4958-a39a-4653af21833c 
Content-Type: application/http; msgtype=request 

POST /api/data/v8.0/my_recurringgifts HTTP/1.1 
Host: Hidden.api.crm4.dynamics.com 
Content-Type: application/json; charset=utf-8 

{"my_name":"slavi"} 
--batch_7b6e3c60-1284-4958-a39a-4653af21833c-- 

Während das Schreiben des Codes ich mich von here und here inspirierenden

+0

ich Fiddler zu machen verwenden würde sicherstellen, dass die Anforderungen, die Sie sehen aus wie die Beispiele aus dem SDK senden: https://msdn.microsoft.com/en -us/library/mt607719.aspx – Polshgiant

+0

Hallo Polsh, aktualisiert :) Ich habe es die ganze Zeit betrachtet, aber kann nicht sehen, Differenz/Grund für schlechte Anfrage :( – Slavi

Antwort

0

Ich denke, Ihre Anfrage falsch ist. Sie müssen den Antrag Körper GENAU wie defined by Microsoft

bauen Dies bedeutet, dass die Leerzeilen am richtigen Ort da sein müssen alle Attribute im Körper (wie „--changeset_XXX“ zum Beispiel) vorhanden sein muss und wie ich sehe, Sie erfüllen diese Anforderungen nicht.

Ich baue gerade eine Anfrage in Postman gegen meinen CRM und es funktionierte:


URL

https://yourTenant.api.crm.dynamics.com/api/data/v8.0/$batch 

Headers

OData-MaxVersion:4.0 
OData-Version:4.0 
Accept:application/json 
Authorization:Bearer aVeryLongStringTokenHere 
Content-Type: multipart/mixed;boundary=batch_1234567 

Körper

--batch_1234567 
Content-Type:multipart/mixed;boundary=changeset_555666 

--changeset_555666 
Content-Type:application/http 
Content-Transfer-Encoding:binary 
Content-ID:1 

POST https://yourTenant.api.crm.dynamics.com/api/data/v8.0/accounts HTTP/1.1 
Content-Type:application/json;type=entry 

{name: 'BatchJobTest788'} 
--changeset_555666 
Content-Type:application/http 
Content-Transfer-Encoding:binary 
Content-ID:2 

POST https://yourTenant.api.crm.dynamics.com/api/data/v8.0/accounts HTTP/1.1 
Content-Type:application/json;type=entry 

{new_name: 'BatchJobTest348'} 
--changeset_555666-- 
--batch_1234567-- 

Zusätzliche Bemerkungen:

  • Der Content-Type des Kopfes hält Ihr BatchID
  • Der Content-Type des Batch hält Ihre ChangeSetId (wenn es sich um eine Änderung handelt data)
  • Bevor Sie mit dem Programm beginnen, versuchen REST-Aufrufe, sie in einem REST-Tool wie POSTMAN zu definieren und sie funktionieren zu lassen. Erstellen Sie dann die Arbeitsanforderung in Ihrem Code.
  • Here eine gute Erklärung-Quelle für die Dosierung in CRM