Dynamics 365 CRM online批量上传数据,批量修改数据_365 批量更改資料-程序员宅基地

技术标签: Dynamics 365(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("[email protected]", "/contacttypes(" + "ec234110-37f1-e711-a826-000d3aa07895" + ")");
           job.Add("[email protected]", "/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时需要注意关健字的大小写问题,不能有空格的地方不可有,这要求要仔细。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44136823/article/details/110439663

智能推荐

SQLAlchemy的使用(二)--使用Automap-程序员宅基地

文章浏览阅读6.7k次。使用SQLAlchemy四部曲:首先总结上一章的内容:使用create_engine()连接数据库Base = declarative_base() 生成orm基类,用于创建classesBase.metadata.create_all(engine) 关联engine使用metadata创建数据库表使用 session = Session(engine) 创建一个会话,便于后面对数据...

引用--交叉引用--题注--书签---设置快捷键方法_word 插入交叉引用快捷键-程序员宅基地

文章浏览阅读1w次,点赞4次,收藏3次。1、论文里得图片-表格--右键--选择插入题注-题注可以自定义;自己可以新建标签;2、对于文中想输入图片-表格--编号;可以用”交叉引用“设置快捷键--Alt+J;具体设置方法:(1)给[插入]-[引用]-[题注]---设置快捷键:Alt+Ttips:[工具]-[自定义]-[键盘]-[编辑]-[InsertCaption]--设置-[Alt+T]-确定;(2)给[插入]--[引用]--[交叉引用]..._word 插入交叉引用快捷键

深入浅出MFC:DDX_Control本质探究-程序员宅基地

文章浏览阅读1.6k次。注:以下以名为Test的对话框工程为例讲解对话框程序中,如果我们有拖标准控件到界面中,并且有和控件类变量绑定,则会有void CTestDlg::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_BTN_TEST, m_testBtn); D..._ddx_control

神经网络学习3【计算流程公式推导+Python代码框架】_神经网络计算流程-程序员宅基地

文章浏览阅读593次。在上一篇文章 神经网络学习2【分类器+升华至神经元 搭建神经网络】中由浅入深的理解了从分类器开始如何理解神经网络的内部计算。接下来我们借用数学工具去逐步推导其计算公式,并同时建立出Python代码框架。1.神经网络公式推导1.1两层神经网络计算尝试使用只有两层、每层两个神经元的较小的神经网络,来演示神经网络如何工作:两个输入值分别为1.0和0.5,每个节点使用激活函数。使用一些随机权重:第一层仅作输入层,不需要使用激活函数。第二层中需要做一些计算,以及使用激活函数,当然,在这个简单的网络_神经网络计算流程

用 Vue3 手撕了个企业级项目,真香!-程序员宅基地

文章浏览阅读1.9k次。最近几年,随着短视频、小程序、直播带货的火爆,前端开发工程师越来越热门,薪资待遇也快接近后端开发工程师了,前端领域进化为内卷重灾区。然而伴随着 Vue 3.0 的发布,前端技术也迎来了一次大革新,像是字节跳动、腾讯等开始重点考察,前端程序员对 Vue 3 框架的理解和实际应用能力。不再是当年懂个生命周期、虚拟 DOM,就可以轻松进大厂的时代了。同时网上也掀起了一股学习 Vue 3 的热潮,面对着网..._手撕vue3 双向

ITRON系统_itron操作系统-程序员宅基地

文章浏览阅读5.5k次。ITRON系统使用方法目录1引言 42ITRON系统介绍 52.1概要 52.2构成 52.2.1ITRON系统构成 52.2.2ITRON体系结构 52.3应用领域 62.4如何使用ITRON系统 63ITRON的基本机能 83.1Task管理机能 83.1.1Task 83.1.2任务调_itron操作系统

随便推点

[Paper每周读]KDD2016 GLMix: Generalized Linear Mixed Models For Large-Scale-程序员宅基地

文章浏览阅读670次。论文链接:GLMix 文章来自于LinkedIn Job Recommendation的团队。文章想说的事情其实很简单,那就是用了一个Generalized Linear Mixed Model,在Job Recommendation的Task上效果还不错。传统的评分模型,用到Linear Regression Model; 传统的投票模型,用到Logistic Regression Model_glmix

还在用if判空?试试Optional吧!-程序员宅基地

文章浏览阅读325次。我相信,每一个Java程序员都必然会遇到过这样一个异常:NullPointerException(NPE),空指针异常。这个异常让我们很痛疼,如果写的代码不够鲁棒,导致尝试访问空对象的方法或字段时就会抛出这个异常。因此合格的程序员都会在使用对象前进行判空,常见的是用if条件判断,如果对象不为空则可以继续进行访问对象字段和方法的操作,如果对象为空那么不可以进行访问对象的字段和方法的操作。常用编程范..._空判断有没有必要用optional

linux ntfs 速度慢,将U盘磁盘格式改成NTFS解决u盘复制速度慢问题-程序员宅基地

文章浏览阅读786次。1、我们首先要看看U盘的文件系统是哪个?打开计算机-可移动磁盘-右击属性。2、目前打多数U盘采用的都是FAT32格式,这也是大多数USB2.0船速速度比较慢的原因。我们先用文件大小测试一个它的读写速度,格子这里用的是一个大概四百兆的文件,为了让大家更直观的看到真实结果,我们以直接拷贝文件看看。3、如果你的文件系统是FAT32的话,我们就需要进行一些优化,需要将U盘磁盘格式改成NTFS格式。我们可以..._金士顿ntfs格式linux传输慢

Apache Zeppelin安装_apache zeppelin 正式版本-程序员宅基地

文章浏览阅读1.5k次。欢迎来到Apache Zeppelin!本页面是有助于开始使用的说明。安装Apache Zeppelin正式支持并在以下环境下进行测试:NameValueOracle JDK1.7 (set JAVA_HOME)OSMac OSX Ubuntu 14.X _apache zeppelin 正式版本

iOS之UIImageView和UIImage_uiimageview image-程序员宅基地

文章浏览阅读5.1k次。1.UIImageView中的视图内容显示模式 UIImageView *imageV=[[UIImageViewalloc]init]; imageV.scaleToFill------默认缩放填充; imageV.scaleAspectfit-------有留白; imageV.AspectFill------自适应填充,视图会被裁剪;..._uiimageview image

解决 /dev/mapper/centos-root 空间不足的问题-程序员宅基地

文章浏览阅读4.6k次。Last login: Mon Feb 25 04:53:40 2019 from 10.0.0.3[root@vmhzpmysql ~]# df -hlFilesystem Size Used Avail Use% Mounted on/dev/mapper/centos-root 4.4G 3.5G 962M 79% /devtmpfs ..._ivextend -l 1.95t /dev/mapper/centos-rootrounding size to boundary between p

推荐文章

热门文章

相关标签