Тоже столкнулся с проблемой изменения обычного лукапа в мульти.
Сразу скажу, что проверял в IE10 и Chrome для СРМ 2011 на ролапе 13.
Я пытался изменить обычный лукап на мульти, в котором можно выбрать несколько записей одного типа.
Но у меня проблема была в том, что такого кода...
Код:
document.getElementById("someentitynameid").setAttribute("lookupstyle", "multi");
...хватало только для визуальной имитации мульти лукапа:
- onChange срабатывал только для первого выбранного значения
- getValue давал только одно значение
- если лукап был пустым, то onChange не срабатывал, а getValue давал NULL
Одним словом было понятно, что лукап остался single.
В моем случае не понадобилось ничего вроде этого (ниже), т.к. не нужно да и не помогает и ничего не дает:
Код:
document.getElementById("someentitynameid").setAttribute("lookuptypes", "10063");
document.getElementById("someentitynameid").setAttribute("lookuptypenames", "someentityname:10063:Someentityname");
document.getElementById("someentitynameid").setAttribute("lookuptypeIcons", "/_imgs/ico_18_customEntity.gif");
document.getElementById("someentitynameid").setAttribute("defaulttype", "10063");
После многочасового реверсинжиниринга Майкрософтовского кода (не без помощи
Konstantin Katsovich, за что ему огромное спасибо), я нашел переменную, которая получает значение для каждого лукапа на форме во время загрузки формы:
- "single" = 1
- "multi" = 2
- "subject" = 3 (без понятия, для какого случая)
Когда закрывается окно выбора для лукапа, есть проверка этой переменной, и если у вас в лукапе много значений (это они умеют проверить, не смотря на то, что getValue дает только одно значение или NULL), а она не равна 2, то извините...
Решение:
к вышеупомянутой строчке, добавить еще одну:
Код:
document.getElementById("someentitynameid").setAttribute("lookupstyle", "multi");
Xrm.Page.getAttribute("someentitynameid")._attribute.$1a_2 = 2;
Если кому интересно, переменная находится в обьекте
Mscrm.LookupAttribute.prototype, а получает значение в функции
initializeFromDomElement. Все это находится в файле:
CRMFolderPath\CRMWeb\_static\_forms\Form.js
Конечно, это total unsupport, но работает.
Если кто знает более поддерживамое решение, прошу поделиться