Кастомизация
12
Дек
0

Установка дефолтных значений

Некоторые объекты в CRM имеют поля «по умолчанию», которые в свою очередь могут использоваться в других местах системы. Например, для любого Продукта в продуктовом каталоге Вы должны определить Единицу измерения по умолчанию, в которой обычно продается продукт. В большинстве случаев эта единица измерения и будет использоваться при регистрации этого Продукта в Возможных сделках, Предложениях и т.д. Поэтому было бы удобно, если бы она автоматически подставлялась в соответствующих объектах при выборе Продукта.

Тоже самое касается Валюты и Прайс-листа по умолчанию, которые задаются на форме Организации. А выбирать их Вам предстоит в тех же Возможных сделках, Предложениях и т.д.

Далее представлены несколько JS-скриптов, которые помогут Вам быстро подставить дефолтные значения в соответствующие поля. Из них Вам нужно создать JS Веб-ресурсы и подцепить на нужные формы. Во всех примерах используются REST-запросы.

Единица измерения

В качестве параметров в функцию Sample.MyFunctions.defaultUom передается имя лукапа, в котором выбирается Продукт и имя лукапа с Единицей измерения, в который необходимо подставить дефолтную Единицу измерения Продукта.

З.Ы. единственное примечательное место этого код – setTimeout – он необходим поскольку стандартный функционал очищает поле Единица измерения при смене продукта. И если мы подставим в него значения раньше чем произойдет очистка, то оно будет обнулено. Соответственно мы ждем одну десятую секцнды и уже затем подставляем.

if (typeof (Sample) == "undefined") { Sample = {}; }

Sample.MyFunctions = {
    defaultUom: function (productLookup, uomField) {
        // Проверяем заполнено ли поле Продукт
        if (Xrm.Page.getAttribute(productLookup).getValue())
            // Ждем 100 милисекунд и выполняем вызов функции Sample.MyFunctions.setUom
            setTimeout( function() { Sample.MyFunctions.setUom(productLookup, uomField) }, 100 );
    },
    setUom: function (productLookup, uomField) {
        // Формируем строку запроса...
        var serverURL = Xrm.Page.context.getServerUrl() + "/xrmservices/2011/OrganizationData.svc/ProductSet(guid'" + Xrm.Page.getAttribute(productLookup).getValue()[0].id + "')?$select=DefaultUoMId";
        // ... выполняем запрос
        var retrieveRequest = new XMLHttpRequest();
        retrieveRequest.open("GET", serverURL, false);
        retrieveRequest.send();
        
        // Вытаскиваем из ответа нужное значение
        var resultXml = retrieveRequest.responseXML;
        var doc = new ActiveXObject("MSXML2.DOMDocument");
        doc.async = false;
        doc.loadXML(retrieveRequest.responseText);
        var recordUom = doc.selectSingleNode("//entry/content/m:properties/d:DefaultUoMId");

        // Проверяем вернулось ли значение дефолтной Единицы измерения
        if (recordUom.text == "") {
            Xrm.Page.getAttribute(uomField).setValue(null);
            return;
        }

        // Формируем значение лукапа
        var lookup = new Object();
        lookup.id = recordUom.selectSingleNode("d:Id").text;
        lookup.entityType = "uom";
        lookup.name = recordUom.selectSingleNode("d:Name").text;

        var lookupValue = new Array();
        lookupValue[0] = lookup;

        // Подставляем в лукап Единицы измерения значение
        Xrm.Page.getAttribute(uomField).setValue(lookupValue);
    }
};

Прайс-лист

В качестве параметров в функцию Sample.MyFunctions.defaultPrice передается имя лукапа, в котором выбирается Организация и имя лукапа с Прайс-листом, в который необходимо подставить дефолтный Прайс-лист Организации.

Sample.MyFunctions = {
    defaultPrice: function (orgLookup, priceField) {
        // Проверяем заполнено ли поле Организация
        if (!Xrm.Page.getAttribute(orgLookup).getValue()) return;

        // Формируем строку запроса...
        var serverURL = Xrm.Page.context.getServerUrl() + "/xrmservices/2011/OrganizationData.svc/AccountSet(guid'" + Xrm.Page.getAttribute(orgLookup).getValue()[0].id + "')?$select=DefaultPriceLevelId";
        // ... выполняем запрос
        var retrieveRequest = new XMLHttpRequest();
        retrieveRequest.open("GET", serverURL, false);
        retrieveRequest.send();

        // Вытаскиваем из ответа нужное значение
        var resultXml = retrieveRequest.responseXML;
        var doc = new ActiveXObject("MSXML2.DOMDocument");
        doc.async = false;
        doc.loadXML(retrieveRequest.responseText);
        var recordPrice = doc.selectSingleNode("//entry/content/m:properties/d:DefaultPriceLevelId");

        // Проверяем вернулось ли значение дефолтного Прайс-листа
        if (recordPrice.text == "") {
            Xrm.Page.getAttribute(priceField).setValue(null);
            return;
        }

        // Формируем значение лукапа
        var lookup = new Object();
        lookup.id = recordPrice.selectSingleNode("d:Id").text;
        lookup.entityType = "pricelevel";
        lookup.name = recordPrice.selectSingleNode("d:Name").text;

        var lookupValue = new Array();
        lookupValue[0] = lookup;

        // Подставляем в лукап Прайс-лист значение
        Xrm.Page.getAttribute(priceField).setValue(lookupValue);
    }
};

Валюта

В качестве параметров в функцию Sample.MyFunctions.defaultCurrency передается имя лукапа, в котором выбирается Организация и имя лукапа с Валютой, в который необходимо подставить дефолтную Валюту Организации.

if (typeof (Sample) == "undefined") { Sample = {}; }

Sample.MyFunctions = {
    defaultCurrency: function (orgLookup, currencyField) {
        // Проверяем заполнено ли поле Организация
        if (!Xrm.Page.getAttribute(orgLookup).getValue()) return;

        // Формируем строку запроса...
        var serverURL = Xrm.Page.context.getServerUrl() + "/xrmservices/2011/OrganizationData.svc/AccountSet(guid'" + Xrm.Page.getAttribute(orgLookup).getValue()[0].id + "')?$select=TransactionCurrencyId";
        // ... выполняем запрос
        var retrieveRequest = new XMLHttpRequest();
        retrieveRequest.open("GET", serverURL, false);
        retrieveRequest.send();

        // Вытаскиваем из ответа нужное значение
        var resultXml = retrieveRequest.responseXML;
        var doc = new ActiveXObject("MSXML2.DOMDocument");
        doc.async = false;
        doc.loadXML(retrieveRequest.responseText);
        var recordPrice = doc.selectSingleNode("//entry/content/m:properties/d:TransactionCurrencyId");

        // Проверяем вернулось ли значение дефолтной Валюты
        if (recordPrice.text == "") {
            Xrm.Page.getAttribute(currencyField).setValue(null);
            return;
        }

        // Формируем значение лукапа
        var lookup = new Object();
        lookup.id = recordPrice.selectSingleNode("d:Id").text;
        lookup.entityType = "transactioncurrency";
        lookup.name = recordPrice.selectSingleNode("d:Name").text;

        var lookupValue = new Array();
        lookupValue[0] = lookup;

        // Подставляем в лукап Валюта значение
        Xrm.Page.getAttribute(currencyField).setValue(lookupValue);
    }
};
Комментарии (0)

*

code