Проблема с получением значения из динамического набора параметров (списка выбора) с помощью Javascript в CRM 2011

Я обновляю решение CRM 4 до CRM 2011, и у меня возникла проблема с динамическим набором опций.

Я заполняю набор параметров, вызывая API из Javascript. Это возвращает список вариантов текста и значений, которые я затем просматриваю.

Во-первых, я извлекаю сам объект и добавляю в список статический параметр по умолчанию:

var varPicklist = Xrm.Page.getControl("list_name");

//Add a System Default option to the picklist
var opt1 = new Option();
opt1.text = "System Default";
opt1.value = 100000;
varPicklist.addOption(opt1);

Затем я перебираю коллекцию, создаю объект и добавляю каждый из них в список:

//Populate the rest of the list
var ObjectList = xmlDoc.getElementsByTagName("LookupItem");
for (var i = 0 ; i < ObjectList.length ; i++) 
{
    var optValue
    var optText
    var ObjectListItems = ObjectList[i].childNodes;
    for (var j = 0 ; j < ObjectListItems.length ; j++)
    {
        var value = ObjectListItems[j].childNodes[0];
        if (ObjectListItems[j].nodeName == "Key")
        {
            optValue = value.nodeValue;
        }
        else if (ObjectListItems[j].nodeName == "Value")
        {
            optText = value.nodeValue;
        }
    }

var opt = new Option();
opt.text = optText;
opt.value = optValue;
varPicklist.addOption(opt);
};

Как уже говорилось, все это работает. Список выбора заполняется значениями и не вызывает ошибок. Если я вставлю туда предупреждение во время этого процесса, отобразятся правильные значения или метки.

Однако почему-то кажется, что предметы теряются по пути. Если я попытаюсь ссылаться на них каким-либо образом из другого места в форме, я верну ноль. Я пробовал это;

Xrm.Page.getAttribute("list_name").getSelectedOption().value

...и это;

Xrm.Page.getAttribute("list_name").getValue();

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

Но когда я попробовал те же методы с наборами параметров, которые содержали статические параметры, я без проблем смог получить к ним доступ.

Любая помощь с тем, где я ошибаюсь, будет оценена ...


person odinel    schedule 06.10.2017    source источник
comment
Как я понимаю из вашего вопроса, вы уже сохранили весь список наборов параметров в переменной с именем varPicklist. правильно ? Чем ты хочешь заняться? недостаточно ясно   -  person mzh    schedule 12.10.2017
comment
Нет, я начинаю с пустого элемента управления Option Set в форме. Затем при загрузке формы Javascript вызывает API. Это возвращает объект XML, который содержит все параметры. Затем я перебираю параметры, создаю объект Option и добавляю их в список по одному. Затем в форме я пытаюсь сослаться на варианты в списке. Проблема в том, что на данный момент я не могу ссылаться на эти параметры.   -  person odinel    schedule 12.10.2017


Ответы (1)


Список выбора CRM - это странный элемент управления. Хотя getAttribute и getControl являются манипуляторами DOM с поддержкой CRM, они не на 100% совместимы, как вы ожидаете от динамических параметров.

Пока вы не добавите физические статические параметры в настройки элемента управления раскрывающимся списком CRM, вы не сможете использовать их getAttribute.

Используя getControl, только вы отображаете свои параметры, но не исходные параметры раскрывающегося списка CRM для хранения в БД.

Добавьте все параметры как статические, на основе скрыть / показать по вашей потребности.

Обновлять:

Чтобы добавить новое значение набора параметров на лету, используйте InsertOptionValueRequest для нацеливания на службу метаданных и выполнения запроса. Прочтите MSDN

person Arun Vinoth    schedule 06.10.2017
comment
Спасибо за Ваш ответ. Итак, как мне превратить мои динамические параметры в статические и добавить их в элемент управления? Нужно ли мне вызывать API из другой части приложения и где-то сохранять значения? - person odinel; 09.10.2017
comment
Перейдите к объекту, отредактируйте список выбора и добавьте все параметры вручную. Почему вы хотите сделать это в коде? Как часто меняются эти параметры? Список выбора предназначен для статических данных (замораживание схемы). Поиск предназначен для динамических основных данных (администратор инструмента может добавлять / редактировать / удалять) без изменения схемы. - person Arun Vinoth; 09.10.2017
comment
Мы должны делать это программно. Параметры меняются не так часто, но они могут измениться в любой момент, и мы не хотим выпускать новую настройку, когда они это сделают. Я обошел это, используя JQuery вместо CRM. Спасибо, в любом случае - person odinel; 09.10.2017