Dynamics 365 CRM (Online)的WebAPI批量上传数据,一次提交100条记录

目标:

Dynamics 365 CRM (Online)的WebAPI批量上传数据,一次修改100条记录


内容:

话不多讲,直接上如下代码,这里是新加字段把客户地址补上去

 public async Task RunCleanContactData()
        {
            List<Contact> contacts =  GetPatchContactData();
            int batchCountOneTime = 0;
            StringBuilder requestBoby = null;
            int Content_ID = 0;
            Guid batchId = Guid.Empty;
            Guid changesetId = Guid.Empty;
            string returnVal = string.Empty;

            int a = contacts.Count;

            for (int i = 0; i < contacts.Count; i++)
            {
                if (batchCountOneTime == 0)
                {
                    batchId = Guid.NewGuid();
                    changesetId = Guid.NewGuid();
                    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");
                }

                batchCountOneTime++;
                Content_ID = i + 1;
                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}contacts({contacts[i].contactid}) HTTP/1.1");  // Patch operation by using Guid
                requestBoby.Append("\n");
                requestBoby.Append("Content-Type:application/json;type=entry");
                requestBoby.Append("\n");
                requestBoby.Append("\n");

                JObject job = new JObject();
                job.Add("thk_address", (JToken)contacts[i].address);
               
                

                requestBoby.Append(JsonConvert.SerializeObject(job));
                requestBoby.Append("\n");

                if (batchCountOneTime == 100)
                {
                    returnVal = await crmHelper.SendBatchCrmRequest(requestBoby, batchId, changesetId);
                    a = a - batchCountOneTime;
                    batchCountOneTime = 0;
                    Content_ID = 0;

                    Console.WriteLine(returnVal);


                }
                else if (batchCountOneTime < 100 && a < 10)
                {
                    returnVal = await crmHelper.SendBatchCrmRequest(requestBoby, batchId, changesetId);
                    a = a - batchCountOneTime;
                    Content_ID = 0;
                    batchCountOneTime = 0;
                }

                Console.WriteLine($"{a.ToString()} is remaing....");
            }
        }
private List<Contact> GetPatchContactData()
        {
            List<Contact> list = new List<Contact>();

            
            string querysql = @"select * from Fei_T_Con";

            DataTable dt = SqlHelper.ExecuteQuery(querysql);

            if(dt.Rows.Count>0)
            {
                foreach (DataRow  dr in dt.Rows)
                {
                    Contact con = new Contact();

                    con.contactid = dr["contactid"].ToString();
                   // con.contactno = dr["contact_no"].ToString();
                    con.address = dr["contactAddress"].ToString();
                 

                    list.Add(con);
                }
              
            }
            return list;
        }
 private static HttpClient httpClient = null;
        private HttpRequestMessage httpRequest = null;
        private HttpResponseMessage httpResponse = null;
        private JObject jobject = new JObject();

        public CrmHelper(HttpClient _httpClient=null)
        {
            httpClient = _httpClient != null ? _httpClient : GlobalValues.GlobalValues.httpClient;
        }

        public async Task<string> SendBatchCrmRequest(StringBuilder RequestBody, Guid batchId, Guid changesetId, Boolean formatted = false)
        {
            
            string returnVal = null;
            string OdataBaseUrl = GlobalValues.GlobalValues.UserInfo.ApiServiceUrl;

            httpClient.DefaultRequestHeaders.Add("Prefer", "odata.include-annotations=\"Microsoft.Dynamics.CRM.fetchxmlpagingcookie\"");

            MultipartContent maincontent = new MultipartContent("mixed", $"batch_{batchId.ToString().Replace("\"", "")}");
            StringContent sc = new StringContent(RequestBody.ToString());
            sc.Headers.Clear();
            sc.Headers.Add("Content-Type", $"multipart/mixed;boundary= { changesetId.ToString()}");
            maincontent.Add(sc);

            HttpResponseMessage httpResponse = await httpClient.PostAsync($"{ OdataBaseUrl}$batch", maincontent);


            returnVal = await httpResponse.Content.ReadAsStringAsync();

            return returnVal;

          
        }

产出:

一共需补充70000多个客户的地址,如下效果
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Dynamics 365 WebApi 是一种用于与 Dynamics 365 应用程序进行交互的 RESTful API。通过 WebApi,开发人员可以使用 HTTP 请求与 Dynamics 365 中的实体进行交互,包括创建、更新、删除和检索等操作。 以下是一些常见的 Dynamics 365 WebApi 的用法和功能: 1. 认证和授权:在使用 WebApi 之前,需要进行身份验证和授权。可以使用 Azure Active Directory (AAD) 或其他支持 OAuth 2.0 的身份验证提供程序进行身份验证,并获取访问令牌用于访问 Dynamics 365。 2. 实体操作:使用 WebApi 可以对 Dynamics 365 中的实体进行各种操作,如创建、更新、删除和检索。可以使用 HTTP 请求(如 POST、PUT、DELETE 和 GET)来执行这些操作,并通过请求的 URL 和有效载荷指定要操作的实体和属性。 3. 查询和筛选:WebApi 支持使用 OData 查询语言来执行高级查询和筛选操作。可以使用查询字符串参数来指定要检索的实体类型、要筛选的属性、排序方式、过滤件等。 4. 关联和导航属性:Dynamics 365 中的实体之间可能存在关联关系,WebApi 允许通过关联属性和导航属性来处理这些关系。可以使用关联属性来创建、更新和删除关联记录,使用导航属性来检索关联记录。 5. 批量操作:WebApi 支持批量操作,可以在单个 HTTP 请求中执行多个操作。可以将多个实体的创建、更新和删除操作组合到一个批处理请求中,以提高性能和减少网络延迟。 总的来说,Dynamics 365 WebApi 提供了一个强大且灵活的方式来与 Dynamics 365 应用程序进行集成和操作数据。开发人员可以根据业务需求使用 WebApi 来构建自定义的应用程序、集成系统或扩展现有功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Fei-AX&CRM

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

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

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

打赏作者

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

抵扣说明:

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

余额充值