Динамическое изменение значений набора параметров в CRM

Я использую CRM Online 2013.

Я пытаюсь удалить 3 значения из набора параметров при определенном условии. Набор параметров по умолчанию имеет шесть параметров: они перечислены в верхней части моего кода JS ниже.

Когда я запускаю свой код, появляется правильное количество опций; но все говорят undefined.

Пример неопределенного изображения

Вот что у меня есть на данный момент:

var customer = 100000000;
var partner = 100000001;
var partnerCustomer = 100000002;
var customerAndBeta = 100000003;
var partnerAndBeta = 100000004;
var partnerCustomerAndBeta = 100000005;

function populateBetaOptionSet(beta) {
    var options = Xrm.Page.getAttribute("intip_websiteaccess").getOptions();
    var pickListField = Xrm.Page.getControl("intip_websiteaccess");

    for(i = 0; i < options.length; i++)
    {
        pickListField.removeOption(options[i].value);           
    }

    if (beta == false) {
        pickListField.addOption(customer);
        pickListField.addOption(partner);
        pickListField.addOption(partnerCustomer);
    }

    pickListField.addOption(customerAndBeta);
    pickListField.addOption(partnerAndBeta);
    pickListField.addOption(partnerCustomerAndBeta);
}

Это вызывается из другой функции, которая связана с событием onchange отдельного поля. Я уверен, что это работает правильно, так как я получаю правильное значение бета-версии, когда оно вызывается.

Я удаляю все параметры перед их повторным добавлением, чтобы избежать дублирования.

Любая идея, что я делаю неправильно здесь/или знаю лучший способ сделать это?


person madbrendon    schedule 08.12.2013    source источник


Ответы (2)


Переписал вашу функцию, чтобы она соответствовала критерию. Опция представляет собой объект с текстом и значением. Вот почему вы видите undefined (отсутствует текст); Итак, вместо

var customer = 100000000 

это должно быть

var customer = { value : 100000000 , text : "Customer" };

Приведенный ниже код сохраняет каждую опцию в глобальной области видимости и использует ее каждый раз, когда вы вызываете populateBetaOptionSet.

function populateBetaOptionSet(beta) {
    var xrmPage = Xrm.Page;
    var pickListField = xrmPage.getControl("intip_websiteaccess");
    var options = pickListField.getOptions();

    //save all options  
    if (!window.wsOptions)
    {
         window.wsOptions = {};
         wsOptions.customer = pickListField.getOption(100000000);
         wsOptions.partner = pickListField.getOption(100000001);
         wsOptions.partnerCustomer = pickListField.getOption(100000002);
         wsOptions.customerAndBeta = pickListField.getOption(100000003);
         wsOptions.partnerAndBeta = pickListField.getOption(100000004);
         wsOptions.partnerCustomerAndBeta = pickListField.getOption(100000005);
    }

    //clear all items
    for(var i = 0; i < options.length; i++)
    {
            pickListField.removeOption(options[i].value);           
    }

    if (beta == false) {
        pickListField.addOption(wsOptions.customer);
        pickListField.addOption(wsOptions.partner);
        pickListField.addOption(wsOptions.partnerCustomer);
    }

    pickListField.addOption(wsOptions.customerAndBeta);
    pickListField.addOption(wsOptions.partnerAndBeta);
    pickListField.addOption(wsOptions.partnerCustomerAndBeta);
}
person Adi Katz    schedule 08.12.2013
comment
Конечно! Это гораздо более чистый подход к тому, что у меня было. Спасибо!! - person madbrendon; 08.12.2013

Пример использования Xrm.Page.getControl(..).addOption :

    var low = {value : 100000000, text : "Low"};
    var medium = {value : 100000001, text : "Medium"};
    var high = {value : 100000002, text : "High"};

    var pickList = Xrm.Page.getControl("control_name");
    var options = pickList.getOptions();

    for (var i = 0; i < options.length; i++) 
        pickList.removeOption(options[i].value);

    pickList.addOption(low);
    pickList.addOption(medium);
    pickList.addOption(high);
person Domenico Zinzi    schedule 21.09.2016
comment
Просто обратите внимание, что по состоянию на ноябрь 2018 г. (8.2.3.114) control.getOptions() возвращает значение null, а код pickList.getOptions() больше не работает. - person Raj Rao; 28.11.2018