## Dynamics 365 CRM online批量上传与修改数据
- Dynamics 365 CRM online 批量上传数据
- Dynamics 365 CRM online 批量修改数据章目录
二、使用步骤
1.首先我这里引入相关的库
代码如下(示例):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Http;
using Microsoft.IdentityModel.Clients;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using System.Net.Http.Headers;
2.写一个方法拼接上传的requestboby
代码如下(示例):
public async Task<string> ExecuteBatchAsync()
{
int Content_ID = 0;
string OdataBaseUrl = ServiceUrl;
Guid batchId = Guid.NewGuid();
Guid changesetId = Guid.NewGuid();
string returnVal = string.Empty;
StringBuilder requestBoby = new StringBuilder();
requestBoby.Append($"--batch_{batchId.ToString()}");
requestBoby.Append("\n");
requestBoby.Append($"Content-Type:multipart/mixed;boundary=changeset_{changesetId.ToString()}");
requestBoby.Append("\n");
requestBoby.Append("\n");
for (int i = 1; i < 5; i++)
{
Content_ID++;
requestBoby.Append($"--changeset_{changesetId.ToString()}");
requestBoby.Append("\n");
requestBoby.Append("Content-Type:application/http");
requestBoby.Append("\n");
requestBoby.Append("Content-Transfer-Encoding:binary");
requestBoby.Append("\n");
requestBoby.Append($"Content-ID: {(Content_ID).ToString()}");
requestBoby.Append("\n");
requestBoby.Append("\n");
requestBoby.Append($"POST {OdataBaseUrl}thk_howdoyoukonwuses HTTP/1.1");
requestBoby.Append("\n");
requestBoby.Append("Content-Type:application/json;type=entry");
requestBoby.Append("\n");
requestBoby.Append("\n");
JObject jobject = new JObject();
jobject.Add("no", (JToken)(i*20).ToString());
jobject.Add("name", (JToken)"batch0001"+"-"+i.ToString());
requestBoby.Append(JsonConvert.SerializeObject(jobject));
requestBoby.Append("\n");
}
// Bulk Update records by Batch
for (int n = 1; n < 2; n++)
{
string _guid = "b000b0de-a933-eb11-a813-000d3a085778";
Content_ID++;
requestBoby.Append($"--changeset_{changesetId}");
requestBoby.Append("\n");
requestBoby.Append("Content-Type:application/http");
requestBoby.Append("\n");
requestBoby.Append("Content-Transfer-Encoding:binary");
requestBoby.Append("\n");
requestBoby.Append($"Content-ID: {Content_ID.ToString()}");
requestBoby.Append("\n");
requestBoby.Append("\n");
requestBoby.Append($"PATCH {OdataBaseUrl}thk_stores({_guid}) HTTP/1.1");
requestBoby.Append("\n");
requestBoby.Append("Content-Type:application/json;type=entry");
requestBoby.Append("\n");
requestBoby.Append("\n");
JObject job = new JObject();
job.Add("storeno", (JToken)"456_Fei_Updated");
job.Add("new_name", (JToken)("Fei_Test_batch0002_Patch" + n.ToString()));
job.Add("apm_storetype@odata.bind", "/contacttypes(" + "ec234110-37f1-e711-a826-000d3aa07895" + ")");
job.Add("new_CurrencyId@odata.bind", "/transactioncurrencies(" + "c85ae5cd-36f4-e711-a826-000d3aa07d32" + ")");
job.Add("onlineoroffline", (JToken)1);
job.Add("new_countrycode", (JToken)"CHN");
job.Add("new_city", (JToken)"Guang Zhou _patch");
job.Add("new_address", (JToken)" shawang road 1.");
job.Add("new_status", "Opening");
requestBoby.Append(JsonConvert.SerializeObject(job));
requestBoby.Append("\n");
}
requestBoby.Append($"--changeset_{changesetId.ToString()}--");
requestBoby.Append("\n");
requestBoby.Append($"--batch_{batchId.ToString()}--");
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
AuthenticationContext authContext = new AuthenticationContext(tokenUrl, false);
AuthenticationResult result = authContext.AcquireToken(resource, clientId, new UserCredential(username, pwd));
using (HttpClient httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri(ServiceUrl);
httpClient.Timeout = new TimeSpan(0, 2, 0);
httpClient.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0");
httpClient.DefaultRequestHeaders.Add("OData-Version", "4.0");
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
httpClient.DefaultRequestHeaders.Add("Prefer", "odata.include-annotations=\"Microsoft.Dynamics.CRM.fetchxmlpagingcookie\"");
MultipartContent maincontent = new MultipartContent("mixed", $"batch_{batchId.ToString().Replace("\"", "")}");
StringContent sc = new StringContent(requestBoby.ToString());
sc.Headers.Clear();
sc.Headers.Add("Content-Type", $"multipart/mixed;boundary= { changesetId.ToString()}");
maincontent.Add(sc);
Task<HttpResponseMessage> response = httpClient.PostAsync($"{ OdataBaseUrl}$batch", maincontent);
if (response.Result.IsSuccessStatusCode)
{
returnVal = await response.Result.Content.ReadAsStringAsync();
}
else
{
var errormsg = await response.Result.Content.ReadAsStringAsync();
throw new Exception(errormsg);
}
}
return returnVal;
}
Post 操作测试如下图
Patch操作测试如下图
总结
提示:这里对文章进行总结:
以上就是今天下午测试批量上传的内容,在拼写requestboby时需要注意关健字的大小写问题,不能有空格的地方不可有,这要求要仔细。