Добрый день.

Подскажите как организовать фильтр в клиентской esq по агрегированным данным. Например вот есть такая агрегирующая колонка

		putNestingColumn: function(esq) {
			var aggregationColumn = this.Ext.create("Terrasoft.AggregationQueryColumn", {
				aggregationType: Terrasoft.AggregationType.COUNT,
				columnPath: "[OpportunityProductInterest:NrbParent].Id"
			});
			if (!esq.columns.contains("HasNesting")) {
				esq.addColumn(aggregationColumn, "HasNesting");
			}
		},

А требуется, чтобы выводились только те записи, у которых есть подчиненные записи (в этой колонке значение > 0).

 

Есть метод createFilter, в который необходим передать объект класса Terrasoft.BaseExpression или наследника, но непонятно как в таком случае указать колонку, по которой считать?

		var leftExpression = Ext.create("Terrasoft.FunctionExpression", {
			functionType: Terrasoft.FunctionType.AGGREGATION,
			aggregationType: Terrasoft.AggregationType.COUNT,
	        aggregationEvalType: Terrasoft.AggregationEvalType.ALL
	});

 

Нравится

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

Мне кажется, в этом случае надо надо не createFilter, а createExistsFilter. Как тут.

createExistsFilter(columnPath)

Создает экземпляр Exists-фильтра для сравнения типа [Существует по заданному условию] и устанавливает в качестве проверяемого значения выражение колонки, расположенной по заданному пути.

Да я, к сожалению, привел нерелевантный пример задачи. Если мне нужно, чтобы значения было не более 0 (в этом случае Exists поможет), а более, скажем, 5.

PS В приведенной статье речь все же идет о серверной esq

В примере по ссылке (не комментариях) используется клиентская. Если же нужно сравнивать с числом, можно попробовать подставлять выражение колонки в createColumnFilterWithParameter.

createColumnFilterWithParameter(comparisonType, columnPath, paramValue)

Создает экземпляр Compare-фильтра для сравнения колонки с заданным значением.

comparisonType Terrasoft.ComparisonType Тип операции сравнения.

columnPath String Путь к проверяемой колонке относительно корневой схемы rootSchema.

paramValue Mixed Значение параметра.

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

Здравствуйте! Нуждаюсь в помощи по двум вопросам.

Вопрос №1

Делаю в БП страницу редактирования Договора. Мне надо чтобы элемент был выполнен только если на детали Продукты есть хотя-бы одна запись. Пробовал сделать через агрегирующий фильтр:

агрегирующий фильтр

После чего я вижу:

ошибка

Пробовал на другие детали, работает как-то выборочно. Например на визу работает, а на активности нет. Поставил зависимости от пакетов:
ContracInOrder, Order, CoreContract, и другие

Пробовал на разных сайтах. Ошибка идентичная.

Данную задачу можно выполнить с помощью элемента "Чтение данных", но интересно почему не работают фильтры и как с ними работать?

Вопрос №2

в БП нужно создать визу в договоре на Контакта у которого
контрагент = Наша компания,
филиал = Контакт текущего пользователя.Филиал
должность = Фин.директор
И когда виза будет подтверждена продолжать БП. Подскажите как это лучше реализовать. Заранее спасибо.

версия 7.5

Нравится

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

Добрый вечер!

Вопрос №1.

Ничего не указывайте в поле "Считать элемент выполненым, если объект соответствует условиям".
После завершения задачи, используйте элемент "Чтение данных". Считайте количество записей в объекте "Продукт в заказе", где Заказ = Id Вашего заказа.
Используйте условные потоки:

  • Если количество = 0, тогда возвращаемся к редактированию заказа
  • Иначе - идем по процессу дальше

Вопрос №2.

1) Используйте элемент "Чтение данных" по объекту "Контакт", с фильтром Контакт = Контакт текущего пользователя
2) Используйте элемент "Чтение данных" по объекту "Контакт", с фильтром Филиал = Чтение данных1.Первый элемент результирующей коллекции.Филиал и Контрагент = Наша компания и Должность = Фин.директор
3) Используйте элемент "Добавить данные" в объекте "Виза договора". Установите визирующим контакта, прочитанного на втором шаге.
4) Используйте "Промежуточный обрабатыващий сигнал" по объекту "Виза договора", событие - изменение записи по Id созданной на предыдущем шаге записи с фильтром Состояние = "Положительная", чтобы отследить изменение состояния в поле "Состояние".

Только учтите, что состояние визы еще может быть "Отрицательным".

1. Я через чтение данных и сделал. Интересовало как работать с агрегирующими фильтрами и работают ли они ?
2. А если будет несколько контактов в должности фин.директор ?
Я пробую записать в объект Виза договора результат выборки по контакту. Но я столкнулся с тем, что колонка визирующий смотрит в объект "Объект администрирования"

Добрый день!

1. Как видно из предоставленных Вами скриншотов, фильтры работают некорректно - было предложено альтернативное решение.
2. Полностью с Вами согласен - виза проставляется либо роли, либо пользователю, поэтому объект действительно "Объект администрирования".
Перед элементом "Добавить данные" используйте еще одно чтение данных по объекту "Объект администрирования" с фильтром Контакт = Id контакта с должностью фин. директор.

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

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