Dynamics CRM2016 Web API之Create related entities in one operation

Posted Vic.Tang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dynamics CRM2016 Web API之Create related entities in one operation相关的知识,希望对你有一定的参考价值。

        本篇继续来介绍两个web api的接口,一个是“Create related entities in one operation”即在一步操作中完成主实体的创建加关联实体的创建,一个是“Associate entities on create“即在创建记录的时候填充lookup字段。

      先来说第一个api,老规矩直接上代码,稍微做下解释,注意下面的几点不存在先后顺序,我只是分开说明罢了

     1、这里创建一个account实体记录

     2、创建一条名为"John Smith"的contact记录(注意这条记录是新建的不是已经存在的),赋值给account中的primarycontactid(与联系人关联的lookup字段)属性字段

     3、创建一条名为"测试联系人"的contact记录,account记录和这条测试联系人记录是1:N的关系,也就是说这里的contact记录可以创建多条

     4、在第3点中创建的contact记录中再关联task记录,原理同第三点

var entity =new Object();
    entity["name"] = 'Create related entities';//文本

    var contact=new Object();
    contact["firstname"]="John";
    contact["lastname"]= "Smith";
    entity["primarycontactid"]=contact;

    var contact_customer_accounts=new Array();
    contact_customer_accounts[0]=new Object();
    contact_customer_accounts[0]["firstname"]="联系人";
    contact_customer_accounts[0]["lastname"]="测试";
    
    var Contact_Tasks=new Array();
    Contact_Tasks[0]=new Object();
    Contact_Tasks[0]["subject"]="Task associated to contact";
    contact_customer_accounts[0]["Contact_Tasks"]=Contact_Tasks;
    entity["contact_customer_accounts"]=contact_customer_accounts;

    var jsonEntity = window.JSON.stringify(entity);

    var req = new XMLHttpRequest()
    req.open("post",Xrm.Page.context.getClientUrl() + "/api/data/v8.0/accounts", 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) {
            if (this.status == 204) {
                
            }
            else {
                var data=JSON.parse(this.responseText).error.message;
            }
        }
    };
    req.send(jsonEntity);

      关于代码中的contact_customer_accounts的由来如下截图,Contact_Tasks也是同理可以在contact中找到,架构名称注意大小写

技术分享


有图有真相,上截图

创建的account主实体记录,account中的"John Smith"的lookup字段关联的contact也是本次operation中新建的

技术分享

account记录下关联的多条(我这只创建了一条)联系人记录

技术分享

测试联系人记录下创建的多条(我这只创建了一条)task记录

技术分享

      上述即是一个create operation中产生的数据记录,是不是很cool。这个场景一般在后台代码中用的比较多,以前的做法都是通过组织服务先创建主记录后,拿到主记录的guid然后再一条条的创建子记录,现在一个api一次request就能搞定。

      关于第二个api"Associate entities on create",这里不多做阐述了,以上面的demo来举例,就是创建一条account记录给primarycontactid这个lookup字段赋值,实际过程中用到的不多,就算要用到也都直接是包含在create的api中了。






以上是关于Dynamics CRM2016 Web API之Create related entities in one operation的主要内容,如果未能解决你的问题,请参考以下文章

Dynamics CRM2016 Web Api之更新时间字段值

Dynamics CRM2016 Web API之Use custom FetchXML

Dynamics CRM2016 Web API之Retrieve Multiple

Dynamics CRM2016 Web API之获取查找字段的text及选项集的text

Dynamics CRM 2015/2016新特性之二十一:使用Web API查询记录

Dynamics CRM2016 Web API之Create related entities in one operation