Добрый день!
Нужно отифильтровать деталь по колонке Купили (UsrPayed). Как это можно сделать. Быстрые фильтры не подойдут, т.к сбрасываются после обновления страницы
![]()
Нравится
отфильтровать во время загрузки (т.е. всегда отобрать только "да"?) или нужен какой-то переключатель?
В любом случае нужно смотреть в сторону filterMethod, на странице где инициализируется деталь.
Пример кода
"ContactCareerDetailV20234b804": {
"schemaName": "ContactCareerDetailV2",
"entitySchemaName": "ContactCareer",
"filter": {
"detailColumn": "Account",
"masterColumn": "Id"
},
"filterMethod": "actualContactFilter"
}
типа того, а в
actualContactFilter писать esq
actualContactFilter: function() {
var AccountId = this.get("Id");
var filterGroup = new this.Terrasoft.createFilterGroup();
filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
filterGroup.add("AccountFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "Account", AccountId));
filterGroup.add("LogicalFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "UsrLogical", true));
return filterGroup;
},Если переключателем, то там уже кода сильно больше, надо делать messages, возможно еще сохранение этого переключателя в кэше пользователя.
В схеме детали добавляется CheckBox и прописываете на него обработку (у нас пример на актуальность статуса, вы можете сделать по своей логике:
attributes: {
"ActualOnly": {
dataValueType: Terrasoft.DataValueType.BOOLEAN,
type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
value: true
}
},
diff: /**SCHEMA_DIFF*/[
{
"operation": "insert",
"name": "ActualOnly",
"parentName": "Detail",
"propertyName": "tools",
"values": {
"bindTo": "ActualOnly",
"labelConfig": {
"caption": { "bindTo": "Resources.Strings.ActualOnlyCheckboxCaption" }
},
"visible": {
"bindTo": "getActualOnlyFilterVisible"
},
"controlConfig": {
"className": "Terrasoft.CheckBoxEdit",
"checkedchanged": { "bindTo": "changeActualOnlyFilter" },
"checked": { "bindTo": "ActualOnly" }
},
"classes": {
"labelClass": ["checkbox-caption"]
},
}
}
]/**SCHEMA_DIFF*/,
changeActualOnlyFilter: function(checked) {
this.set("ActualOnly", checked);
this.reloadGridData();
},
getFilters: function() {
var filters = this.callParent(arguments);
var filterKey = "ActualOnlyFilter";
var ActualOnly = this.get("ActualOnly");
if (ActualOnly && !filters.contains(filterKey)) {
filters.add(filterKey, this.Terrasoft.createColumnFilterWithParameter(
Terrasoft.ComparisonType.EQUAL, "UsrStatus.UsrActual", true));
} else if (filters.contains(filterKey)) {
filters.removeByKey(filterKey);
}
return filters;
},
getActualOnlyFilterVisible: function() {
return this.getFiltersVisible();
},
getFiltersVisible: function() {
return !this.get("IsDetailCollapsed");
}
Здравствуйте!
Вы можете посмотреть как похожий фильтр реализован в базовой версии системы. Примеров реализации будет фильтр на детали "Хронология". Блок фильтров этой детали сделан в TimelineFiltersSchema.
Также в ряде подобных статей есть примеры и подсказки:
https://community.terrasoft.ua/questions/kak-dobavit-filtr-v-detali
https://community.terrasoft.ru/articles/primery-filtrov-v-detali
https://community.terrasoft.ru/questions/bystrye-filtry-po-dannym-detal…
https://community.creatio.com/questions/quick-filters-detail
https://community.creatio.com/questions/prefilter-detail-grid-page-load
https://community.creatio.com/questions/how-add-quick-filters-detail
Трефилов Павел Сергеевич,
Спасибо! Но при добавлении фильтра по id обьекат Account, деталь не отображается на странице.
filterGroup.add("AccountFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "Account", AccountId));
Если убрать строку, деталь отображается и фильтруется. Но не по тому обьекту Account в которую зашли