Развитие решения для администраторов и разработчиков Directum RX

42 6

Предыдущая версия: 
Свое решение для администратора и разработчика Directum RX (в ожидании констант и не только)

Функционал констант выделен в отдельный репозиторий: 
Решение "Прикладные константы"

 

Введение

С момента публикации "первой версии" решения прошло уже достаточно времени, само решение Settings заметно потолстело в размерах.
Появились новые модули и функционал, который потенциально может быть использован в других проектах.
Поэтому пришло время выпустить обновление и коротко рассказать о нововведениях.
Повторно описывать материал из предыдущей статьи я не буду, поэтому если не видели, сначала рекомендую заглянуть туда (ссылка вверху).

Что нового

  • новый модуль без UI "Работа с сертификатами"
  • новый модуль без UI "Сборник функций и решений"
  • новый модуль без UI "Контроль активности пользователей"
  • новые типы редактируемых констант;
  • прочие небольшие изменения.

 

▼ Модуль "Работа с сертификатами"

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

Права доступа: Все пользователи системы.

Внимание: Для работы диалога необходимо выдать право "Создание" на справочник "Цифровой сертификат" роли "Все пользователи" и создать действие "Загрузить сертификат" на обложке любого удобного для Вас модуля.

 

Диалог "Загрузка сертификата"

Пример действия вызова диалога загрузки сертификата на обложке модуля.

 

Форма диалога загрузки сертификата

Примечание: диалог позволяет, как добавить новый сертификат, так и заменить текущий действующий, например с истекающим сроком действия.
При замене действующего сертификата вызывается асинхронный обработчик, который переводит выбранный сертификат в состояние "Не действующий".

 

Реестр выбор сертификата для замены

 

Форма выбора открытого ключа сертификата

Примечание: Если у текущего пользователя нет действующих сертификатов, то вызов диалога начинается с текущего окна загрузки.
Выбор открытого ключа сертификата ограничен форматами .cer и .crt.

 

Форма подтверждения загрузки

 

Для разработчиков

Пример вызова диалога:

// Загрузить сертификат
finex.Certificates.PublicFunctions.Module.ShowImportCertificateDialog();

 

Фоновый процесс "Мониторинг сроков действия сертификатов"

Назначение: Отслеживает даты окончания сроков действия пользовательских сертификатов и рассылает владельцам уведомления об окончании сроков действия.

Используемые константы: 
CertificateMonitoringPeriod – cрок мониторинга даты окончания сертификатов (в календарных днях). (По умолчанию 14 дней).;
CertificateNoticeText – текст уведомления отправляемый пользователю при окончании срока действия сертификата.

Расписание запуска: Один раз в день, время запуска 7:00.
По умолчанию фоновый процесс отключен в среде разработки.

 

Пример тестового уведомления

 

▼ Модуль "Контроль активности пользователей"

Назначение: Позволяет собирать статистику по количеству работающих пользователей в системе.

Права доступа: Администраторы системы.

 

Фоновый процесс "Мониторинг пользователей в системе"

Назначение: Позволяет отслеживать количество работающих пользователей в системе для сбора статистики по использованию клиентских лицензий системы.

Используемые константы: 
EnableMonitoring – включить сбор статистики по количеству работающих пользователей в системе. (По умолчанию "Отключено").;

Расписание запуска: В течении дня, период 30 минут.
По умолчанию фоновый процесс отключен и включается администратором системы в константе.

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

 

Пример карточки записи справочника "История работы мониторинга пользователей"

 

▼ Модуль "Константы"

Назначение: Позволяет разработчику создавать константы для хранения редактируемых значений, которые могут использоваться при разработке прикладного кода.

Права доступа (справочник Константы): роль "Администраторы" - редактирование, роль "Все пользователи" - просмотр (визуально справочник недоступен).
Права доступа (справочник Группы констант): роль "Администраторы" - редактирование.
Внимание: Создание, удаление записей запрещено для всех пользователей системы!

Новые доступные типы:

  • Текст (т.к. строка имеет ограничение по длине);
  • Значение Base64.

 

