<< Click to Display Table of Contents >> Администрирование (Windows) > Обновление системы > Обновление среды разработки > Изменения базового решения Directum RX Изменения в версии 4.6 |
Ознакомьтесь с изменениями базового решения Directum RX. Если используется заказная разработка Directum RX или в среде разработки внесены собственные модификации, код которых связан с перечисленными изменениями, то обновите разработку.
Изолированные области
Чтобы улучшить стабильность работы системы, ряд сложных вычислений и код, который ранее содержался в сторонних сборках, перенесены в изолированные области:
DpadConverter. Изолированная область создана в модуле ExchangeCore. В нее перенесены вызовы функций из сборки DPAD:
В модуле создана изолированная область DpadConverter, в которую перенесены вызовы функций из сборки DPAD:
•AddSignatureStamp() – добавляет отметку об электронной подписи в документ;
•AddTempStamp() – добавляет временный штамп в документ;
•AddPaginationStamp() – добавляет на каждую страницу штамп с указанием идентификатора документа в сервисе обмена и номера страницы;
•GeneratePdfForDocumentTitles() – создает печатную форму документа в формате PDF на основании переданной информации о продавце. Также опционально может формировать печатную форму с информацией о покупателе.
PDFConverter. Изолированная область создана в модуле Docflow. В нее перенесена логика преобразования документов в PDF с отметками об ЭП и поступлении. Логика разделена по классам:
•ConverterBase – базовый конвертер для преобразования документов в формат PDF;
•Converter – класс для предобработки и постобработки содержимого документов при преобразовании в PDF;
•ConverterPdfA – класс для предобработки и постобработки содержимого документов при преобразовании в PDF и PDF/A;
•PdfStamper – класс для генерации и установки отметок об ЭП и поступлении, а также для определения их координат.
Также в изолированную область перенесены функции:
•ValidatePdfConvertibilityByExtension() – проверяет возможность преобразования в PDF. Перенесена из абстрактного типа документа «Входящий документ» (IncomingDocumentBase);
•CheckPdfConvertibilityByExtension() – проверяет, поддерживается ли преобразование в PDF для расширения документа. Перенесна из типа документа «Официальный документ» (OfficialDocument);
•ConvertToPdfWithStamp() – проставляет отметки о поступлении и отметки об ЭП. Перенесена из модуля Docflow.
BarcodeParser. Изолированная область создана в модуле Docflow. В нее перенесена логика поиска штрихкодов в документе.
DocumentBodyComparer. Изолированная область создана в модуле Docflow. В нее перенесена логика сравнения версий документов.
DocumentTableParser. Изолированная область создана в модуле Docflow. В нее перенесен класс TagReader сторонней сборки AsposeExtensions. Класс отвечает за извлечение данных из таблиц Microsoft Word при создании поручения на основе протокола совещания.
HtmlDocumentParser. Изолированная область создана в модуле SmartProcessing. В нее перенесена функция IsEmptyMailBody(), которая извлекает текст из содержимого письма.
Repacking. Изолированная область создана в модуле SmartProcessing. В нее перенесена логика перекомплектования документов.
Асинхронное назначение прав на документы
1.В Directum RX 4.6 массовое назначение прав на документы выполняется в несколько параллельных потоков на сервисе асинхронных событий. Если установить в карточке правила флажок Назначать права на созданные ранее документы и сохранить ее, то права назначаются таким образом:
•документы, подходящие под критерии правила, делятся на пакеты c помощью асинхронного обработчика GrantAccessRightsToDocumentsByRule;
•по расписанию запускается фоновый процесс «Документооборот. Массовое назначение прав на документы». На каждый пакет он запускает асинхронный обработчик GrantAccessRightsToDocumentsBulk.
Администратор может изменить расписание запуска фонового процесса в веб-клиенте, а также скорректировать параметры для массового назначения прав. Параметры добавлены в таблицу базы данных Sungero_Docflow_Params:
Параметр |
Замена |
---|---|
AccessRightsBulkProcessingBatchSize |
Количество документов в пакете. При инициализации по умолчанию заполняется значением 100 |
AccessRightsBulkProcessingJobQueueItemsLimit |
Количество пакетов, одновременно обрабатываемых фоновым процессом. При инициализации по умолчанию заполняется значением 70 |
AccessRightsBulkProcessingRetriesLimit |
Максимальное количество повторов запусков обработки, после которого права не выдаются. При инициализации по умолчанию заполняется значением 50 |
2.Изменена логика асинхронного назначения прав на документ:
•оптимизирован подбор доступных правил назначения прав. Перед запросом к базе данных сначала применяются фильтры, чтобы количество данных в выборке сократилось;
•с новой версии правила хранятся в виде списка ИД, а не сущностей;
•теперь при назначении прав документ сохраняется только один раз. Из цикла выделяются все доступные правила назначения прав для документа, затем из них извлекаются пользователи и права для них. После этого для каждого пользователя выдается максимальный тип прав. По окончании цикла документ сохраняется;
•обработчик назначения прав больше не запускается, если в карточке правила изменились только поля Имя и Примечание или если снят флажок Назначать такие же права на связанные приложения.
3.Удалены устаревшие элементы механизма автоматического назначения прав:
•фоновый процесс «Документооборот. Автоматическое назначение прав на документы»;
•тип справочника «Элемент очереди выдачи прав на документы» (DocumentGrantRightsQueueItem);
•параметр GrantRightsMode таблицы базы данных Sungero_Docflow_Params;
•серверные функции EnqueueAccessRightsAgent(), GetGrantRightMode(), RequeueGrantAccessRightsToDocuments(), GrantRightsToDocumentByRules() модуля Docflow;
•функция инициализации ConvertAccessGrantRightsToDocuments().
4.Функции GetDocumentsByRule(), FilterDocumentsByGroups() типа справочника «Правила назначения прав» (AccessRightsRule) перенесены в серверные, стали виртуальными и изменили сигнатуру.
5.В тип справочника «Правило назначения прав» (AccessRightsRule) модуля Docflow добавлены свойства:
•BulkProcessingState – статус массовой обработки документов;
•LaunchId – идентификатор запуска, который позволяет проверить актуальность асинхронного события.
6.В модуле Docflow (Документооборот):
•выделен новый тип справочника «Элемент очереди выдачи прав на пачку документов» (AccessRightsBulkQueueItem) для назначения прав на пакет документов;
•добавлен асинхронный обработчик ClearAccessRightsRuleState, который очищает статус обработки правила назначения прав.
Быстрая обработка документов из сервиса обмена
Теперь сообщения из сервиса обмена обрабатываются быстро в несколько параллельных потоков. Для этого добавлены:
•новый асинхронный обработчик ProcessMessages «Обработка сообщений из сервиса обмена». Он вызывается в фоновом процессе «Электронный обмен. Получение сообщений»;
•метод для фильтрации сообщений с сервиса обмена FilterLiteMessages(). С его помощью на уровне кода можно адаптировать механизм загрузки сообщений под себя. Например, так, чтобы из всего потока документов в Directum RX загружались только формализованные документы или документы от конкретного подразделения;
•параметр ProcessMessagesRetriesMaxCount для таблицы Sungero_Docflow_Params. В нем задается максимальное количество запусков повторной обработки сообщения, если с первого раза сообщение обработать не удалось. По умолчанию 100 повторов. Если количество повторов достигает максимума, статус элементов очереди синхронизации сообщений автоматически устанавливается на «Обработка остановлена». Это позволяет избежать бесконечной обработки сообщений в случае возникновения ошибок.
После исправления ошибок можно вручную возобновить обработку через справочник Элементы очереди синхронизации сообщений.
В модуле Exchange (Электронный обмен) некоторые функций отмечены устаревшими. Вместо них рекомендуется использовать новые функции и асинхронный обработчик:
Устаревшие функции |
Замена |
---|---|
SyncMessages() |
SyncLiteMessages() |
ProcessMessages() |
Логика функции перенесена в асинхронный обработчик Sungero.Exchange.AsyncHandlers.ProcessMessages |
DeleteProcessedQueueItems() |
DeleteProcessedQueueItem() Используется для каждого элемента очереди |
LoadMessagesFromQueueItems() |
RunOldMessagesOnAsyncHandler(); |
Обновление печатной формы документов
Для документов электронного обмена ускорилось формирование печатной формы в PDF. В ходе доработок:
1.В систему добавлены:
•новый асинхронный обработчик ConvertExchangeDocumentToPdf «Преобразование документов электронного обмена в PDF с отметкой об электронной подписи». Он вызывается в фоновом процессе «Электронный обмен. Преобразование в PDF»;
•параметр ConvertExchangeDocumentToPdfRetriesMaxCount для таблицы Sungero_Docflow_Params. В нем задается максимальное количество попыток для конвертации документа. По умолчанию 50 повторов. При достижении максимального количества попыток конвертация прекращается.
2.Некоторые функции модуля Exchange (Электронный обмен) отмечены устаревшими. Вместо них рекомендуется использовать новые функции:
Устаревшие функции |
Замена |
---|---|
GetActualBodyConverterQueueItems() |
GetNotProcessingBodyConverterQueueItems() |
IsObsoleteBodyConverterQueueItem() |
IsObsoleteQueueItem() элемента очереди преобразования ExchangeCore.BodyConverterQueueItem |
3.В модуле ExchangeCore (Электронный обмен. Настройки) свойство AsyncHandlerId (ИД асинхронного обработчика) типа справочника «Элементы очереди синхронизации сообщений» (MessageQueueItem) перенесено в базовый тип справочника «Очереди электронного обмена» (QueueItemBase).
Загрузка исторических данных
В версии 4.6 появились возможности для удобной и быстрой загрузки исторических данных из сервисов обмена. Для этого:
1.В утилите RxCmd добавлен новый плагин Exchange. Он позволяет инициировать запуск загрузки исторических данных, отслеживать состояние или прекращать ее при необходимости. За это отвечают новые команды:
•exchange run-download – запустить загрузку за период для указанного абонентского ящика нашей организации;
•exchange abort-download – прекратить загрузку для указанного абонентского ящика нашей организации;
•exchange show-downloads – показать все сессии загрузки для указанного абонентского ящика нашей организации;
•exchange show-active-downloads – показать информацию по всем активным сессиям загрузки.
2.В модуле ExchangeCore (Электронный обмен. Настройки) добавлен тип справочника «Сессии загрузки исторических сообщений» (HistoricalMessagesDownloadSession) со свойствами:
•BusinessUnitBox – абонентский ящик нашей организации, данные которой необходимо получить из сервиса обмена;
•PeriodBegin – начало периода загрузки;
•PeriodEnd – конец периода загрузки;
•Name – имя сессии;
•DownloadingState – состояние загрузки. Возможные значения: InWork – в работе, Сompleted – завершена, Aborted – прекращена;
•LastMessageDate – дата последнего загруженного сообщения, которое добавлено в очередь на обработку;
•LastIncomingMessageId – ИД последнего обработанного входящего сообщения;
•LastOutgoingMessageId – ИД последнего обработанного исходящего сообщения.
3.В тип справочника «Элементы очереди синхронизации сообщений» (MessageQueueItem) добавлены свойства:
•IsManualRestart – ручное возобновление обработки сообщений;
•DownloadSession – сессия загрузки сообщений.
4.В тип справочника «Сведения о документах обмена» (ExchangeDocumentInfo) добавлено свойство DownloadSession – сессия загрузки сообщений.
5.В таблицу Sungero_Docflow_Params добавлены параметры:
•HistoricalMessageQueueItemLimit – максимальное количество исторических сообщений в очереди по отдельному абонентскому ящику. Значение по умолчанию 10 000;
•ProcessHistoricalMessageRetriesMaxCount – максимальное количество повторов загрузки исторических сообщений асинхронными обработчиками. Значение по умолчанию 10.
Синхронизация ссылок на электронные доверенности
Для типа справочника «Абонентские ящики нашей организации» (BusinessUnitBox) добавлено свойство-коллекция FormalizedPoAInfos – сведения об электронных доверенностях из сервиса обмена. Коллекция включает параметры:
•UnifiedRegistrationNumber – единый регистрационный номер электронной доверенности;
•Url – ссылка на электронную доверенность в сервисе обмена;
•Description – информация об электронной доверенности.
Изменение иерархии типов справочников в модуле «Проекты»
Ранее все свойства, события и другие элементы проекта были только у типа справочника Project. Так как он не базовый, от него нельзя создавать наследников, поэтому экземпляры проекта создавались на основе абстрактного типа справочника ProjectBase с пустым содержимым.
В версии 4.6 изменилась иерархия наследования типов сущностей в модуле Project. Добавлен промежуточный абстрактный тип справочника ProjectCore. В него перенесены все свойства, события, ресурсы, структуры, константы и большинство функций из справочника Project. Благодаря этому теперь можно создавать наследников типа справочника ProjectCore, в которых есть вся функциональность по проектам.
Если в среде разработки на отдельном слое перекрыты элементы типа справочника Project, необходимо доработать код до публикации новой разработки. Нужно заменить Project на ProjectCore в следующих местах кода:
•в перекрытых событиях свойств сущности «Изменение значения свойства» и «Изменение значения контрола» поменять тип параметра e. Пример замены:
Было: Sungero.Projects.Shared.ProjectTeamMembersMemberChangedEventArgs e
Стало: Sungero.Projects.Shared.ProjectCoreTeamMembersMemberChangedEventArgs e
•обновить пути до используемых ресурсов. Пример замены:
Было: Projects.Resources.ProjectAndProjectFoldersRightsNotifyMessage
Стало: ProjectCores.Resources.ProjectAndProjectFoldersRightsNotifyMessage
•исправить вызовы функций, обращения к структурам и константам типа справочника Project, которые перенесены в ProjectCore. Пример замены пути до константы:
Было: Constants.Project.ShowProjectRightsNotify
Стало: Constants.ProjectCore.ShowProjectRightsNotify
Упростить поиск мест для доработки кода помогает среда разработки. При сборке решений все точки для изменения отобразятся в виде ошибок.
Также, если в организации используются заказные решения с перекрытиями типа справочника Projects, то до публикации разработки необходимо сформировать единый пакет, включающий базовое решение Directum RX и заказное решение, и только затем опубликовать его.
Сравнение документов
В модуле Docflow (Документооборот) добавлены:
•действия CompareVersion (Сравнить с другой версией), CompareDocuments (Сравнить с другим документом) и ShowComparisonResult (Показать результат) в абстрактном типе сущности «Официальный документ» (OfficialDocument);
•асинхронный обработчик CompareDocuments «Сравнение версий документов». Он отправляет версии документов в сервисы Directum Ario для преобразования в PDF, получает преобразованные версии и сравнивает их. Обработчик запускается до тех пор, пока преобразованное содержимое документов не будет получено;
•тип справочника «Результаты сравнения» (DocumentComparisonInfo) для хранения результатов сравнения и промежуточных данных. Запись справочника создается после инициации сравнения и хранит в себе хеши сравниваемых версий, содержимое документов в формате PDF с текстовым слоем. Результат сравнения записывается в свойство ResultPdf с типом «Бинарные данные в хранилище». Справочник недоступен в проводнике;
•подключение к библиотеке DocumentComparer. Библиотека используется для сравнения содержимого документов;
•структура PdfConversionResult для получения результата преобразования версии в формат PDF с помощью сервисов Directum Ario;
•фоновый процесс DeleteComparisonInfos «Документооборот. Удаление устаревших результатов сравнения документов» для удаления устаревших результатов сравнения документов. Срок хранения результатов сравнения по умолчанию – 3 рабочих дня по календарю инициатора, задается в таблице Sungero_Docflow_Params с ключом DaysToStoreDocumentComparisonInfo.
Интеллектуальная обработка документов
В модуле SmartProcessing (Интеллектуальная обработка):
•в класс ArioGrammars добавлена константа SignatoryField – полное ФИО подписывающего документ;
•добавлена новая структура RecognizedLetterCorrespondent для получения корреспондента входящего письма и сопоставленных с ним контактов;
•изменено имя структуры RecognizedRecipient на RecognizedLetterRecipient;
•методы GetRecognizedLetterBusinessUnitsFuzzy() и GetRecognizedLetterAddresseesFuzzy() сделаны публичными;
•добавлены публичные серверные функции:
Название функции |
Описание |
---|---|
FillIncomingLetterOfficialsFuzzy() |
Заполняет корреспондента, подписывающего и контакт в документе с типом «Входящее письмо» |
FillOurSignatoryForContractStatementFuzzy() |
Заполняет подписывающего нашей организации в документе с типом «Акт выполненных работ» |
GetRecognizedCorrespondentFuzzy() |
Получает распознанного корреспондента и связанные с ним контакты из фактов, извлеченных сервисами Directum Ario |
GetLetterContactFuzzy() |
Поиск контактов в документе с типом «Входящее письмо» по фактам, извлеченных сервисами Directum Ario с использованием нечеткого поиска |
GetOurSignatoryFuzzy() |
Поиск подписывающего нашей организации по фактам, извлеченных сервисами Directum Ario с использованием нечеткого поиска |
GetRecognizedEmployeesFuzzy() |
Поиск сотрудников по указанному факту, извлеченному сервисами Directum Ario |
FillCounterpartySignatoryForContractStatementFuzzy() |
Заполняет подписывающего контрагента в документе с типом «Акт выполненных работ» |
GetCounterpartySignatoryFuzzy() |
Поиск подписывающего контрагента по фактам, извлеченных сервисами Directum Ario с использованием нечеткого поиска |
GetRecognizedContactFuzzy() |
Поиск контакта по указанному факту, извлеченному сервисами Directum Ario |
•помечены устаревшими публичные серверные функции:
Название функции |
Описание |
---|---|
FillIncomingLetterCorrespondentFuzzy() |
Заполняет корреспондента документа с типом «Входящее письмо» |
FillIncomingLetterContactsFuzzy() |
Заполняет подписывающего и контакт документа с типом «Входящее письмо» |
GetRecognizedContactFuzzy() |
Перегрузка получения контакта документа с типом «Входящее письмо» |
В модуле Commons (Общие справочники):
•в публичных структурах ArioFactElasticsearchData и ArioFieldElasticsearchData вместо свойства EntityId теперь используется EntityIds;
•в тип справочника «Сотрудники» (Employee) добавлена публичная разделяемая функция IsManager(), которая проверяет, является ли сотрудник руководителем;
•добавлены новые публичные серверные функции:
Название функции |
Описание |
---|---|
GetOrderedFactsByType() |
Получает список фактов, отфильтрованный по имени и типу факта и отсортированный по вероятности поля |
GetAggregateFieldsProbability() |
Получает обобщенную вероятность по полям факта |
•константа IntelligenceGuid сделана публичной.
Автоматическое дообучение классификаторов
1.В модуле SmartProcessing (Интеллектуальная обработка) добавлены:
•серверная функция GetEntityTypeAndProcessingFunctionMapping(), в которой задается соответствие класса и типа занесенного документа.
•фоновый процесс «Интеллектуальные функции. Дообучение классификатора по типам документов» (StartClassifierTraining), который запускает дообучение по типам документов;
•асинхронный обработчик TrainClassifier, который запрашивает статус обучения классификатора в сервисах Directum Ario и обрабатывает полученный ответ;
•асинхронный обработчик SetClassifierTrainingStatus, который устанавливает заданный статус обучения классификатора в справочнике Результат распознавания сущности;
•изолированная область PdfTextExtractor, с помощью которой из PDF-документов извлекается текст.
2.В модуле Commons (Общие справочники) добавлен системный справочник Сессия дообучения классификатора.
3.В таблице Sungero_Docflow_Params добавлены параметры:
Параметр |
Описание |
---|---|
CsvTrainingDatasetLimit |
Максимальный размер CSV файла с текстами документов, отобранных для обучения. Значение по умолчанию 100 Мб |
LowerFMeasureLimit |
Минимальное значение F1-меры для публикации модели в классификатор после дообучения. Значение по умолчанию 0,95 |
4.В схеме задачи типа «Задача на верификацию комплекта документов» (VerificationTask) добавлен блок «Анализ необходимости дообучения».
5.В классе ArioConnector функции GetTrainTaskInfo() и PublishClassifierModel() сделаны публичными.
Преобразование документов в PDF
В модуле Docflow (Документооборот) серверная функция GetLastStringEntryPosition помечена устаревшей. Вместо нее рекомендуется использовать одноименную функцию изолированной области PdfConverter.
Мобильные приложения
В проводнике Directum RX 4.6 администратор может настроить список папок, видимых в Solo и Jazz, а также дистанционно администрировать мобильные приложения, например запросить лог-файлы или удалить данные с устройств пользователей. Для этого добавлены:
•модуль MobileApps (Мобильные приложения) для управления мобильными приложениями;
•тип справочника Мобильные устройства (MobileDeviсe). Его записи создаются автоматически при подключении сотрудника к Directum RX через Solo или Jazz. В записи отображается название устройства, версия операционной системы и приложения, а также статус и ИД устройства. Справочник недоступен в проводнике;
•тип справочника Настройки мобильных приложений (MobileAppSetting). В нем хранятся настройки списка папок, видимых у сотрудника в Solo и Jazz. Справочник недоступен в проводнике;
•асинхронный обработчик UpdateMobileDeviceStatusHandler, который обновляет статус подключения мобильного устройства сотрудника;
•асинхронный обработчик UpdateMobileDeviceInfoHandler, который обновляет информацию об устройстве: название и версию операционной системы устройства, а также название и версию мобильного приложения.
Прочие изменения
1.В абстрактном типе сущности OfficialDocument (Официальный документ) серверная функция GetTotalAmountDocumentSummary(double?, Commons.ICurrency) помечена устаревшей. Вместо нее рекомендуется использовать одноименную функцию GetTotalAmountDocumentSummary(double?).
2.Теперь закладка «Задачи» в карточках документов открывается быстрее, если там есть задачи на рассмотрение. Для этого оптимизирована работа функции GetDocumentReviewStateView():
•запрос к задачам разделен на два и теперь он выполняется в блоке AccessRights.AllowRead;
•удалены дублирующие вызовы функций: GetManagerAssignment(), GetPreparingDraftResolutionAssignment(), GetReviewReworkAssignment().
3.Оптимизирована обработка сообщений из сервиса обмена. Ранее новые сообщения могли загружаться долго из-за выполнения функции GetContacts(). Эта функция получала все контакты с сервиса обмена для обработки служебных документов, что вызывало нагрузку на систему. Теперь в коде получения сообщения из сервиса обмена удален вызов функции GetContacts(), и документы загружаются быстрее.
© Компания Directum, 2024 |