Dynamics 365 CRM online批量上传数据,批量修改数据

## Dynamics 365 CRM online批量上传与修改数据

  1. Dynamics 365 CRM online 批量上传数据
  2. 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时需要注意关健字的大小写问题,不能有空格的地方不可有,这要求要仔细。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
回答: Dynamics CRM 365是一种客户关系管理平台,用于帮助企业管理客户关系和提升销售业绩。如果你是零基础入门学习,以下是一些建议和资源可以帮助你开始学习: 1. 官方SDK:Dynamics CRM 365的官方SDK是学习的主要资料之一,其中包含了源码和工具等内容。你可以从Dynamics官网下载SDK,官方SDK的在线网址是:https://docs.microsoft.com/zh-cn/dynamics365/customer-engagement/developer/developer-guide \[2\] 2. 学习资料:除了官方SDK,你还可以寻找其他学习资料来帮助你入门。可以在网上搜索Dynamics CRM 365的教程、视频教程和文档等资源,这些资源可以帮助你理解平台的基本概念和功能。 3. 社区支持:加入Dynamics CRM 365的社区可以帮助你与其他学习者和专业人士交流和分享经验。你可以参加相关的论坛、社交媒体群组或线下活动,与其他人一起学习和解决问题。 4. 实践项目:通过实践项目来应用你所学的知识是提升技能的有效方式。你可以尝试在实际项目中使用Dynamics CRM 365,这样可以更好地理解平台的应用和功能。 总之,零基础入门学习Dynamics CRM 365需要一定的时间和努力,但通过合适的学习资源和实践,你可以逐步掌握平台的基本知识和技能。祝你学习顺利! #### 引用[.reference_title] - *1* *2* [【转】Dynamics CRM 365零基础入门学习(一)Dynamics介绍以及开发工具配置](https://blog.csdn.net/sinolover/article/details/107379993)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【转】Dynamics CRM 365零基础入门学习(五)权限管理](https://blog.csdn.net/sinolover/article/details/107380058)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fei-AX&CRM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值