Пример формы карточки с типом - Base64 (справочник "Константы")

 

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

Внимание: Значение константы скрыто с формы и хранит данные в формате Base64.
При программном получении, значение константы может быть преобразовано в строку. 

 

Для разработчиков

Примеры инициализации и получения констант в модуле EditableConstants:

// Создание констант
finex.EditableConstants.PublicInitializationFunctions.Module.CreateConstants("Текстовое значение", "Тест", true, "Примечание", "Тестовая группа");
finex.EditableConstants.PublicInitializationFunctions.Module.CreateBase64Constants("Значение Base64", "Тест", "Примечание", "Тестовая группа");

// Пример получения значения текстовой константы с генерацией исключения в случае ошибки
finex.EditableConstants.PublicFunctions.Module.Remote.GetValueTextByName("Имя константы");

// Пример получения значения константы Base64 в формате Base64
finex.EditableConstants.PublicFunctions.Module.Remote.GetValueBase64ByName("Имя константы");
// Пример получения значения константы Base64 преобразованного в строку
finex.EditableConstants.PublicFunctions.Module.Remote.GetValueBase64ByName("Имя константы", true)
// Пример получения значения константы Base64 преобразованного в строку без генерации исключения
finex.EditableConstants.PublicFunctions.Module.Remote.GetValueBase64ByName("Имя константы", true, false);

 

▼ Модуль "Сборник функций и решений"

Назначение: Данный модуль предназначен исключительно для разработчиков системы Directum RX и содержит условно "типовой" или возможно полезный функционал, позволяющий сэкономить некоторое количество времени при разработке.

Данный модуль задумывался, как сборник универсальных функций, которые могут быть использованы разработчиком на любом проекте при возникновении такой необходимости или как примеры для реализации схожего функционала.
Часть функционала дублирует и расширяет аналогичные базовые функции, часть реализовано в угоду сокращения кликов мыши пользователя (например диалог "Создания версии документа"), остальное из-за лени или видимой "полезности".

Подробных примеров кода в описании приводить не буду, опишу лишь состав модуля и некоторый опыт применения в тех местах, где будут необходимы некоторые пояснения.

 

Функции инициализации

Группа функций "Создание ролей" - содержит несколько расширенный функционал, в сравнении с аналогичным функционалом в модуле Docflow, для создания ролей при инициализации. Позволяет создавать роль с одним участником.
Применение: на каждом проекте.

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

Группа функций "Создание записей справочников" - содержит набор функций для создания записей в базовых справочниках "НОР", "Должности", "Подразделения". 
Применение: пару раз для создания предопределенных записей, для дальнейшей работы с ними в коде.

 

Функции клиентского слоя

Группа функций "Диалоги" - содержит диалоги:
Диалог - "Создать версию документа из файла";
Диалог - "Создать диалог выбора файла";
Функция - "Создать FileSelector в переданном диалоге".

Применение: в задачах или диалогах, когда стояла задача минимизировать количество действий пользователя из-за чего пользователь не почти работает с документом, а создание и наполнение происходит программно из задачи, диалога или другого документа. 

Пример диалога "Создать версию документа из файла"

 

Пример диалога "Создать диалог выбора файла"


 

Группа функций "Публичные функции модуля для вызова из DrxUtil" - содержит публичные функции для вызова из DrxUtil. Функции пересохраняют записи в справочниках "Сотрудники" и "Подразделения". Могут служить примером для реализации логики работы с DrxUtil.

//Пример вызова из CMD
C:\Program Files\Directum Company\Sungero Development Studio\Utilities\DrxUtil\DrxUtil.exe -n Administrator -p 1Qwerty -f finex.CollectionFunctions.Module.ReSaveAllEmployees

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

 

Функции разделяемого слоя

Группа функций "Число прописью" - содержит функции для перевода целого или дробного числа в число прописью.
Пример: функция NumberInWords(42342) вернет результат = Сорок две тысячи триста сорок два.

 

Функции серверного слоя.

Группа функций "Общие функции" - содержит функции общего назначения, такие как "Получить ИД всех нижестоящиех подразделений включая текущие" или "Получить GUID типа сущности по строковому наименованию интерфейса".

