Передача кастомных параметров в OpenEntityForm
В CRM 2011 SDK Microsoft презентовала новую JS-функцию Xrm.Utility.OpenEntityForm, с помощью которой можно, например, эффективно копировать записи.
Но, допустим, Вы хотите знать на принимающей стороне контекст источника вызова, а для этого нужно передать вместе с функцией дополнительные параметры. Просто так этого не сделать – MS CRM «строго типизированная» система 🙂 Поэтому сначала нужно объявить эти дополнительные параметры. Рассмотрим на небольшом примере:
- Откройте редактор форм принимающего объекта (т.е. форму которого мы будем открывать скриптом). В диалоге Свойств формы перейдите на вкладку Параметры. Добавьте необходимое количество параметров. Без данного объявления, любые дополнительные параметры, переданные в строке URL, будут вызывать ошибку при открытии формы;
- Создайте JS Веб-ресурс, который будет формировать кастомные параметры и открывать новую форму:
function OpenNewEmail() { // Устанавливаем параметры, которые хотим передать var parameters = {}; parameters["regarding_Id"] = Xrm.Page.getAttribute("regardingobjectid").getValue()[0].id; parameters["regarding_name"] = Xrm.Page.getAttribute("regardingobjectid").getValue()[0].name; parameters["regarding_type"] = Xrm.Page.getAttribute("regardingobjectid").getValue()[0].entityType; // Открываем новую форму Xrm.Utility.openEntityForm("email", null, parameters); }
- Создайте другой JS Веб-ресурс, который будет на принимающей стороне парсить и обрабатывать входящие кастомные параметры:
function OnFormLoad() { // Получаем кастомные параметры var xrmObject = Xrm.Page.context.getQueryStringParameters(); var leadName = xrmObject["regarding_name"].toString(); var leadId = xrmObject["regarding_Id"].toString(); var entityType = xrmObject["regarding_type"].toString(); Xrm.Page.data.entity.attributes.get("subject").setValue(entityType + ": " + leadName); }