Передача лукапа в openEntityForm
В стандартной библиотеке CRM есть такой замечательный метод – Xrm.Utility.openEntityForm, который открывает форму объекта и позволяет предзаполнять на ней любые поля… Кроме лукапов 🙂 Формально причина в том, что метод openEntityForm не научили передавать комплексное значение, кое представляет из себя лукап.
Но если нельзя сделать нормальными средствами, всегда можно прикрутить костыль 🙂
Решение состоит из трех шагов:
- На открываемой форме заводятся три параметра формы (строковые) – каждый под отдельный компонент лукапа: GUID, отображаемое значение и название объекта.
- В методе openEntityForm каждый из элементов лукапа передается отдельной строкой:
function OpenNewForm() { // Каждый элемент лукапа передаем отдельным параметром var parameters = {}; parameters["customer_id"] = Xrm.Page.data.entity.getId().replace("{", "").replace("}", ""); parameters["customer_name"] = Xrm.Page.getAttribute("name").getValue(); parameters["customer_type"] = "account"; Xrm.Utility.openEntityForm("opportunity", null, parameters); }
- На открываемой форме с помощью JS на онлоаде считываем эти три параметра и формируем из них значение для лукапа^
function FillAcc() { // Считываем переданные параметры var xrmObject = Xrm.Page.context.getQueryStringParameters(); var customer_id = xrmObject["customer_id"].toString(); var customer_name = xrmObject["customer_name"].toString(); var customer_type = xrmObject["customer_type"].toString(); // Формируем и заполняем лукап if (customer_id != null && customer_id != undefined) { var lookupValue = new Array(); lookupValue[0] = new Object(); lookupValue[0].id = customer_id; lookupValue[0].name = customer_name; lookupValue[0].entityType = customer_type; Xrm.Page.getAttribute("parentaccountid").setValue(lookupValue); } }