Как использовать JavaScript для заполнения родительского поиска в форме в Dynamics 365 CRM локально?

#javascript #dynamics-crm #dynamics-365 #dynamics-crm-2016

#javascript #динамика-crm #динамика- 365 #динамика-crm-2016

Вопрос:

Предположим, что у меня есть 3 связанных объекта (Телефонный звонок-Учетная запись-Контакт). Для получения подробной информации я должен сказать, что в форме телефонного звонка у меня есть настраиваемое поле поиска, связанное с учетной записью, и другое, связанное с контактом, и последнее, которое снова связано с учетной записью, которая использовалась для родительской учетной записи. Теперь мне нужно решение, которое поможет мне, когда я заполню поле учетной записи, после этого заполните поиск родительской учетной записи правильными данными или, если я сначала заполню поиск контактов, заполните учетную запись правильными данными, а затем заполните поле родительской учетной записи правильными данными. Я искал много способов, но я не смог найти никакого способа найти правильную родительскую учетную запись и заполнить свои запросы, даже если я использую бизнес-правила, но это не может мне помочь.

Теперь я видел на многих сайтах, что был предложен CRM REST BUILDER. Я использовал его, но это не могло решить мою проблему.

Ответ №1:

Что вам нужно, так это функция Javascript для запуска при изменении первого поиска для запроса необходимых полей из родительской записи и заполнения его в текущей форме дочерней записи. Подробнее

 function fillParentAccount() {

var lookup= Xrm.Page.getAttribute("accountfieldname").getValue();  //you will get the id with exxtra double quotes or square brackets by doing get value hence you to make it readable by CRM , you must slice it. i have use the below method:
var newid = lookup[0].id.slice(1, -1);  // you will get perfect id like "EDCJDKDJDKJDJDKJDJKD" here.
var req = new XMLHttpRequest(); //once you have the id , you have frame to make a webapi GET call by proving the newid we got.

req.open("GET", Xrm.Page.context.getClientUrl()   "/api/data/v8.1/accounts("   newid   ")?$select=_parentaccountfieldname_value", 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); // you will get the retrieved value in object we stored in result var.
var retrivedvalue= result._parentaccountfieldname_value; //get the id of the field
var retrivedformatedvalue= result["_parentaccountfieldname_value@OData.Community.Display.V1.FormattedValue"]; //get the formatted name of the field
if (retrivedvalue!= null) {
var value = new Array();
value[0] = new Object();
value[0].id = retrivedvalue;
value[0].name = retrivedformatedvalue;
value[0].entityType = "account";
Xrm.Page.getAttribute("parentaccountfield").setValue(value); //set the lookup value finally
}
else
alert("some textt!!!!!!") // optional
} else {
Xrm.Utility.alertDialog(this.statusText);
}
}
};
req.send();
 

Обязательно измените имена полей и точность ваших настроек.

Комментарии:

1. Спасибо @ArunVinoth за ваше решение. это было очень полезно, и для лучшей реализации я использовал CRM Rest Builder, чтобы избавиться от любых ошибок.