Допустим, у нас в BPMonline 5.X есть документ с полями Contact1, Contact2, Contact3 (справочники, ссылаются на раздел контактов). Нужно на детали «Документы» раздела контактов отображать записи по совпадению любого из этих полей.
Если нужно отображать деталь с фильтрацией по нескольким полям, это можно сделать так:
Создаём новую страницу «Страница реестра документов контакта», унаследованную от «Страница реестра документов». Она приобретает все возможности обычной страницы реестра документов, нам нужно изменить только фильтрацию записей.
Переопределяем в бизнес-процессе событие «ScriptTaskBasePrepareFilters»:
Код скрипта:
var detailFilter = Page.DataSource.CurrentStructure.Filters.FindByName("DetailFilter");
if (detailFilter != null) {
Page.DataSource.CurrentStructure.Filters.Remove(detailFilter);
}
var viewFilter = Page.DataSource.CurrentStructure.Filters.FindByName("ViewFilters");
if (viewFilter != null) {
Page.DataSource.CurrentStructure.Filters.Remove(viewFilter);
}
//Новая группа фильтров с условием «или»
var filterGroup = Page.DataSource.CurrentStructure.CreateFiltersGroup("ViewFilters", LogicalOperationStrict.Or);
//Фильтры в группе
var filter1 = Page.DataSource.CreateFilterWithParameters(
FilterComparisonType.Equal,
"Contact1", SelectedNodePrimaryColumnValue);
var filter2 = Page.DataSource.CreateFilterWithParameters(
FilterComparisonType.Equal,
"Contact2", SelectedNodePrimaryColumnValue);
var filter3 = Page.DataSource.CreateFilterWithParameters(
FilterComparisonType.Equal,
"Contact3", SelectedNodePrimaryColumnValue);
//Добавляем фильтры в группу
filterGroup.Add(filter1);
filterGroup.Add(filter2);
filterGroup.Add(filter3);
//А группу фильтров — в источник данных
Page.DataSource.CurrentStructure.Filters.Add(filterGroup);
return true;
Готово. Осталось в настройках рабочих мест указать нужную страницу реестра детали, остальные настройки можно не менять.