1

我正在使用 CRM Online 2013。

我试图在特定条件下从选项集中删除 3 个值。默认情况下,选项集有六个选项:它们列在下面我的 JS 代码的顶部。

当我运行我的代码时,会出现正确数量的选项;但他们都说未定义。

未定义的图像示例

这是我目前所拥有的:

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 事件的函数调用的。我确信这可以正常工作,因为我在调用它时获得了正确的 beta 值。

我在重新添加之前删除所有选项以避免重复。

知道我在这里做错了什么/或知道更好的方法吗?

4

2 回答 2

8

重新编写您的函数以匹配标准。该选项是一个具有文本和值的对象。这就是为什么您会看到未定义(缺少文本);所以而不是

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);
}
于 2013-12-08T19:06:30.333 回答
0

示例使用 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);
于 2016-09-21T16:29:06.790 回答