Группа функций "Работа с историей документа" - содержит функции для работы с историей документа, например "Проверить, просматривал ли пользователь документ".
Применение: функции в основном применялись в заданиях, когда требовалось отслеживать просмотр документа, к примеру подписантом, перед автоподписанием.

Группа функций "Работа с Excel" - содержит функции для парсинга Excel файлов.

Группа функций "Создание версий документа" - содержит функции для создания версии документа из шаблона или массива байт.
Применение: функции применялись совместно с диалогами клиентского слоя модуля и для минимизации пользовательских действий.

Группа функций "Работа с задачами и заданиями" - содержит функцию для конкурентного выполнения заданий.

Группа функций "Работа с папками и файлами на сервере" - содержит функции для создания и удаления папок на сервере, экспорт документов, версий документов, массивов байт как на сервер, так и в IZip (для Web клиента).
Применение: функции применялись в диалогах массовых экспортов документов с ЭП и без них.

Группа функций "Работа с подписями" - набор функций для получения подписанных версий документа или получения самих подписей.

Группа функций "Работа со штампами ЭП" - набор функций для получения и простановки штампа ЭП  на одну или все страницы документа. Позиционирование по положению на странице (вверху, внизу, слева, по центру и т.д.) или по якорю на документе.

Группа функций "Преобразование в PDF" - набор функций для преобразования в PDF как с отметкой об ЭП, так и без нее.

Группа функций "Работа с PDF файлами" - функции по слиянию списка pdf файлов в один документ.
Применение: функции в основном применялись в диалогах массовых экспортов документов с приложениями.

Группа функций "Рассылка уведомлений в системе" - набор функций для рассылки уведомлений в системе Администраторам или Пользователям с возможностью добавления наблюдателей или вложений.

Группа функций "Почтовая рассылка" - функция почтовой рассылки через SMTP протокол.

Группа функций "Пересохранение базовых сущностей (для DrxUtil)" - реализация функционала вызываемого из клиентского слоя модуля.

 

Прочие мелкие изменения

Модуль с обложкой "Дополнительные настройки" - данный модуль переехал в отдельное решение SettingsUI, для реализации возможности раздельного обновления.

Действие "Удалить блокировку объекта" - добавлена автозаполнение полей диалога.

Отчет модуля "Использование записи справочника" - доработана логика поиска в БД. 

 

Вместо заключения

Если у Вас появились вопросы или предложения, обязательно пишите.
Может у Вас уже есть интересные решения или какие-то сборники функционала !?
Было бы крайне интересно почитать.

В текущем виде описываемое решение уже скорее солянка из функционала разных проектов и в будущем данные решения вероятно будут пересмотрены, а некоторые выкинуты за ненадобностью.
Обязательно добавится что-то новое.

 

Внимание: Перенос на тестовый контур должен осуществляться только через Sungero Development Studio!
Сначала импортируете пакет в среду разработки, там собираете, публикуете и только потом переносите на тестовый контур.

Текущая версия решения собрана в RX 3.6.

 

Ссылка на github

Сергей Королев

Бомба! Спасибо  
Многое уже сам написал. Но всегда интересно посмотреть на чужие реализации.

🔥🔥🔥 супер что делитесь такими полезными наработками

Артем Моисеев

Достойно!!! браво

Андрей Тазетдинов

Добрый день, Сергей!

Подскажите, пожалуйста, что делать с подобными ошибками? Или на 4.1 это не будет работать?

Сергей Беляков

Андрей,
1) WindowsIdentity.GetCurrent() можно просто удалить, т.к. надо получать клиента от Web, а для этого надо поковырять DLL RX, на что пока особо времени нет.
2)  Для исправления ошибки Package нужно подключить DLL System.IO.Packaging.dll и добавить using System.IO.Packaging;

Алмаз Гатауллин

Сергей, добрый день

 

на 4.3

 

UPD: Взял ветку для 4.2 там пока проблем не возникает

Алмаз Гатауллин: обновлено 30.05.2022 в 16:15

Авторизуйтесь, чтобы написать комментарий