Добрый день!

 

Нужно отифильтровать деталь по колонке Купили (UsrPayed). Как это можно сделать. Быстрые фильтры не подойдут, т.к сбрасываются после обновления страницы

 

Изображение удалено.

Нравится

4 комментария

отфильтровать во время загрузки (т.е. всегда отобрать только "да"?) или нужен какой-то переключатель?

 

В любом случае нужно смотреть в сторону 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 в которую зашли

Показать все комментарии

В продукте sales enterprice 7.8 в карточку раздела я добавила деталь "Запросы" с фильтром, отображающем на детали записи только с определенным типом.
Фильтр детали работает, но только после сброса кеша в браузере.
Без фильтра реестр записи обновлялся сразу после добавления записи на деталь. Как реализовать мгновенное обновление отфильтрованного реестра детали?

Нравится

5 комментариев

Здравствуйте, Анастасия.

Не совсем понятно каким образом была добавлена фильтрация на деталь. В целом, обновление записей на деталях происходит через вызов метода updateDetails в карточке или же публикацию сообщения "UpdateDetail".

Более подробно о использовании сообщений Вы можете почитать по следующей ссылке:

http://www.community.terrasoft.ru/forum/topic/15210

"Мотков Илья" написал:

Здравствуйте, Анастасия.

Не совсем понятно каким образом была добавлена фильтрация на деталь. В целом, обновление записей на деталях происходит через вызов метода updateDetails в карточке или же публикацию сообщения "UpdateDetail".

Более подробно о использовании сообщений Вы можете почитать по следующей ссылке:

http://www.community.terrasoft.ru/forum/topic/15210

Вот код:

details{
"UsrSchema4Detail19b3960f": {
"schemaName": "UsrSchema4Detail",
"entitySchemaName": "UsrRequest",
"filter": {
"detailColumn": "UsrSale",
"masterColumn": "Id"
},
"filterMethod": "UsrRequestFilter1"
}
}

methods{
UsrRequestFilter1: function() {
var filterGroup = new this.Terrasoft.createFilterGroup();
filterGroup.logicalOperation = Terrasoft.LogicalOperatorType.AND;
filterGroup.add(
"OpportunityFilter",
this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL,
"UsrSale",
this.get("Id")
)
);
filterGroup.add(
"UsrRequestFilter",
this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL,
"UsrTypeRequest",
"38cc7931-7db6-4e12-a343-1033f6316cf1"
)
);
return filterGroup;
}

}

В методе UsrRequestFilter1 после "return filterGroup;" теперь вызвали фунцию this.updateRequestDetails();

Сама функция:
updateRequestDetails: function(callback) {
this.updateDetail({detail: "UsrSchema4Detail19b3960f"});
callback.call(this);
}

Этот код разместили в карточке раздела, но лишние, не подходящие под условие фильтрации, записи после их добавления на деталь все равно пропадают с детали только после сброса кеша страницы.

Также пробовали код:

messages: {
"SetFilter": {
mode: Terrasoft.MessageMode.PTP,
direction: Terrasoft.MessageDirectionType.SUBSCRIBE
}
}
Деталь в массиве details:

"UsrSchema3Detailddb8302f": {
"schemaName": "UsrSchema3Detail",
"entitySchemaName": "UsrRequest",
"filter": {
"detailColumn": "UsrSale",
"masterColumn": "Id",
"UsrTypeRequest": "D0FBEB54-1381-4B01-A1F4-2BF074639122"
},
"filterMethod": "UsrRequestFilter1"
}

В массиве metthods разместили:
init: function() {
this.callParent(arguments);
console.log(this.sandbox.id);
this.sandbox.subscribe("SetFilter", function(arg) {
this.UsrRequestFilter1();
}, this, [this.getSenderSandboxId()]);
},
getSenderSandboxId: function() {
return this.sandbox.id + "_detail_UsrSchema3Detailddb8302fUsrRequest";
}

Но все равно фильтрация начинает работать только после сброса кеша.

Здравствуйте,
updateDetail точно не в фильтр метод нужно добавлять.
Проверьте для начала отладкой (точкой останова в фильтр методе), вызывается ли фильтр метод после добавления новой записи в деталь. Если не вызывается, то это будет один вопрос. Если вызывается но не фильтруются записи. Другой.
Так же вероятно в фильтр методе эта группа лишняя:
filterGroup.add(
"OpportunityFilter",
this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL,
"UsrSale",
this.get("Id")
)
);
Ведь по данной связи идет фильтрация и так благодаря:
"filter": {
"detailColumn": "UsrSale",
"masterColumn": "Id"
},
Проверьте вышесказанное и отпишитесь.

Показать все комментарии

Через мастер деталей создали 2 детали - Запросы поставщикам и Запросы инженерам на основе одного объекта - Запросы. Теперь нужно на каждой детали отфильтровать записи по типу запроса (запрос поставщикам и запрос инженерам). Вот код на примере одной из деталей:

В детали прописали "filterMethod":

"UsrSchema4Detail19b3960f": {
"schemaName": "UsrSchema4Detail",
"entitySchemaName": "UsrRequest",
"filter": {
"detailColumn": "UsrSale",
"masterColumn": "Id"
},
"filterMethod": "Order1Filter"
}

Затем в массиве metthods карточки раздела прописали функцию фильтрации:
Order1Filter: function() {
var filterGroup = new this.Terrasoft.createFilterGroup();
filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
filterGroup.add("UsrTypeRequestFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "UsrTypeRequest", "d0fbeb54-1381-4b01-a1f4-2bf074639122") // Образцы
);
filterGroup.add("ByOpportunityFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "Opportunity", this.get("Id"))
);
return filterGroup;
}

Но фильтрация не работает. Что делаем не так?

Нравится

3 комментария

Здравствуйте!

Рекомендую посмотреть схему детали ActivityDetailV2 - там добавлен фильтр, который отсеивает активности с типом Email.
Вам необходимо реализовать такую же логику в схеме UsrSchema4Detail.

Алексей, здравствуйте!

Вопрос такой: сейчас фильтрация работает, но только при загрузке. Как вызвать фильтр при добавлении нового элемента на деталь с реестром?

"Демьяник Алексей" написал:

Здравствуйте!

Рекомендую посмотреть схему детали ActivityDetailV2 - там добавлен фильтр, который отсеивает активности с типом Email.

Вам необходимо реализовать такую же логику в схеме UsrSchema4Detail.

Вопрос Дениса очень актуален! Нужно, чтобы фильтрация срабатывала сразу после добавления записи на деталь, а не после сброса кеша в браузере.

Показать все комментарии