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(新 ...
随机推荐
- activeMQ - how to install and run
apache activeMQ how to install and run https://www.cnblogs.com/lyxy/p/5969116.html
- rman备份有效性验证/恢复进度监控
故障一定会发生,只是早晚的问题!作为一名DBA时刻要记着备份,备份的有效性同样重要,不要当某一天最需要的时候,发现悲剧了...验证rman备份是否可以成功还原,11g后可以通过命令验证但,验证全备份一 ...
- 小程序组件化开发框架---wepy 项目创建
wepy是一个优秀的微信小程序组件化框架,突破了小程序的限制,支持了npm包加载以及组件化方案.这里就以我个人的经历讲下怎么创建wepy项目. 1.首先 在桌面(自己选定目录下)新建一个文件夹,注意需 ...
- bay——Oracle RAC集群体系结构.docx
Oracle RAC集群体系结构 ————bayaim 2018年10月22日13:33 https://blog.51cto.com/ixdba/862207 一. Oracle集群体系结构 O ...
- MySQL 57安装部署(Zip版)(Windows版)
1. 在<MYSQL>的根目录下新建一个my.ini写入以下内容 [mysqld] port = 3306 basedir=D:\mysql\mysql-5.7.22-winx64 # M ...
- linux内核的冷热页分配器
先说说cpu的cache,和cpu的cache比起来访问主内存是非常慢的,为了加快速度根据本地性原则,cpu在访问主内存的时候会把附近的一块数据都加载到cpu的cache里,之后读写这块数据都是在ca ...
- Linux:VIM编辑器的使用
打开vim编辑器 命令格式: vim 文件路径 vim编辑器的工作模式 进入编辑器后 默认为命令模式 进入输入模式 a 在光标后插入 o 换行插入 i 在光标前插入 返回命令模式 esc 键 进入末行 ...
- webdriver-键盘操作 for java
2017年01月17日 17:08:25 阅读数:2044 import java.awt.AWTException;import java.awt.Robot;import java.awt.eve ...
- Java Web 学习(2) —— JSP
JSP 一. 什么是 JSP JSP 和 Servlet Servlet 有两个缺点是无法克服的:首先,写在 Servlet 中的所有 HTML 标签必须包含 Java 字符串,这使得处理HTTP响应 ...
- 趣谈Linux操作系统学习笔记:第二十五讲
一.mmap原理 在虚拟内存空间那一节,我们知道,每一个进程都有一个列表vm_area_struct,指向虚拟地址空间的不同内存块,这个变量名字叫mmap struct mm_struct { str ...