Dynamics CRM 中Web API中的深度创建(Deep Insert)
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),欢迎关注我的微信公众号 MSFTDynamics365erLuoYong ,回复234或者20161105可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!
POST [Organization URI]/api/data/v8.2/accounts HTTP/1.1
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json {
"name": "Sample Account",
"primarycontactid":
{
"firstname": "John",
"lastname": "Smith"
},
"opportunity_customer_accounts":
[
{
"name": "Opportunity associated to Sample Account",
"Opportunity_Tasks":
[
{ "subject": "Task associated to opportunity" }
]
}
]
}
var clientURL = Xrm.Page.context.getClientUrl();
var req = new XMLHttpRequest()
req.open("POST", encodeURI(clientURL + "/api/data/v9.0/ly_tests", false));//true是异步请求,false是同步请求
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.onreadystatechange = function () {
if (this.readyState == 4 /* complete */) {
req.onreadystatechange = null;
if (this.status == 204) {//204代表成功无返回值
Xrm.Utility.alertDialog("创建成功的罗勇测试实体记录成功,点击确定后会打开当前记录。");
Xrm.Utility.openEntityForm(Xrm.Page.data.entity.getEntityName(), this.getResponseHeader("OData-EntityId").match(/\w{8}-\w{4}-\w{4}-\w{4}-\w{12}/)[0]);
}
else {
var error = JSON.parse(this.response).error;
Xrm.Utility.alertDialog("错误:" + error.message);
}
}
};
var requestmsg = {};
requestmsg.ly_name = "深度创建的罗勇测试记录";
requestmsg["ly_Lookup@odata.bind"] = "/accounts(CE23165A-3AA3-E511-80C7-000D3A807EC7)";
requestmsg.ly_integer = 10;
requestmsg.ly_ly_test_ly_testsub_Test = [];
requestmsg.ly_ly_test_ly_testsub_Test.push({ 'ly_name': '深度创建的的罗勇测试辅助实体记录1', 'ly_testsub_Tasks': [] });
requestmsg.ly_ly_test_ly_testsub_Test[0].ly_testsub_Tasks.push({ "subject": "深度创建的任务1" });
requestmsg.ly_ly_test_ly_testsub_Test[0].ly_testsub_Tasks.push({ "subject": "深度创建的任务2" });
requestmsg.ly_ly_test_ly_testsub_Test.push({ 'ly_name': '深度创建的的罗勇测试辅助实体记录2' });
req.send(JSON.stringify(requestmsg));
下面代码是C#版本:
JObject jObject = new JObject(
new JProperty("ly_name", "深度创建的罗勇测试记录"),
new JProperty("ly_Lookup@odata.bind", "/accounts(CE23165A-3AA3-E511-80C7-000D3A807EC7)"),
new JProperty("ly_integer", ),
new JProperty("ly_ly_test_ly_testsub_Test", new JArray(
new JObject(
new JProperty("ly_name", "深度创建的的罗勇测试辅助实体记录1")),
new JObject(
new JProperty("ly_name", "深度创建的的罗勇测试辅助实体记录2")),
new JObject(
new JProperty("ly_testsub_Tasks", new JArray(
new JObject(new JProperty("subject", "深度创建的任务1")),
new JObject(new JProperty("subject", "深度创建的任务2"))
)
)
)
)
)
);
var newRecordGuid = CreateRecordByWebApiAsync(jObject, "incidents").Result;
private static async Task<Guid> CreateRecordByWebApiAsync(JObject jObject,string webApiUrl)
{
HttpMessageHandler messageHandler;
HttpResponseMessage response;
Guid returnGuid = Guid.Empty;
NetworkCredential credentials = new NetworkCredential(userName, passWord);
messageHandler = new HttpClientHandler() {
Credentials = credentials
};
using (HttpClient httpClient = new HttpClient(messageHandler))
{
httpClient.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0");
httpClient.DefaultRequestHeaders.Add("OData-Version", "4.0");
httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
httpClient.DefaultRequestHeaders.Add("Content-Type", "application/json; charset=utf-8");
var content = new StringContent(JsonConvert.SerializeObject(jObject), Encoding.UTF8, "application/json");
response = await httpClient.PostAsync($"{webAPIBaseUrl}{webApiUrl}", content);
if (response.IsSuccessStatusCode)
{
var newRecordUri = response.Headers.GetValues("OData-EntityId").FirstOrDefault();
returnGuid = new Guid(newRecordUri.Substring(newRecordUri.Length - , ));
}
else
{
var errorMsg = await response.Content.ReadAsStringAsync();
throw new Exception(errorMsg);
}
}
return returnGuid;
}
Dynamics CRM 中Web API中的深度创建(Deep Insert)的更多相关文章
- Dynamics CRM使用Web Api时如果参数里面包含"&"的时候的处理方法
当我们使用Dynamics CRM的Api的时候如果遇到查询字段的参数里面有&符号的话会影响Api的取值直接报错.原因是因为&符号在Url上面是一个关键字,这个关键字可以截断Url表示 ...
- Dynamics CRM 2016 Web API 消息列表
Function Name Description CalculateTotalTimeIncident Function Calculates the total time, in minutes, ...
- Entity Framework 6 Recipes 2nd Edition(9-3)译->找出Web API中发生了什么变化
9-3. 找出Web API中发生了什么变化 问题 想通过基于REST的Web API服务对数据库进行插入,删除和修改对象图,而不必为每个实体类编写单独的更新方法. 此外, 用EF6的Code Fri ...
- ASP.NET Web API中的Controller
虽然通过Visual Studio向导在ASP.NET Web API项目中创建的 Controller类型默认派生与抽象类型ApiController,但是ASP.NET Web API框架本身只要 ...
- Web APi 2.0优点和特点?在Web APi中如何启动Session状态?
前言 曾几何时,微软基于Web服务技术给出最流行的基于XML且以扩展名为.asmx结尾的Web Service,此服务在.NET Framework中风靡一时同时也被.NET业界同仁所青睐,几年后在此 ...
- 在ASP.NET Web API中使用OData
http://www.alixixi.com/program/a/2015063094986.shtml 一.什么是ODataOData是一个开放的数据协议(Open Data Protocol)在A ...
- Web Api中的get传值和post传值
GET 方式 get方式传参 我们一般用于获取数据做条件筛选,也就是 “查” 1.无参 var look = function () { $.ajax({ type: "GET", ...
- WEB API 中HTTP的get、post、put,delete 请求方式
一.WEB API 中HTTP 请求方式的四个主要方法 (GET, PUT, POST, DELETE), 按照下列方式映射为 CURD 操作: 1.POST 用于新建资源,服务端在指定的URI 上创 ...
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【五】——在Web Api中实现Http方法(Put,Post,Delete)
系列导航地址http://www.cnblogs.com/fzrain/p/3490137.html 前言 在Web Api中,我们对资源的CRUD操作都是通过相应的Http方法来实现——Post(新 ...
随机推荐
- 文件批量生成IO流读写
/// <summary> /// 生成文件的 /// </summary> /// <param name="calssName"></ ...
- 为Bootstrap Modal(模态框)全局添加拖拽操作
在js中绑定方法 $(document).on("show.bs.modal", ".modal", function(){ $(this).draggable ...
- 操作系统篇之Linux命令操作和redis安装以及基本使用
电脑操作系统 : windows7,8,10,xp,win98 操作系统 : linux ax unix 以后开发项目是部署在服务器上,服务器一般采用linux. linux的优点:系统稳定,操作速度 ...
- vue-svgicon基本使用
在项目开发中,经常会用到svg图标,之前用的都是vue-svg-icon,最近在npm中搜索svg图标解析插件,发现vue-svgicon用的相对较多,对比以下,vue-svgicon用法较为灵活,方 ...
- Cesium专栏-气象雷达动图(附源码下载)
Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精 ...
- Django 注意知识点(一)
本篇概述 Django Admin后台显示 多对多字段(如何) Django 模板 显示 多对多字段(如何) Django 将表单中上传的多对多字段存入数据库 (如何) Django 上传文件 ( ...
- 使用 vs code 创建 Django 项目
操作流程: 1.前期准备工作 2.vs code配置Python环境 3.新建 Django 项目 4.vs code 配置 Debug Django 环境 5.浏览器查看效果 1.前期准备工作 安装 ...
- 服务器安装neo4j
neo4j是目前最流行的图形数据库,支持完整的事务.在树形图中,图是有顶点.边和属性组成的,顶点和边都可以设置属性,顶点又称节点,边也叫做关系.每个节点和关系都可以有一个或多个属性,neo4j创建的图 ...
- ARM-Linux中断系统【转】
转自:https://www.cnblogs.com/arnoldlu/p/7406441.html 1.前言 了解Linux中断子系统,同时也需要了解ARM体系结构中断处理流程:在熟悉整个软硬件架构 ...
- Druid-代码段-4-2
所属文章:池化技术(一)Druid是如何管理数据库连接的? 本代码段对应流程4.1,连接池瘦身: //连接池瘦身 public void shrink(boolean checkTime, boole ...