Атрибут типа «Запись». Объединение и фильтрация коллекций с помощью N3
Введение
Атрибут типа «Запись» хранит ID записей в связанном шаблоне (ссылки на них).
Бизнесу может потребоваться собрать коллекцию записей из нескольких шаблонов и фильтровать их по определённым условиям.
Например, пользователю необходимо предоставить для выбора в раскрывающемся списке только организации, с которыми он работает, когда перечень организаций формируется из нескольких источников.
Здесь представлен пример объединения и фильтрации списков записей по данным, связанным с текущим пользователем.
Прикладная задача
При оформлении грузового отправления сотрудник (текущий пользователь) должен выбрать грузополучателя из раскрывающегося списка.
Список возможных грузополучателей должен формироваться из двух справочников: Клиенты и Партнёры.
Список должен содержать только тех контрагентов, для которых сотрудник указан как ответственный менеджер.
Исходные данные
Имеются шаблоны: Контрагенты, Контакты, Сотрудники, Отправления.
В шаблоне записи «Контрагенты» хранятся сведения о компаниях и ссылки на контактные лица.
Атрибут в шаблоне:
- Контакты
Описание: Коллекция записей контактных лиц контрагента
- Тип данных: запись
- Связанный шаблон: Контакты
- Хранить несколько значений: флажок установлен
В шаблоне записи «Контакты» хранятся сведения о связях сотрудников с организациями.
Атрибуты в шаблоне:
- Сотрудник
- Описание: Ссылка на аккаунт сотрудника
- Тип данных: аккаунт
- Связанный шаблон: Сотрудники
- Хранить несколько значений: флажок снят
- Ответственный
- Описание:
True
, если сотрудник является ответственным менеджером для контрагента - Тип данных: логический
- Описание:
В шаблоне «Отправления» хранятся сведения о возможных и фактических получателях грузов.
Атрибуты в шаблоне:
- Клиенты и Партнёры
- Описание: Отдельные коллекции организаций партнёров и клиентов
- Тип данных: запись
- Связанный шаблон: Контрагенты
- Хранить несколько значений: флажок установлен
- Грузополучатель
- Описание: Организация, которой предназначено отправление
- Тип данных: запись
- Связанный шаблон: Контрагенты
- Хранить несколько значений: флажок снят
Настройка вычислений
- Откройте для редактирования форму шаблона «Отправления».
- Поместите на форму атрибут «Грузополучатель».
-
Настройте свойства поля «Грузополучатель»:
- Представление: раскрывающийся список
- Доступ: разрешить ввод
- Фильтр: N3
# Импортируем префиксы для работы
# со списками, объектами и системными данными.
@prefix list: <http://www.w3.org/2000/10/swap/list#>.
@prefix cmw: <http://comindware.com/logics#>.
@prefix object: <http://comindware.com/ontology/object#>.
{
# Получаем идентификатор текущего пользователя.
cmw:securityContext cmw:currentUser ?user.
# Получаем атрибуты, по которым будем определять связи сущностей.
# Убедитесь, что системные имена соответствуют именам в вашем приложении.
("Отправления" "Клиенты") object:findProperty ?clientsAttribute.
("Отправления" "Партнёры") object:findProperty ?partnersAttribute.
("Контрагенты" "Контакты") object:findProperty ?contactsAttribute.
("Контакты" "Ответственный") object:findProperty ?responsibleAttribute.
("Контакты" "Сотрудник") object:findProperty ?employeeAttribute.
# Получаем списки клиентов и партнёров из текущей записи.
?item ?clientsAttribute ?clientsList.
?item ?partnersAttribute ?partnersList.
# Объединяем два списка организаций в один.
(?clientsList ?partnersList) list:append ?organizations.
# Отбираем из объединенного списка только организации,
# где текущий пользователь является активным контактным лицом.
?organizations list:member ?userOrgs.
?userOrgs ?contactsAttribute ?orgContacts.
?orgContacts ?responsibleAttribute true.
?orgContacts ?employeeAttribute ?user.
# Возвращаем итоговый список
?userOrgs -> ?value.
}
-
Поместите на форму атрибуты «Клиенты» и «Партнёры» и настройте их:
- выберите представление «Таблица»;
- добавьте кнопки «Создать», «Добавить», «Исключить», «Удалить».
-
На форму шаблона «Контрагенты» поместите атрибут «Контакты» и настройте его:
- выберите представление «Таблица»;
- добавьте столбцы «Ответственный» и «Сотрудник»;
- добавьте кнопки «Создать», «Добавить», «Исключить», «Удалить».
Тестирование
- Создайте несколько тестовых аккаунтов.
-
Создайте записи в шаблоне «Контрагенты»:
- заполните таблицу «Контакты»:
- укажите различные аккаунты, в том числе свой аккаунт;
- для части контактов установите флажок «Ответственный»;
- заполните таблицу «Контакты»:
-
Создайте запись в шаблоне «Отправления».
- Добавьте в таблицы «Клиенты» и «Партнёры» разных контрагентов.
- Откройте раскрывающийся список «Грузополучатель». В нём должны отображаться только клиенты и партнёры, в которых вы (текущий пользователь) указаны как ответственный менеджер.
Эта статья была полезна 1 чел.