Вопрос

Фильтр по сотрудникам на странице Активностей

Всем доброго времени суток. Версия 7.10.

На странице активностей есть маленький фильтр поиска по участникам Активности.

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

Я хочу его немного переделать, чтобы в появляющемся по клику на него окне справочника были доступны только контакты, указанные как сотрудники в колонке тип, вместо того Terrasoft.createColumnIsNotNullFilter('[SysAdminUnit:Contact].Id'), который там сейчас стоит. Насколько я понимаю, свойства этого блока указываются внутри функции initFixedFiltersConfig в схеме ActivitySectionV2. Переопределил схему, и заменил функцию, где указал вот такое свойство:

{
	name: "Owner",
	caption: this.get("Resources.Strings.OwnerFilterCaption"),
	addOwnerCaption: this.get("Resources.Strings.AddEmployeeFilterCaption"),
	hint: this.get("Resources.Strings.SelectEmployeeFilterHint"),
	columnName: "Owner",
	defValue: this.Terrasoft.SysValue.CURRENT_USER_CONTACT, //
	dataValueType: this.Terrasoft.DataValueType.LOOKUP,
	filters: [
		function() {
			var filterGroup = Ext.create("Terrasoft.FilterGroup");
			filterGroup.add("OnlyCustomers",
				this.Terrasoft.createColumnFilterWithParameter(
				this.Terrasoft.ComparisonType.EQUAL,
				"Type",
				"60733efc-f36b-1410-a883-16d83cab0980"));
			return filterGroup;
		}
	],
	appendFilter: function(filterInfo) {
		/.../
	}
}

Но теперь в фильтре показываются все контакты, без ограничений. Как правильно задать условие?

 

Нравится

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

Здравствуйте Денис,

Да, изменения нужно было вносить в initFixedFiltersConfig метод, но замещать у фильтра свойство "filter", проставив в него кстомный метод, который возвращает фильтр нужного вида.



Изменения отличные от оригинального initFixedFiltersConfig:



результат:

Вся замещающая схема:

define("ActivitySectionV2", ["terrasoft", "ConfigurationConstants"],
	function(Terrasoft, ConfigurationConstants) {
		return {
			entitySchemaName: "Activity",
			messages: {
			},
			mixins: {
			},
			attributes: {
			},
			methods: {
				initFixedFiltersConfig: function() {
 
					var filterGroup = Ext.create("Terrasoft.FilterGroup");
					filterGroup.add("OnlyCustomers",
						this.Terrasoft.createColumnFilterWithParameter(
						this.Terrasoft.ComparisonType.EQUAL,
						"Type",
						"60733efc-f36b-1410-a883-16d83cab0980"));
 
					var myOwnerFilter = function OwnerFilter() {
						return filterGroup;
					};
 
					var fixedFilterConfig = {
						entitySchema: this.entitySchema,
						filters: [
							{
								name: "PeriodFilter",
								caption: this.get("Resources.Strings.PeriodFilterCaption"),
								dataValueType: this.Terrasoft.DataValueType.DATE,
								startDate: {
									columnName: "StartDate",
									defValue: this.Terrasoft.startOfWeek(new Date())
								},
								dueDate: {
									columnName: "DueDate",
									defValue: this.Terrasoft.endOfWeek(new Date())
								}
							},
							{
								name: "Owner",
								caption: this.get("Resources.Strings.OwnerFilterCaption"),
								addOwnerCaption: this.get("Resources.Strings.AddEmployeeFilterCaption"),
								hint: this.get("Resources.Strings.SelectEmployeeFilterHint"),
								columnName: "Owner",
								defValue: this.Terrasoft.SysValue.CURRENT_USER_CONTACT,
								dataValueType: this.Terrasoft.DataValueType.LOOKUP,
								filter: myOwnerFilter,
								appendFilter: function(filterInfo) {
									var confirmedFilter;
									if (filterInfo.value && filterInfo.value.length > 0) {
										var inviteResponse = ConfigurationConstants.Activity.ParticipantInviteResponse;
										confirmedFilter = new Terrasoft.createFilterGroup();
										confirmedFilter.add("InviteResponseFilter", Terrasoft.createColumnFilterWithParameter(
												Terrasoft.ComparisonType.NOT_EQUAL,
												"[ActivityParticipant:Activity].InviteResponse",
												inviteResponse.Declined,
												Terrasoft.DataValueType.GUID));
										confirmedFilter.add("ActivityParticipantFilter", Terrasoft.createColumnInFilterWithParameters(
												"[ActivityParticipant:Activity].Participant",
												filterInfo.value));
									}
									return confirmedFilter;
								}
							}
						]
					};
					this.set("FixedFilterConfig", fixedFilterConfig);
				}
			},
			diff: /**SCHEMA_DIFF*/[
			]/**SCHEMA_DIFF*/
		};
	}
);

 

Илья, здравствуйте! Спасибо за решение, помогло.

Задам тут же ещё один вопрос: если мне нужен фильтр уже для выбранных активностей, то я могу изменения вносить уже в confirmedFilter? К примеру, в лукапе вывести не список контактов, а список типов, после чего задать: confirmedFilter.add("ActivityParticipantFilter", Terrasoft.createColumnInFilterWithParameters("Owner.Type", filterInfo.value); чтобы вывести задачи всех сотрудников

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