Dynamics CRM ограничивает «в отношении» поля поиска только для 1 объекта в форме назначения и устанавливает вид по умолчанию для «Просмотра»

#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) намного проще в реализации и не потребует никаких изменений в будущем, если какие-либо новые объекты будут добавлены к связи с полем «Относительно», но представление по умолчанию применяется как к представлению «в поле», так и к представлению «всплывающее окно» по умолчанию.

Решение, которое я ищу, должно выполнить следующее:

  1. Это должно ограничить поиск только указанным объектом
  2. Оно не должно требовать какой-либо поддержки после внедрения, например, в случае, если в поле «Относительно» вводятся новые объекты.
  3. Оно должно быть общим — возможно, я захочу иметь возможность параметризовать его и использовать в других формах
  4. Изменение вида по умолчанию должно применяться только тогда, когда пользователь открывает всплывающее окно поиска

Возможно ли это вообще?

Версия CRM, в которой я это внедряю, — 8.2 on-prem.

Комментарии:

1. Что вы получили в итоге?

2. IIRC Я только что объяснил заинтересованным сторонам, что такая функциональность не рекомендуется в CRM, поскольку это может вызвать больше проблем, чем пользы. Извините за разочаровывающие новости: (

3. это нормально. Мне было интересно, стоит ли вся эта сложная реализация, если вообще стоит 🙂 поскольку это может быть исправлено простым обучением пользователя