Код добавляется на ту страницу редактирования, где выведены детали. Например, AccountPageV2
ВАЖНО! Если мы пишем свои фильтры, то первым делом необходимо прописать основной фильтр для связи детали. Аналог того, что мы выбираем в мастере при выводе детали на страницу.
ПОСЛЕДОВАТЕЛЬНОСТЬ ДЕЙСТВИЙ:
1. Объявить метод фильтрации в месте вывода детали на странице. Пример ниже
"ContractDetailV20ddfbca0": {
"schemaName": "ContractDetailV2",
"entitySchemaName": "Contract",
"filter": {
"detailColumn": "Account",
"masterColumn": "Id"
}, //не забываем здесь поставить запятую
"filterMethod": "ContractFilter" // добавляем такую строчку. Название (справа) может быть любым.
},
Описать сам метод в блоке methods{}. Примеры ниже.
ПРИМЕРЫ:
2.1 Стандартный фильтр для связи детали. В данном примере на странице Контрагента наполняет деталь Договоры записями, в которых в поле "Account" указан текущий Контрагент.
ContractFilter: function() {
var filterGroup = new this.Terrasoft.createFilterGroup(); //создаем группу фильтров
filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND; //определяем тип фильтра AND или OR
filterGroup.add("ByAccountFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "Account", this.get("Id"))
); //Собственно, само условие
return filterGroup;
},
"ByAccountFilter" - название элемента группы фильтров. Может быть любым
Возможные ComparisonType можно посмотреть в консоле, введя Terrasoft.ComparisonType и нажав Enter
Общий вид примерно такой: this.Terrasoft.ComparisonType.EQUAL, Памаметр1, Параметр2
2.2 Фильтр по типу. Выводит записи, у которых Тип НЕ равняется заданным (используем ID нужных нам типов)
ContractFilter: function() {
var filterGroup = new this.Terrasoft.createFilterGroup();
filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
filterGroup.add("ByAccountFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "Account", this.get("Id"))
);
filterGroup.add("ByTypeFilter1", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.NOT_EQUAL, "Type", "009c6fa7-2e35-4a94-afd5-03ad8c3eff38")
);
filterGroup.add("ByTypeFilter2", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.NOT_EQUAL, "Type", "42b49a15-1d6c-4fa3-b24a-45711ba90cb3")
);
return filterGroup;
},
Также, если нужно фильтровать запись по значению колонки внутри справочника нашего обьекта(например фильтровать договора, по колонке категории продукта в договоре), можно использовать такой синтаксис в кавычках: вместо "Type" пишем "Product.Category".
2.3 Фильтр по незаполненному полю. Выводит записи, у которых не заполнено заданное поле
ContractFilter: function() {
var filterGroup = new this.Terrasoft.createFilterGroup();
filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
filterGroup.add("ByAccountFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "UsrAccount", this.get("Id"))
);
filterGroup.add(this.Terrasoft.createIsNullFilter(
this.Ext.create("Terrasoft.ColumnExpression", {columnPath: "UsrEndDate"}) // UsrEndDate - колонка детали, которая пустая
));
return filterGroup;
},
2.4 Фильтр по дате. Выводит записи, у которых дата лежит в пределах от "сегодня" до "сегодня + 60 дней" (значения в миллисекундах)
GraphicFilter: function() {
var now = new Date();
var filterGroup = new this.Terrasoft.createFilterGroup();
filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
filterGroup.add("ByAccountFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "UsrAccount", this.get("Id"))
);
filterGroup.add("ByDateFilter1", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.GREATER_OR_EQUAL, "UsrDATE", this.Terrasoft.startOfDay(now))
);
filterGroup.add("ByDateFilter2", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.LESS_OR_EQUAL, "UsrDATE", this.Terrasoft.endOfDay(new Date(new Date().getTime() + 5184000000)))
);
return filterGroup;
},
2.5 Пример вложенности групп фильтров. Выводит связанные записи, у которых Стадия или 1я, или 2я.
Создаем две группы фильтров с операторами AND и OR. Перечисляем все элементы групп в произвольном порядке. В конце вкладываем группу OR в группу AND
OppFilter: function() {
var filterGroupAnd = new this.Terrasoft.createFilterGroup();
filterGroupAnd.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
var filterGroupOr = new this.Terrasoft.createFilterGroup();
filterGroupOr.logicalOperation = this.Terrasoft.LogicalOperatorType.OR;
filterGroupAnd.add("ByAccountFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "Account", this.get("Id"))
);
filterGroupOr.add("ByStageFilter1", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "Stage", "c2067b11-0ee0-df11-971b-001d60e938c6")
);
filterGroupOr.add("ByStageFilter2", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "Stage", "325f0619-0ee0-df11-971b-001d60e938c6")
);
filterGroupAnd.addItem(filterGroupOr);
return filterGroupAnd;
},