Показать сообщение отдельно
Старый 18.10.2013, 21:28   #9  
kalina is offline
kalina
Участник
MCBMSS
 
25 / 16 (1) ++
Регистрация: 12.07.2011
Адрес: Израиль
Тоже столкнулся с проблемой изменения обычного лукапа в мульти.
Сразу скажу, что проверял в 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, но работает.
Если кто знает более поддерживамое решение, прошу поделиться

Последний раз редактировалось kalina; 18.10.2013 в 21:30.