Пример 7. Протокол заседания¶
Пример содержит новый тип карточки - протокол заседания. Также для данного примера добавляюется справочник коллегиальных органов.
Доступ к протоколам заседания должны иметь:
-
Читатели документов данного вида и делопроизводители организации автора документа (это секретарь комиссии) и организации председателя КО. Это только организации, не представительства, не филиалы. Они напрямую указаны в карточке документа.
-
Все участники КО, указанные в карточке КО на вкладках Состав КО (кроме членов КО) и читатели КО.
Данный пример состоит из:
-
Новый тип карточки “Протокол заседания”.
-
Новый тип карточки “Коллегиальный орган”.
-
Новый тип карточки “Организация”.
-
Клиентское UI расширение для типа карточки “Протокол заседания”.
-
Серверное расширение на сохранение для типа карточки “Протокол заседания”.
-
Генератор умных ролей “Участники КО”.
-
Правило расчёта ACL “Участники КО”.
-
Правило расчёта ACL “Делопроизводители подразделений (протокол заседания)”.
-
Правило расчёта ACL “Читатели подразделений (протокол заседания)”.
Тип карточки “Протокол заседания”¶
Данный тип карточки содержит следующие поля:
-
Номер - номер. Выделяется автоматическм при создании карточки из нумератора.
-
Дата создания - дата/время. Заполняется автоматически при создании карточки текущими датой и временем.
-
Автор - карточка сотрудника. Заполняется автоматически при создании карточки текущим сотрудником. Можно редактировать.
-
Подразделение автора - карточка подразделения. Заполняется автоматически при заполнении поля Автор как подразделение, в которое входит автор.
-
Организация автора - карточка организации. Определяется по корневоему подразделению с типом “Организация” от подразделения автора. Заполняется автоматически при заполнении поля Автор.
-
Коллегиальный орган - карточка коллегиального органа.
-
Организация КО - карточка организации. Заполняется автоматически и определяется по карточке из поля Коллегиальный орган.
Для данного типа карточки добавлено новое представление “Протоколы заседаний”.
Тип карточки “Коллегиальный орга픶
Данный тип карточки содержит следующие поля:
-
Название - строка. Определяет название коллегиального органа.
-
Председатель - карточка сотрудника.
-
Организация - карточка организации.
-
Секретари - список карточек ролей.
-
Читатиле документов КО - список карточек ролей.
Для данного типа карточек добавлено новое представление “Коллегиальные органы”.
Тип карточки “Организация”¶
Данный тип карточки содержит следующие поля:
-
Название - строка. Определяет название организации.
-
Подразделение - карточка подразделения. Подразделение должно иметь тип подразделения “Организация”. Для фильтрации подразделений добавлено новое представление по подразделением с фильтрацией по типу подразделения.
Для данного типа карточек добавлено новое представление “Организации”.
Клиентское UI расширение для типа карточки “Протокол заседания”¶
Клиентское расширение, которое производит автоматическое заполнение полей карточки “Протокол заседания”.
При изменении поля Автор расширение автоматически заполняет поля Подразделение автора и Организация автора.
При изменении поля Коллегиальный орган расширение автоматически заполняет поле Организация КО.
Серверное расширение на сохранение для типа карточки “Протокол заседания”¶
Данное расширение производит валидацию карточки “Протокол заседания” при сохранении.
Оно проверяет заполненость обязательных полей, такие как Автор, а также проводит проверку автоматически заполненых полей на факт корректности данных.
Генератор умных ролей “Участники КО”¶
Данный генератор формирует набор умных ролей по коллегиальным органам. Для каждого КО он формирует умную роль, которая содержит председателя КО, секретарей КО и читателей документов КО, записанных в карточке КО.
Данная карточка имеет следующие запросы и триггеры:
-
Запрос на получение списка ролей, который возвращает по идентификатору карточки КО роли председателя КО, секретарей КО и читателей документов КО. Запрос также работает в режиме множественной выборки.
-
Запрос на получение всех владельцев умной роли, который возвращает все идентификаторы КО и данные, необходимые для генерации умных ролей. В качестве идентификатора умной роли используется идентификатор карточки КО. В качестве имени владельца умной роли используется название КО. В качестве календаря используется календарь председателя КО. В качетсве временной зоны используется временная зона председателя КО.
-
Запрос на получение данных владельца умной роли, который возвращает данные, необходимые для генерации умной роли по идентификатору подразделения.
-
Триггеры, которые запускают обновление умных ролей в следующих ситуациях:
* При изменении председателя КО в карточке КО - перерасчитывается умная роль, которая была сгенерирована по изменяемому КО.
* При добавлении или удалении секретарей в карточке КО - перерасчитывается умная роль, которая была сгенерирована по изменяемому КО
* При добавлении или удалении читателей документов КО в карточке КО - перерасчитывается умная роль, которая была сгенерирована по изменяемому КО
Правило расчёта ACL “Участники КО”¶
Данное правило производит расчёт ACL для карточек с типом “Протокол заседания” и записывает в ACL роли, созданные с помощью генератора умных ролей “Участники КО”.
Идентификатор умной роли для получения умной роли определяется по полю “Коллегиальный орган” в карточке.
Данная карточка имеет следующие запросы и триггеры:
-
Запрос на получение владельцев умных ролей по карточке, который возвращает идентификатор коллегиального органа по идентификатору карточки. Запрос также работает в режиме множественной выборки.
-
Триггеры, которые запускают обновление ACL для карточек в следующих ситуациях:
- При изменении поля “Коллегиальный орган” карточки “Протокол заседания” - запускает обновление ACL самой карточки.
Правило расчёта ACL “Читатели подразделений (протокол заседания)”¶
Данное правило производит расчёт ACL для карточек с типом “Протокол заседания” и записывает в ACL роли, созданные с помощью генератора умных ролей “Читатели подразделений”.
Для получения идентификаторов владельцев умных ролей используется подразделения из организаций, указанных в полях “Организация автора” и “Организация КО”, а также вид документа, используемый в карточке. Если в данном типе карточки не используются виды документов, то используется тип карточки.
Данная карточка имеет следующие запросы и триггеры:
-
Запрос на получение владельцев умных ролей по карточке, который возвращает идентификаторы владельцев умных ролей по организациям, указанным в карточке, и по виду документа. Запрос также работает в режиме множественной выборки.
-
Триггеры, которые запускают обновление ACL для карточек в следующих ситуациях:
-
При изменении полей “Организация автора” или “Организация КО” в карточку протокола заседания - запускает обновление ACL самой карточки.
-
При добавлении новой строки в таблицу маппинга в карточке подразделения - для всех карточек, в которых используется данный вид документа вызывается перерасчёт ACL. Данный перерасчёт запускается через серверное расширение, т.к. изменение данной таблицы производится только в данном расширении.
-
Правило расчёта ACL “Делопроизводители подразделений (протокол заседания)”¶
Данное правило производит расчёт ACL для карточек с типом “Протокол заседания” и записывает в ACL роли, созданные с помощью генератора умных ролей “Делопроизводители подразделений”.
Для получения идентификаторов владельцев умных ролей используется подразделения из организаций, указанных в полях “Организация автора” и “Организация КО”, а также вид документа, используемый в карточке. Если в данном типе карточки не используются виды документов, то используется тип карточки.
Данная карточка имеет следующие запросы и триггеры:
-
Запрос на получение владельцев умных ролей по карточке, который возвращает идентификаторы владельцев умных ролей по организациям, указанным в карточке, и по виду документа. Запрос также работает в режиме множественной выборки.
-
Триггеры, которые запускают обновление ACL для карточек в следующих ситуациях:
-
При изменении полей “Организация автора” или “Организация КО” в карточку протокола заседания - запускает обновление ACL самой карточки.
-
При добавлении новой строки в таблицу маппинга в карточке подразделения - для всех карточек, в которых используется данный вид документа вызывается перерасчёт ACL. Данный перерасчёт запускается через серверное расширение, т.к. изменение данной таблицы производится только в данном расширении.
-