#dynamics-crm #dynamics-crm-2016
#dynamics-crm #dynamics-crm-2016
Вопрос:
Я пытаюсь ограничить объекты, которые пользователь может выбирать из поля «Относительно» в форме назначения, и установить некоторые представления по умолчанию, используемые этими полями поиска.
Основная идея заключается в том, что когда пользователь вводит данные в само поле, результаты должны предоставляться из вида по умолчанию для этого поиска, например «Контакты, за которыми я слежу», но когда пользователь вводит всплывающее окно «Поиск дополнительных записей», вид по умолчанию должен быть изменен на «Все контакты».
Это поле может отображаться во многих объектах, например, учетная запись, контакт, выставление счетов и т.д., и я хочу строго ограничить его только учетными записями.
Пока я нашел два способа сделать это:
1) Добавьте фильтры к полям поиска, чтобы не отображались любые записи, не соответствующие заданным критериям. Это делается с помощью addPreSearch
JS-функции из Xrm
библиотеки, например:
var addEventHandler = function (defaultView) {
Xrm.Page.getControl("contactid").addPreSearch(function () {
addFilter("contactid", defaultView)
});
}
var addFilter = function (entityName, defaultView) {
var filterXml = "<filter type = 'and'>"
"<condition attribute='contactid' operator='null'/>"
"</filter>";
Xrm.Page.getControl("contactid").addCustomFilter(filterXml, "contact");
Xrm.Page.getControl("contactid").setDefaultView(defaultView);
}
(Это всего лишь пример кода, фактически не применяемый к полю «Относительно»)
2) Второй вариант — использовать недокументированное решение, используя setLookupTypes
функцию в самом поле, например, так:
var limitLookupEntities = function () {
Xrm.Page.getAttribute("contactid").setLookupTypes(["contact"]);
}
var changeDefaultViewForLookup = function(viewGuid){
Xrm.Page.getControl("contactid").setDefaultView(viewGuid);
}
Проблема:
Проблема в том, что, как упоминалось ранее, поле «Относительно» может отображаться во многих объектах. Ограничение их с помощью решения 1) утомительно, поскольку необходимость создавать столько фильтров, сколько существует объектов, и применять их один за другим к полю не кажется правильным решением. Однако, как я это реализую, поведение просмотра по умолчанию работает так, как задумано — значение просмотра изменяется только для всплывающего окна.
Решение 2) намного проще в реализации и не потребует никаких изменений в будущем, если какие-либо новые объекты будут добавлены к связи с полем «Относительно», но представление по умолчанию применяется как к представлению «в поле», так и к представлению «всплывающее окно» по умолчанию.
Решение, которое я ищу, должно выполнить следующее:
- Это должно ограничить поиск только указанным объектом
- Оно не должно требовать какой-либо поддержки после внедрения, например, в случае, если в поле «Относительно» вводятся новые объекты.
- Оно должно быть общим — возможно, я захочу иметь возможность параметризовать его и использовать в других формах
- Изменение вида по умолчанию должно применяться только тогда, когда пользователь открывает всплывающее окно поиска
Возможно ли это вообще?
Версия CRM, в которой я это внедряю, — 8.2 on-prem.
Комментарии:
1. Что вы получили в итоге?
2. IIRC Я только что объяснил заинтересованным сторонам, что такая функциональность не рекомендуется в CRM, поскольку это может вызвать больше проблем, чем пользы. Извините за разочаровывающие новости: (
3. это нормально. Мне было интересно, стоит ли вся эта сложная реализация, если вообще стоит 🙂 поскольку это может быть исправлено простым обучением пользователя