Вопрос

Фильтрация ответственного по группе

Добрый день!

Появилась следующая задача: фильтровать список ответственных, когда выбирается группа ответственных. Также подставлять группу, при выборе ответственного. Вроде как такая логика заложена в базовую конфигурацию onPrepareOwner, но не получается разобраться в ней. 

Нравится

8 комментариев
Лучший ответ

Алла Савельева,

Было в сервисе в CasePage (Case)

Сергей,

а вы код метода смотрели? Просто сделайте по аналогии там вроде есть все что вам нужно.

 

 

 

Сергей,

Есть 2 вопроса:

1. Что такое группа ответственных - это группа пользователей? Объясните на примере.

2. В какой схеме реализована эта логика (onPrepareOwner) и какие именно вопросы есть по её реализации? 

Алла Савельева,

Было в сервисе в CasePage (Case)

Сергей,

а вы код метода смотрели? Просто сделайте по аналогии там вроде есть все что вам нужно.

 

 

 

Алла Савельева,

Группа ответственных - это группа пользователей (подразделение в оргструктуре). В ней находятся пользователи и они становятся ответственными.



Григорий Чех,

Да, метод смотрел, но я так понимаю там не он один нужен. Ну и сама суть - метод же именно то что мне нужно, но при копировании его просто так - чуда не происходит

Фильтрация может настраиваться как пользовательскими средствами, через бизнес-правила, так и кодом. Подробнее описано тут.

Быстров Сергей,

Есть ли в консоли какие-то ошибки при попытке проверить эту функциональность?

И приведите, пожалуйста, пример своего кода.

Алла Савельева,

Пытаюсь действовать по примеру:

"attributes": {
// Колонка модели представления.
   "Owner": {
// Тип данных атрибута.
      "dataValueType": Terrasoft.DataValueType.LOOKUP,
// Конфигурационный объект атрибута типа LOOKUP.
      "lookupListConfig": {
// Массив фильтров, применяемых к запросу для формирования данных поля-справочника.
         "filters": [
            function() {
               var group = this.get("Group");
               var filterGroup = Ext.create("Terrasoft.FilterGroup");
// Добавление фильтра "IsUser" в результирующую коллекцию фильтров.
// Выбирает все записи из корневой схемы Contact, к которой присоединена
// колонка Id из схемы SysAdminUnit, для которых Id не равен null.
               filterGroup.add("IsUser",
               Terrasoft.createColumnIsNotNullFilter("[SysAdminUnit:Contact].Id"));
// Добавление фильтра "InGroup" в результирующую коллекцию фильтров.
// Выбирает все записи из корневой схемы Contact, к которой присоединена
// колонка из схемы SysAdminUnitRole.
               filterGroup.add("InGroup",
               Terrasoft.createColumnFilterWithParameter(
               Terrasoft.ComparisonType.EQUAL,
               "[SysAdminUnitInRole:SysAdminUnit:Contact].SysAdminUnitRoleID",
               group));
               return filterGroup;
           }
        ]
   }
}

Я уверен на 99% что так делать нельзя, но уже не представляю как связать SysAdminUnit между собой, чтобы происходила фильтрация. Неужели никто с такой задачей не сталкивался?

Для начала можно написать обычный SQL-запрос, который получает интересующие значения. А потом думать, как его перевести на язык ESQ с фильтрами или бизнес-правил.

"Owner": {
	"dataValueType": Terrasoft.DataValueType.LOOKUP,
	// Конфигурационный объект атрибута типа LOOKUP.
	"lookupListConfig": {
		// Данный фильтр отображает ответственных из группы
		"filters": [
			function() {
				var filterGroup = Ext.create("Terrasoft.FilterGroup");
				if (this.get("Group") != null) {
					filterGroup.add("IsActive", Terrasoft.createColumnFilterWithParameter(3, "[SysAdminUnit:Contact].[SysUserInRole:SysUser].SysRole.Id", this.get("Group").value));				
					return filterGroup;
				}
			}
		]
	}
}

Вышло такое. Оно работает. Может кому понадобится. Спасибо https://community.terrasoft.ru/questions/filtr-pola-kontakt-po-funkcion…;

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