Фильтрация связи N:N в CRM 2015
Задача: имеется N:N связь между Контактом и кастомным объектом Страна. Необходимо сделать так, чтобы при выборе страны к контроле выбора записей Страны там отображались только определенные страны.
Исполнение:
- Создайте JS Веб-ресурс с таким кодом:
// Фильтруем связь N:N function addExistingFromSubGridCustom(gridTypeCode, gridControl, context, fetch, layout, viewName) { var viewId = "{11111111-1111-1111-1111-111111111111}"; // Любой ID var relName = gridControl.GetParameter("relName"); var roleOrd = gridControl.GetParameter("roleOrd"); // Создаем кастомное Представление var customView = { fetchXml: fetch, id: viewId, layoutXml: layout, name: viewName, recordType: gridTypeCode, Type: 0 }; var parent = GetParentObject(null, 0); var parameters = [gridTypeCode, "", relName, roleOrd, parent]; var callbackRef = Mscrm.Utilities.createCallbackFunctionObject("locAssocObjAction", context, parameters, false); // Вызываем лукап с нашим кастомным представлением LookupObjectsWithCallback(callbackRef, null, "multi", gridTypeCode, 0, null, "", null, null, null, null, null, null, viewId, [customView]); } // Фильтруем N:N связь Стран с Контактом function filterAddExistingCountry(gridTypeCode, gridControl) { // FetchXML, который возвращает отфильтрованные данные var fetch = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>" + " <entity name='new_country'>" + " <attribute name='new_name' />" + " <order attribute='new_name' descending='false' />" + " <filter type='and'>" + " <condition attribute='statecode' operator='eq' value='0' />" + " <condition attribute='new_name' operator='like' value='%о%' />" + " </filter>" + " </entity>" + "</fetch>"; // Настраиваем колонки в кастомном представлении var layout = "<grid name='resultset' object='10006' jump='new_countryid' select='1' icon='1' preview='1'>" + " <row name='result' id='new_countryid'>" + " <cell name='new_name' width='300' />" + " </row>" + "</grid>"; addExistingFromSubGridCustom(gridTypeCode, gridControl, this, fetch, layout, "Страны с буквой О"); }
Здесь две функции:
- Первая – основная – формирует кастомное Представление и другие параметры, а затем подсовывает их служебной функции;
- Вторая – настроечная – в ней мы определяем параметры фильтрации и столбцы для Представления.
- Добавьте JS Веб-ресурс на форму Контакта;
- Измените для объекта Страна CommandDefinition для кнопки Add Existing. XML будет примерно такой:
<CommandDefinition Id="Mscrm.AddExistingRecordFromSubGridAssociated"> <EnableRules> <EnableRule Id="Mscrm.AppendToPrimary" /> <EnableRule Id="Mscrm.EntityFormIsEnabled" /> </EnableRules> <DisplayRules> <DisplayRule Id="Mscrm.AddExisting" /> <DisplayRule Id="Mscrm.ShowForManyToManyGrids" /> <DisplayRule Id="Mscrm.AppendToPrimary" /> <DisplayRule Id="Mscrm.AppendSelected" /> </DisplayRules> <Actions> <JavaScriptFunction FunctionName="filterAddExistingCountry" Library="$webresource:new_contact.js"> <CrmParameter Value="SelectedEntityTypeCode" /> <CrmParameter Value="SelectedControl" /> </JavaScriptFunction> </Actions> </CommandDefinition>
Здесь по сравнению со стандартным CommandDefinition мы только перенаправляем JS вызов на кастомную библиотеку с нашей функцией.
Готово – идем тестировать.
Добрый вечер! Интересует очень один вопрос.
Возможно ли отфильтровать сабгрид по текущим контакткам? Что-то как у Ответственный = текущий пользователь.
Добрый день.
CRM какой версии?
Установлена crm 2016
Попробуйте так: http://mmcrm.ru/?p=6140