25.06.2013, 01:34 | #1 |
Участник
|
Multi LookUp и кроссбаузерность
Подскажите, как можно обойти такую проблему.
Есть LookUp, который на onLoad формы превращается в мулти и заполняется данными из некого скрытого поля. Код: document.getElementById(fieldName).setAttribute("lookupstyle", "multi"); var temp = Xrm.Page.getAttribute(hiddenField).getValue(); //преобразование данных в массив значений для LookUp ... var value = new Array(); for(i = 0; ...) { value[i] = new Object(); value[i].id = id[i]; value[i].name = name[i]; value[i].typename = typename; } document.getElementById(fieldName).DataValue = value; Код: var value = document.getElementById(fieldName).DataValue; ... Xrm.Page.getAttribute(hiddenField).setValue(temp); Xrm.Page.getAttribute(fieldName).setValue(null); document.getElementById(fieldName).setAttribute("lookupstyle", "single"); Поиски гуглом навели на совет использовать вместо crmForm.all[fieldName] конструкцию Xrm.Page.getAttribute(fieldName), именно так советует МС. Но с записью массива значений такой фокус не проходит. Последний раз редактировалось vasya-serega; 25.06.2013 в 01:37. |
|
25.06.2013, 10:17 | #2 |
Участник
|
Задать значение для Лукапа
Xrm.Page.getAttribute('new_fieldid').setValue([{ id: 'guid', name: fullName, entityType: 'entityTypeName'}]); Так задается массив. |
|
25.06.2013, 13:01 | #3 |
Участник
|
Это если нужно установить одно значение. А в моему случае может понадобится сразу несколько.
Код Код: var value = new Array(); for(i = 0; i<n; i++) { value[i] = new Object(); value[i].id = id[i]; value[i].name = name[i]; value[i].typename = typename; } Xrm.Page.getAttribute(fieldName).setValue(value); |
|
25.06.2013, 15:57 | #4 |
Участник
|
хм... ну и правильно у вас будет ошибка так как в простой лукап вы пробуете запихнуть несколько записей.
Вам нужно расширить его ну читайте полную статью как это сделать тут, там все есть и картинки |
|
25.06.2013, 16:15 | #5 |
Чайный пьяница
|
Цитата:
Сообщение от spectr
хм... ну и правильно у вас будет ошибка так как в простой лукап вы пробуете запихнуть несколько записей.
Вам нужно расширить его ну читайте полную статью как это сделать тут, там все есть и картинки 1. Эндпоинты 4.0 (которые там используются) в одном из следующих роллапов будут вырезаны. 2. Код написан не кроссбраузерно, соответственно под хром или ФФ не заработает. selectNodes, selectSingleNode понимаете ли. Но как мануал, куда копать - годится.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
25.06.2013, 16:37 | #6 |
Участник
|
Если тот громоздкий пример по ссылке не кроссбраузерный, то зачем он нужен? Под ИЕ у меня и так всё прекрасно работает. Как раз вся соль и состоит в том, чтобы под Хромом найти способ в лукап помещать и считывать обратно несколько значений.
|
|
25.06.2013, 20:29 | #7 |
Участник
|
|
|
21.08.2013, 01:34 | #8 |
Участник
|
Занимаясь другой задачей, правда тоже связанной с настраиваемым лукапом столкнулся с одной неприятностью. При вызове окна выбора связанной сущности появляется ошибка, но без возможности просмотреть лог. Можно ли как-то принудительно заставить все ошибки писать в лог так, чтобы они потом были доступны?
|
|
18.10.2013, 21:28 | #9 |
Участник
|
Тоже столкнулся с проблемой изменения обычного лукапа в мульти.
Сразу скажу, что проверял в IE10 и Chrome для СРМ 2011 на ролапе 13. Я пытался изменить обычный лукап на мульти, в котором можно выбрать несколько записей одного типа. Но у меня проблема была в том, что такого кода... Код: document.getElementById("someentitynameid").setAttribute("lookupstyle", "multi");
В моем случае не понадобилось ничего вроде этого (ниже), т.к. не нужно да и не помогает и ничего не дает: Код: 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");
Решение: к вышеупомянутой строчке, добавить еще одну: Код: document.getElementById("someentitynameid").setAttribute("lookupstyle", "multi"); Xrm.Page.getAttribute("someentitynameid")._attribute.$1a_2 = 2; Конечно, это total unsupport, но работает. Если кто знает более поддерживамое решение, прошу поделиться Последний раз редактировалось kalina; 18.10.2013 в 21:30. |
|
19.10.2013, 01:43 | #10 |
Чайный пьяница
|
Поддерживаемого (supported) решения для решения этой задачи без разработки своих вебресурсов без DOM инъекций - попросту нет.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
22.10.2013, 11:27 | #11 |
Участник
|
У меня тоже возникла подобная проблема, свое решение описал вот здесь
http://crmcustom.blogspot.ru/ С a33ik полностью согласен, для этих целей в CRM используется связь N:N и сабгрид. |
|
22.10.2013, 13:32 | #12 |
Участник
|
a33ik можно сделать (полу-supported) решение на основании web-ресурсов.
На основании двух проектов под кодовыми названиями Mirage и ELL(emulation links lookup) могу сказать что отлично все работает в всех браузерах через lookupinfo.aspx если с выходом нового UR изменится архитектура в lookupinfo.aspx то слетит только работа web-ресурса, а это не критично в 99% так как за основу таких лукапов взята обратная связь или N:N и 99.9% что ничего критичного там не поменяется. Пример ELL: И часть Mirage (коммерческая тайна, ну или чтобы было меньше нытья в мою сторону): Последний раз редактировалось spectr; 22.10.2013 в 13:39. |
|
|
За это сообщение автора поблагодарили: kalina (1). |
22.10.2013, 13:48 | #13 |
Участник
|
И чтобы вы меня не "шпыняли" скажу что решения готового еще нет (руки не доходят), но соединив ELL идеи и возможности Mirage это легко для всех вариантов (одиночний, мульти, патилист или темы)
|
|
23.10.2013, 11:46 | #14 |
Участник
|
Цитата:
Сообщение от Skyway
У меня тоже возникла подобная проблема, свое решение описал вот здесь
http://crmcustom.blogspot.ru/ И я полностью согласен, но клиент очень крепкий попался: "Не хочу", - говорит, - "таблицу. Ты мне лукап-поле нарисуй." |
|
29.10.2013, 11:59 | #15 |
Участник
|
Возникла проблема с ИЕ 7-8 при повторном открытии значение лукапа теряет название.
Использую код для мультилукапа: Код: var sLookup = openStdDlg(getServerUrl("_controls/lookup/lookupinfo.aspx?LookupStyle=multi&objecttypes=10018&ShowNewButton=0&ShowPropButton=1&browse=false&AllowFilterOff=0&DefaultType=10018&DisableQuickFind=0&DisableViewPicker=0"),tm.crm.block[_no-1].new_placeid,600,600,false); if (sLookup){ if (!sLookup.items){ sLookup = JSON.parse(sLookup); } if (sLookup.items && (sLookup.items.length > 0)){ _ul.html(tm.mirage.addFieldsLookup(sLookup.items)); tm.crm.addLookupValues(sLookup.items); tm.crm.replaceBlock(_no,{new_placeid:sLookup}); }else{ _ul.html(""); tm.crm.replaceBlock(_no,{new_placeid:null}); } } После выбора получил все нормально в код: Открываю снова лукап и возвращаю ему объект и получаю гадость: Весь функционал работает нормально в IE9, Chrome и FF. В IE7-8 функционал кнопок (Свойства и д.р) работает нормально определяет те записи что нужно. Проблема только в потери названия. Чем там отличается прием данных ? Кто что знает ? |
|
29.10.2013, 13:11 | #16 |
Участник
|
нашел сам решение
там есть функция которая отвечает за названия XUI.Html.GetText вот она в зависимости от браузера берет названия с textContent или value или innerText потому расширил свою функцию заглушки: Код: addLookupValues: function(items){ var len = items.length; for (var i = 0; i < len; i++){ items[i].getAttribute = tm.crm.getAttribute; items[i].textContent = items[i].name; items[i].value = items[i].name; items[i].innerText = items[i].name; } }, |
|
|
За это сообщение автора поблагодарили: kalina (1). |
08.07.2015, 13:17 | #17 |
Даёшь прямые руки!
|
Всем доброго времени суток!
Отличная тема! Много чего интересного вычетал! Но вот не смог найти решение для своей задачи. Меня тоже интересует мультилукап, но с возможностью его дальнейшего использования в не интерфейса. Постараюсь описать суть проблемы. Заказчик хочет, чтобы я создал некое поле/сабгрид в котором человек мог бы выбрать произвольное количество записей сущности «Пользователь» и до этого момента всё выше описанное мне подходит! Но вот вторая задача заключается в том, что мне нужно отправить почтовые уведомления этим личностям. В случаи с отношением n:n (сабгрид) экземпляр рабочего процесса не может быть запущен для выбранного пользователя (либо я что-то не так делаю но в списке связных сущностей такой записи не значится). В случаи если хранить строку с вытащенными почтовыми адресами (мультилукап) CRM не даёт назначить это поле как источник для получателей. Самое простое решение - это напилить некоторое количество лукапных полей и динамически их отображать на мой взгляд не подходит, так как всего может быть назначено порядка 20 юзеров и больше. Ссылки на подобного рода решения будет достаточно. Заранее всем спасибо за потраченное время, и да прибудет с вами не иссекаемый багаж решений! |
|
08.07.2015, 13:35 | #18 |
Даёшь прямые руки!
|
Похоже, я поторопился с вопросом. Немного подумав нашёл вот это http://www.mscrmconsultant.com/2013/...script-in.html . Судя по всему с вариантом через сабгрид должно прокатить, главное написать правильный скрипт для вытягивания данных из него!
|
|
Теги |
crossbrowsing, lookup, multi, rollup 13, кроссбаузерность, crm2011 |
|
|