Dynamics CRM 中Web API中的深度创建(Deep Insert)

关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复234或者20161105可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me 。

以前没有注意到,Web API提供了深度创建的功能,这个功能我简单理解就是具有父子关系(Master-Detail,1:N) 或者N:N关系的两个实体的记录可以通过一个Web API请求来创建。MSDN上的文章  Create an entity using the Web API 有介绍,它的例子是创建一个客户,同时创建这个客户关联的商机,并为刚才创建的商机创建一个任务。
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" }
]
}
]
}
我这里用代码也写一个例子吧,创建一个罗勇测试实体,并创建它关联的罗勇测试辅助实体,还创建罗勇测试辅助实体的任务。这个比较难找的就是导航的名称。我这里总结方法如下:
首先打开Metadata页面,比如我这里是  https://demo.luoyong.me/api/data/v8.1/$metadata ,用类似 EntitySet Name="ly_tests" 去搜索,注意ly_tests换成你的实体的复数名称,全是小写。搜索到以后找到 NavigationPropertyBinding 元素的Target属性值为子实体的那个元素,Path属性值(这里是ly_ly_test_ly_testsub_Test)就是需要的。如下图所示:
 
还有一种方法,就是打开实体,在主实体的 1:N 关系中找到那个与子实体的关系,名称属性便是。
 
我这里查到的与任务实体的关系的名称是 ly_testsub_Tasks 。
下面就是全部的代码了:
var clientURL = Xrm.Page.context.getClientUrl();
var req = new XMLHttpRequest()
req.open("POST", encodeURI(clientURL + "/api/data/v8.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));

 

转载于:https://www.cnblogs.com/luoyong0201/p/Dynamics_365_JavaScript_Deep_Insert_Web_API.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值