Отображение модуля сложного фильтра на карточке

Есть необходимость отображения сложного фильтра (см скрин) в виде раздела определенной карточки (по нажатию на кнопку в разделе будет выполняться скрипт по обработке запроса, полученного из этого фильтра и дальнейшей обработке определенных записей).

Был ли у кого-то опыт размещения данного раздела на карточке? 

 

Нравится

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

Добрый день.

 

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

Пользовательских средств для реализации фильтра по умолчанию нет в коробке. Только разработкой.

 

Необходимо переопределить initQueryFilters
initQueryFilters: function(esq) {
                    this.callParent(arguments);
                    esq.filters.add("ConnectionType",
                            Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "ConnectionType",1));
                    }

 

Подобные вопросы рассматривались на портале, ссылки ниже:

https://community.creatio.com/questions/how-filter-section-list-records…

https://community.terrasoft.ru/questions/kak-predustanovit-uslovie-v-fi…

https://community.terrasoft.ru/questions/vidimost-sotrudnikov-v-kontakt…

https://community.creatio.com/questions/default-filter-section

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

Вы можете подсмотреть реализацию тут:
DocListInConditionPageV2
Там увидите подключение контейнера FilterProperties, в который подгружается FilterEditModule

Литвинко Павел,

Видимо, в текущей версии нет этого файла :( не могли бы поделиться его листингом?

Вадим Курунов пишет:

define("DocListInConditionPageV2", ["FilterEditModule"],
	function() {
		return {
			entitySchemaName: "DocListInCondition",
			attributes: {
				/**
				 * Filtration object schema name.
				 */
				"FilterEntitySchemaName": {
					"dataValueType": this.Terrasoft.DataValueType.TEXT,
					"type": this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
					"dependencies": [{
						"columns": ["DocumentListStage"],
						"methodName": "updateFilterModule"
					}]
				}
			},
			mixins: {},
			diff: /**SCHEMA_DIFF*/[
				{
					"operation": "insert",
					"name": "Document",
					"parentName": "Header",
					"propertyName": "items",
					"values": {
						"dataValueType": Terrasoft.DataValueType.LOOKUP,
						"value": {"bindTo": "Document"},
						"layout": {
							"column": 0,
							"row": 0,
							"colSpan": 10
						}
					}
				},
				{
					"operation": "insert",
					"name": "DocListGroup",
					"parentName": "Header",
					"propertyName": "items",
					"values": {
						"dataValueType": this.Terrasoft.DataValueType.ENUM,
						"value": {"bindTo": "DocListGroup"},
						"layout": {
							"column": 0,
							"row": 1,
							"colSpan": 10
						}
					}
				},
				{
					"operation": "insert",
					"name": "DocumentListStage",
					"parentName": "Header",
					"propertyName": "items",
					"values": {
						"dataValueType": Terrasoft.DataValueType.ENUM,
						"value": {"bindTo": "DocumentListStage"},
						"layout": {
							"column": 0,
							"row": 2,
							"colSpan": 10
						}
					}
				},
				{
					"operation": "insert",
					"name": "ParticipantRole",
					"parentName": "Header",
					"propertyName": "items",
					"values": {
						"dataValueType": Terrasoft.DataValueType.ENUM,
						"value": {"bindTo": "ParticipantRole"},
						"layout": {
							"column": 0,
							"row": 3,
							"colSpan": 10
						}
					}
				},
				{
					"operation": "insert",
					"name": "DocumentType",
					"parentName": "Header",
					"propertyName": "items",
					"values": {
						"dataValueType": Terrasoft.DataValueType.ENUM,
						"value": {"bindTo": "DocumentType"},
						"layout": {
							"column": 0,
							"row": 4,
							"colSpan": 10
						}
					}
				},
				{
					"operation": "insert",
					"name": "SysModuleReport",
					"parentName": "Header",
					"propertyName": "items",
					"values": {
						"dataValueType": Terrasoft.DataValueType.LOOKUP,
						"value": {"bindTo": "SysModuleReport"},
						"layout": {
							"column": 0,
							"row": 5,
							"colSpan": 10
						}
					}
				},
				{
					"operation": "insert",
					"name": "IsRequired",
					"parentName": "Header",
					"propertyName": "items",
					"values": {
						"layout": {
							"column": 0,
							"row": 6,
							"colSpan": 10
						}
					}
				},
				{
					"operation": "insert",
					"name": "FilterProperties",
					"parentName": "Header",
					"propertyName": "items",
					"values": {
						"id": "FilterProperties",
						"itemType": Terrasoft.ViewItemType.CONTAINER,
						"items": [],
						"layout": {
							"column": 15,
							"row": 0,
							"colSpan": 9,
							"rowSpan": 12
						}
					}
				},
				{
					"operation": "remove",
					"name": "actions"
				}
			]/**SCHEMA_DIFF*/,
			messages: {
				/**
				 * Subscription on filter change.
				 */
				"OnFiltersChanged": {
					mode: Terrasoft.MessageMode.BROADCAST,
					direction: Terrasoft.MessageDirectionType.SUBSCRIBE
				},
 
				/**
				 * Subscription on receiving of filter module configuration object.
				 */
				"GetFilterModuleConfig": {
					mode: Terrasoft.MessageMode.PTP,
					direction: Terrasoft.MessageDirectionType.SUBSCRIBE
				},
 
				/**
				 * Publishing message about setting filter module.
				 */
				"SetFilterModuleConfig": {
					mode: Terrasoft.MessageMode.BROADCAST,
					direction: Terrasoft.MessageDirectionType.PUBLISH
				}
			},
			methods: {
 
				/**
				 * Returns Id of filtration module.
				 * @protected
				 * @return {String} Filtration module Id.
				 */
				getFilterEditModuleId: function() {
					return this.sandbox.id + "_ExtendedFilterEditModule";
				},
 
				/**
				 * Loads filter module.
				 * @protected
				 */
				loadFilterModule: function() {
					var moduleId = this.getFilterEditModuleId();
					this.sandbox.subscribe("OnFiltersChanged", this.onFiltersChanged, this, [moduleId]);
					this.sandbox.subscribe("GetFilterModuleConfig", this.onGetFilterModuleConfig, this, [moduleId]);
					this.sandbox.loadModule("FilterEditModule", {
						renderTo: "FilterProperties",
						id: moduleId
					});
					this.set("FilterModuleLoaded", true);
				},
 
				/**
				 * Sets FilterConfig by filter that was received from filtration module.
				 * @param {Object} args Object with serialized filter.
				 * @protected
				 */
				onFiltersChanged: function(args) {
					this.hideBodyMask();
					this.setFilterConfig(args.serializedFilter);
				},
 
				/**
				 * Sets field FilterConfigand flag HasFilters in objects.
				 * @param {String} serializedFilter Serialized filter.
				 * @private
				 */
				setFilterConfig: function(serializedFilter) {
					this.set("FilterConfig", serializedFilter);
					var filters = this.Terrasoft.deserialize(serializedFilter);
					this.set("HasFilters", this.Ext.isEmpty(filters) ? false : filters.getCount() > 0);
				},
 
				/**
				 * Returns config for filtration module.
				 * @protected
				 * @return {Object} Cofiguration object.
				 */
				onGetFilterModuleConfig: function() {
					return {
						rootSchemaName: this.get("FilterEntitySchemaName"),
						filters: this.get("FilterConfig")
					};
				},
 
				/**
				 * Unloads filter module.
				 * @protected
				 */
				unloadFilterModule: function() {
					var moduleId = this.getFilterEditModuleId();
					this.sandbox.unloadModule(moduleId);
					this.set("FilterModuleLoaded", false);
				},
 
				/**
				 * Creates Terrasoft.EntitySchemaQuery instance for receiving SysEntitySchemaName of FilterEntity that
				 * is specified in DocumentListStage record.
				 * @protected
				 * @return {Terrasoft.EntitySchemaQuery} Terrasoft.EntitySchemaQuery instance with initialized
				 * rootSchemaName and columns
				 */
				getEsqForInitFilterEntityByDocListStage: function() {
					var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
						rootSchemaName: "DocumentListStage"
					});
					esq.addColumn("FilterEntity.SysEntitySchemaName", "FilterEntitySchemaName");
					return esq;
				},
 
				/**
				 * Initializes FilterEntitySchemaName property depending on the DocumentListStage property and calls
				 * callback function.
				 * @protected
				 * @param {Function} callback The callback function.
				 * @param {Object} scope The scope of callback function.
				 */
				initFilterEntity: function(callback, scope) {
					var docListStage = this.get("DocumentListStage");
					if (docListStage && docListStage.value) {
						this.initFilterEntityByDocListStage(docListStage.value, callback, scope);
					} else {
						this.set("FilterEntitySchemaName", null);
						this.Ext.callback(callback, scope);
					}
				},
 
				/**
				 * Receives SysEntitySchemaName of FilterEntity that is specified in DocumentListStage record,
				 * sets is to FilterEntitySchemaName property and calls callback funcion.
				 * @protected
				 * @param {Guid} docListStageId Id of document list stage record.
				 * @param {Function} callback The callback function.
				 * @param {Object} scope The scope of callback function.
				 */
				initFilterEntityByDocListStage: function(docListStageId, callback, scope) {
					var esq = this.getEsqForInitFilterEntityByDocListStage();
					esq.getEntity(docListStageId, function(result) {
						var entity = result.success ? result.entity : null;
						this.initFilterEntityByDocListStageCallback(entity);
						this.Ext.callback(callback, scope);
					}, this);
				},
 
				/**
				 * Processes result of query in initFilterEntityByDocListStage method.
				 * @protected
				 * @param {Object} entity Object with entity that returned by query.
				 */
				initFilterEntityByDocListStageCallback: function(entity) {
					var entitySchemaName = !this.Ext.isEmpty(entity)
						? entity.get("FilterEntitySchemaName")
						: null;
					this.set("FilterEntitySchemaName", entitySchemaName);
				},
 
				/**
				 * Updates filter module. Clears filter if filter object is changed.
				 * @protected
				 * @param {Function} callback The callback function.
				 * @param {Object} scope The scope of callback function.
				 */
				updateFilterModule: function(callback, scope) {
					this.showBodyMask();
					this.initFilterEntity(function() {
						var filterEntitySchemaName = this.get("FilterEntitySchemaName");
						if (this.Ext.isEmpty(filterEntitySchemaName)) {
							if (this.get("FilterModuleLoaded")) {
								this.setFilterConfig(null);
								this.unloadFilterModule();
							}
							this.hideBodyMask();
						} else if (!this.get("FilterModuleLoaded")) {
							this.loadFilterModule();
						} else {
							var config = this.get("IsEntityInitialized") ? null : this.get("FilterConfig");
							this.setFilterModuleConfig(filterEntitySchemaName, config);
						}
						this.Ext.callback(callback, scope);
					}, this);
				},
 
				/**
				 * Publishes message SetFilterModuleConfig for filtration module.
				 * @param {String} entitySchemaName Name of object that conditions will be setting for.
				 * @param {String} filterConfig Serialized filter.
				 * @protected
				 */
				setFilterModuleConfig: function(entitySchemaName, filterConfig) {
					var moduleId = this.getFilterEditModuleId();
					this.sandbox.publish("SetFilterModuleConfig", {
						rootSchemaName: entitySchemaName,
						filters: filterConfig
					}, [moduleId]);
				},
 
				/**
				 * @inheritdoc Terrasoft.BasePageV2#onEntityInitialized
				 * @overridden
				 */
				onEntityInitialized: function() {
					this.callParent(arguments);
					this.updateFilterModule();
				},
 
				/**
				 * @inheritdoc Terrasoft.BasePageV2#onDiscardChangesClick
				 * @overridden
				 */
				onDiscardChangesClick: function() {
					if (this.isNew) {
						this.sandbox.publish("BackHistoryState");
						return;
					}
					this.set("IsEntityInitialized", false);
					this.loadEntity(this.get("Id"), function() {
						this.updateButtonsVisibility(false, {
							force: true
						});
						this.initMultiLookup();
						this.updateFilterModule(function() {
							this.set("IsEntityInitialized", true);
							this.discardDetailChange();
						}, this);
					}, this);
					if (this.get("ForceUpdate")) {
						this.set("ForceUpdate", false);
					}
				}
			}
		};
	});

 

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