使用JavaScript自动填充自定义实体,而无需了解Dynamics 365中父实体的guid值

问题描述

我刚刚开始使用客户端脚本,尽管可能还会有人问谷歌搜索社区问题,但是相信我我已经搜索了谷歌和社区,但是将我的查询链接一个单元始终失败,请允许我描述一下问题陈述,让您有一个更好的主意。

我已经创建了两个名为cts_agent和cts_cases的自定义实体,现在我需要自动填充cts_cases的所有字段,这些字段是只读属性字段,但其中一个映射为cts_agent实体形式的代理ID(整数)除外。 / p>

如果它是一个实体引用字段,则可以使用查询表达式从agents_form获取详细信息,并自动在cts_form中填充详细信息,但是我需要编写一个js查询,该查询可以获取agent id并向我获取细节。提取详细信息后,将以json格式显示详细信息,从那里我需要在cts_cases表单中填充详细信息,这也是我无法解决的另一个问题,动态获取GUID值并使用json自动填充cts_cases是我的问题我面临两个障碍。我已经为静态版本编写了代码

var req = new XMLHttpRequest();

req.open("GET",Xrm.Page.context.getClientUrl() + "/api/data/v9.1/cts_agents(00000000-0000-0000-0000-000000000000)?$select=cts_addressline1,cts_addressline2,cts_addressline3,cts_city,cts_country,cts_email,cts_fax,cts_mobilenumber,cts_name,cts_phonenumber,cts_state,cts_zipcode",true);

req.setRequestHeader("OData-MaxVersion","4.0");

req.setRequestHeader("OData-Version","4.0");

req.setRequestHeader("Accept","application/json");

req.setRequestHeader("Content-Type","application/json; charset=utf-8");

req.setRequestHeader("Prefer","odata.include-annotations=\"*\"");

req.onreadystatechange = function() {

if (this.readyState === 4) {

    req.onreadystatechange = null;

    if (this.status === 200) {

        var result = JSON.parse(this.response);

        var cts_addressline1 = result["cts_addressline1"];

        var cts_addressline2 = result["cts_addressline2"];

        var cts_addressline3 = result["cts_addressline3"];

        var cts_city = result["cts_city"];

        var cts_country = result["cts_country"];

        var cts_email = result["cts_email"];

        var cts_fax = result["cts_fax"];

        var cts_mobilenumber = result["cts_mobilenumber"];

        var cts_name = result["cts_name"];

        var cts_phonenumber = result["cts_phonenumber"];

        var cts_state = result["cts_state"];

        var cts_zipcode = result["cts_zipcode"];

        var cts_zipcode_formatted = result["cts_zipcode@OData.Community.display.V1.FormattedValue"];

    } else {

        Xrm.Utility.alertDialog(this.statusText);

    }

}

};

req.send();

解决方法

您可以在参数中配置过滤器。 您还可以使用可用的Xrm.WebApi函数来简化查询语法

$filter=agentid eq 123
//where agentid is your integer identifier field

示例:

Xrm.WebApi.retrieveMultipleRecords("cts_agent","?$select=cts_addressline1,cts_addressline2,cts_addressline3,cts_city,cts_country,cts_email,cts_fax,cts_mobilenumber,cts_name,cts_phonenumber,cts_state,cts_zipcode&$filter=agentid eq 123")
.then(
result => {
//you read the results here - retrieve multiple returns an array of records.
if(result.entities.length > 0)
{
var cts_addressline1 = result.entities[0].cts_addressline1;
//etc...
}
},err => {
console.error(err);
});

如果您想要代理的唯一ID(guid),则可以从result.entities [0] .cts_agentid

获取 ,

动态获取Guid值并使用json自动填充cts_cases是我面临的两个障碍

您从第一部分的另一个答案中获得了帮助。如所解释的,您将能够使用您知道的任何属性值(唯一)查询实体记录。

第二部分-一旦获得Guid,您就可以将其作为参数传递给Xrm.Navigation.openForm,该参数可用于打开cts_cases实体表单,并在使用此参数加载表单时-详细信息从代理记录中获取,并将json中的属性值分配给打开的cts_cases表单字段。或者,您也可以在打开表单时将值(在属性最少的情况下)作为参数传递。 Read more

var entityFormOptions = {};
entityFormOptions["entityName"] = "cts_cases";

// Set default values for the Contact form
var formParameters = {};
formParameters["cts_addressline1"] = result["cts_addressline1"]
//other attributes go here

// Open the form.
Xrm.Navigation.openForm(entityFormOptions,formParameters).then(
    function (success) {
        console.log(success);
    },function (error) {
        console.log(error);
    });

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...