在不知道 Dynamics 365 中父实体的 guid 值的情况下使用 javascript 自动填充自定义实体
Auto-populate custom entity using javascript without knowing the guid value of the parent entity in Dynamics 365
我刚开始使用客户端脚本,虽然我可能会去 google 搜索社区问题,但请相信我,我已经搜索了 google 和社区但 link 我对单个单元的查询总是失败,让我描述一下问题陈述,以便您更好地理解。
我创建了两个名为 cts_agent 和 cts_cases 的自定义实体,现在我需要自动填充 cts_cases 的所有字段,它们是只读的 属性 字段,除了一个是映射到 cts_agent 实体形式的代理 ID(整数)。
如果它是一个实体引用字段,我可以使用查询表达式从 agents_form 中获取详细信息并自动填充我的 cts_form 中的详细信息,但我需要编写一个 js 查询它可以获取代理 ID 并为我获取这些详细信息。获取详细信息后,将以 json 格式显示,我需要在 cts_cases 表单中填充详细信息,这也是我无法解决的另一个问题,guid 值的动态检索和 auto -用 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
获取它
the dynamic retrieval of guid value and auto-populating the cts_cases with json are my two blockage I am facing
你从第一部分的另一个答案中得到了帮助。如前所述,您将能够查询具有您知道的任何属性值(唯一)的实体记录。
对于第二部分 - 一旦获得 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);
});
我刚开始使用客户端脚本,虽然我可能会去 google 搜索社区问题,但请相信我,我已经搜索了 google 和社区但 link 我对单个单元的查询总是失败,让我描述一下问题陈述,以便您更好地理解。
我创建了两个名为 cts_agent 和 cts_cases 的自定义实体,现在我需要自动填充 cts_cases 的所有字段,它们是只读的 属性 字段,除了一个是映射到 cts_agent 实体形式的代理 ID(整数)。
如果它是一个实体引用字段,我可以使用查询表达式从 agents_form 中获取详细信息并自动填充我的 cts_form 中的详细信息,但我需要编写一个 js 查询它可以获取代理 ID 并为我获取这些详细信息。获取详细信息后,将以 json 格式显示,我需要在 cts_cases 表单中填充详细信息,这也是我无法解决的另一个问题,guid 值的动态检索和 auto -用 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
获取它the dynamic retrieval of guid value and auto-populating the cts_cases with json are my two blockage I am facing
你从第一部分的另一个答案中得到了帮助。如前所述,您将能够查询具有您知道的任何属性值(唯一)的实体记录。
对于第二部分 - 一旦获得 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);
});