image1

© Syntellect 2021


1. Патч 3.5.0.8 (12.04.2021)

1.1. Переход на новую сборку

  1. Изменены представления: KrPermissionsReport, KrTypesForDialogs, Languages, LoginTypes.

  2. Изменены процедуры: ObtainReaderLock, ObtainWriterLock, ObtainWriterLock2 (добавлена).

  3. Изменены библиотеки локализации.

  4. Обновите файл app.json веб-сервиса: добавлена настройка Kerberos.DisableRealmCheck.

1.2. Добавление и изменение функциональности

  1. В файле app.json веб-сервиса добавлена настройка "Kerberos.DisableRealmCheck". Она позволяет отключить проверку соответствия имен домена при Kerberos аутентификации.

  2. В запрос на загрузку карточки CardGetRequest, выполняемый в перехватчике представления TaskHistory для проверки прав доступа на карточку, теперь добавляется флаг Info["TaskHistoryInterceptor"] = true, чтобы в расширениях на загрузку можно было отличить этот запрос от стандартной загрузки карточки.

  3. Добавлена возможность использовать контрол "Представление" в формах заданий.

  4. Расширение типа "Список файлов в представлении" теперь доступно для использования в типах заданий.

  5. При отображении вариантов завершения в типах заданий в TessaAdmin для вариантов с одинаковыми названиями в скобках теперь выводится уникальное имя варианта. Например, выводится "Согласовать (Approve)", если есть два варианта с названием "Согласовать".

  6. API: В метод CardHelper.CreateFromExportedCardAsync добавлен опциональный параметр ICardServerPermissionsProvider, указав который как значение из Unity на сервере, правила доступа не будут проверяться для сотрудника в текущей сессии. Объект для передачи в параметр недоступен на клиенте.

  7. API: Добавлен метод-расширение logger.LogResult(ValidationResult, ValidationLevel, "format string {0}"), который позволяет вывести в лог результат валидации с дополнительным текстовым обрамлением и указанием уровня логирования.

  8. API: В модель представления ICardModel были добавлен список делегатов TaskInitializers, который вызываются после создания моделей представления заданий карточки. Данные делегаты позволяют использовать списки делегатов ControlInitializers, BlockInitializers, FormInitializers моделей представления заданий.

  9. API: Метод-расширение IOperationRepository.ExecuteInLockAsync теперь передаёт идентификатор созданной операции-блокировки в делегат actionFunc и возвращает его в результате метода. Также добавлен параметр leaveOpen, пропускающий удаление операции при завершении метода, при этом блокировка считается всё ещё взятой, и другой код должен её удалить.

  10. API: Изменены методы отправки уведомлений в INotificationManager. Теперь в интерфейсе содержится единственный универсальный метод, а не несколько разных методов, которые определены как методы-расширения, с перебором различных вариантов параметров из пространства имён Tessa.Notices.Parameters. Также добавлена возможность отправлять уведомления на явно заданный список адресов электронной почты.

  11. API: Обновлены библиотеки: HtmlAgilityPack 1.11.32, NLog 4.7.9, NLog.Web.AspNetCore 4.12.0, Npgsql 4.1.9.

1.3. Исправления и оптимизации

  1. Исправлена ошибка, из-за которой в контроле "Преставление" не работал перенос строк по словам в ячейках.

  2. Исправлена ошибка, из-за которой при клике правой кнопкой мыши на строку представления не сбрасывался выбор прочих cтрок представления.

  3. Исправлена ошибка, из-за которой при отображении контрола "Представление" с автоматическим расчетом ширины строк зависало клиентское приложение.

  4. Исправлена ошибка, из-за которой в контроле "Представление" всплывающая подсказка отображалась только при наведении на центральную область ячейки.

  5. Исправлена проблема, когда при каждом закрытии вкладки TessaClient, в которой запускался, но не был до конца запущен предпросмотр через внешнюю программу (например, документ Word), создавался лишний процесс TessaHost, а не использовался уже существующий процесс. Для воспроизведения проблемы должна была быть включена настройка "Разрешить предпросмотр через несколько внешних программ".

  6. Исправлена редкая ошибка, когда представление, из которого открывалась карточка, не обновлялось автоматически, если карточка была изменена, и пользователь выполнил закрытие вкладки с сохранением.

  7. В представлении KrPermissionsReport ("Отчёт по правилам доступа") исправлена сортировка по колонке "Приоритет" для СУБД PostgreSQL.

  8. Исправлено определение ОС в диалоге скачивания Deski в web-клиенте для Mac OS X.

  9. Исправлено определение разрядности ОС при открытии сессии в web-клиенте, который запущен в браузере Safari.

  10. В web-клиенте исправлена ошибка, из-за которой карточка "Сотрудник" скрывалась в тайле "Создать карточку" даже если права позволяли создавать этот тип карточки.

  11. В TessaAdmin исправлена ошибка, из-за которой при сохранении рабочего места пропадали привязанные к нему роли пользователей.

  12. В TessaAdmin исправлена ошибка, из-за которой не срабатывало удаление ролей, привязанных к рабочему месту.

  13. Расширения типов "Представление истории заданий", "Запрет изменения" и "Скрыть вкладку" убраны из списка допустимых расширений для типов заданий.

  14. В web-клиенте для сообщений в обсуждениях исправлена возможность добавлять сразу несколько файлов за одно открытие диалога.

  15. В web-клиенте исправлена проблема с сохранением стиля вводимого текста при потере фокуса.

  16. Исправлена проблема, когда пользователь не мог изменять свои настройки и пароль после добавления типа карточки "Сотрудник" в типовое решение.

  17. В обсуждениях добавлена поддержка сочетания клавиш Ctrl+Alt+S для применения зачеркнутого стиля к тексту.

  18. В обсуждениях при инициализации клиента исправлена загрузка прочитанных обсуждений в ситуации, когда нет новых сообщений в ленте уведомлений.

  19. В web-клиенте исправлено форматирование по умолчанию для decimal значений в колонках табличного контрола.

  20. Исправлено отображение блока с состоянием документа (KrBlockForDocStatus) при установке параметра "Скрывать вкладку "Маршрут"" в настройках типа документа.

  21. Исправлены проблемы для числовых контролов в TessaClient, когда разделитель разрядов иногда мог быть получен из настроек сессии, а иногда из настроек Windows. Например, если для русской культуры разделитель был изменён в настройках Windows с запятой на точку.

  22. В маршрутах улучшено сообщение об ошибке при отсутствии класса, содержащего выполняемый сценарий.

  23. В маршрутах исправлено "зависание" процесса в случае, если задание дополнительного согласования завершалось при активном дочернем запросе на комментарий.

  24. В конструкторе бизнес-процессов исправлен расчёт дайджеста у заданий "Подписание".

  25. В web-клиенте исправлена ошибка, из-за которой иногда не учитывались последние изменения в карточке при закрытии карточки средней кнопкой мыши по вкладке.

  26. В web-клиенте при добавлении этапа маршрута не отображается диалог выбора этапов, если доступен только один этап.

  27. В web-клиенте исправлена ошибка, из-за которой многострочный контрол "Строка" в форме контрола "Таблица" закрывал форму при нажатии Enter.

  28. Исправлена ошибка, из-за который новые поисковые запросы, добавленные в меню пользователем, дублировались в интерфейсе TessaClient.

  29. В конструкторе процессов в действиях с отправкой заданий исправлена проблема, из-за которой в скрипте "Сценарий инициализации задания" объект "task" переставал работать, если в этом же скрипте выполнялась загрузка карточки.

  30. В web-клиенте исправлена ошибка с проверкой ЭП для подписей, сделанных в версиях 3.3.1 и ранее.

  31. В контроле "Текст с форматированием" и в обсуждениях добавлена возможность сохранять приложенные файлы и изображения через контекстное меню.

  32. В обсуждениях исправлен просмотр изображений при условии, что у пользователя несколько мониторов.

  33. В контроле "Текст с форматированием" исправлено удаление файлов и изображений в ситуации, когда карточка еще не была сохранена.

  34. В представлении KrTypesForDialogs исправлена сортировка по колонке "Алиас" для PostgreSQL.

  35. Исправлено преобразование в PDF/TIFF для всех форматов изображений, кроме PNG.

  36. Исправлена ошибка, периодически возникавшая при копировании узла рабочего места в TessaClient.

  37. В контроле "Таблица" исправлена ошибка, из-за которой не работал выбор строк таблицы в расширениях.

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

  39. Исправлена сериализации и десериализации массива массивов в типизированный Json.

  40. Исправлена ошибка, из-за которой текущая выбранная вкладка в TessaAdmin сбрасывалась после подключения по RDP.

  41. В приложении TessaClient исправлена утечка памяти, происходящая, когда во вкладке карточки был открыт предпросмотр для незарегистрированного формата файла, после чего без очистки области предпросмотра вкладка закрывается.

  42. В web-клиенте исправлено ошибочное отображение значка подписи для новой версии файла после подписи предыдущей версии.

  43. В web-клиенте исправлено отображение блока с состоянием документа (KrBlockForDocStatus) при установке параметра "Скрывать вкладку "Маршрут"" в настройках типа документа.

  44. Исправлена обработка ошибки, добавленной в context.ValidationResult в методе StoreAsync для реализации ICardContentStrategy, созданной в проектном решении. Обработка такой ошибки теперь идентична обработке выброшенного исключения.

  45. Исправлена ошибка, из-за которой представление с сабсетами и связанными таблицами при установке фильтра дважды обновляло данные с сервера.

  46. Исправлено позиционирование индикатора уведомлений при использовании нескольких мониторов.

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

  48. Исправлена работа функций ObtainReaderLock и ObtainWriterLock для PostgreSQL, когда при параллельной работе с одной и той же карточкой запрос на снятие блокировки ожидал завершения выполнения этих функций.

2. Патч 3.5.0.7 (13.03.2021)

2.1. Переход на новую сборку

  1. Изменены представления: KrFilteredStageGroups, KrFilteredStageTypes, ProtocolCompletedTasks, TopicParticipants.

  2. Изменены таблицы: DocumentCommonInfo, FmTopicParticipantRolesUnsubscribed, FmUserStat, KrPermissionExtendedCardRuleFields, KrPermissionExtendedFileRuleCategories, KrPermissionExtendedMandatoryRuleFields, KrPermissionExtendedMandatoryRuleOptions, KrPermissionExtendedMandatoryRuleTypes, KrPermissionExtendedTaskRuleFields, KrPermissionExtendedTaskRuleTypes, KrVirtualFiles, KrVirtualFileVersions, ProtocolResponsibles, Roles (необязательное изменение), TaskHistoryGroups, WorkflowCounters, WorkflowEngineSatellite (удалена).

  3. Изменены процедуры: CalendarPrepareQuants.

  4. Изменены функции: CalendarAddWorkingDaysToDateExact.

  5. Изменены типы: KrSecondaryProcess.

  6. Изменены карточки: StartProcessButton.

  7. Изменены библиотеки локализации.

  8. Обновите файл app.json веб-сервиса: добавлены настройки RoleTimeoutTimeSpan и WebRazorReferences.

  9. Обновите файл app.json Chronos: добавлена настройка RoleTimeoutTimeSpan.

  10. Для кнопки маршрутов "Запустить процесс" указан скрипт в поле "Условное выражение", скрывающий кнопку для типов "Протокол". Если в проектном решении требуется использовать вкладку "Маршруты" и запуск основного процесса маршрута, то удалите в скрипте следующую строку: && card.TypeName != "Protocol".

  11. Все типы были перевыгружены в папку Configuration\Types, при этом пустые строки "" заменены на null, что соответствует исправленному поведению при экспорте типов. При этом важные изменения есть только в указанных выше типах, все остальные типы можно не заменять в проектном репозитории, чтобы не выполнять слияние изменений.

2.2. Добавление и изменение функциональности

  1. В маршрутах изменено отображение окна выбора типа добавляемого этапа. Если доступна одна группа и один тип этапа, то окно выбора этапа не отображается.

  2. В web-клиенте в разделе "Участники" в обсуждениях добавлено контекстное меню для изменения и удаления участников.

  3. В файле app.json веб-сервиса добавлена настройка "WebRazorReferences". В ней перечисляется список библиотек или папок с библиотеками, которые добавляются в компилируемые страницы .cshtml. Укажите папку "extensions", чтобы добавлять ссылки на расширения в таких страницах. Папки или файлы перечисляются в кавычках через запятую. Путь рассчитывается относительно папки с веб-сервисом (аналогично настройке "WebControllers"), и также может быть указан полный путь.

  4. В файлы app.json для веб-сервиса и Chronos добавлена настройка RoleTimeoutTimeSpan, определяющая таймаут длительных SQL-запросов, связанных с ролями, таких как пересчёт замещений, динамических ролей и метаролей. По умолчанию указано 30 минут. В предыдущих версиях системы этот таймаут не настраивался и был равен 10 минутам, что могло приводить к проблемам для крупных проектов.

  5. Добавлена поддержка импорта подписей в pem-формате.

  6. API: В метод-расширение waitHandle.ToTask() добавлен опциональный параметр timeout для таймаута ожидания. Вызов await waitHandle.ToTask(timeout) возвращает true, если ожидание завершилось без таймаута, или false, если при ожидании произошёл таймаут.

  7. API: Модель представления окна выбора типа добавляемого этапа (StageSelectorViewModel) перенесена из Tessa.UI.Controls.StageSelector в Tessa.Extensions.Default.Client.Views.StageSelector.

  8. API: Добавлен метод AssemblyLoaderHelper.AddSuppressResolveFailWarningForAssembly для того, чтобы не выводить предупреждения в логе по указанной сборке при невозможности её загрузить.

  9. API: Для контрола "Таблица" в desktop-клиенте в класс GridViewModel добавлен метод UpdateColumnsAsync(). Вызовите метод после изменения списка колонок для карточки, которая уже была отображена.

  10. API: При добавлении исключений в IValidationResultBuilder теперь есть возможность указать сообщение в параметре message, которое будет выведено в основной части сообщения, тогда как полный текст исключения доступен в деталях. Для добавления исключений рекомендуется использовать метод-расширение AddException.

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

  12. API: Для определения расширения файла, хранящегося в базе данных MS SQL, более не используется хранимая функция GetFileExt. Для этого используется метод CardDatabaseContentStrategy.GetFileExtensionWithDotAsync, который можно переопределить в классе-наследнике.

  13. API: Обновлены версии библиотек JavaScript, в которых исправлены проблемы, связанные с безопасностью.

  14. API: Для интерфейса IFileControl и класса TaskWorkspaceViewModel добавлена поддержка интерфейса ISupportUnloading с событием Unloaded, которое выполняется, когда элемент управления более недоступен.

  15. API: Для аргументов события в интерфейсе ISupportUnloading.Unloaded добавлено свойство e.ValidationResult, в которое возможно добавлять ошибки и другие сообщения. Они будут залогированы после того, как все элементы управления были выгружены вызовом Unload().

  16. API: Добавлен интерфейс IKrCreateBasedOnHandler, посредством которого выполняется создание карточки на основании другой карточки для документов типового решения. Используя этот интерфейс, упрощается вызов этой функциональности, а также появляется возможность заменить её регистрацию в Unity.

  17. API: В запрос на создание карточки newRequest.Info для создания на основании другой карточки (функциональность для документов типового решения) вместо идентификатора исходной карточки KrCreateBasedOnHelper.CardIDKey можно передать структуру карточки, на основании которой выполняется создание, для этого по ключу KrCreateBasedOnHelper.CardKey надо записать card.GetStorage(), чтобы карточка не загружалась из БД. Это удобно использовать в скриптах маршрутов и бизнес-процессов.

  18. API: Обновлены библиотеки: .NET Core 3.1.13, BarcodeLib 2.2.10, HtmlAgilityPack 1.11.31, NLog 4.7.8, NLog.Web.AspNetCore 4.11.0, Npgsql 4.1.8, Swashbuckle.AspNetCore 5.6.3, UAParser 3.1.46.

2.3. Исправления и оптимизации

  1. Исправлено возможное зависание клиентского приложения (TessaClient, TessaAdmin), если открыть окно, в нём - дочернее модальное окно, потом через панель задач переключиться на первое окно и закрыть его клавишей Esc. Например, открыть существующую строку контрола "Таблица", в нём через троеточие в контроле "Список" открыть выбор представления, через панель задач переключиться на окно строки таблицы и нажать Esc.

  2. Для AppManager исправлено скачивание обновлений для приложений и для самого AppManager, если дата изменения приложения на сервере отличается от даты скаченного локально приложения в меньшую сторону. Например, если изменить основной сервер, на котором AppManager опубликован раньше по времени, чем на предыдущем основном сервере, то после перезапуска Tessa Applications до исправления он не скачивал AppManager с нового сервера, теперь он будет его скачивать и обновлять.

  3. В web-клиенте исправлена ошибка при открытии на чтение виртуальных файлов в карточке.

  4. Для реестра "Протоколы" в дочернем представлении "Задания" исправлен вывод списка заданий, которые отправлялись по кнопке "Разослать задачи по решениям". Также изменён порядок колонок "Вариант завершения" и "Результат".

  5. Исправлены скрипты обновления платформы Upgrade.bat/upgrade.sh таким образом, чтобы перед взаимодействием с веб-сервисом был выполнен сброс кэшей схемы данных (и связанных с ним кэшей карточек). Схема данных ранее импортировалась скриптом посредством прямого соединения с БД, что могло привести к неконсистентному состоянию импортированных типов карточек по отношению к содержащейся в кэше старой схемы данных.

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

  7. Исправлена обработка ссылок Tessa Applications при наличии указанного в ссылке неизвестного сервера или алиаса приложения tessa://application.server/…​ Ранее приложение закрывалось после отображения ошибки.

  8. Исправлена редкая ошибка "Safe handle has been closed". Ошибка могла возникать при ожидании событий вежливой остановки плагинов Chronos посредством объекта GlobalEventAwaiter.

  9. Исправлена ситуация, когда кэш представлений наполнялся на текущем открытом соединении в dbScope, в котором может быть незакрытая транзакция, или соединение могло быть открыто к другой БД. Теперь кэш всегда наполняется на отдельном соединении с БД.

  10. В web-клиенте исправлена ошибка, из-за которой не обновлялось время последнего прочтенного сообщения при первом, после запуска клиента, открытии топика.

  11. В маршрутах в типе карточки "Вторичный процесс" исправлено отображение поля "Дополнительные настройки видимости"/"SQL условие".

  12. При получении и при отправке почты посредством Exchange исправлены проблемы с аутентификацией при наличии redirect, если Chronos выполняется на ОС Linux.

  13. Исправлена ошибка, из-за которой при удалении карточки проверка прав на удаление производилась без переданного в запросе токена.

  14. В web-клиенте исправлена проблема, которая могла приводить к cors-ошибкам браузера при saml аутентификации.

  15. Оптимизировано удаление некоторых типовых карточек и строк в таблицах, где имелся внешний ключ FK на таблицу без индекса.

  16. Исправлена работа функции CalendarAddWorkingDaysToDateExact для СУБД PostgreSQL.

  17. В редакторе схемы исправлена проблема, когда при изменении в настройках ссылочной колонки полей "Разряженная" или "Идентификатор строки" система не определяла данную колонку как измененную.

  18. Исправлен запуск Tessa Applications по ярлыку при уже свернутом в трее приложении, если оно было запущено при запуске Windows.

  19. Исправлено вычисление расширения файла в колонке FileContent.Ext для файлов, хранящихся в базе данных MS SQL, если имя файла содержит специальные символы Unicode, например, если в имени используется символ "й", который был введён в web-клиенте на macOS.

  20. Исправлено отображение ошибки при выборе файла в качестве фонового изображения TessaClient, если формат файла не поддерживается. Ошибка появилась в сборке 3.5.0.

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

  22. При возникновении ошибок доступа в подсистеме правил доступа в детали ошибки дополнительно теперь указывается тип карточки.

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

  24. Оптимизирована проверка доступа создания подписок на типы уведомлений.

  25. Исправлена ошибка, когда заместитель автора переставал видеть задание от имени автора, если он не является исполнителем, и задание взято в работу.

  26. Исправлена ошибка, из-за которой кнопка "Предпросмотр без расширений" в "Расположении блоков" выполняла предпросмотр с расширениями.

  27. Исправлено сообщение об ошибке в ситуации, когда для контрола карточки настроен маппинг с параметром представления, связанный с таким полем карточки, которое было включено в тип на момент добавления, но было удалено из типа к моменту использования.

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

  29. В web-клиенте исправлена ошибка, приводившая к тому, что в карточке "Тип документа" при снятии флага "Использовать систему обсуждений" флаг "Использовать стандартную вкладку "Обсуждения" не скрывался.

  30. При выгрузке типов карточек в формате .jtype исправлена ситуация, когда свойство Form контрола "Таблица" могло выводится то как null, то как пустой объект. Теперь всегда выводится null.

  31. Исправлена возможная ошибка InvalidCastException при добавлении этапов согласования в скриптах маршрутов без указания доп. согласующих.

  32. В модуле синхронизации AD / LDAP исправлена синхронизация состава подразделения.

  33. Исправлено указание context.CancellationToken в расширениях на карточки. Теперь токен асинхронной отмены операции корректно пробрасывается в контекст из вызывающей операции.

  34. Исправлено копирование таблицы условий при копировании карточек "Правило доступа" и "Виртуальный файл".

  35. Исправлен вызов команды tadmin ImportTypes с указанием имени файла вместо имени папки. При этом команда пыталась импортировать файл сразу в двух форматах: .jtype и .tct. Ошибка появилась в сборке 3.1.0.

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

  37. В модуле синхронизации с AD/LDAP исправлена массовая блокировка пользователей при обработке нескольких операций синхронизаций, выполняемых за один запуск плагина.

  38. Исправлена утечка памяти при создании и копировании карточки в TessaClient при наличии расширений, подписывающихся на структуру карточки context.Card. Проблема могла проявляться после создания карточки, включённой в типовое решение.

  39. Исправлено ошибка NRE в TessaAdmin при создании рабочего места в режиме просмотра.

  40. В web-клиенте исправлена ошибка, из-за которой боковые панели иногда не закрывались при переключении вкладок.

  41. В web-клиенте исправлена работа пунктов меню "Добавить участников" и "Добавить роль" в обсуждениях.

  42. В web-клиенте в обсуждениях исправлена неработающая опция меню "Отписаться от уведомлений".

  43. В web-клиенте в обсуждениях исправлена ошибка, из-за которой не выполнялось изменение опций меню "Подписаться на уведомления" и "Отписаться от уведомлений" после изменения состояния подписки на уведомления.

  44. Оптимизирован пересчёт календаря.

  45. Исправлена ошибка, когда в карточке "Настройки сервера" дублировались строки настроек файловых хранилищ при загрузке карточки через ICardCache в расширениях TessaClient.

  46. Исправлено добавление в объект ValidationResult информации по исключению, у которого сообщение exception.Message является пустой строкой.

  47. В маршрутах в этапе "Ветвление" исправлена ошибка "KrAsyncProcessRunner: The first stage of the route is not defined". Ошибка происходит при изменении карточки в скрипте инициализации этапа "Ветвление".

  48. Исправлены отсутствующие строки локализации в представлениях.

  49. Исправлена ошибка расчета прав при подписке на уведомления по документу. Из-за ошибки, подписаться на уведомления мог только сотрудник, у которого так же были права на создание документа этого типа.

  50. Исправлено кодирование русскоязычных имён файлов, приложенных к письмам, которые отправляются по протоколу SMTP. При этом улучшена совместимость со старыми почтовыми клиентами, которые могли не распознавать имя и выводить его как "Вложение без имени 00309.pdf".

  51. В web-клиенте исправлен расчёт положения выпадающих списков при наличии полосы прокрутки в карточке.

  52. При экспорте типов карточек в файлы jtype исправлены ситуации, когда пустые строки в настройках иногда экспортировались как null, а иногда как пустые строки. Теперь они всегда экспортируются как null.

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

  54. Для типовых карточек "Протокол" скрыта кнопка "Запустить процесс", которая всегда приводила к ошибке запуска из-за отсутствия этапов маршрута, поскольку пользователь не мог их добавить. Если в проектном решении требуется использовать вкладку "Маршруты" и запуск основного процесса маршрута, то удалите в скрипте следующую строку: && card.TypeName != "Protocol".

  55. Исправлено отображение названий карточек в диалоге импорта, в именах которых есть символы подчёркивания.

  56. В web-клиенте исправлена ошибка, из-за которой в настройках этапа отображалась неиспользуемая настройка "Вернуть на роль: " с пустым значением роли.

  57. Исправлено удаление ролей рабочих мест в TessaAdmin.

  58. Исправлено сохранение карточки при закрытии вкладки в TessaClient (при ответе "Да" на вопрос о сохранении изменений при закрытии), где при наличии ошибок валидации или при отмене сохранения в методе расширения Saving вкладка всё равно закрывалась.

3. Патч 3.5.0.6 (13.01.2021)

3.1. Переход на новую сборку

  1. Изменены карточки: Calendar (settings) (необязательное изменение).

  2. Изменены библиотеки локализации.

  3. В карточке настроек "Календарь" дата окончания календаря теперь указана как 01.01.2023. Ранее было указано 01.01.2021. Проверьте карточку настроек и продлите срок календаря, если он у вас завершился. После этого нажмите кнопку "Пересчитать календарь" или выполните команду tadmin RebuildCalendar для его автоматизированного пересчёта. Мы рекомендуем продлевать срок календаря не более, чем на два года, поскольку общая длительность календаря влияет на скорость работы представлений, отображающих сроки заданий.

3.2. Добавление и изменение функциональности

  1. В карточке настроек "Календарь" дата окончания календаря теперь указана как 01.01.2023.

  2. В TessaAdmin представления без группы теперь располагаются выше представлений из других групп. Ранее они были расположены в середине между другими группами, что усложняло их поиск.

  3. API: Добавлено свойство ITempFolder.FolderPath, которое возвращает полный путь к временной папке, по аналогии со свойством ITempFile.FolderPath.

  4. API: В потоковом сканировании в расширении для печати штрих-кода теперь используется интерфейс IPrintDialogProvider вместо явно заданного класса PrintDialogProvider. Также от класса PrintDialogProvider можно отнаследоваться и переопределить его методы. Это позволяет изменить логику в отображаемом диалоге печати.

  5. API: Для интерфейса IDbmsErrorCodeProvider добавлен метод GetErrorCodeAsync, принимающий в качестве параметра IValidationResultItem для проверки типа исключений СУБД в объектах ValidationResult.

  6. API: Добавлена регистрация клиентских API WorkflowEngine в консольном приложении tadmin.

  7. API: Добавлен метод EnvironmentHelper.TryGetWindowsVersion(), который возвращает текущую версию Windows или null, если версию не удалось определить. Для Windows 7 возвращается версия 6.1.7601, для Windows 8.1 - 6.3.9600, для Windows 10 - 10.0.xxx, где xxx - номер сборки, это первое число в строке OS build на странице MSDN: https://docs.microsoft.com/en-us/windows/release-information/.

  8. API: Обновлены библиотеки: .NET Core 3.1.11, BarcodeLib 2.2.9, CsvHelper 15.0.10, DocumentFormat.OpenXml 2.11.3, HtmlAgilityPack 1.11.29, ITFoxtec.Identity.Saml2 4.0.9, Kerberos.NET 4.0.16, NetOffice.Word 1.7.4.11, NLog 4.7.6, NLog.Web.AspNetCore 4.10.0, Npgsql 4.1.7, SixLabors.ImageSharp.Drawing 1.0.0-beta11, StackExchange.Redis 2.1.58, Unity 5.11.10, ZXing.Net 0.16.6.

3.3. Исправления и оптимизации

  1. В маршрутах в этапе "Типизированное задание" исправлена ошибка NRE. Ошибка возникала при ошибке создания задания, например, при указании несуществующего типа задания в методе SendTaskAsync сценария "После завершения задания" этапа.

  2. Исправлена обработка отмены выполнения цепочки расширений OperationCanceledException для расширений плагинов IPluginExtension.

  3. Исправлено отображение ошибки при запуске приложения TessaClient, если загрузка карточки-сателлита сотрудника выполнена неуспешно или возникли другие ошибки в ValidationResult.

  4. Исправлена ошибка при открытии представления из элемента управления "Ссылка", из-за которой не всегда автоматически становилось активным первое доступное представление.

  5. Исправлена проблема при автозапуске Tessa Applications вместе с запуском Windows, когда он при этом автоматически запускал единственное доступное приложение. Его запуск теперь выполняется только в том случае, если Tessa Applications запущен явным образом (по ярлыку).

  6. Исправлена обработка клиентскими приложениями таймаута запросов к серверу приложений. В частности, в tadmin такие ошибки логируются и задают корректный код выхода.

  7. Исправлено зависание сервера приложений после сброса кэшей. Ошибка появилась в предыдущем патче.

  8. В шаблонах файлов исправлена ошибка генерации текстовых файлов со скриптами, из-за которой, при наличии в файле таблиц без скриптов и со скриптами одновременно, таблицы со скриптами не генерировались.

  9. Исправлена редкая ошибка нарушения уникального индекса ndx_SequencesInfo_Name, если параллельно выполнялось несколько операций для карточки последовательности, которая отсутствовала в базе данных и будет создана в результате одной из операций. Теперь вместо ошибки последовательность будет создана одной из операций, а другая операция выполнит действие с уже существующей последовательностью.

  10. Исправлены возможные проблемы с транзакционностью валидаторов уникальности для СУБД MS SQL Server, где могло использоваться грязное чтение (dirty read) данных в другой транзакции. Теперь валидатор выполняет запросы с уровнем изоляции read committed.

  11. Исправлена проблема с долгой загрузкой TessaClient в ситуации, когда происходит блокировка правил доступа.

  12. Исправлена печать штрих-кода из TessaClient для потокового сканирования в ОС Windows 8.1 и в ОС Windows 10 версии 1803 или младше. Для указанных версий Windows формирование страницы и отображение диалога печати перенесены в отдельный процесс TessaHost, выполняемый в .NET Framework, поскольку в .NET Core 3.1 печать не работает из-за ошибки платформы. Проблема не затрагивала ОС Windows 7 и ОС Windows 10 версии 1809 или старше.

  13. Исправлена ошибка запуска процесса через клиентский API конструктора процессов.

  14. Исправлена ошибка при отправке запроса через клиентский API конструктора процессов без указания идентификаторов узлов или экземпляров узлов.

  15. В маршрутах исправлен пропуск добавленных вручную этапов при указании у них флага Stage.Skip.

4. Патч 3.5.0.5 (26.12.2020)

4.1. Переход на новую сборку

  1. Изменены представления: Applications, AvailableDeputyRoles, AvailableDeputyUsers, BusinessProcessTemplates, DeputiesManagement, DurableRoles, KrFilteredStageGroups, KrPermissionsExtendedCards, KrPermissionsExtendedFiles, KrPermissionsExtendedMandatory, KrPermissionsExtendedTasks, KrSecondaryProcesses, KrStageGroups, KrStageTemplates, KrTypesForDialogs, LastTopics, MyTasks, MyTopics, ReportCurrentTasksRules, Roles, TopicParticipants, Users, WfResolutionAuthors.

  2. Изменены таблицы: ActionTypes, KrSecondaryProcessCommonInfo.

  3. Изменены функции: FormatAmount, GetString, Localization, Localize.

  4. Изменены типы: AdSync, Application, KrSecondarySatellite.

  5. Изменены карточки: ApprovalHistory, Default access rules (необязательное изменение), Default acquaintance access rule (необязательное изменение), PrintableApprovalHistory, SendProtocolTasksButton, Server settings (settings) (необязательное изменение).

  6. Изменены библиотеки локализации.

  7. Обновите файл app.json веб-сервиса: удалены настройки InstanceCheckSeconds и InstanceShutdownSeconds.

  8. Обновите файл app.json в Chronos: добавлен параметр "DeputiesRecalc.BulkSize", который определяет количество записей замещения, загружаемых при каждой итерации синхронизации заместителей.

  9. В карточке "Настройки сервера" интервал, по которому TessaClient опрашивает сервер на наличие новых сообщений для форумов и обсуждений, был увеличен с 60 секунд до 5 минут. Вы можете импортировать карточку "Server settings (settings)" или изменить значение вручную.

  10. Обновите файлы Tessa.Extensions.Console.csproj, Tessa.Extensions.Shared.csproj, Tessa.Extensions.Default.Console.csproj, Tessa.Extensions.Default.Shared.csproj в проектных расширениях (папка Source\Extensions в сборке). В файлах исправлен скрипт PostBuildEvent для копирования библиотек расширений в папку Bin\Tessa.Extensions.Console.

  11. Методы добавления этапа в маршрут IKrScript.AddStage и IKrScript.GetOrAddStage заменены на асинхронные IKrScript.AddStageAsync и IKrScript.GetOrAddStageAsync, соответственно.

4.2. Добавление и изменение функциональности

  1. В web-клиенте в контроле таблицы добавлен хоткей на клавишу Enter для закрытия диалога редактирования строки.

  2. В карточке "Настройки сервера" интервал, по которому TessaClient опрашивает сервер на наличие новых сообщений для форумов и обсуждений, был увеличен с 60 секунд до 5 минут.

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

  4. При возникновении ошибок доступа в подсистеме правил доступа в детали ошибки добавлен вывод следующей информации: состояние карточки, идентификатор карточки и Digest карточки.

  5. Изменена логика работы клиентского поиска в представлении в расширении типа "Представление истории заданий". Теперь фильтрация применяется не по нажатию на клавишу Enter, а автоматически с небольшой задержкой.

  6. В карточку настроек "Синхронизация AD / LDAP" добавлена подсказка по настройкам в таблице "Корневые элементы синхронизации (OU)".

  7. Добавлен тип действия "Резервирование выделенного номера" в истории действий. Оно используется системой при восстановлении зарезервированного номера после возникновения ошибок сохранения.

  8. Утилита tadmin: в команду ManageRoles добавлен параметр "/bulk:bulkSize", который определяет количество записей замещения, загружаемых при каждой итерации синхронизации заместителей.

  9. API: В объектную модель процесса маршрутов (класс WorkflowProcess) добавлены свойства AuthorCurrentProcess и ProcessOwnerCurrentProcess - автор и владелец текущего процесса.

  10. API: Добавлен базовый абстрактный класс расширения на сериализацию параметров этапов ExtraSourcesStageRowExtensionBase, предоставляющий методы для получения и сохранения информации о дополнительных методах этапов. Подробное описание доступно в руководстве разработчика в разделе Маршруты в п. "Создание дополнительного сценария этапа".

  11. API: В методе CompilationHelper.FormatErrorIntoMember расширена поддержка элементов синтаксического дерева, для которых выполняется формирование строкового представления об ошибке компиляции, обработкой конструктора. В метод также добавлен необязательный параметр "memberKind" позволяющий указать тип искомого элемента синтаксического дерева.

  12. API: Методы добавления этапа в маршрут IKrScript.AddStage и IKrScript.GetOrAddStage заменены на асинхронные IKrScript.AddStageAsync и IKrScript.GetOrAddStageAsync, соответственно.

  13. API: Добавлен интерфейс IFileSignatureExporter, посредством которого можно переопределить алгоритм, по которому генерируется имя файла для подписи. Переопределите интерфейс в Unity, отнаследовавшись от класса FileSignatureExporter и переопределив метод GetSignatureFileNameAsync, чтобы изменить расширение файла подписи: (await this.GetSignatureFileNameWithoutExtensionAsync(context, index, cancellationToken).ConfigureAwait(false)) + ".sig".

  14. API: Для узла рабочего места IWorkplaceViewComponent можно указать свойство ClearSelectionOnRefresh (bool), предотвращающее автоматический выбор первой строки или первой ячейки представления при её первом отображении или после обновления данных. Следует учитывать, что если выбранных строк нет, то detail-представления не заполняются. Установить свойство можно в любой момент, в т.ч. в методе Initialized для расширения на узел рабочего места IWorkplaceViewComponentExtension.

  15. API: В типы IRoleManager и IRoleManagerService в метод синронизации заместителей добавлен параметр "bulkSize", определяющий количество записей замещения, загружаемых при каждой итерации синхронизации заместителей.

  16. API: Обновлены библиотеки: .NET Core 3.1.10.

4.3. Исправления и оптимизации

  1. В web-клиенте исправлена ошибка локализации всплывающих подсказок в контролах карточки.

  2. В web-клиенте исправлена ошибка, из-за которой настройка "Формат поля" для больше чем 9 параметров не учитывалась.

  3. В web-клиенте исправлена ошибка, из-за которой в диалоге параметров представлений не работали горячие клавиши Esc и Enter.

  4. В модуле синхронизации с AD / LDAP исправлена ошибка синхронизации пользователей при совпадении хэша (не учитывались некоторые поля в Active Directory).

  5. В модуле синхронизации с AD / LDAP исправлена ошибка при синхронизации независимых элементов у пользователей.

  6. В модуле синхронизации с AD / LDAP добавлено логирование пользователей, которые будут заблокированы системой.

  7. В модуле синхронизации с AD / LDAP добавлена проверка, что AdSyncID заполнен при ручной синхронизации объектов.

  8. В конструкторе бизнес-процессов исправлена редкая ошибка обработчика привязок процесса, из-за которой обработчик прекращал работу.

  9. В маршрутах при настройке этапа "Диалог" в представлении для поля "Тип карточки" исправлена фильтрация по параметру "Алиас" для PostgreSQL.

  10. В маршрутах исправлена ошибка при определении роли, для которой выполняется пересчёт вторичного процесса при заданном владельце или инициаторе основного процесса. Ошибка появилась в версии 3.5.0.

  11. Оптимизировано взаимодействие с базой данных, чтобы открытие соединений выполнялось только асинхронно. Также для PostgreSQL было возможно открытие соединения и тут же его закрытие при создании объекта DbManager (при использовании пула соединений это было незаметно).

  12. Оптимизированы хранимые функции локализации для СУБД MS SQL.

  13. Исправлена ситуация, при которой TessaClient сохранял настройки отображения карточек (размер и положение области предпросмотра, области заданий, пустой области по краям и др.) на сервере для пользователя, даже если фактических изменений в настройках не было.

  14. Вместе с обновлением .NET Core исправлено появление предупреждения "Increasing the MaxRequestBodySize conflicts with the max value for IIS limit maxAllowedContentLength" в файле log.txt веб-сервиса при использовании IIS в качестве веб-сервера.

  15. В маршрутах исправлена ошибка, происходящая при завершении первого задания для повторно запущенного процесса, в котором была изменена группа этапов в одном из шаблонов этапов на группу, имеющую больший порядковый номер, чем заменяемая.

  16. Оптимизированы выборки со списками сотрудников (join к RoleUsers) в представлениях.

  17. Оптимизировано открытие карточки "Приложение" в TessaClient, поскольку группы файлов теперь свёрнуты по умолчанию.

  18. Исправлена проблема, когда Tessa Applications мог не закрывать сессию к основному серверу, если при загрузке локализации возникли ошибки.

  19. Исправлена проблема, которая приводила к ошибке ERANGE на сервере приложений Linux при попытке отправить уведомление по глобальному событию, где в процессе после перевода события в сигнальное состояние и до его перевода в несигнальное состояние могло возникнуть исключение, например, в случае асинхронной отмены по CancellationToken в процессе ожидания мьютекса. Исправление актуально для глобального кэша метаинформации.

  20. Исправлено обращение к свойству сессии session.Token со стороны веб-сервиса, если токен сессии отсутствует, где вместо значения null выбрасывалось исключение InvalidOperationException. Например, это может быть для контроллеров, используемых для интеграции с другими системами, в которых авторизация выполняется без открытия стандартной сессии.

  21. Оптимизированы выборки в представлениях с агрегацией строк посредством FOR XML PATH для MSSQL.

  22. В маршрутах в этапе "Уведомление" исправлена строка локализации, используемая при отображении ошибки компиляции для сценария изменения уведомления.

  23. Исправлена ошибка при генерации конструктора по умолчанию, выполняющего инициализацию дополнительных методов подсистемы маршрутов. Ошибка приводила к возникновению исключения KeyNotFoundException при ошибке компиляции конструктора по умолчанию.

  24. Исправлена ситуация, когда в результате использования метода StreamHelper.AcquireMemoryStream() могли удерживаться неиспользуемые блоки памяти большого размера. Теперь кэширование выполняется только для потоков, размер которых не превышает StreamHelper.MaxCachedSize (80 КБ в текущей реализации).

  25. Оптимизировано потребление памяти при использовании контекстной роли с большим количеством замещений совместно с объектом кэша ICardContextRoleCache. Например, это происходит при использовании контекстных ролей в правилах доступа, в бизнес-процессах или при отправке уведомлений.

  26. В web-клиенте исправлена ошибка, из-за которой настройки цвета заголовка контрола могли не применяться в карточке.

  27. Исправлена штатная остановка веб-сервиса посредством исключения OperationCanceledException, которое логировалось как ошибка.

  28. Исправлена ошибка при инициировании redirect с адреса web-клиента на страницу логина, если в ASP.NET Core присутствует Middleware, выполняемая перед TessaClientMiddleware, которая уже инициировала собственный redirect.

  29. Исправлены ситуации, при которых исключение OperationCanceledException, возникающее при асинхронной отмене действия, добавлялось в ValidationResult или логировалось, хотя не должно было, причём в ряде случаев исключение не выбрасывалось наружу метода, в котором было перехвачено.

  30. В маршрутах исправлена ошибка при создании этапа с использованием метода IKrScript.AddStage или IKrScript.GetOrAddStage, из-за которой не выполнялась инициализация параметров созданного этапа значениями по умолчанию.

  31. Исправлен скрипт миграции Migration-3.5-pre.ms.sql для корректного сквозного обновления на сборку 3.5.0 или старше с пропуском обновления до нескольких предыдущих сборок. Ошибка воспроизводилась для MS SQL Server 2016 или старше.

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

  33. Исправлены обычный и печатный листы согласования при выводе информации по заданиям доп. согласования для записей в истории заданий, где заполнена колонка UserPosition (должность удваивалась).

  34. Исправлены ситуации, когда при закрытии сессии администратором могла возникнуть ошибка "Session token is unavailable in HttpContext".

  35. Исправлена сериализация/десериализация типов данных DateTime в json, где мог неправильно учитываться DateTimeKind. Ошибка исправлена в методах CardMetadataHelper.ToString() и CardMetadataHelper.Parse().

  36. Исправлена ошибка "No credentials are available in the security package", которая может возникать при подключении Tessa Applications к серверу IIS, в котором включена Windows-аутентификация, но она не выполняется для текущего пользователя.

  37. Исправлен файл Fixes\KrApprovalList\KrApprovalList.cs для использования устаревших расширений на лист согласования для текущей версии API.

  38. Исправлен метод присваивания свойства card.TaskHistoryGroups у объекта карточки Card. Он по ошибке присваивал TaskHistory в storage-объекте.

  39. Исправлена ситуация, когда в диалоге "Мои настройки" при первом изменении списка уведомлений настройки не сохранялись, если таблица условий не заполнена.

  40. В TessaAdmin исправлено отображение редактируемых узлов рабочих мест с несколькими вкладками. Выбранная вкладка могла сбрасываться при переключении между узлами, в каждом из которых есть вкладки.

  41. Исправлено поведение представлений-диаграмм в связке master-detail, например, в типовом решении это диаграмма "Просроченные задания". По умолчанию сегмент диаграммы не выделен, поэтому detail-представления не заполняются. Когда пользователь выбирает сегмент диаграммы, то detail-представления заполняются данными этого сегмента, а если нажать на сегмент ещё раз, то он перестаёт быть выбранным и detail-представление очищается. Ранее при открытии узла был выбран первый сегмент диаграммы, хотя он не выглядел выбранным, и при повторном нажатии по выбранному сегменту визуально выделение снималось, но detail-представления не очищались.

  42. В модуле Обсуждения на сервере удалено лишнее логирование ValidationResult.

  43. В маршрутах в этапе "Ветвление" и "Управление ветвлением" исправлена ошибка NRE. Ошибка происходит при выполнении указанных этапов в основном процессе, если при создании строки секции KrConstants.KrForkSecondaryProcessesSettingsVirtual.Synthetic в сценарии инициализации, не задано значение поля KrConstants.StageRowID. Поле KrConstants.StageRowID секции KrConstants.KrForkSecondaryProcessesSettingsVirtual.Synthetic должно устанавливаться равным идентификатору текущего этапа. Информация о настройке данных этапов содержится в руководстве администратора в разделе "Маршруты документов" в п. "Ветвление" и "Управление ветвлением", соответственно.

  44. В TessaClient исправлено спорадическое дублирование элементов рабочего места в диалоге представления.

  45. Исправлены проблемы с многопоточным доступом к dynamic-свойствам объекта Card после вызова EnsureCacheResolved. Это актуально для карточек настроек и карточек контекстных ролей из ICardContextRoleCache.

  46. Оптимизирована хранимая функция FormatAmount для СУБД MS SQL.

  47. Исправлено обращение к локализации при построении метаинформации, которое могло привести к deadlock при запуске сервиса.

  48. В web-клиенте исправлена ошибка, из-за которой в контроле карточки "Таблица" событие rowEditorClosing не вызывалось повторно при установке event.cancel = true.

  49. Исправлено редактирование и сохранение библиотек локализации в части ограничений на длину текстовых полей в символах: имя библиотеки локализации - 128, имя строки локализации - 128, комментарий строки локализации - 512, значение для указанного языка - 1024.

  50. Исправлена ошибка при отправке или получении почты в Exchange по https, если клиент (на котором выполняется Chronos) не доверяет сертификату сервера.

  51. При отправке почты по SMTP, если не указана настройка "SmtpDefaultCredentials" = true и если не заданы логин/пароль, то отправка выполняется без аутентификации. Ранее в этом случае выполнялась аутентификация Kerberos/NTLM.

  52. Исправлена ситуация, когда из-за CancellationToken, выброшенного при взятии блокировки на карточку, блокировка не могла быть освобождена, т.к. соединение с БД было закрыто к моменту освобождения блокировки. Ошибка появилась в сборке 3.5.0.

  53. Исправлена ошибка CLIPBRD_E_CANT_OPEN при обращении к методу Clipboard.GetDataObject(). Ошибка могла приводить к падению приложения TessaAdmin, а также к ошибкам при вставке из буфера в контролах "Список файлов" и "Текст с форматированием".

  54. Метод IFileContent.IsModified() теперь возвращает false, если для объекта ранее был вызван Dispose(). Этот метод семантически аналогичен свойству, поэтому выбрасывание исключения ObjectDisposedException могло привести к непредусмотренным побочным эффектам в коде расширений.

  55. В web-клиенте исправлена ошибка, из-за которой некоторые плитки на создание карточек могли отображаться, даже если карточки были недоступны для создания.

  56. В web-клиенте исправлена ошибка, из-за которой в компоненте UIButton не учитывалось свойство IsEnabled.

  57. В TessaClient для заголовка диаграммы и для строк в легенде диаграммы выполняется локализация с форматированием, что позволяет локализовать плейсхолдеры {$Alias}, которые могут присутствовать в названиях ролей.

  58. Исправлено имя строки подключения по умолчанию в сообщениях об ошибках Configuration string "default" is not found/has an empty connection string.

  59. В TessaClient и TessaAdmin исправлена работа параметров фильтрации представлений для нестандартных числовых типов: Byte, SByte, Int16, UInt16, UInt32, UInt64. В некоторых случаях ввод был заблокирован, в других - выставлены некорректные ограничения на диапазоны вводимых чисел или отсутствовало значение по умолчанию.

  60. В TessaClient и TessaAdmin исправлена работа параметров фильтрации для ввода отрицательных чисел.

  61. Исправлено использование поля в карточках с типом данных DateTimeOffset для СУБД PostgreSQL.

  62. Исправлена проблема, когда некорректно работала настройка "Всегда проверять правило доступа" с флагом "Редактировать карточки" при наличии взятого в работу задания "На согласование" без дополнительно выданных прав доступа на редактирование в настройках этапа.

  63. Исправлена ошибка при отображении контролов "Представление", "Контейнер" и "Вкладки" в диалоговых окнах.

  64. В представлениях исправлена передача параметров с типами UInt16, UInt32 и UInt64 для СУБД PostgreSQL.

  65. В скриптах установки и обновления при импорте карточек, для которых было выполнено автоматическое исправление структуры, предупреждение по таким исправлениям не выводятся в файл лога.

  66. Исправлена структура типовых карточек правил доступа, чтобы исключить автоматическое исправление их структуры при импорте.

  67. В desktop-приложениях исправлена ошибка при закрытии окна через нажатие Esc, когда для него уже выводится диалог вида "вы хотите закрыть окно? да/нет".

  68. Удалён метод-расширение unityContainer.RegisterEDS(). С версии сборки 3.5.0 регистрация интерфейсов IEDSManager и ICAdESManager выполняется в регистраторе типового решения.

  69. Реализацию провайдера ЭП можно получить по интерфейсу IEDSManager (помимо реализации для ICAdESManager), как это было в сборке 3.4.0 и ранее.

  70. В контроле "Представление" исправлена ошибка при отображении значения параметра, в который через маппинг передается значение из колонки master-представления.

  71. В контроле "Представление" исправлена ошибка, из-за которой кнопки для изменения страницы при постаничном отображении были нееактивны, пока на них не нажали.

  72. Исправлена ошибка в контроле "Представление", из-за которой в detail представлении не сбрасывался номер страницы при изменении выбранной строки master представления.

  73. Исправлены ошибки в контроле "Представление" в режиме опционального постраничного вывода.

  74. В web-клиенте исправлена ошибка, из-за которой кнопки в этапе "Диалог" вторичных процессов могли функционировать некорректно.

  75. В маршрутах в этапе "Ветвление" исправлена ошибка при повторном запуске этапа путём выполнения перехода на этот этап или расположенный перед ним синхронный этап после завершения ветки с отзывом оставшихся веток. Ошибка возникала если между синхронным этапом, на который был выполнен переход, и этапом "Ветвление" не было асинхронных этапов.

  76. Исправлено возможное зависание сервера приложений из-за взаимной блокировки между кэшами в момент их заполнения в разных потоках, если при заполнении данных одного из кэшей возникает построение другого кэша.

  77. Исправлена обработка исключений при импорте карточек в TessaClient и TessaAdmin, когда вместо текста исходного исключения отображалась ошибка вида "Ключ CardID отсутствует в словаре".

  78. В элементе управления "Представление" при опциональном постраничном отображении по умолчанию включается постраничное отображение.

  79. Исправлено сохранение карточки с файлами на сервере, если используется ICardFileManager совместно с репортингом прогресса операции container.StoreAsync(updateProgressAsync, updateProgressMillisecondInterval), или если используется сохранение посредством ICardStreamClientRepository. В этом случае репортинг прогресса выполнялся в отдельном потоке на том же соединении с базой данных, что и сохранение карточки, и это могло привести к ошибкам.

  80. В web-клиенте исправлена ошибка с пробрасыванием токена прав доступа KrToken, если карточка сохраняется с обновлением, при этом после обновления загружается другая карточка (например, карточка-сателлит задания).

  81. Исправлена ошибка, когда токен прав доступа KrToken пробрасывался в загружаемую с клиента карточку, даже если карточка отличается от текущей открытой. Такая ситуация возможна, если клиентским расширением загружается другая карточка.

  82. Исправлены действия с номерами при сохранении или импорте карточки, а также при выделении номера из контрола "Нумератор", если существует расширение CardStoreExtension, зарегистрированное в WithOrder(AfterPlatform), которое в методе BeforeCommitTransaction приводит к ошибке сохранения.

  83. Исправлена ошибка при резервировании номера, если последовательность не содержит доступных интервалов.

  84. Исправлено открытие карточки динамической или метароли после пересчёта по кнопке "Пересчитать роль сейчас". Ошибка воспроизводилась, если карточка ни разу не сохранялась.

  85. Добавлен вертикальный скроллинг в поле "Комментарий" в окне записи истории заданий в desktop-клиенте.

  86. В обсуждениях для участника обсуждения в режиме только для чтения запрещено редактировать и цитировать сообщения.

  87. В обсуждениях исправлено получение файлов из сообщений, если до этого не была открыта вкладка с обсуждениями.

  88. В обсуждениях при добавлении участников больше не добавляются заместители сотрудников.

  89. В web-клиенте исправлено указание языка сотрудника при выполнении представлений в некоторых случаях. При этом вместо сортировки по локализованной строке могла выполняться сортировка по алиасу строки локализации, что обычно соответствовало английскому языку, но не русскому.

  90. В конструкторе бизнес-процессов исправлена ситуация, когда идентификатор подписки запуска процесса изменялся при изменении процесса, но без изменения действия старта процесса.

  91. В конструкторе бизнес-процессов исправлена проблема, из-за которой сигналы, отправленные из редактора экземпляра процесса, не переходили по связям.

5. Патч 3.5.0.4 (29.10.2020)

5.1. Переход на новую сборку

  1. Изменены представления: EdsManagers (добавлено).

  2. Изменены таблицы: SignatureManagerVirtual, Outbox.

  3. Изменены типы: SignatureSettings.

  4. Изменены библиотеки локализации.

  5. Добавлена асинхронная отмена CancellationToken в методы интерфейса IEDSManager и ICAdESManager. Реализации этих интерфейсов, в т.ч. классы-наследники EDSManager, должны обновить сигнатуры методов.

5.2. Добавление и изменение функциональности

  1. Выбор менеджеров подписи в карточке настроек ЭП через представление теперь выполняется по записям таблицы SignatureManagerVirtual.

  2. Сериализатор Typed Json теперь поддерживает тип данных TimeSpan с суффиксом "::tim" и тип данных DateTimeOffset с суффиксом "::dto".

  3. Chronos выводит предупреждение в текстовый лог log.txt, если .dll файл с плагинами, указанный в plugins.xml, не был найден.

  4. На странице /check теперь выводится информация по текущей лицензии и её модулям.

  5. В конструкторе бизнес-процессов в действии "Диалог" добавлена возможность изменять отправляемое задание в cценарии инициализации диалога.

  6. API: Добавлена асинхронная отмена CancellationToken в методы интерфейсов IEDSManager и ICAdESManager.

  7. API: Обновлены библиотеки: CAdESLib 1.0.1.

5.3. Исправления и оптимизации

  1. В web-клиенте исправлен выбор менеджеров подписи в карточке настроек ЭП.

  2. В web-клиенте исправлен поиск в представлениях по параметру типа Time.

  3. В web-клиенте исправлена ошибка, из-за которой мог некорректно работать контрол Ссылка (поле с автодополнением), когда индексы отображения колонок не были заданы явно.

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

  5. В web-клиенте исправлено некорректное поведение, при котором в текстовый контрол визуально можно было поместить больше символов, чем позволяло заданное ограничение.

  6. В web-клиенте исправлена ошибка отображения больших чисел в пейджинге контрола таблицы и представлений.

  7. В web-клиенте исправлен вывод тултипа с сообщением об ошибке валидации в контролах карточки.

  8. Исправлена работа валидатора уникальности на сервере, когда могли удаляться лишние строки в результате вставки и удаления одних и тех же строк. Например, если удалить и тут же вставить один и тот же тип документа в карточке правила доступа, то после сохранения тип удалялся, хотя никаких изменений не должно было произойти. Ошибка воспроизводилась в web-клиенте со сборки 3.5.0.

  9. Исправлен вывод даты патча на странице /check, если сервер приложений расположен в часовом поясе с отрицательным UTC (например, UTC-02:00).

  10. Оптимизированы подписание файлов и проверка подписи, используя менеджеры подписи ServiceEDSManagerForCMS и ServiceEDSManagerForCAdES.

  11. В контроле "Представление" исправлена ошибка, когда высота контрола резко уменьшалась и затем увеличивалась при обновлении или переключении страницы.

  12. В редакторе схемы данных исправлено добавление записей в таблицы, в первичном ключе которых присутствуют колонки с типами данных, отличающимися от Guid, Byte, Int16, Int32, Int64.

  13. В модуле синхронизации с Active Directory / LDAP исправлено обновление пользователей при отсутствии изменений в составе статической роли. Ошибка появилась в версии 3.5.0.

  14. Исправлена обработка ошибок при открытии карточки в TessaClient, если один из выполняемых методов расширений ICardUIExtension выбросил необработанное исключение.

  15. Исправлены скрипты миграции в папке Fixes при обновлении со сборки 3.2.0 или ранее.

  16. При возникновении ошибок, связанных с сессией, сервер теперь возвращает код 403 (Forbidden) вместо 401 (Unauthorized) для всех типов ошибок, кроме отсутствия токена сессии при обращении к методам сервера, его требующим. Ранее возвращался код ошибки 401 для любых типов ошибок с сессией.

  17. Исправлена ситуация, когда окно TessaAppManager оказывалось скрытым из панели задач после двойного клика по иконке в трее.

  18. В конструкторе бизнес-процессов исправлена ошибка открытия руководства разработчика бизнес-процессов из конструктора процессов.

  19. В конструкторе бизнес-процессов в действии "Подпроцесс" исправлена ошибка, из-за которой не выполнялось создание подписок узлов, расположенных в подпроцессе, на сигналы. Ошибка появилась в 3.5.0.

  20. В конструкторе бизнес-процессов исправлена ошибка, из-за которой не перемещалась каретка в редактируемой аннотации по нажатию клавиш: "стрелка вверх", "стрелка вниз", "стрелка влево" и "стрелка вправо".

  21. В конструкторе бизнес-процессов в действии "Диалог" исправлена ошибка NRE, происходящая при выполнении действия, если значение поля "Роль" не задано.

  22. В конструкторе бизнес-процессов исправлена ошибка при проверке наличия значения в поле "Роль" при выполнении действий: "Доработка", "Задание регистрации", "Настраиваемое задание", "Задание".

  23. При подписании и проверке ЭП исправлена ошибка с обработкой неподдерживаемых протоколов для доверенных сертификатов.

  24. Исправлено отображение контекстного меню на значке в трее у менеджера приложений TessaAppManager, если не удалось подключиться ни к одному из серверов.

  25. Исправлено возможное дублирование текста сообщений о необработанных исключениях, которые выводятся пользователю в TessaDialog.

  26. Исправлены проблемы с выводом страницы /check при отсутствующем подключении к базе данных, а также при наличии ошибок с локализацией на сервере.

  27. Оптимизирована обработка почты, когда в очереди на отправку в таблице Outbox большое количество писем.

  28. Исправлена конвертация файлов .htm/.html в .pdf с использованием API IFileConverter.

  29. В маршрутах исправлена ошибка, приводящая к потере исходной ошибки, которая была вызвана некорректным SQL-условием в шаблоне этапов для СУБД PostgreSQL.

  30. В маршрутах исправлена ошибка при обработке результата StageHandlerResult.EmptyResult для выполнения обработчика этапа.

  31. В маршрутах исправлена ошибка "Вложенный запуск обработчика маршрутов для одного и того же процесса невозможен." при принудительном завершении задания этапа. Ошибка появилась в версии 3.5.0.3.

  32. Исправлена ошибка при проверке прав доступа на первое сохранение карточки в ситуации, когда родительская секция заполняется на сервере при создании карточки, строка родительской секции изменяется, и у неё есть дочерняя секция, которая заполняется на клиенте.

  33. Оптимизирована работа desktop-клиента после отображения индикатора занятости для вкладки.

  34. Исправлена ошибка, из-за которой временная зона изменялась на зону по умолчанию для всех строк истории заданий.

  35. Исправлено асинхронное чтение из потока DelegateReaderStream. Класс используется для взаимодействия Tessa Applications с TessaHost.

  36. Исправлены ситуации, когда при асинхронной отмене некоторых операций с карточками ошибка TaskCanceledException могла быть записана в ValidationResult как обычное необработанное исключение, при этом асинхронная отмена далее не выполнялась.

  37. В пространстве имен Tessa.PdfSharp исправлена редкая ошибка при многопоточной работе с pdf документами.

  38. Для Kerberos-аутентификации добавлена ошибка в лог веб-сервиса при отсутствии SPN у учётной записи, для которой был сгенерирован файл keytab.

  39. Оптимизирован пересчёт индексов для MS SQL в скрипте Fixes\RebuildIndexes.ms.sql. Скрипт задействован при установке и обновлении платформы.

  40. Исправлены возможные проблемы с запуском Tessa Applications при подключении к основному серверу другой версии, в котором недоступны библиотеки локализации.

  41. Исправлено формирование ссылок с ответами в письмах мобильного согласования, если тема документа содержала некоторые из символов, являющиеся некорректными в URL-адресе.

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

6. Патч 3.5.0.3 (27.09.2020)

6.1. Переход на новую сборку

  1. Изменены таблицы: RoleDeputies, RoleDeputiesManagementRoles, SignatureEncryptDigestSettings, SignatureManagerVirtual (добавлена).

  2. Изменены таблицы (изменения для снятия ограничения в 4000 символов): AutoApproveHistory, Dialogs, KrAdditionalApproval, KrAdditionalApprovalTaskInfo, KrApprovalCommonInfo, KrApprovalCommonInfoVirtual, KrCommentsInfo, KrCommentsInfoVirtual, KrDocType, KrRequestComment, KrRouteInitializationActionVirtual, KrSettingsCardTypes, KrTask, Partners, PartnersContacts, RoleGenerators, Roles, Tasks, WfResolutionsVirtual.

  3. Изменены типы: KrPermissions, SignatureSettings.

  4. Изменены типы (изменения для снятия ограничения в 4000 символов): ContextRole, Deleted, DepartmentRole, Dialogs, DynamicRole, KrAdditionalApproval, KrApprove, KrCard, KrDocType, KrRouteInitializationAction, KrSettings, KrSigning, Metarole, Partner, PersonalRole, Protocol, RoleGenerator, StaticRole, TaskRole, Template, WfResolution.

  5. Изменены карточки: Signature settings (settings) (изменения описаны ниже), TasksNotification.

  6. Изменены библиотеки локализации.

  7. Обновите файл app.json веб-сервиса: изменился раздел ".include"; также укажите значение "MultipartBodyLengthLimit", равное "-1" (без кавычек).

  8. Обновите файл app.json для Chronos: укажите параметр "DocLoad.IncludeSubFolders" со значением "false" (без кавычек). Изменение необязательное.

  9. При установке патчей в папку веб-сервиса "web" копируйте с заменой файлы patch*.json в папку с файлом app.json.

  10. Веб-сервис web для json-сериализации использует Newtonsoft.Json вместо System.Text.Json. Это соответствует поведению в сборках 3.0.0-3.3.1 и влияет на контроллеры в проектных решениях, которые используют такую сериализацию.

  11. В карточке настроек ЭП для всех алгоритмов подписи "ГОСТ" укажите менеджер подписи "ServiceEDSManagerForCAdES", а для алгоритмов "Другие" укажите "DefaultEDSManager". Вы также можете импортировать карточку из папки со сборкой.

  12. В коде проектных расширений, где выполняется обращение к реестру типов действий IWorkflowAction, необходимо получить объект по интерфейсу IWorkflowActionRegistry из Unity-контейнера.

  13. В коде проектных расширений, где выполняется обращение к реестру расширений прав доступа к тайлам WorkflowEngine, необходимо получить объект по интерфейсу IWorkflowEngineTileManagerExtensionRegistry из Unity-контейнера.

  14. Добавлена асинхронность ValueTask в методы интерфейса IEDSManager. Реализации этого интерфейса, в т.ч. классы-наследники EDSManager, должны обновить сигнатуры методов.

6.2. Добавление и изменение функциональности

  1. В файлах app.json при включении отдельно расположенных конфигурационных файлов в списке по ключу ".include" теперь можно указывать имена с масками, например: "../patch*.json".

  2. Список установленных патчей выводится на странице веб-сервиса /check, в TessaClient по ссылке "Загруженные патчи и расширения" в окне "О программе" и в TessaAdmin на вкладке "Информация" по аналогичной ссылке.

  3. Веб-сервис web для json-сериализации использует Newtonsoft.Json вместо System.Text.Json. Это соответствует поведению в сборках 3.0.0-3.3.1 и влияет на контроллеры в проектных решениях, которые используют такую сериализацию.

  4. В части полей с комментариями в заданиях, с Digest-ом заданий, с описаниями ролей и ряда других полей было удалено ограничение на максимальную длину в 4000 символов.

  5. В карточке настроек ЭП для каждого алгоритма подписи в таблице "Настройки алгоритмов подписи и хеширования" добавлено указание на используемый менеджер подписи, который задействуется в desktop-клиенте. Их описание приведено в руководстве администратора.

  6. В модуле потокового ввода документов добавлена возможность обрабатывать документы из вложеных папок. Для этого укажите в app.json настройку "DocLoad.IncludeSubFolders": true.

  7. API: Обновлены версии библиотек JavaScript, в которых исправлены проблемы, связанные с безопасностью.

  8. API: В метод IHostLauncher.RunHostAsync добавлен параметр overrideExePath, переопределяющий путь до исполняемого файла хоста (по умолчанию это TessaHost.exe). Это позволяет добавлять новые действия, запускаемые в процессе .NET Framework, в рамках проектного решения.

  9. API: Удалено статическое поле WorkflowActionRegistry.Instance. Для обращения к реестру типов действий необходимо получить объект по интерфейсу IWorkflowActionRegistry из Unity-контейнера.

  10. API: Удалено статическое поле WorkflowEngineTileManagerExtensionRegistry.Instance. Для обращения к реестру расширений прав доступа к тайлам WorkflowEngine необходимо получить объект по интерфейсу IWorkflowEngineTileManagerExtensionRegistry из Unity-контейнера.

  11. API: Добавлена асинхронность ValueTask в методы интерфейса IEDSManager.

  12. API: В контекст расширений для модуля потокового ввода документов в свойстве InputFilePath теперь передаётся путь к исходному файлу.

  13. API: Обновлены библиотеки: .NET Core 3.1.8.

6.3. Исправления и оптимизации

  1. Исправлена ситуация, когда в TessaClient доступный только для чтения контрол "Ссылка" с выпадающим списком мог быть изменён после перевода фокуса на контрол и нажатия клавиш "стрелка вверх" или "стрелка вниз".

  2. Исправлено получение контента файлов в случаях, когда Stream контента при чтении возвращал количество байт меньше, чем было запрошено. Проблема могла воспроизводиться в проектных расширениях.

  3. При создании шаблона карточки теперь очищается содержимое элемента управления "Обсуждения".

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

  5. Исправлена некорректная обработка плейсхолдеров fv и tv в ситуации, когда в них были только настройки представления, колонки и параметров.

  6. Исправлено логирование ошибок при выполнении запроса генератора метаролей.

  7. В ежедневной рассылке уведомлений по заданиям исправлено некорректное формирование ссылок на карточки для автосогласованных заданий.

  8. Исправлена отправка почты по протоколу SMTP, если SMTP-сервер не поддерживает аутентификацию. Это приводило к ошибке "The SMTP server does not support authentication". Ошибка появилась в сборке 3.5.0.

  9. В web-клиенте исправлена ошибка, из-за которой в таблице представления иногда не отображались строки, хотя счётчик строк был больше нуля.

  10. Исправлен код завершения сервиса Chronos на ОС Linux при его остановке посредством systemctl stop. Теперь при отсутствии ошибок указывается код завершения 0 вместо 143.

  11. Исправлено сохранение карточки при изменении истории заданий.

  12. Оптимизировано подключение Tessa Applications к серверам платформы 3.5.0 и старше. Также были исправлены потенциальные проблемы при подключении к серверам следующих версий платформы TESSA.

  13. Оптимизированы запросы на получение данных представлений view.GetDataAsync из desktop-клиента.

  14. В конструкторе бизнес-процессов исправлена ошибка при сохранении изменений, внесённых в действии в карточку типа KrSatellite. Затрагиваемые действия: "Доработка", "Согласование", "Подписание", "Смена состояния", "Дерегистрация", "Выполнение задачи", "Инициализация маршрута", "Настраиваемое задание".

  15. В маршрутах исправлена ошибка при получении информации о состоянии несохранённой карточки при проверке ограничений на запуск процесса.

  16. При неудачном логине в web-клиенте текст исключения теперь не выводится в текстовый лог log.txt, как и в случае с неудачным логином в desktop-клиенте. Независимо от этого, информация по неудачному входу записывается в историю действий.

  17. Исправлена визуальная индикация того, что поле "Приоритет" в карточке "Правило доступа" является обязательным (по умолчанию приоритет по-прежнему равен 0). Также исправлено сообщение об ошибке, если поле не заполнено.

  18. Исправлены возможные ошибки при пересчёте замещений и состава ролей из-за наличия записей в RoleDeputies с одинаковым идентификатором сотрудника DeputyID, но разными именами сотрудника DeputyName.

  19. Оптимизировано сохранение карточки сотрудника в случае, если у него изменяется краткое имя.

  20. Исправлена Windows-аутентификация в web-клиенте. Ошибка появилась в версии 3.5.0.

  21. Исправлено отображение названий для некоторых элементов управления в списках в TessaAdmin.

  22. Исправлен сброс метаинформации по типам карточек при их изменении через TessaAdmin или tadmin. Ошибка появилась в предыдущем патче.

  23. Исправлен вывод имени ОС в окне "О программе" при наличии номера Service Pack.

  24. В типизированном сериализаторе json исправлена десериализация ключей с суффиксами ::dbl, ::lng и ::str внутри хеш-таблиц.

  25. Исправлено определение действительного IP-адреса пользователя в истории действий и в сессии, если пользователь заходит через один или несколько прокси-серверов.

  26. В маршрутах в параметрах этапов исправлена ошибка в работе ссылки "Добавить роль "Вычисляемые исполнители" при настройке этапов, добавленных в карточку вторичного процесса. Ошибка затрагивает все этапы, содержащие указанную ссылку. Ошибка появилась в версии 3.3.1.

  27. Исправлено закрытие вкладки с карточкой в TessaClient после того, как в процессе закрытия карточка была неудачно сохранена.

  28. В web-клиенте удалено ограничение на размер скачиваемых файлов, которые приложены к карточке. Теперь можно скачать файл больше 2 Гб.

  29. В web-клиенте изменены ограничения на общий размер файлов, которые сохраняются в карточку единомоментно. Теперь это 4 Гб при установке системы на IIS, или без ограничений при использовании других веб-серверов (Nginx, Apache, Kestrel).

  30. Исправлена ошибка, из-за которой при асинхронной отмене сохранения карточки с файлами в базе данных оставалась активная операция "Сохранение карточки".

  31. В конструкторе бизнес-процессов исправлена проблема, приводящая к неправильному расчёту числа обработанных элементов при отправке сигнала в подпроцесс.

  32. Исправлены возможные проблемы с некорректным инициированием вежливой остановки для плагинов Chronos при работе на ОС Alpine Linux 3.10+ с использованием контейнеров Docker.

  33. В конструкторе бизнес-процессов убрана неактуальная проверка подписи асинхронной операции процесса в плагине кроноса.

  34. Плагин файловой конвертации будет автоматически перезапущен в течение минуты, если произошла его нештатная остановка.

  35. С использованием менеджера подписи "ServiceEDSManagerForCAdES" в настройках ЭП теперь возможно подписание файлов в TessaClient посредством установленного КриптоПро CSP, который доступен через Windows Crypto API, как это было в TESSA 3.4.0 и ранее. Чтобы выполнять подпись посредством COM-объекта КриптоПро (который доступен после установки расширения браузера), как это было на релизе TESSA 3.5.0, в карточке настроек ЭП для алгоритмов подписи "ГОСТ" укажите менеджер подписи "CryptoProEDSManager".

7. Патч 3.5.0.2 (24.08.2020)

7.1. Переход на новую сборку

  1. Изменены представления: Applications, AvailableApplications, TaskHistory.

  2. Изменены таблицы: ServerInstances.

  3. Изменены типы: ShowDialog.

  4. Изменены библиотеки локализации.

7.2. Добавление и изменение функциональности

  1. В web-клиенте добавлено отображение многострочного текста в файлах карточки для группировок по копиям и по циклам согласования, которые теперь выглядят идентично desktop-клиенту. Также такая возможность добавлена в API.

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

  3. В папке веб-сервиса теперь копируется файл Views\Shared\index.cshtml, который можно изменить в рамках проекта для расширения возможностей по интеграции web-клиента.

  4. В представление TaskHistory добавлены колонки с информацией, которая требуется для отображения истории заданий в контроле "Представление" с тем же набором функций, как в стандартной вкладке "История заданий", включая подсказку, диалоговое окно, тэги с приложенными файлами.

  5. В маршрутах добавлено сохранение карточки после выполнения этапа, если в ней были изменения.

  6. В контрол "Текст с форматированием" добавлена красная рамка, если есть валидатор "Не пустое значение" и значение в контроле отсутствует.

7.3. Исправления и оптимизации

  1. В web-клиенте исправлена ошибка, из-за которой в рабочем месте не учитывалась настройка "Скрыть дерево по умолчанию".

  2. В web-клиенте исправлена ошибка, из-за которой невозможно было скачать приложение Deski пользователям без прав администратора.

  3. В web-клиенте исправлена ошибка, из-за которой автокомлпит не вызывал событие удаления "старого" значения, при его замене на "новое" значение, выбранное из представления.

  4. В web-клиенте исправлена ошибка оформления системных сообщений в обсуждениях.

  5. В web-клиенте исправлены опечатки в диалоге "О программе".

  6. В web-клиенте исправлен вывод даты сборки в диалоге "О программе", теперь он не зависит от часового пояса, в котором работает браузер пользователя.

  7. В web-клиенте исправлена ошибка, из-за которой длинные названия файлов в файловом контроле отображались некорректно.

  8. В web-клиенте исправлена ошибка сохранения настроек уведомлений через диалог "Мои настройки".

  9. В web-клиенте исправлена ошибка, из-за которой представления с глубокой вложенностью в дереве рабочего места не открывались по ссылке.

  10. В web-клиенте исправлена ошибка при обращении к полю authorId в объекте CardTaskHistoryItem.

  11. В web-клиенте исправлена ошибка, когда в представлении неправильно отображались пустые названия групп.

  12. В web-клиенте исправлена ошибка в UIContext.create. Теперь ссылка на родительский контекст проставляется корректно при создании области действия контекста.

  13. В web-клиенте исправлена ошибка с множественным выделением строк в представлениях и в контроле "Таблица".

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

  15. При импорте подразделений, содержащих сотрудников, для них теперь указывается корректный тип вхождения в роль (поле RoleUsers.TypeID).

  16. Исправлена работа представлений AvailableApplications и Applications с PostgreSQL 9.6.

  17. Исправлен расчет замещений в метаролях в случае, если во вкладке сотрудника "Мои замещения" в таблице "Кто меня замещает" указано замещение по метароли.

  18. Для контрола "Текст с форматированием" по умолчанию не выставлен флаг "Скрывать заголовок".

  19. В схему в поле "Редактировать сообщения не раньше, чем" добавлено значение по умолчанию, равное 60 минутам. Это важно при обновлениях с предыдущих версий, где редактирование сообщений определялось как запрещённое, хотя при новой установке системы можно было редактировать сообщения в течение 60 минут.

  20. Символы моноширинного текста в моноширинном блоке действительно одной ширины.

  21. В области заданий у сообщения форума исправлена работе ссылок "далее" и "свернуть".

  22. В контроле "Текст с форматированием", у кнопки разворачивания исправлена анимация при наведении мыши.

  23. Контрол "Текст с форматированием" при выборе связанного поля теперь доступны только колонки строкового типа.

  24. В контроле "Текст с форматированием" увеличен отступ от маркера или номера в тексте с форматированием. Увеличен отступ и у самого блока-списка.

  25. Исправлено зависание сервера приложений из-за взаимной блокировки между кэшами схемы и карточек. Ошибка могла воспроизводиться в случае изменения схемы данных на сервере приложений, когда система работает под нагрузкой.

  26. В диалоге с временем жизни "Карточка" исправлена ошибка инициализации после загрузки карточки, открытой в диалоге. Ошибка, например, приводила к отображению стандартных кнопок после нажатия кнопки "Пересчитать", расположенной на вкладке "Маршрут" для карточки, которая открыта в диалоге. Исправление актуально для desktop- и web-клиентов.

  27. Исправлена ошибка при вызове свойства BeautifiedStackTrace.Current, когда в некоторых случаях он мог выдавать ошибку NRE.

  28. Исправлена ошибка NRE в методе CardGetStrategy.LoadTaskHistoryAsync, если параметр tasksByRowID равен null и существует элемент истории у задания, для карточки которого выполняется загрузка информации по истории завершённых заданий.

  29. Исправлен вход в систему по вводу логина/пароля для пользователя в домене, если на сервере приложений отсутствуют права на олицетворение (impersonation) учётной записи пользователя.

  30. Исправлено изменение информации по дате сборки, которая последняя изменяла конфигурацию (поле "Configuration"."BuildDate" в БД), если запрос к базе данных выполнялся в ОС с отрицательным часовым поясом, например, UTC-01:00. Для команды импорта схемы tadmin ImportSchemeSql был важен часовой пояс на компьютере, который запускает tadmin, для других команд, включая tadmin IncrementVersion, важен часовой пояс для ОС веб-сервиса. После исправления часовой пояс более не играет роли, и дата всегда записывается корректно.

  31. Улучшен вывод настроек безопасности ServerSecurityOptions в логе веб-сервиса.

  32. Исправлена ошибка при запуске приложения в методе IFmNotificationStrategy.GetUniqueTopicIDs при получении данных для индикатора уведомление.

  33. Исправлена ошибка NRE в методах класса CardCachedMetadata. Она возникала в случае, если происходит сброс кэша метаинформации карточек в тот же момент, когда кто-либо еще им пользуется.

  34. При редактировании сообщений в обсуждениях добавлена возможность удалять цитаты в редактируемом сообщении.

  35. В маршрутах исправлена ошибка при переходе на группу этапов. Ошибка происходит, если текущий список этапов не содержит ни одного этапа из группы, на которую выполняется переход.

  36. В конструкторе бизнес-процессов исправлен расчёт дайджеста карточки для новых экземпляров процессов.

  37. Исправлена ошибка с отображением контекстного меню вкладки с карточкой по клику правой кнопкой мыши вне области с карточкой: на области со статус-баром или на пространстве по краям окна.

  38. Исправлено расширение типов карточек "Сортировка строк" при выборе колонки для сортировки, тип данных которой отличен от строкового. Также в настройках расширения нельзя выбрать колонку из строковой секции или колонку типа Binary.

  39. Исправлена ошибка, возникающая при использовании INotificationManager с отложенной отправкой уведомлений в ситуации, когда в переданном контексте не задан параметр Info.

  40. В маршрутах в этапе "Дерегистрация" исправлен тип создаваемого события.

  41. В маршрутах исправлена ошибка при получении информации о типе документа для несохранённой карточки.

  42. Для команды tadmin ImportUsers исправлены параметры -cs и -db, указывающие строки подключения к БД и имени БД.

  43. Регистрация расширений Tessa.Extensions.PostgreSql.Server, связанная со статическими маппингами, теперь выполняется в блокировке (lock) и не более одного раза, что предотвращает проблемы при одновременном создании нескольких серверных контейнеров Unity с расширениями.

  44. В TessaAdmin исправлено редактирование параметров маппинга представления для типа поля "Константа". Ошибка появилась в сборке 3.5.0.

  45. В конструкторе бизнес-процессов исправлена ошибка NRE, возникающая при создании нового экземпляра процесса по несуществующему шаблону бизнес-процесса.

  46. Исправлено создание пакета приложения командами tadmin PackageApp/PackageWebApp, если у одного из файлов не была рассчитана хеш-сумма. Хотя она рассчитывается автоматически на сервере при сохранении файлов, но в базе данных поле FileVersions.Hash может быть равно NULL, что приводило к ошибке.

  47. В конструкторе бизнес-процессов исправлена ошибка обработки SQL-привязок в ссылочных полях.

  48. В контроле "Текст с форматированием" и в контроле "Обсуждения" исправлена вставка из буфера обмена, если содержимое этого буфера формата rtf.

  49. В обсуждениях добавлены более подробные сообщения об отсутствии прав или при истёкшем интервале редактирования в процессе редактирования сообщений.

  50. Исправлена ситуация, когда при штатной отмене операции с карточкой посредством CancellationToken могли оставаться незакрытые блокировки на запись этой карточки. Например, небольшой шанс такой проблемы имелся, если закрыть окно браузера сразу после того, как началось выполнение сохранения карточки. Ошибка появилась в сборке 3.5.0.

  51. В маршрутах исправлена ошибка изменения порядка добавленного в сценарии постобработки шаблона этапов нового этапа методом IKrScript.AddStage.

  52. В маршрутах в этапах "Согласование" и "Подписание" исправлена проверка при определении необходимости выполнения перехода в начало текущей группы этапов при наличии завершённых отрицательным вариантом завершения заданий. Ошибка приводила к тому, что учитывались не только этапы в состоянии "Завершён".

  53. Исправлены ошибки при сохранении и создании подразделения, которые приводили к очистке настройки временной зоны сотрудника (удалённого из подразделения или добавленного в него при создании), если для него это подразделение было единственным.

  54. В маршрутах исправлена ошибка при получении информации о карточке при проверке ограничений на запуск процесса, если тип карточки не содержит секции DocumentCommonInfo.

  55. Исправлены редкие ошибки в методе CardNewStrategy.CreateSectionRowsAsync, которые могли возникнуть при большом количестве одновременных запросов на чтение (GetAsync) или создание структуры (NewAsync) карточек.

  56. Исправлена ошибка, которая могла возникать при отправке почты через Exchange для некоторых серверов: Cannot process the message because the content type 'text/plain; charset=utf-8' was not the expected type 'text/xml; charset=utf-8'. Ошибка появилась в сборке 3.5.0.

  57. Исправлена ошибка в представлении TaskHistory, из-за которой не работал автоматический выбор ширины в расширении "Представление истории заданий".

  58. Исправлены ошибки, возникающие при прокрутке контрола "Представление" с расширением "Представление истории заданий".

  59. В контроле "Представление" с расширением "Представление истории заданий" исправлена ошибка в отображении подсказки к тэгу задания, к которому приложены файлы.

  60. Добавлена подсказка к настройке "Группировка" в расширении "Список файлов в представлении".

  61. Исправлена ошибка в расширении "Список файлов в представлении", при которой было возможно сбросить группировку файлов в контекстном меню колонки.

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

  63. Исправлена проблема, когда при копировании карточки с замаскированными полями копировалась маска этих полей. При копировании карточки с замаскированными полями эти поля должны очищаться.

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

  65. При удалении прикрепленного элемента в контроле "Текст с форматированием" и в контроле "Обсуждения" из текста сообщения удаляется ссылка на этот элемент.

  66. В контроле "Текст с форматированием" исправлена ошибка, возникающая при перемещении вставленной гиперссылки.

  67. В контроле "Текст с форматированием" исправлена ошибка при сохранении карточки, когда в развернутом состоянии был приложен элемент, который затем удален в нормальном состоянии.

  68. В развернутом состоянии контрола "Текст с форматированием" исправлена работа сочетания клавиш Ctrl+E (Редактировать).

  69. При сохранении карточки корректно сохраняются данные из контрола "Текст с форматированием".

  70. В модуле синхронизации с AD/LDAP исправлена ошибка при вычислении состава роли, включающего в себя пользователей вне домена.

  71. Исправлена работа метода KrProcessHelper.CardExistsAsync, который по ошибке всегда возвращал true.

  72. Исправлен вывод названия платформы Syntellect TESSA большими буквами на страницах /check и /service.

  73. В модуле синхронизации с AD/LDAP исправлена ошибка при создании подразделений.

  74. Исправлена опечатка в имени группы для типа карточки ShowDialog.

8. Патч 3.5.0.1 (08.06.2020)

8.1. Переход на новую сборку

  1. Изменены библиотеки локализации.

8.2. Добавление и изменение функциональности

  1. Утилита tadmin: для команд PackageApp и PackageWebApp добавлен параметр /b, позволяющий генерировать карточку приложения в бинарном формате .card. В отличие от текстового формата .jcard, не выполняется загрузка содержимого приложенных файлов в память, это экономит потребление памяти и оптимизирует скорость операций для создания карточки и последующего импорта такой карточки.

8.3. Исправления и оптимизации

  1. Оптимизирован импорт карточек приложений и web-приложений при установке и обновлении скриптами setup/upgrade.

  2. В web-клиенте исправлена доступность флажка "Вернуть при несогласовании" в настройках этапа согласования для запущенного процесса.

  3. В web-клиенте исправлено отображение контекстного меню на файлах, чтобы не происходило смещения меню после окончания анимации.

9. Версия 3.5 (04.06.2020)

9.1. Переход на новую сборку

  1. Изменены рабочие места: Administrator.

  2. Изменены представления: ApplicationArchitectures (добавлено), Applications, AvailableApplications, DialogButtonTypes (переименовано из KrDialogButtonTypes), DialogCardAutoOpenModes (переименовано из KrDialogCardAutoOpenModes), DialogCardStoreModes (переименовано из KrDialogCardStoreModes), EmittedTasks, KrCycleGroupingModes (добавлено), KrDialogButtonTypes (переименовано в DialogButtonTypes), KrDialogCardAutoOpenModes (переименовано в DialogCardAutoOpenModes), KrDialogCardStoreModes (переименовано в DialogCardStoreModes), KrDocStateCards, KrPermissionRuleAccessSettings, KrPermissions, KrPermissionsExtendedCards, KrPermissionsExtendedTasks, KrPermissionsReport (добавлено), KrSecondaryProcesses, KrTypesForDialogs, LastTopics, MyTasks (необязательное изменение), MyTopics, Roles, SignaturePackagings (добавлено), SignatureProfiles (добавлено), SignatureTypes (добавлено), TopicParticipants, Users, WebApplications (добавлено), WorkflowSignalProcessingModes (добавлено).

  3. Изменены таблицы: ApplicationArchitectures (добавлена), Applications, AutoApproveHistory, CompiledViews, DialogButtonTypes (переименована из KrDialogButtonTypes), DialogCardAutoOpenModes (переименована из KrDialogCardAutoOpenModes), DialogCardStoreModes (переименована из KrDialogCardStoreModes), Dialogs, DocLoadSettings, DocumentCategories, DynamicRoles, FileSignatures, FileVersions, FmForumSatellite (удалена), FmMessages, FmParticipantTypes, FmTopicParticipantRolesUnsubscribed, FmTopicTypes, FmTopics, Genders (удалена), KrAcquaintanceAction, KrAcquaintanceActionRoles, KrAdditionalApprovalsRequestedInfoVirtual (добавлена), KrAmendingActionVirtual (добавлена), KrApprovalActionAdditionalPerformersDisplayInfoVirtual (добавлена), KrApprovalActionAdditionalPerformersSettingsVirtual (добавлена), KrApprovalActionAdditionalPerformersVirtual (добавлена), KrApprovalActionNotificationActionRolesVirtual (добавлена), KrApprovalActionNotificationRolesVirtual (добавлена), KrApprovalActionOptionLinksVirtual (добавлена), KrApprovalActionOptionsActionVirtual (добавлена), KrApprovalActionOptionsVirtual (добавлена), KrApprovalActionVirtual (добавлена), KrApprovalCommonInfo, KrApprovalCommonInfoVirtual, KrChangeStateAction, KrCreateCardAction, KrDialogButtonTypes (переименована в DialogButtonTypes), KrDialogCardAutoOpenModes (переименована в DialogCardAutoOpenModes), KrDialogCardStoreModes (переименована в DialogCardStoreModes), KrDialogSatellite (удалена), KrDialogStageTypeSettingsVirtual, KrDocType, KrPermissionRuleAccessSettings, KrPermissions, KrResolutionActionVirtual (добавлена), KrRouteInitializationActionVirtual (добавлена), KrSecondaryProcessRoles (переименована из KrSecondaryProcessContextRoles), KrSecondaryProcesses, KrSettingsCardTypes, KrCycleGroupingModes (добавлена), KrSettingsCycleGrouping (добавлена), KrSettingsCycleGroupingStates (добавлена), KrSettingsCycleGroupingTypes (добавлена), KrSigningActionNotificationActionRolesVirtual (добавлена), KrSigningActionNotificationRolesVirtual (добавлена), KrSigningActionOptionLinksVirtual (добавлена), KrSigningActionOptionsActionVirtual (добавлена), KrSigningActionOptionsVirtual (добавлена), KrSigningActionVirtual (добавлена), KrSigningStageSettingsVirtual, KrTaskRegistrationActionNotificationRolesVitrual (добавлена), KrTaskRegistrationActionOptionLinksVirtual (добавлена), KrTaskRegistrationActionOptionsVirtual (добавлена), KrTaskRegistrationActionVirtual (добавлена), KrUniversalTaskActionButtonLinksVirtual (добавлена), KrUniversalTaskActionButtonsVirtual (добавлена), KrUniversalTaskActionNotificationRolesVitrual (добавлена), KrUniversalTaskActionVirtual (добавлена), KrWeActionCompletionOptions (добавлена), KrWeEditInterjectOptionsVirtual (добавлена), KrWeRolesVirtual (добавлена), NotificationPostponement (удалена), Outbox, PersonalRoleSatellite, PersonalRoles, RoleDeputies, RoleGenerators, Roles, Satellites (добавлена), ServerInstances, Sessions, SignatureCertificateSettings (добавлена), SignatureDigestAlgorithms (добавлена), SignatureEncryptDigestSettings (добавлена), SignatureEncryptionAlgorithms (добавлена), SignaturePackagings (добавлена), SignatureProfiles (добавлена), SignatureSettings (добавлена), SignatureTypes (добавлена), TEST_CarMainInfo, WeDialogAction (добавлена), WeDialogActionButtonLinks (добавлена), WeDialogActionButtons (добавлена), WeStartAction, WeTaskActionDialogs (добавлена), WeTaskActionNotificationRoles (перенесена в библиотеку схемы), WebApplications (добавлена), WfSatellite, WfTaskCards (удалена), WorkflowEngineProcesses, WorkflowInLinks, WorkflowLinks, WorkflowSignalProcessingModes (добавлена).

  4. Изменены миграции: Platform.

  5. Изменены типы: Application, Car, DepartmentRole, Dialogs, DocLoad, DynamicRole, FileSatellite (добавлен), ForumSatellite, KrAdditionalApproval, KrAmendingAction (добавлен), KrApprovalAction (добавлен), KrApprove, KrCard, KrChangeStateAction, KrDeregistrationAction, KrDialogStageTypeSettings, KrDocType, KrExampleDialogSatellite, KrNotificationStageTypeSettings, KrPermissions, KrRegistrationAction, KrResolutionAction (добавлен), KrRouteInitializationAction (добавлен), KrSatellite, KrSecondaryProcess, KrSecondarySatellite, KrSettings, KrSigningAction (добавлен), KrSigningStageTypeSettings, KrTaskRegistrationAction (добавлен), KrUniversalTaskAction (добавлен), PersonalRole, PersonalRoleSatellite, RoleGenerator, ServerInstance, ShowDialog (добавлен), SignatureSettings (добавлен), StaticRole, WebApplication (добавлен), WfSatellite, WfTaskCard, WorkflowActionEditor, WorkflowConditionAction, WorkflowDialogAction (добавлен), WorkflowLinkEditor, WorkflowNodeEditor, WorkflowNotificationAction, WorkflowProcessEditor, WorkflowStartAction, WorkflowTaskAction, WorkflowTaskGroupAction.

  6. Изменены карточки: Acquaintance (добавлена), Addendum (необязательное изменение), ApprovalHistory, ApprovalHistoryCondition, Aggregate roles, All employees (необязательное изменение), CancelButton, Continuous document load (settings) (необязательное изменение), Contract (необязательное изменение), Default access rules, Default acquaintance access rule (добавлена), DeregisterButton, Directive (необязательное изменение), DocStateCondition, Document (необязательное изменение), IAmModerator (добавлена), Incoming (необязательное изменение), NewIterationTemplate, Official note (необязательное изменение), Order (необязательное изменение), Outgoing (необязательное изменение), PrintableApprovalHistory, RebuildButton, RejectButton, ReturnForAmendingTemplate, RouteCondition, SendProtocolTasksButton, Server settings (settings) (необязательное изменение), Signature settings (settings) (добавлена), Standard solution (settings) (необязательное изменение), StartProcessButton, TaskNotification, TasksNotification, TokenNotification (переименована в UpdateKeysNotification), UpdateKeysNotification (переименована из TokenNotification).

  7. Изменены библиотеки локализации.

  8. Перед обновлением схемы выполните скрипт Fixes/Migration-3.5-pre.**.sql, а после обновления - скрипт Fixes/Migration-3.5.**.sql (версия скрипта "ms" или "pg" для соответствующей СУБД).

  9. Для англоязычной локализации карточки роли "Ознакомление" ("Acquaintance") выполните SQL-скрипт Fixes\LocalizeEnglish.sql (скрипт выполняется для любой СУБД).

  10. Обновите файл app.json для веб-сервиса web и сервиса Chronos в соответствии с тем, что поставляется со сборкой. Обратите внимание на строку "ServerDependencies" для веб-сервиса и на строки с настройками мобильного согласования для Chronos.

  11. Файл app.json веб-сервиса web и сервиса Chronos содержит незаполненные параметры SignatureKey и CipherKey. Для их заполнения, используйте консольные команды tadmin GetKey/SetKey.

  12. Скрипты установки Setup.bat/setup.sh и обновления Upgrade.bat/upgrade.sh теперь обновляют SignatureKey и CipherKey в app.json веб-сервиса web и сервиса Chronos.

  13. В файле app.json сервиса Chronos изменены имена настроек для мобильного согласования по почтовому протоколу POP3 с префиксом "MobileApproval": Pop3Hostname→Pop3ImapHost, Pop3Port→Pop3ImapPort, Pop3User→Pop3ImapUser, Pop3Password→Pop3ImapPassword, Pop3UseSsl→Pop3ImapUseSsl.

  14. Объекты конфигурации теперь используют переводы строк LF "\n" вместо CR LF "\r\n". Преобразование файлов в папке конфигурации платформы уже выполнено. Для преобразования в папке с конфигурацией вашего проекта используйте команду tadmin ConvertConfiguration -mode:LF "Путь_до_папки_Configuration".

  15. В папке Configuration в сборке платформы есть следующие изменения. Изменены переводы строк на LF (unix style). Удалены символы "&#xD;" в xml-файлах. Представления и рабочие места используют кодировку UTF8+BOM вместо UTF8, а в заголовках задана фиктивная информация по имени сотрудника, дате изменения и версии рабочего места. В библиотеках локализации удалены пустые теги <Comment>. В файлах схемы актуализирован порядок атрибутов и порядок таблиц, чтобы экспортируемая в новую папку схема не отличалась от схемы в сборке. В файлах типов карточек/файлов/заданий .jtype упорядочены коллекции объектов и определены значения по умолчанию для свойств. Все эти изменения не являются изменениями в объектах, но будут видны в репозитории при сравнении текстовых файлов. Фактический список изменённых объектов приведён выше.

  16. Для того, чтобы при экспорте рабочего места в файл версия рабочего места в этом файле была равна константе "1" (ранее версия увеличивалась с каждым сохранением), вы должны внести в него любое изменение и сохранить, используя TessaAdmin от текущей версии платформы. Или поле с версией можно изменить в репозитории в файле .workplace, установив Version:1 в строке #workplace; после импорта такого файла на сервер экспорт также будет выполняться с версией "1". На работу системы версия не влияет, но надо выполнить это действие (изменение или импорт) на сервере, с которого информация будет экспортироваться в репозиторий (обычно это сервер разработчиков), чтобы не было изменений при последующем экспорте.

  17. В web-клиенте теперь по умолчанию включена функциональность "Deski" в файле app.json веб-сервиса, она позволяет выполнить интеграцию с приложением-ассистентом web-клиента Tessa Deski. Чтобы отключить эту функциональность (и скрыть связанные с ней пункты меню), укажите значение "Enabled": false внутри группы "Deski" в файле app.json веб-сервиса.

  18. Изменены файлы тем интерфейса в подпапке themes для приложения TessaClient и в веб-сервисе (папка wwwroot\themes).

  19. С этой версии платформы изменились требования к версиям дистрибутивов ОС Linux. Debian поддерживается с версии 9, Fedora поддерживается с версии 30. Добавлена поддержка дистрибутивов Ubuntu 20.04 и CentOS 8. Полный список поддерживаемых дистрибутивов (с которыми тестировалась платформа) доступен в документе "Руководство по установке на Linux".

  20. Приложения Publisher и TokenEditor были удалены. Используйте консольные команды tadmin PackageApp или GetKey/SetKey соответственно. Документация по командам доступна в руководстве администратора.

  21. Из-за ошибки в сборках 3.0.0 - 3.3.0 (она была исправлена в одном из патчей к 3.3.1) новый Tessa Applications не может подключаться к серверам с этими сборками, которые установлены на ОС Windows, но может подключаться к серверам с теми же сборками, установленными на ОС Linux. С предыдущими версиями Tessa Applications была обратная ситуация: он не подключался к серверу приложений, который установлен на ОС Linux. Эта проблема не затрагивает сборки 3.3.1 (с патчем), 3.4.0, а также любые сборки версий 2.x. В качестве решения скопируйте файл Fixes\CoreAppManagerFix\CoreAppManagerFix.cs из папки со сборкой в папку с исходными кодами вашего проекта Tessa.Extensions.Server.Web (используйте типовой проект или папку из вашего проектного решения), скомпилируйте проект и замените файл Tessa.Extensions.Server.Web.dll в папке вашего веб-сервиса, после чего перезапустите веб-сервис. В качестве альтернативных решений мы рекомендуем или обновить такие серверы до версий, с которыми нет ошибок (3.3.1 и старше), или перенести их на ОС Linux, или не обновлять Tessa Applications. Например, Tessa Applications от сборки 3.4.0 может запускать приложения от сборки 3.5.0 (но только 32-битные версии приложений, если опубликованы и 32-битные, и 64-битные версии), и он работает с серверами 3.0.0 - 3.3.0 на ОС Windows (но не работает с ними на ОС Linux).

  22. Приложение SchemeEditor теперь доступно только в 64-битной версии. Используйте приложение TessaAdmin для редактирования схемы в 32-битной ОС.

  23. Расширения desktop-клиента TessaClient или TessaAdmin теперь расположены в подпапке extensions.

  24. Библиотека контроллера с проектной бизнес-логикой Tessa.Extensions.Server.Web теперь по умолчанию расположена в подпапке extensions, ссылка на неё присутствует в файле app.json.

  25. NuGet-пакет Tessa.Compilation был переименован в Tessa.Server.

  26. В файлах проектов Tessa.Extensions.***.csproj добавлены ссылки на версии NuGet-пакетов всегда с последним патчем в формате: 3.5.0.*. Если выйдут патчи для пакетов, например, 3.5.0.1, 3.5.0.2 и др., то они всегда будут использоваться при сборке вместо указанных версий.

  27. На сервере приложений теперь требуется установленный пакет .NET Core Runtime & Hosting Bundle версии 3.1.4 или старше. Ссылка для скачивания последней версии доступна по адресу https://dotnet.microsoft.com/download/dotnet-core/3.1

  28. Если для сборки проектов расширений вы используете IDE Visual Studio 2019, то теперь требуется версия 16.5 или старше. Также, независимо от выбранной IDE, требуется установленный пакет .NET Core SDK версии 3.1.202 или старше (устанавливается вместе с Visual Studio). Ссылка для скачивания последней версии доступна по адресу https://dotnet.microsoft.com/download/dotnet-core/3.1

  29. Серверные расширения Tessa.Extensions.Server (и библиотеки модулей, если используются) должны таргетироваться на платформу netcoreapp3.1 вместо платформы netcoreapp3.0, используемой в предыдущей сборке 3.4.0, или netstandard2.0 в более старых версиях сборок. Обновите файл проекта Tessa.Extensions.Server.csproj, используемого для разработки серверных расширений в рамках проекта, из аналогичного файла в сборке в папке Source\Extensions\Tessa.Extensions.Server. Вместо замены всего файла достаточно указать <TargetFramework>netcoreapp3.1</TargetFramework>.

  30. Общие расширения ***.Shared, доступные на клиенте и на сервере, должны таргетироваться на платформу netcoreapp3.1 вместо netstandard2.0. Обновите файл проекта Tessa.Extensions.Shared.csproj, используемого для разработки общей для клиента и сервера функциональности в рамках проекта, из аналогичного файла в сборке в папке Source\Extensions\Tessa.Extensions.Shared. Вместо замены всего файла достаточно указать <TargetFramework>netcoreapp3.1</TargetFramework>.

  31. Клиентские расширения в файлах проектов .csproj должны таргетироваться на платформу netcoreapp3.1 вместо net472. Обновите файл проекта Tessa.Extensions.Client.csproj, используемого для разработки клиентских расширений в рамках проекта, из аналогичного файла в сборке в папке Source\Extensions\Tessa.Extensions.Client. При обновлении вручную укажите атрибут корневого элемента Sdk="Microsoft.NET.Sdk.WindowsDesktop", задайте дополнительное предупреждение <NoWarn>…​;NU1701</NoWarn>, добавьте элемент <UseWpf>true</UseWpf> и укажите <LangVersion>latest</LangVersion>; дополнительно потребуется удалить референсы на стандартные библиотеки .NET Framework (такие как PresentationFramework, их не требуется явно подключать для новой платформы); также удалите все элементы, связанные с файлами .xaml и .xaml.cs.

  32. Если вы используете модули расширений (такие как Tessa.Module.Sample.***), то обновите файл .csproj для всех сборок (Tessa.Module.Sample.Server/Client/Shared), указав <TargetFramework>netcoreapp3.1</TargetFramework> вместо netcoreapp3.0, net472 или netstandard2.0. Для клиентских проектов .Client.csproj требуется выполнить действия, аналогичные обновлению Tessa.Extensions.Client.csproj, или явно скопировать файл проекта из папки со сборкой.

  33. Обновите файл Tessa.Extensions.Chronos.csproj в проектных расширениях (папка Source\Extensions\Tessa.Extensions.Chronos в сборке). В файле исправлен скрипт PostBuildEvent для копирования библиотек расширений в папку Bin\extensions.

  34. Пакет установки .msi для приложения Tessa Applications теперь явно разделяется на две версии x86 (для 32-битных ОС) и x64 (для 64-битных ОС), которые указаны подпапками в папке Setup\en-US для англоязычной версии и Setup\ru-RU для русскоязычной версии. Рекомендуется устанавливать версию в соответствии с разрядностью ОС на рабочей станции пользователя, но версию x86 также возможно использовать для 64-битных ОС. При установке 64-битной версии папка по умолчанию теперь будет "C:\Program Files", а не "C:\Program Files (x86)". Обратитесь к разделу "Инсталлятор Tessa Applications" в руководстве по установке за подробным описанием инсталлятора.

  35. Приложение Tessa Applications теперь по умолчанию скачивает приложения в папку %LocalAppData%\tessa вместо папки %AppData%\tessa. Текущий установленный в application_catalogs.xml путь продолжит использоваться, с этой сборки переопределяется только путь по умолчанию для новой установки или для переустановки через инсталлятор TessaApplications.msi. Если вам также требуется изменить путь для текущих пользователей, то переустановите TessaApplications.msi с актуальным списком серверов через доменные политики, или же измените в файле %AppData%\tessa\settings\application_catalogs.xml путь t:AppPath="%LocalAppData%\tessa" для каждого пользователя. Эта настройка не влияет на обновление самого Tessa Applications, с которой связана настройка в TessaAppLauncher.exe.config, описанная в следующем пункте.

  36. Приложение Tessa Applications скачивается и обновляется по пути, указанному в конфигурационном файле TessaAppLauncher.exe.config в настройке "LocalAppPath", по умолчанию это папка %LocalAppData%\tessa (подпапка appmanager, appmanager_update и др.). Путь также можно переопределить в переменной окружения %Tessa.LocalAppPath%. Эта настройка работоспособна только для новой версии Tessa Applications, установленной через msi-пакет, причём TessaAppManager также должен быть обновлён до версии 3.5.0, иначе используется папка %AppData%\tessa без возможности настройки.

  37. Приложение Tessa Applications при установке по умолчанию теперь прописывает себя в автозапуск системы для всех пользователей (ярлык в папке автозапуска, обычно это путь C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup), причём при запуске системы приложение отображается свёрнутым в трее. Отключить эту функцию можно в интерфейсе инсталлятора, а также через командную строку при установке. Обратитесь к разделу "Инсталлятор Tessa Applications" в руководстве по установке за подробным описанием инсталлятора.

  38. Если вы устанавливаете Tessa Applications из файла .msi через командную строку, то ознакомьтесь с обновлённой инструкцией в разделе "Инсталлятор Tessa Applications" в руководстве по установке.

  39. По умолчанию динамические роли и генераторы метаролей, у которых указано выражение Cron в качестве расписания, автоматически пересчитываются при запуске или перезапуске сервиса Chronos. Для того, чтобы этого не происходило, отключите флажок "Запланировать пересчёт при запуске сервиса Chronos" в карточке динамической роли или генератора метаролей.

  40. У генератора метаролей "Агрегатные роли" период пересчёта по умолчанию установлен в 1 час. Ранее период был указан равный 5 минут.

  41. Все таблицы в схеме данных и представления для настроек диалогов (KrDialogButtonTypes, KrDialogCardAutoOpenModes, KrDialogCardStoreModes) перенесены из типового решения в платформу и лишены префикса Kr.

  42. Переименована настройка CardTracingMode на ExtensionTracingMode, используемая для трассировки расширений. Настройка указывается в файлах app.json для TessaClient и веб-сервиса. Также используйте параметр командной строки TessaClient.exe /ExtensionTrace вместо /CardTrace. Инструкция по трассировке расширений доступна в руководстве разработчика.

  43. Удалены вспомогательные методы UIHelper.InvokeAsync. Используйте конструкцию await Task.Run(() ⇒ { }) для того, чтобы возникшее исключение было выброшено из потока задачи в поток после await, в противном случае исключение игнорируется и не будет залогировано или как-либо обработано. Для выполнения кода в потоке UI используйте конструкцию await DispatcherHelper.InvokeInUIAsync(() ⇒ { }). Вместо метода ShowErrorOnFaulted используйте конструкцию try { await …​ } catch (Exception ex) { await TessaDialog.ShowExceptionAsync(ex); }.

  44. В расширениях desktop-клиента для запуска файлов в приложении, ассоциированном по умолчанию с расширением файлов, вместо Process.Start(filePath) используйте конструкцию Process.Start(new ProcessStartInfo(filePath) { UseShellExecute = true }). Эта особенность связана с отличием платформы .NET Core от .NET Framework, которая использовалась в предыдущих сборках.

  45. В API синхронизации с AD / LDAP удален вспомогательный метод SyncRoleMembers. Новый состав роли теперь передается в объекте context.Card.

  46. В коде расширений некоторые синхронные API переделаны на аналогичные асинхронные, например, делегаты для генерации контекстных меню ContextMenuGenerators, открытие модальных диалогов IUIHost.ShowDialogAsync, закрытие кнопок методом IUIButton.CloseAsync и лямбда-выражение с действием кнопки, передаваемое в конструктор класса UIButton. Некоторые методы возвращают ValueTask вместо Task, если в них вы вернули Task.CompletedTask, то замените его на new ValueTask(). Следуйте инструкциям из предыдущих сборок, связанных с асинхронностью, если ваш код не компилируется при обновлении.

  47. Вызов метода dbScope.Create() или CreateNew() теперь можно сделать только в блоке await using, поскольку возвращаемое значение реализует IAsyncDisposable и больше не реализует IDisposable.

  48. Удалены синхронные методы выполнения запросов к базе данных посредством DbManager и IQueryExecutor, используйте асинхронные методы. Например, используйте метод ExecuteAsync<T> с конструкцией await вместо Execute<T>.

  49. В расширениях используйте интерфейс ISequentialGuidProvider вместо интерфейса IGuidCombProvider для создания последовательных уникальных идентификаторов, подходящих для вставки в таблицу в текущей базе данных. Объект по интерфейсу можно получить из контейнера Unity.

  50. В методах расширений рассмотрите использование методов FileHelper.Create, FileHelper.OpenRead, FileHelper.OpenWrite вместо аналогичных методов статического класса File. Перечисленные методы класса FileHelper с параметрами по умолчанию разрешают асинхронные чтение/запись и оптимизируют последовательное чтение для метода OpenRead.

  51. Подсистема сателитов была обновлена, добавлена общая таблица Satellites для всех сателлитов, а наборы старых расширений были заменены на SatelliteTypeDescriptor и ISatelliteHandler. Подробная инструкция по переносу старых сателлитов на новые есть в руководстве разработчика.

  52. Изменён способ хранения файлов, приложенных к карточке диалога с временем жизни "Задание", теперь файлы хранятся в файловом сателлите. Метод Dialog.SetFileContainer(CardFile file, byte[] content) доступен только в диалоге с временем жизни "Запрос". Вместо него следует использовать файловый контейнер, возвращаемый методом Dialog.GetFileContainerAsync(IValidationResultBuilder validationResult = default, CancellationToken cancellationToken = default).

  53. В подсистеме маршрутов многие синхронные методы заменены на асинхронные. Проверьте скрипты маршрутов. Если при обновлении вы столкнётесь с отсутствующим методом, то допишите к концу его имени Async. Многие свойства были заменены на асинхронные методы, например, свойство IKrScript.Cycle, было заменено на два метода IKrScript.GetCycleAsync() и IKrScript.SetCycleAsync(int newValue). В скриптах маршрутов используйте вместо конструкции .GetAwaiter().GetResult() оператор await, например, MethodAsync().GetAwaiter().GetResult() следует заменить на await MethodAsync(). Подробную информацию о контексте скриптов можно найти в разделе "Написание сценариев для объектов маршрута" руководства администратора.

  54. В клиентских расширениях desktop-клиента в метод IApplicationResourceRegistrator.Register передайте текущую сборку, в которой расположен класс регистратора: typeof(Registrator).Assembly. Пример в файле Source\Extensions\Tessa.Extensions.Client\Registrator.cs.

  55. Модуль лицензии "Визуализатор Workflow" переименован в "Визуализатор маршрутов". Функциональность модуля не изменилась.

  56. В документацию Swagger теперь не включаются контроллеры веб-сервисов, которые используются desktop-клиентом и задействуют бинарную сериализацию.

9.2. Добавление и изменение функциональности

  1. Для desktop-приложений снижены требования к установленному на рабочей станции ПО, теперь требуется Windows 7 SP1 с установленным .NET Framework 4.0 или старше, для Windows 8.1 и Windows 10 требования к версии .NET Framework отсутствуют.

  2. Расширены поддерживаемые форматы ЭЦП и возможности в части проверки списка отзывов и взаимодействия с OCSP-сервером. Настройки доступны в карточке "Настройки цифровой подписи" и описаны в руководстве администратора. Функции поддерживаются и в desktop-клиенте, и в web-клиенте.

  3. Приложение Tessa Applications теперь по умолчанию скачивает приложения в папку %LocalAppData%\tessa вместо папки %AppData%\tessa, которая используется в перемещаемых профилях пользователей. Вы, как и ранее, можете переопределить путь к папке в конфигурационном файле %AppData%\tessa\settings\application_catalogs.xml: t:AppPath="%LocalAppData%\tessa". Внимание: текущий установленный в application_catalogs.xml путь продолжит использоваться, с этой сборки переопределяется только путь по умолчанию для новой установки или для переустановки через инсталлятор TessaApplications.msi.

  4. Приложение Tessa Applications скачивается и обновляется по пути, указанному в конфигурационном файле TessaAppLauncher.exe.config в настройке "LocalAppPath", по умолчанию это папка %LocalAppData%\tessa (подпапка appmanager, appmanager_update и др.). Путь также можно переопределить в переменной окружения %Tessa.LocalAppPath%. Эта настройка работоспособна только для новой версии Tessa Applications, установленной через msi-пакет, причём TessaAppManager также должен быть обновлён до версии 3.5.0, иначе используется папка %AppData%\tessa без возможности настройки.

  5. В списке приложений Tessa Applications во всплывающую подсказку на иконке приложения добавлены указание версии приложения, версии платформы, архитектуры (32-битная или 64-битная) и версии API менеджера приложений.

  6. В списке приложений Tessa Applications улучшено отображение иконок приложений, в т.ч. добавлен антиалиасинг.

  7. В карточке сотрудника добавлена настройка "Архитектура приложений" для определения того, какие приложения (32-разрядные или 64-разрядные) будут скачиваться приложением Tessa Applications, когда опубликованы приложения обеих разрядностей. Значение "Автоматически" соответствует архитектуре, которая известна для Tessa Applications новой версии 3.5.0 (или старше), но для предыдущих его версий архитектура определяется как 32-разрядная. Значение "предпочитать 32-битные приложения" определяет, что используются 32-разрядные приложения независимо от фактической архитектуры ОС пользователя и версии Tessa Applications, а значение "предпочитать 64-битные приложения" - аналогично использует 64-разрядные приложения кроме того случая, когда Tessa Applications новой версии (3.5.0 или старше) явно сообщает серверу, что ОС пользователя является 32-разрядной. Обратитесь к разделу "Инсталлятор Tessa Applications" в руководстве по установке за подробным описанием инсталлятора.

  8. В истории действий в записи "Вход в систему" добавлены параметры "64-битное приложение" и "64-битная операционная система", которые позволяют определить разрядность desktop-приложения и операционной системы пользователя соответственно на сервере приложений. Значение "неизвестно" означает, что приложение, выполнившее вход, не передало информацию по разрядности.

  9. При публикации desktop-приложений путём их запуска с командой /publish теперь возможно указать ключ /64bit, чтобы опубликованное приложение считалось 64-разрядным (т.е. незапускаемым на 32-разрядных ОС), независимо от фактической разрядности процесса, и возможно указать ключ /32bit, чтобы опубликованное приложение считалось 32-разрядным или запускаемым на 32-разрядных ОС (например, в случае AnyCPU).

  10. Приложения Publisher и TokenEditor были удалены. Используйте консольные команды tadmin PackageApp или GetKey/SetKey соответственно. Документация по командам доступна в руководстве администратора. Раздел по замене токена в руководстве по установке был обновлён.

  11. Скрипт обновления на новую версию сборки Upgrade.bat/upgrade.sh теперь не перезаписывает файловые источники и не требует ввода файловой папки перед обновлением.

  12. В файле app.json веб-сервиса добавлена настройка "Redis", позволяющая указать адрес сервера Redis, который будет использоваться для синхронизации состояния серверных кэшей. Это позволяет изменять конфигурацию в кластере без необходимости перезапускать серверы вручную. Подробная информация по использованию доступна в разделе руководства по установке "Настройка Redis для сброса кэшей в кластере приложений".

  13. В файле app.json веб-сервиса добавлена настройка "PathBase", позволяющая указать базовый путь к веб-сервису в случае, если он запущен без использования IIS (т.е. Nginx, Apache) по пути, отличному от корневого.

  14. В файле app.json веб-сервиса добавлена найстройка "SetSAMLCookie", позволяющая указать необходимость сохранения cookie для быстрой повторной аутентификации на authentication сервере.

  15. На странице /check веб-сервиса теперь выводится информация по текущей конфигурации, которая до этого выводилась в TessaAdmin в окне "Информация по конфигурации".

  16. На странице /check веб-сервиса теперь выводятся ошибки при загрузке конфигурационных файлов app.json.

  17. Объекты конфигурации теперь используют переводы строк LF "\n" вместо CR LF "\r\n". Преобразование файлов в папке конфигурации платформы уже выполнено. Для преобразования в папке с конфигурацией вашего проекта используйте команду tadmin ConvertConfiguration -mode:LF "Путь_до_папки_Configuration".

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

  19. В web-клиенте для модуля обсуждений добавлены средства форматирования сообщений, включая изменение стиля шрифта (жирный, курсивный, подчёркнутый, зачёркнутый), создание списков, вставку ссылок и добавление файлов. Недоступны выбор размера шрифта, вставка блоков (моноширинные блоки, выбор цвета блоков), вставка изображений, вставка файлов из буфера обмена, ответы на сообщения, копирование ссылки на сообщение или текста сообщения.

  20. В web-клиенте добавлено приложение-помощник Tessa Deski, реализующее интеграцию web-клиента с операционными системами Windows (32 bit, 64 bit), Linux (64 bit) и macOS (64 bit). Скачать приложение можно, нажав кнопку в окне "О программе" или вызвав функцию, требующую Tessa Deski, например, "Открыть для редактирования", в контекстном меню файла. В текущей версии доступны функции редактирования файлов и их открытие для чтения в приложении, которое ассоциировано с соответствующим типом файла, например, на Windows с установленным пакетом MS Office для файла с расширением docx будет открыто приложение Word. Наличие изменений в файле определяется таким же образом, как и в desktop-клиенте: по дате изменения файла. Также доступно открытие файла в папке, где пользователь самостоятельно может выбрать приложение. Все открываемые версии файлов сохраняются в локальный кэш в зашифрованном виде. При повторном обращении файл открывается из локального кэша без необходимости загрузки контента с сервера.

  21. В web-клиенте добавлен пункт контекстного меню "Отменить изменения в файле", аналогичный desktop-клиенту.

  22. В рабочем месте "Администратор" в папке "Прочее" добавлен справочник "Приложения Web", который содержит карточки приложений-ассистентов web-клиента для различных операционных систем. Создать такую карточку можно, используя команду tadmin PackageWebApp.

  23. В маршрутах в этап "Подписание" добавлен флаг "Не возвращать на доработку".

  24. В маршрутах в этап "Диалог" добавлена возможность создания карточки, отображаемой в диалоге, по шаблону.

  25. В маршрутах в этап "Согласование" добавлена возможность отправки задания дополнительного согласования, которое может быть отправлено из другого задания дополнительного согласования, без ограничений по вложенности.

  26. В маршрутах в этап "Создание карточки", для всех режимов работы, добавлена возможность изменения создаваемой карточки в сценарии постобработки перед выполнением действия с карточкой: открытием, сохранением, запуском процесса.

  27. Из карточки вторичного процесса удалена настройка "Сообщение после завершения".

  28. В карточке вторичного процесса измененена логика проверки ролей при нажатии тайла или при обработке действия. В поле "Доступно ролям" (ранее поле "Контекстные роли") можно указывать любые роли, которые должны быть вычислены при нажатии тайла.

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

  30. В конструкторе бизнес-процессов в действия "Задание" и "Группа заданий" добавлена возможность добавлять открытие диалога при нажатии на кнопку завершения задания с заданным в настройках диалога вариантом завершения.

  31. В конструктор бизнес-процессов добавлена возможность экспорта и импорта отдельных версий процесса из редактора.

  32. В конструктор бизнес-процессов добавлена возможность импорта структуры процесса из BPMN.

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

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

  35. В конструктор бизнес-процессов добавлены новые виды действий: "Выполнение задачи", "Доработка", "Задание регистрации", "Настраиваемое задание", "Подписание", "Согласование". Они позволяют быстро настраивать типовые бизнес-процессы и аналогичны, по смыслу, соответствующим этапам из подсистемы маршрутов.

  36. В тексте запроса представления для оператора #if для проверки значений логического типа доступно получение значения через свойство Value. Например: #if(BoolParam.Value == true) { }

  37. Модуль потокового ввода документов теперь поддерживается на сервере с ОС Linux. Настройка плагина Chronos для потокового ввода на Linux аналогична его настройке на Windows.

  38. Добавлен особый вид сателлитов - файловый сателлит (FileSatellite), который может быть использован для хранения файлов карточки, которые не видны в самой карточке.

  39. В правилах доступа в расширенные настройки прав доступа добавлена новая настройка доступа "Запретить редактирование строк", которая позволяет запретить редактирование строк секции, при этом не запрещая добавление/удаление строк.

  40. В типе карточки "Сотрудник" добавлена возможность настраивать доступ к секциям с настройками заместителей сотрудников через правила доступа, при условии включения типа карточки "Сотрудник" в типовое решение.

  41. При отправке почты по SMTP теперь поддерживается режим Implicit SSL, когда при взаимодействии с почтовым сервером сразу устанавливается защищённое соединение по протоколу TLS. Это уменьшает проблемы установки соединения с различными почтовыми серверами по SMTP.

  42. При получении почты для мобильного согласования теперь поддерживается протокол IMAP в дополнение к протоколу POP3. Протокол указывается в настройке "MobileApproval.Mode" в файле app.json сервиса Chronos.

  43. Добавлен скрипт Fixes\ValidateConstraints.pg.sql для проверки внешних ключей в PostgreSql.

  44. В приложении TessaClient для плитки в правой боковой панели "Создать документ" ограничена длина до 25 символов для названия типа документа, который создаётся повторно. Полное название можно увидеть во всплывающей подсказке.

  45. В обсуждениях при отправке сообщений добавлены функции вставки блоков (цитат) и ответов на сообщения.

  46. Добавлен элемент управления "Текст с форматированием", позволяющий вводить и выводить текст с произвольным форматированием, аналогично сообщениям в обсуждениях. В текущей версии web-клиента элемент управления доступен только для чтения.

  47. Элемент управления "Представление" теперь может использоваться для управления файлами в карточке в форме таблицы, при этом поддерживаются все функции элемента управления "Список файлов". Для такой настройки добавьте расширение типа карточки "Список файлов в представлении", в котором укажите алиас элемента управления "Представление" и другие настройки. Подробности в части настроек приведены в руководстве администратора. Пример использования расширения доступен в карточке "Автомобиль". В текущей версии элемент управления отсутствует в web-клиенте, поэтому настройки расширения также игнорируются.

  48. Элемент управления "Представление" теперь может использоваться для вывода истории заданий вместо или в дополнение к стандартной вкладке "История заданий". Для такой настройки добавьте расширение типа карточки "Представление истории заданий", в котором укажите алиас элемента управления "Представление" и другие настройки. Подробности в части настроек приведены в руководстве администратора. Пример использования расширения доступен в карточке "Автомобиль". В текущей версии элемент управления отсутствует в web-клиенте, поэтому настройки расширения также игнорируются.

  49. Добавлено расширение типа "Скрыть вкладку", в котором можно указать алиас скрываемой вкладки карточки или указать строку ".TaskHistoryViewModel" (без кавычек) для скрытия стандартной вкладки в истории заданий. Расширение выполняется и в desktop-, и в web-клиенте.

  50. В элементе управления "Список файлов" во всплывающей подсказке на файле более не отображается тип файла, поскольку он не используется в проектах. По-прежнему отображается категория файла, которая задействована для разделения файлов по некоторым группам.

  51. Для менеджера приложений Tessa Applications на вкладке "Серверы" добавлен флажок "Отключить обновления Tessa Applications". Это предотвращает автоматическое обновление менеджера с основного сервера (отмеченного звездой в списке серверов), но не затрагивает обновления приложений на любых серверах. Флажок также можно установить при установке TessaApplications.msi в интерфейсе инсталлятора или параметрами командной строки. Обратитесь к разделу "Инсталлятор Tessa Applications" в руководстве по установке за подробным описанием инсталлятора.

  52. При установке менеджера приложений TessaApplications.msi добавлен флажок "Сохранить существующие параметры подключения". Если флажок отмечен, то все текущие настройки пользователя, в т.ч. список его серверов application_catalogs.xml, сохраняются как есть, и будут использованы новым менеджером приложений. Установить настройку можно в интерфейсе инсталлятора или параметрами командной строки (или трансформацией .mst).

  53. При установке менеджера приложений TessaApplications.msi пользователь теперь может выбрать, запускать ли приложение сразу при запуске Windows (в этом случае оно будет запущено свёрнутым в трее), а также добавлять ли ярлыки на рабочий стол и в меню "Пуск".

  54. Для приложений в пакете Tessa Applications (TessaAppManager и TessaAppLauncher) добавлен параметр командной строки /autostart, позволяющий запустить приложение в специальном режиме, который рекомендуется для настройки автозапуска в Windows. При этом не отображается окно загрузки и приложение запускается, сразу свёрнутым в трей. При установке Tessa Applications добавление ярлыка с параметром /autostart в папку автозагрузки выполняется по умолчанию. Обратитесь к разделу "Инсталлятор Tessa Applications" в руководстве по установке за подробным описанием инсталлятора.

  55. В карточке "Приложение" удалено поле ExtensionVersion, которое использовалось для обратной совместимости. С текущей версии обратная совместимость реализована на уровне представлений, которые возвращают константную строку с версией.

  56. В TessaClient при прокрутке колесом мыши в карточках на элементах управления "Представление" и "Таблица" сначала выполняется прокрутка строк таблицы, после чего выполняется прокрутка содержимого области с карточкой.

  57. Для элемента управления "Представление" добавлены настройки: "Автоматически выделять первую строку", "Разрешить прокрутку". Описание настроек доступно в руководстве администратора.

  58. Текущие задействованные настройки безопасности, задаваемые в карточке "Настройки сервера" на вкладке "Безопасность", теперь выводятся в лог веб-сервиса на уровне логирования INFO.

  59. В представлении "Сотрудники" в дополнение к параметру фильтрации "Входит в роль" добавлен параметр "Не входит в роль", который можно использовать одновременно с первым параметром.

  60. Большинство диалоговых окон в TessaClient теперь закрывается по нажатию клавиши Esc, если текущий элемент управления не перехватывает это нажатие.

  61. Длина имени файла вместе с расширением, который записывается во временную папку при загрузке и редактировании файлов в TessaClient, теперь имеет ограничение в 100 символов. При этом длина имени файла, указываемая пользователем, не ограничивается. Для изменения ограничений требуется написать клиентское расширение для изменения свойства ISettings.MaxFileContentNameLength, подробнее в пункте по API ниже.

  62. В документацию Swagger теперь не включаются контроллеры веб-сервисов, которые используются desktop-клиентом и задействуют бинарную сериализацию.

  63. Улучшена иконка Tessa Applications в трее (рядом с часами).

  64. Из карточки сотрудника удалены колонка GenderID и перечисление Genders. В платформе и типовом решении эти поля не использовались, на внешний вид карточки их удаление не повлияло. Вы можете изменить карточку сотрудника и схемы данных, добавив удалённые таблицу и поля, если они были задействованы в вашем решении.

  65. В карточки динамических ролей и генераторов метаролей добавлен флажок "Запланировать пересчёт при запуске сервиса Chronos". Если пересчёт запланирован по выражению Cron, то при запуске или перезапуске сервиса Chronos пересчёт выполняется только в том случае, если включена эта опция. Если пересчёт выполняется по указанному периоду, то при запуске сервиса пересчёт выполняется, независимо от этой опции.

  66. У генератора метаролей "Агрегатные роли" период пересчёта по умолчанию установлен в 1 час. Ранее период был указан равный 5 минут.

  67. В правила доступа добавлено поле Приоритет, которое позволяет определить приоритетность расширенных настроек правил доступа.

  68. Если в правиле доступа установлен флаг "Всегда проверять правило доступа", то все расширенные настройки доступа к карточке этого правила всегда будут применяться, даже если доступ на редактирование на запрашивался.

  69. В схеме данных для индекса Postgres теперь добавлена возможность писать кастомные выражения для построения индекса. В выражениях можно использовать плейсхолдеры форматирования {#}, где # - номер колонки индекса, имя которой будет подставлено в выражение.

  70. В карточке "Динамическая роль" добавлена кнопка "Пересчитать роль сейчас", и в карточке "Генератор метаролей" добавлена кнопка "Пересчитать генератор метаролей сейчас", которые выполняют расчёт для указанной карточки сразу по нажатию на кнопку.

  71. В шаблоны файлов обрабатываемых платформой типов (.txt, .html, .xlsx, .docx) добавлена поддержка вложенных подгрупп внутри других групп для возможности организации многоуровневой группировки. Теперь группу таблицы (например, <_group> в текстовом документе) можно вложить в другую группу таблицы.

  72. В шаблоны файлов обрабатываемых платформой типов (.txt, .html, .xlsx, .docx) добавлена поддержка вложенных таблиц. Теперь таблицу (например, <_table> в текстовом документе) можно вложить внутрь строки (<_row> в текстовом документе) или группы (<_group> в текстовом документе).

  73. В подсистему плейсхолдеров добавлена возможность создавать плейсхолдер-объявление с указанием алиаса. С помощью конструкции {#alias placeholder} в тексте можно объявить указанный плейсхолдер с заданным ему алиасом (сам плейсхолдер-объявление при этом будет удален из текста при обработке плейсхолдеров), а другие плейсхолдеры могут использовать в качестве настроек плейсхолдера указанный алиас.

  74. В подсистему плейсхолдеров в плейсхолдерах представлений (fv, tv) улучшена возможность настройки параметров представлений. Теперь можно настраивать несколько параметров, а в качестве передаваемого значения можно задавать константу (конструкция with param <ParamName> value <const>) или значение из других плейсхолдеров, объявленных через плейсхолдер-объявление (конструкция with param <ParamName> from <alias>).

  75. В подсистему плейсхолдеров в плейсхолдеры представлений добавлена возможность указывать составной источник данных плейсхолдера аналогично плейсхолдерам f и t (пример - t:Section1.Field1→Section2.Field2).

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

  77. Скрипты установки Setup.bat/setup.sh и обновления Upgrade.bat/upgrade.sh теперь выполняют пересчёт динамических ролей, генераторов метаролей и замещений (замещения не пересчитываются при установке, поскольку в системе ещё нет заместителей).

  78. Скрипты установки Setup.bat/setup.sh и обновления Upgrade.bat/upgrade.sh теперь обновляют SignatureKey и CipherKey в app.json веб-сервиса web и сервиса Chronos.

  79. В TessaAdmin настройка "Формат поля" удалена для элементов управления, в которых она не использовалась. Настройка сохранена для элементов управления "Строка" (используется в режиме "только для чтения") и "Текст".

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

  81. В TessaAdmin для типов заданий добавлен флаг "Разрешить сохранение с файлами", который указывает системе, что действия с заданиями этого типа можно выполнять совместно с сохранением карточки вместе с содержимым файлов, т.е. поведение системы для заданий этого типа будет таким же, как и в предыдущих версиях платформы. Устанавливайте этот флаг только в том случае, если этого явно требуют расширения в вашем проекте.

  82. В таблице Outbox информация по отправляемому письму, включая прикладываемые файлы и список дополнительных получателей, теперь сериализуется в колонке Info в текстовой форме в формате json. Информация по существующим письмам в очереди на отправку перемещена в бинарную колонку InfoLegacy.

  83. В сообщениях об ошибках улучшен вывод стек-трейсов для некоторых случаев, таких как вывод местоположения строки кода, который выполнил SQL-запрос, завершённый с ошибкой.

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

  85. Кнопка "Копировать" в окне информации по конфигурации по TessaAdmin теперь копирует в буфер также информацию по используемой СУБД и флагам.

  86. Для типов файлов в TessaAdmin оставлен доступным только узел "Секции", поскольку остальные узлы (формы, расширения, валидаторы) не используются.

  87. Почтовое уведомление для смены ключей подписи и шифрования было локализовано. В прошлых версиях это уведомление называлось уведомлением о смене токена.

  88. Добавлена поддержка аутентификации OAuth для отправки и получения почты посредством Exchange Web Services. Для этого в файле app.json сервиса Chronos в настройках "NoticeMailer.ExchangeOAuthToken" (для отправки почты) и "MobileApproval.ExchangeOAuthToken" (для получения почты) укажите непустой ключ API, генерируемый на стороне Exchange, посредством которого Chronos будет взаимодействовать с сервисом. Обратитесь к документации Exchange для создания такого ключа.

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

  90. В строках подключения для MSSQL Server удалена настройка MultipleActiveResultSets=true, которая не требуется для функционирования системы и её расширений.

  91. Группировку файлов по типам теперь нельзя выбрать в TessaAdmin для контрола "Список файлов". Также удалён класс группировки FileTypeGrouping.

  92. В поле Hash таблицы FileVersions теперь записывается хеш-сумма SHA256 (с учётом FIPS-совместимых алгоритмов на Windows), ранее использовался алгоритм HMACSHA256 с некоторым постоянным ключом. Для проверки хеш-сумм у файлов, для которых они были рассчитаны в предыдущих версиях системы, используйте объект HashSignatureProvider.FilesLegacy. В платформе хеш-суммы рассчитываются для файлов карточек "Приложение" и "Приложение Web", а также такая возможность есть в API расширений.

  93. В TessaAdmin в процессе сохранения типов карточек, файлов и заданий отображается сплэш-окно "Сохранение типов".

  94. Утилита tadmin: добавлена команда InvalidateCache для сброса всех кэшей или списка указанных кэшей со стороны веб-сервиса, к которому подключается команда, а также со стороны всех веб-сервисов и сервисов Chronos, связанных с этим сервисом (при указании строки подключения к Redis).

  95. Утилита tadmin: добавлена команда ManageRoles для управления ролями в части пересчёта замещений, динамических ролей и метаролей.

  96. Утилита tadmin: команда CheckDatabase без указанного параметра -timeout теперь проверяет подключение с тем таймаутом, который указан в строке подключения, или с параметром по умолчанию для СУБД, если он не указан. В предыдущих сборках платформы указывалось значение 0, что соответствует бесконечному таймауту.

  97. Утилита tadmin: для команды ConvertConfiguration добавлен опциональный ключ /mode, указывающий режим конвертации для конфигурации: Upgrade - режим по умолчанию; Downgrade - преобразование из нового формата в старый (.jtype→.tct, .jcard→.card); LF - преобразование переводов строк в \n (с такими переводами выполняется выгрузка в текущей версии платформы Windows или в любой версии на Linux); CRLF - преобразование переводов строк в \r\n (так выгружалась конфигурация на Windows в предыдущих версиях платформы).

  98. Утилита tadmin: для команды PackageApp добавлен опциональный ключ /v для указания версии сборки платформы. В случае, если утилита не может прочитать версию приложения из файла .exe, то по умолчанию будет использована текущая версия платформы, или ключ /v может явно задать версию.

  99. Утилита tadmin: для команды PackageApp добавлен опциональный ключ /64bit для указания того, что приложение является 64-битным и не может быть запущено на 32-битных ОС. Если приложение является 32-битным или AnyCPU (разрядность зависит от ОС), то не указывайте этот ключ. Разрешается, чтобы два приложения имели один и тот же алиас, но разную разрядность, т.е. одно приложение опубликовано с ключом /64bit, другое - без него.

  100. Утилита tadmin: для команды PackageApp добавлен опциональный ключ /api2 для указания того, что приложение может использовать новый API v2 для взаимодействия с менеджером приложений. Рекомендуется для desktop-приложений TESSA, начиная со сборки 3.5.0.

  101. Утилита tadmin: добавлена команда PackageWebApp для создания файла с карточкой приложения Web, которая импортируется для публикации приложения.

  102. Утилита tadmin: команды GetToken/SetToken переименованы в GetKey/SetKey соответственно, для генерации ключей для подписи укажите параметр "Signature" (без кавычек), например: tadmin GetKey Signature|tadmin SetKey Signature "/path:C:\inetpub\wwwroot\tessa". Также параметр "Cipher" позволяет сгенерировать и заменить ключ шифрования.

  103. Утилита tadmin: команда SetKey (переименована из SetToken) вернёт ненулевой результат ("errorlevel" для Windows, "$?" для Linux), если ключ не заменён ни в одном файле, т.е. либо он не найден, либо возникли ошибки при замене.

  104. API: Все проекты расширений (Client/Server/Shared) теперь собираются для платформы .NET Core 3.1, это расширило доступную функциональность языка C# и возможности библиотеки базовых классов .NET Core.

  105. API: При синхронизации статических ролей в модуле синхронизации с AD / LDAP получаем состав роли только, если роль была изменена.

  106. API: В контекст синхронизации с AD / LDAP добавлены объекты для работы с синхронизацией пользователей/поиском. Получение руководителя подразделения вынесено в расширение типового решения.

  107. API: В синхронизации с AD / LDAP добавлен флаг CardHelper.AdSyncForceCardRepoKey для принудительного сохранения карточки через cardRepository с расширениями. Флаг необходимо добавлять в Card.Info.

  108. API: Добавлен метод-расширение ICardRepository.InvalidateCacheAsync, выполняющий запрос на сброс всех кэшей или списка указанных кэшей со стороны веб-сервиса, а также со стороны всех веб-сервисов и сервисов Chronos, связанных с этим сервисом (при указании строки подключения к Redis). Запрос может быть вызван как с клиента, так и с сервера, при этом пользователь в текущей сессии должен быть администратором. Этот запрос также выполняет консольная команда tadmin InvalidateCache.

  109. API: В методы IUIHost.ShowFormDialogAsync и ShowDialogAsync добавлен параметр closeOnEscapeKey (по умолчанию false). Если указано true, то окно можно будет закрыть по нажатию Esc, если это нажатие не перехватит текущий элемент управления.

  110. API: В контексте скриптов плейсхолдеров IPlaceholderScriptContext тип свойства context.Table теперь указан как IEditablePlaceholderTable вместо IPlaceholderTable. Это позволяет редактировать список вставляемых строк в расширениях шаблонов файлов "Перед формированием таблицы".

  111. API: В контексте расширения ICardStoreExtension добавлена возможность подписываться на событие OnContentStoring, которое возникает перед сохранением контента файла на сервере. На клиенте данное событие не вызывается.

  112. API: В API потокового сканирования добавлена возможность переопределить фильтрацию файлов, обрабатываемых модулем. Расширение должно быть зарегистрировано в Unity по интерфейсу IDocLoadExtension в методе регистратора RegisterUnity.

  113. API: В IWorkflowEngineCardsScope добавлен метод AddCard(Card), который позволяет добавить карточку (в том числе и новую) в область видимости (scope) карточек для обработки процесса в Workflow Engine. Добавленные карточки будут автоматически сохранены при завершении обработки.

  114. API: В IDocumentTabManager добавлен метод CloseCardAsync, который позволяет закрыть карточку.

  115. API: В ConversionHelper метода TryConvert добавлен опциональный параметр culture, позволяющий указать культуру, отличную от инвариативной.

  116. API: В объект CardTaskDialogButtonInfo, который содержит информацию о кнопке диалога, добавлено свойство CompleteDialog, которое определяет, завершает ли нажатие данной кнопки текущий диалог.

  117. API: Изменён способ задания горячих клавиш для кнопок верхнего и нижнего тулбара расположенных в модальном диалоге. Для привязки горячих клавиш к кнопке их необходимо указать в параметре gestures соответствующего конструктора класса наследника Tessa.UI.Cards.CardToolbarItem.

  118. API: Некоторые синхронные API переделаны на аналогичные асинхронные, например, делегаты для генерации контекстных меню ContextMenuGenerators, закрытие кнопок методом IUIButton.CloseAsync и лямбда-выражение с действием кнопки, передаваемое в конструктор класса UIButton.

  119. API: Во все скрипты подсистемы маршрутов добавлена возможность написания асинхронного кода.

  120. API: В конструктор бизнес-процессов в скрипты условий в настройках связи добавлена возможность использовать директиву #script для переключения режима написания условия в режим скрипта.

  121. API: В WorkflowManager добавлен метод GetWorkflowCardIDAsync асинхронно возвращающий идентификатор карточки, в которой содержатся секции бизнес-процесса. По умолчанию возвращает значение свойства WorkflowManager.WorkflowCardID. При одновременном переопределении WorkflowManager.GetWorkflowCardIDAsync и WorkflowManager.WorkflowCardID используется значение возвращаемое методом WorkflowManager.GetWorkflowCardIDAsync.

  122. API: В Tessa.Workflow.IWorkflowEngineContext добавлено свойство CardStorePriorityComparer позволяющее получить или задать компаратор определяющий порядок сохранения загруженных карточек. Может иметь значение по умолчанию для типа, в этом случае упорядочивание карточек при сохранении не выполняется.

  123. API: При запуске расширений на веб-сервисе Kestrel в контейнере Unity доступен интерфейс System.IServiceProvider, который предоставляет доступ к зависимостям, зарегистрированным в DI-контейнере ASP.NET Core, таким как сервис IHostApplicationLifetime, который позволяет отслеживать завершение приложения веб-сервиса. Если ваше расширение может быть запущено не только для веб-сервиса, то указывайте [OptionalDependency] для этого интерфейса. Пример доступен в руководстве разработчика.

  124. API: В токене сессии ISessionToken добавлены свойства Client64Bit и Client64BitOS для определения разрядности клиентского приложения и клиентской ОС. Если свойства равны null, то приложения не передали свою разрядность в момент входа, поэтому стоит ожидать, что они могут выполнять только 32-битный код или AnyCPU.

  125. API: В модель представления ICardModel были добавлены списки делегатов ControlInitializers, BlockInitializers, FormInitializers, которые вызываются после создания элемента управления и его асинхронной инициализации. В пределах этих делегатов действует контекст создания вкладки FormCreationContext.Current, который может задействоваться для инициализации элементов управления файлами, например: FormCreationContext.Current.Register(fileControl).

  126. API: В методы регистрации сервера приложений для плагинов RegisterServerForPluginAsync добавлен параметр enableInterprocessCommunication, позволяющий включить глобальные кэши в пределах работающего процесса плагина Chronos (в типовом решении таких плагинов нет). По умолчанию, по-прежнему, используется значение false, и кэши не сбрасываются в нескольких процессах сразу, это рекомендуемое поведение. При необходимости указать значение true (если вы написали плагин с долгоживущим контейнером Unity), передайте значение true в параметре, а также в файле app.json для Chronos установите строку подключения к Redis, по аналогии с веб-сервисом, в противном случае возможны проблемы со сбросом кэша между процессами плагинов и веб-сервисов.

  127. API: В API файлов для интерфейса IFileControl добавлен метод ClearSelection, который ранее был методом-расширением. Поведение метода может изменяться, в зависимости от реализации интерфейса.

  128. API: При отправке писем теперь можно указать новое свойство MailInfo.CardTypeName с указанием названия типа карточки.

  129. API: Трассировка расширений теперь используется для типов расширений IApplicationExtension, ICardMetadataExtension, ICardRepairExtension, ICardUIExtension, IClientInitializationExtension, IFileControlExtension, IFileExtension, IFileVersionExtension, ITileGlobalExtension, ITileLocalExtension, ITilePanelExtension, IServerInitializationExtension. Добавлена возможность подключить сортировку для любых расширений, контекст которых реализует интерфейс ITraceableExtensionContext. Переименована настройка CardTracingMode на ExtensionTracingMode, используемая для трассировки расширений. Настройка указывается в файлах app.json для TessaClient и веб-сервиса. Также используйте параметр командной строки TessaClient.exe /ExtensionTrace вместо /CardTrace. Инструкция по трассировке расширений доступна в руководстве разработчика.

  130. API: Добавлен абстрактный класс FilesViewGeneratorBaseUIExtension, позволяющий для указанных в коде элементов управления "Представление" определить настройки для работы в режиме "Список файлов". Пример использования расширения доступен в руководстве разработчика.

  131. API: Добавлена коллекция IViewPlaceholderContext.SharedParameters, содержащая параметры фильтрации, добавляемые во все представления при замене плейсхолдеров, в которых есть параметры с соответствующим алиасом. Коллекция используется в т.ч. при генерации файла по шаблону из представлений.

  132. API: Добавлена настройка ISettings.MaxFileContentNameLength, определяющая максимальную длину имени файла вместе с расширением, который записывается в кэше файлов (во временной папке) при загрузке и редактировании файлов в TessaClient. По умолчанию длина ограничивается 100 символами. Изменить настройку можно в клиентском расширении ISettingsExtension, пример такого расширения приведён в руководстве разработчика.

  133. API: Удалены флаги и методы, связанные с изменением типа файла (CardFileFlags.UpdateType, IFileManager.ChangeTypeAsync и др.), поскольку тип файла не используется, и такое изменение выполнялось некорректно.

  134. API: Добавлен объект IRoleManagerService, доступный на клиенте и на сервере, и позволяющий выполнять операции с ролями, которые ранее располагались в плагинах Chronos, такие как пересчёт замещений, динамических ролей и генераторов метаролей.

  135. API: На клиенте для сохранения карточки добавлено свойство CardModifierIsSeparateFromFilesContents в объект ICardSavingRequest, которое определяет, что дополнительное действие по изменению карточки CardModifierActionAsync будет выполнено отдельным сохранением карточки, если в карточке присутствуют файлы с изменённым содержимым (файлы были добавлены или отредактированы). Объект ICardSavingRequest указывается при сохранении карточки средствами объектов ICardEditorModel и ICardModel. Свойство может использоваться для выполнения действий с заданиями (взятие в работу, завершение и др.) таким образом, чтобы к моменту выполнения обработки на сервере содержимое всех файлов, отправленных пользователем, было доступно. Если клиентские расширения ICardUIExtension.Saving выполнят добавление или изменение содержимого файла, то они будут сохранены в том же запросе в обход настройки CardModifierIsSeparateFromFilesContents.

  136. API: Используйте статическое свойство BeautifiedStackTrace.Current для вывода стек-трейса вместо Environment.StackTrace, если не требуется выводить в стеке автоматически сгенерированный код, связанный с асинхронностью, итераторами и др.

  137. API: В элемент управления, представляющий таблицу для отображения и редактирования коллекционной секции, добавлена возможность указания функции дополнительного форматирования отображаемого значения в ячейках таблицы (GridViewModel.CellFormatFunc). Функция применяется после выполнения стандартного форматирования отображаемого значения ячейки таблицы.

  138. API: В web-клиенте добавлено свойство style для стилизации строк tableRowViewModel и ячеек tableCellViewModel в элементе управления "Таблица", что позволяет в т.ч. устанавливать различный цвет фона в расширениях.

  139. API: В ICardTaskHistoryManager.ResolveGroupAsync добавлена поддержка работы с вложенными итерационными группами в истории заданий. Для этого необходимо указать идентификатор родительская группы, в этом случает будет выбрана родительская группа заданного типа с наибольшей итерацией.

  140. API: Добавлена перегрузка метода IFileContainer.AddVirtualAsync, позволяющая указать источник файлов IFileSource, отличный от источника по умолчанию, указанного в IFileContainer. Т.о. можно добавить файл в один объект карточки, а отобразить его в другом объекте, или отобразить в карточке файл, который связан с источником файлов, не привязанном к карточке.

  141. API: Добавлен метод расширений IFileControlExtension.Initialized, в пределах которого доступна модель карточки context.TryGetCardModel() со всеми инициализированными объектами UI. Расширение выполняется перед цепочкой расширений ICardUIExtension.Initialized, выполнение происходит для каждого элемента управления IFileControl. Не используйте метод context.TryGetCardModel() в других методах расширений, кроме IFileControlExtension.Initialized.

  142. API: В web-клиенте при загрузке файлов на предпросмотр теперь выполняются те же серверные расширения ICardGetFileContentExtension, что и при загрузке других файлов, а предпросмотр выполняется серверными расширениями, по аналогии с тем, как в desktop-клиенте выполняется конвертация файлов в PDF.

  143. API: Добавлен флаг CardFileFlags.CalculateHash в свойстве файла CardFile.Flags, которые можно установить при добавлении или изменении содержимого файла для того, чтобы хеш-сумма в свойстве Hash была рассчитана по содержимому файла на сервере. Вычисленную хеш-сумму можно проверить в таблице FileVersions в колонке Hash и в свойстве CardFile.Hash, но после фактического сохранения файла, это событие context.ContentStoreCompleted в расширении ICardStoreExtension на сервере.

  144. API: Добавлены методы FileHelper.Create, FileHelper.OpenRead, FileHelper.OpenWrite, которые аналогичны соответствующим методам статического класса File, но с параметрами по умолчанию разрешают асинхронные чтение/запись и оптимизируют последовательное чтение для метода OpenRead.

  145. API: Добавлены методы IViewModelContainer.TryGet/Get, которые упрощают синтаксис для типизированного доступа к контролам, блокам и формам в CardUIExtension и других расширениях UI, например: var button = context.Model.Controls.Get<ButtonViewModel>("ButtonAlias").

  146. API: Обновлены библиотеки: .NET Core 3.1.4, AvalonEdit 6.0.1, BarcodeLib 2.2.5, BitMiracle.LibTiff.NET 2.4.639, CsvHelper 15.0.5, DocumentFormat.OpenXml 2.11.0, HtmlAgilityPack 1.11.24, ITFoxtec.Identity.Saml2 4.0.5, Kerberos.NET 4.0.12, Linq2DB 2.9.8, Microsoft.Exchange.WebServices.NETStandard v2.0.0-beta1 (встроена в Tessa.Server.dll), Newtonsoft.Json 12.0.3, NLog 4.7.2, Npgsql 4.1.3.1, QRCoder 1.3.9, Swashbuckle.AspNetCore 5.4.1, UAParser 3.1.44, Unity 5.11.8.

9.3. Исправления и оптимизации

  1. Все desktop-приложения (TessaClient, TessaAdmin, TessaAppManager, SchemeEditor) теперь построены на платформе .NET Core 3.1 (вместо .NET Framework 4.7.2), это оптимизировало время их запуска и скорость работы.

  2. В маршрутах исправлена компиляция скриптов шаблона этапов, если в нём указана несуществующая группа этапов.

  3. В маршрутах исправлена ошибка доступности для редактирования флага "Вернуть при несогласовании", если запрещено редактирование этапов.

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

  5. В маршрутах исправлена ошибка отображения комментария к заданию этапа "Подписание", указанного в настройках этапа.

  6. В маршрутах в настройках этапа уведомления исправлена строка локализации для сценария изменения уведомления.

  7. В маршрутах в этапе "Диалог" исправлена ошибка создания карточки такого типа, для которого используются типы документов.

  8. В маршрутах в этапе "Диалог" исправлена ошибка предзаполнения карточки диалога при запуске в синхронном режиме.

  9. В маршрутах в этапе "Диалог" с временем жизни "Карточка" исправлена ошибка сохранения карточки диалога при завершении задания, если в ней не было изменений.

  10. В маршрутах добавлена проверка наличия типа карточки в настройках диалога при инициализации карточки диалога в скрипте инициализации.

  11. В маршрутах в этапе "Диалог" при закрытии карточки диалога добавлен запрос подтверждения закрытия карточки, если в ней есть несохранённые изменения.

  12. В маршрутах в этапе "Диалог", с временем жизни "Задание" и "Карточка", исправлена обработка сохранения и валидации карточки при закрытии по кнопке закрытия окна диалога.

  13. В маршрутах в этапе "Диалог", с временем жизни "Задание", исправлена ошибка открытия существующей карточки, если для типа карточки используются типы документов.

  14. В маршрутах добавлено прерывание выполнения обработки этапа при наличии ошибки в ValidationResult контекста после выполнения BeforeInitialization.

  15. В маршрутах в этапе "Диалог", с временем жизни "Запрос" или "Задание" работающем в асинхронном режиме, исправлена ошибка сохранения контента новой версии файла.

  16. В маршрутах в этапе "Диалог", с временем жизни "Запрос" или "Задание" работающем в асинхронном режиме, исправлена ошибка сохранения незагруженного контента файла.

  17. В маршрутах в этапе "Диалог" исправлена ошибка поглощения на клиенте возможных сообщений валидации и исключений.

  18. В маршрутах исправлена ошибка сохранения изменений свойств файлов, осуществлённых через API файлов.

  19. В маршрутах в этапе "Диалог" исправлена ошибка преждевременного освобождения ресурсов файлового контейнера основной карточки.

  20. В маршрутах в этапе "Диалог", с временем жизни "Карточка", исправлена ошибка сохранения нового имени файла после его переименования.

  21. В маршрутах исправлено поведение при отображении кнопки "Добавить роль "Вычисляемые исполнители"".

  22. В маршрутах исправлена ошибка при взятии в работу заданий этапов: "Согласование", "Подписание", "Регистрация" и "Настраиваемое задание", если задания были отправлены этапами, входящими во вторичный процесс, которые запущен этапом "Ветвление", расположенным во вторичном процессе. Ошибка появилась в сборке 3.4.0.

  23. В маршрутах в этапе "Диалог" исправлена ошибка доступности сочетаний клавиш у скрытых кнопок типов: кнопка тулбара, кнопка нижнего тулбара и нижняя диалоговая кнопка.

  24. В маршрутах в этапе "Диалог" исправлена ошибка закрытия рабочей области карточки.

  25. В маршрутах в этапе "Диалог" добавлена блокировка кнопок завершения этапа при выполнении операции, заблокировавшей изменение карточки.

  26. В маршрутах в этапе "Диалог" с временем жизни "Запрос", работающем в синхронном режиме, исправлена работа с файлами.

  27. В маршрутах в этапе "Диалог" изменена доступность кнопки "Пересчитать", расположенной на вкладке "Маршрут". Кнопка недоступна, если карточка открыта в диалоге с временем жизни "Запрос" или "Задание", а также для времени жизни "Карточка", если отображаемая в диалоге карточка создаётся.

  28. В маршрутах в этапе "Диалог" с временем жизни "Запрос" для маршрута, работающего в синхронном режиме, исправлена ошибка, связанная с невысвобождением зарезервированных номеров, которые были выделены при создании карточки, если в скрипте инициализации выполнялся доступ к карточке диалога через метод IKrScript.GetNewCardAsync().

  29. В маршрутах в этапе "Диалог" исправлено создание соответствующих элементов истории заданий.

  30. В маршрутах исправлена генерация файлов по шаблону внутри открытой транзакции на сохранение карточки.

  31. В маршрутах исправлена ошибка, при которой выполнялась отправка на доработку, если на текущем цикле согласования все подтверждённые этапы были согласованы, но существует хотя бы один не подтверждённый, не согласованный на предыдущем цикле согласования. Ошибка появилась в сборке 3.4.0.

  32. В маршрутах в этапе "Согласование" исправлена ошибка изменения состояния процесса при выставленном флаге "Не возвращать на доработку" и снятом "Изменять состояние при завершении". Ошибка появилась в сборке 3.4.0.

  33. В маршрутах в этапе "Согласование" исправлена ошибка изменения состояния процесса при выставленном флаге "Не возвращать на доработку", если предыдущий этап согласования был не согласован. Ошибка появилась в сборке 3.4.0.

  34. В маршрутах во вторичных процессах исправлена ошибка, при которой не отображалось сообщение при недоступности для выполнения при запуске вторичного процесса из TessaClient.

  35. В маршрутах исправлена ошибка пересчёта группы этапов от имени текущего пользователя, а не инициатора.

  36. В маршрутах исправлена ошибка изменения порядка пропущенных этапов, в карточке созданной путём копирования или создания по шаблону. Ошибка появилась в сборке 3.4.0.

  37. В маршрутах исправлена ошибка при закрытии карточки вторичного процесса, если перед этим она была неудачно сохранена.

  38. В маршрутах в этап "Регистрация" добавлена отправка уведомления о задании регистрации.

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

  40. В обсуждениях исправлена архивация обсуждений в случае, если участник является модератором, но не является супермодератором.

  41. В обсуждениях исправлено контекстное меню, если пользователь не является участником обсуждения, а видит обсуждение как супермодератор, он не видит элементы меню, доступные для участника.

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

  43. В обсуждениях исправлена ошибка при удалении участника, если он является сотрудником и был добавлен как роль.

  44. Исправлен скрипт миграции для сборки 3.4.0.

  45. Исправлено подключение из приложения Tessa Applications к серверу платформы 3.x, если на сервере есть ошибки или предупреждения в представлениях, т.е. в TessaAdmin присутствует представление в списке, рядом с которым отображается красный или жёлтый восклицательный знак.

  46. В конструкторе бизнес-процессов в скриптах условий для кнопок исправлена ошибка при использовании свойства Session.

  47. В конструкторе бизнес-процессов исправлена ошибка при обработке кнопок, которые воздействуют на запущенный процесс.

  48. В конструкторе бизнес-процессов исправлена ошибка открытия старых настроенных условий в таблице с условиями, если были добавлены новые типы условий со строковыми секциями.

  49. В конструкторе бизнес-процессов исправлена смена плановой даты завершения задания при получении действием "Задание" и "Группа заданий" сигнала изменения задания с указанием новой даты.

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

  51. В конструкторе бизнес-процессов исправлена ошибка, из-за которой кнопки, которые отправляют сигналы в процесс, не отображались в легком клиенте.

  52. В конструкторе бизнес-процессов исправлена ошибка при привязке хеша к полю строковой секции карточки приводившей к игнорированию значения null, сохранённого в хеше, если для этого поля в схеме указано значение по умолчанию отличное от null.

  53. В конструкторе бизнес-процессов в действии "Создать карточку" теперь в поле "Шаблон карточки" отображается имя шаблона карточки, а не дайджест карточки, на основе которой создан шаблон.

  54. В конструкторе бизнес-процессов исправлена редкая ошибка, возникающая при добавлении стрелки.

  55. В конструкторе бизнес-процессов в действии "Условие" теперь в поле "Переход" расположенном на форме редактирования условия отображается, в дополнении к имени связи, её заголовок. Аналогично заголовок связи теперь отображается в колонке таблицы "Настройки условий".

  56. В любых компилируемых скриптах исправлено использование класса Regex для применения регулярных выражений. Для этого по-прежнему требуется подключение пространства имён System.Text.RegularExpressions. В предыдущих сборках это требовалось только для веб-сервиса, развёрнутого на ОС Linux, со сборки 3.4.0 - также для сервиса на ОС Windows, причём решить проблему можно было, добавив в скрипт строку "#reference System.Text.RegularExpressions" (без кавычек).

  57. Исправлены ошибки при загрузке сертификатов для SAML-интеграции.

  58. В web-клиенте исправлен цвет фона контекстного меню для вкладок с рабочими местами и карточками.

  59. В web-клиенте исправлен цвет фона для элемента управления "Список файлов".

  60. В web-клиенте исправлена проверка лицензии для модуля форумов и обсуждений, если лицензия является Enterprise.

  61. В web-клиенте исправлены ошибки при отображении тегов файлов в элементе управления "Список файлов".

  62. В web-клиенте исправлена ошибка, из-за которой после закрытия диалога строки в элементе управления "Таблица" в карточке удалялись все события в объекте fileContainer, добавленные в расширениях.

  63. В web-клиенте исправлена ошибка, из-за которой не удавалось использовать базовые пути при использовании веб-сервиса Nginx или Apache. Добавлено дополнительное свойство PathBase в файл конфигурации.

  64. В web-клиенте исправлена ошибка в расширении карточки вторичного процесса, из-за которой не удавалось открыть карточку.

  65. В web-клиенте исправлена ошибка подсветки текста при поиске в элементах управления "Таблица" и на вкладке "История заданий".

  66. В web-клиенте исправлена ошибка валидации настройки этапа "Диалог".

  67. В web-клиенте в представлениях на панели пейджинга добавлены всплывающие подсказки на кнопках, аналогично desktop-клиенту.

  68. В web-клиенте добавлена всплывающая подсказка на кнопке "Создать карточку", аналогично desktop-клиенту.

  69. В web-клиенте при открытии истории заданий в отдельной вкладке по ссылке из карточки - представление теперь открывается на всю доступную область, без отображаемого дерева.

  70. В web-клиенте для этапа "Создание карточки", добавляемого в шаблон этапов, теперь скрывается вид задания, который отображался по ошибке.

  71. В web-клиенте в поле быстрого поиска представлений используется стандартное контекстное меню браузера, включая функции Копировать/Вырезать/Вставить.

  72. В web-клиенте оптимизирован размер передаваемого токена сессии. Это также исправило проблему с превышением ограничений на размер cookies при слишком длинной строке в кратком имени сотрудника.

  73. В web-клиенте исправлено отображение всплывающей подсказки для элементов управления "Флажок".

  74. В web-клиенте исправлено отображение вкладок рабочих мест при открытии, если в настройках пользователя некоторые вкладки указаны дважды.

  75. В web-клиенте исправлено редактирование этапа "Диалог" в шаблоне этапа или вторичном процессе, если указан шаблон карточки, а не тип карточки или документа.

  76. В web-клиенте исправлен предпросмотр виртуальных файлов из справочника "Виртуальные файлы", которые при предпросмотре должны конвертироваться в Pdf.

  77. В web-клиенте исправлено отображение длинных названий вкладок с пробелами в названии, таких как "История заданий", если отображается прокрутка вкладок.

  78. В web-клиенте для обсуждений исправлено отображение описания в окне топика.

  79. В web-клиенте исправлена ошибка, из-за которой колонки в представлениях неправильно позиционировались при перетаскивании после скрытия одной или нескольких колонок.

  80. В web-клиенте decimal тип сериализуется как строка. Была исправлена ошибка, из-за которой, при сохранении карточки, нельзя было провалидировать KrToken. Это было связано с сериализацией/десериализацей decimal полей в структуре картчоки - из-за особенностей работы js, на клиенте при десериализации decimal поля могли обрезаться.

  81. Для обсуждений в TessaClient исправлен фон вкладки и локализация некоторых сообщений.

  82. Исправлены методы ICardGetStrategy при получении пустого перечисления идентификаторов IEnumerable<Guid> вместо null.

  83. Файл .hgignore в папке сборки Source для создания репозитория теперь не игнорирует папку Bin\packages, при отсутствии которой происходит ошибка в сборке.

  84. Исправлен сброс кэша локализации при наличии нескольких рабочих процессов для тех из процессов, где кэш ранее не сбрасывался.

  85. Исправлена проблема, когда в элементе управления "Ссылка" с указанным форматом поля при выборе значения из представления в карточке сохранялось локализованное значение, а не сама строка локализации.

  86. Исправлена ошибка в представлениях, возникающая при использовании выражений "ParamName.Value", "ParamName.Value1" и "ParamName.Value2" для параметра с типом Int16.

  87. Исправлена ошибка в ICardUIExtension, приводившая к тому, что метод расширения мог быть запущен не из потока UI, например, если одно из расширений в цепочке вызывало асинхронный метод с ConfigureAwait(false).

  88. Исправлено изменение настроек в диалоге "Мои настройки" в TessaClient, которое могло привести к сбросу ряда настроек к поведению по умолчанию до перезапуска приложения.

  89. Оптимизировано распознавание штрих-кода в модуле потокового ввода документов.

  90. Исправлена редкая ошибка обработки больших файлов в модуле потокового ввода документов.

  91. В представлении "Вторичные процессы" исправлены параметры фильтрации по типу и по состоянию.

  92. В скрипте обновления сборки на Linux upgrade.sh исправлено обновление со сборок, которые в номере версии имеют две цифры между точками, например: 2.7.10.

  93. Исправлен плагин отправки уведомлений на почту о непрочитанных сообщениях по форумам.

  94. При вызове методов IBusinessCalendarService в клиентских расширениях desktop-клиента при возникновении ошибок на сервере, они теперь передаются на клиент в форме ValidationException. Исключением является метод ValidateCalendarAsync, который возвращает ошибки в объекте ValidationResult.

  95. Исправлено асинхронное выполнение в цепочке расширений ICardUIExtension.Finalizing и в событиях IWorkspaceModel.Closing (в т.ч. для ICardEditorModel.Closing).

  96. Исправлен вызов ICardEditorModel.CloseAsync с указанием параметра force=false. Пользователю выводился диалог-подтверждение для сохранения, но сохранение не выполнялось, даже если пользователь нажал "Да" в диалоге.

  97. Изменено получение руководителя подразделения: теперь он определяется по атрибуту manager у сотрудников подразделения, вместо атрибута managedBy у подразделения.

  98. Исправлен расчет плейсхолдеров fv в дайджесте карточек, если использовалось форматирование with param.

  99. При обращении к веб-сервису по адресу, который не привязывается к контроллеру, теперь возвращается код ошибки 404 "Not Found" вместо 200 "OK".

  100. Оптимизирован расчет дайджеста, в случае если он уже был расчитан другим расширением.

  101. Исправлена редкая ошибка при кэшировании запроса на создание карточки, выполняемого в рамках платформенной обработки метода ICardRepository.NewAsync. Проблема могла проявляться в виде ошибки "An item with the same key has already been added. Key: SectionRows" в представлении рабочего места руководителя, или при других параллельных запросах на создание карточки, файла или задания, выполняемых впервые или сразу после сброса кэша в рабочем процессе веб-сервиса.

  102. Исправлены ошибки при одновременной аутентификации в LDAP, которые появились в сборке 3.4.0.

  103. Исправлена ошибка при синхронизации исключительно статических ролей в модуле синхронизации с AD / LDAP.

  104. Исправлена возможная ошибка с отсутствующей кодовой страницей 1251 при выгрузке представлений в CSV, а также с кодировками почты, если веб-сервис или Chronos установлены на Windows. Проблема была в вызове метода Initialize() в TessaPlatform.Dependencies. Ошибка появилась в сборке 3.4.0.

  105. В TessaClient и TessaAdmin исправлен выбор значения сабсета NULL, если сабсет возвращает значения логического типа Boolean Null и при этом присутствует отображаемый параметр фильтрации, связанный с сабсетом.

  106. В TessaAdmin исправлена ошибка, когда в редакторе типов карточек изменяемый тип карточки не помечался как изменённый при редактировании некоторых элементов управления.

  107. При наличии объектов-дублей в схеме данных (например, несколько колонок с одинаковыми именами в пределах таблицы) теперь выводится подробное сообщение об ошибке с указанием того, какой именно объект имеет дубли. Такая ошибка возникает при открытии выгруженной в репозиторий схемы данных, которая была повреждена (например, в результате некорректного объединения изменений с разных веток).

  108. Исправлено изменение схемы данных за одно сохранение, в процессе которого меняются именами две колонки в таблице.

  109. Исправлена ошибка, когда после неудачного сохранения карточки флаг ClosePending ICardEditorModel не сбрасывался на false.

  110. Исправлен скрипт условия в карточке типа условия "По маршруту".

  111. В приложении Tessa Applications исправлено потребление памяти при частом обновлении списка приложений вручную.

  112. В приложении Tessa Applications оптимизировано скачивание приложений, когда часть файлов уже скачена в других папках или поставлялась вместе с msi-инсталлятором.

  113. Исправлены ошибки доступа к вкладкам "Мои настройки" и "Мои замещения" карточки сотрудника для пользователей, не являющихся администраторами системы, когда тип карточки сотрудника добавляется в типовое решение.

  114. Исправлена некорректная работа расширенных настроек правил доступа, когда кнопки "Добавить" и "Удалить" элемента управления "Таблица" при определенных настройках доступа были доступны, когда фактически доступа к ним не было, и были недоступны, когда доступ фактически должен был быть.

  115. При штатной отмене посредством cancellationToken выполнения SQL-запроса и для ряда других операций текст запроса с исключением OperationCanceledException теперь заносится в лог на уровне логирования Trace. Ранее сообщение вида "A task was canceled" могло быть залогировано в веб-сервисе как предупреждение или ошибка, хотя в действительности, его логирование не требуется.

  116. Если на сервер выполняется обращение по просроченной сессии, то сообщение теперь выводится на уровне логирования Info, и полный текст исключения выводится на уровне логирования Debug. Это предотвращает большое количество текста в файле лога на уровне логирования Error при штатных ситуациях, например, когда через web-клиент выполняется обращение по сессии, открытой более недели назад.

  117. Исправлена ситуация, когда при штатной отмене посредством cancellationToken операции с карточкой могли оставаться незакрытые блокировки на чтение или запись этой карточки. Например, небольшой шанс такой проблемы имелся, если закрыть окно браузера сразу после того, как началось выполнение открытия или сохранения карточки.

  118. Исправлена ситуация, когда при штатной отмене посредством cancellationToken метода operationRepository.ExecuteInLockAsync (и его производных - например, ExecuteInRolesLockAsync) операция с блокировкой могла быть не удалена. Например, при длительном ожидании завершения плагина Chronos платформой может быть инициирована отмена плагина через cancellationToken, которая в свою очередь имеет шанс на то, что блокировка на пересчёт ролей или на отправку почтовых уведомлений по обсуждениям не будет снята, и при следующем запуске Chronos соответствующие плагины выведут ошибку таймаута на ожидание блокировки.

  119. Исправлено освобождение ресурсов, зарегистрированных в объекте IUnityDisposableContainer в случае, если некоторые из регистраций в методах Dispose или DisposeAsync выбрасывают исключение (хотя это противоречит паттерну Dispose). Теперь такое исключение логируется, но не прерывает выполнение очистки для других ресурсов.

  120. Исправлены логируемые на сервере ошибки NullReferenceException at Tessa.Views.Parser.SyntaxTree.Parameters.ValueSyntaxNode.ConvertValue, если в поисковом запросе был параметр представления, который затем был удалён. Ошибки не влияли на выполнение поискового запроса, но зря добавлялись в лог веб-сервиса.

  121. Исправлено возникновение исключения ObjectDisposedOperation при выполнении операции, такой, как сохранение карточки, для объекта ICardEditorModel в коде расширений, если этот объект (вкладка с карточкой или диалог) уже был закрыт вызовом метода CloseAsync.

  122. Исправлено возможное дублирование узлов с представлениями и поисковыми запросами при выборе в ссылочных элементах управления в режиме отбора в desktop-клиенте.

  123. Исправлена ситуация, когда утилита tadmin PackageApp использовалась для публикации приложения, не являющегося сборкой .NET. Теперь такая публикация выполняется успешно.

  124. При расчёте метаролей и динамических ролей теперь удаляются дубликаты записей пользователя по UserID, которые мог возвращать неправильно составленный SQL-запрос, что приводило к невозможности вставки строки из-за внешнего ключа.

  125. Исправлено скрытие удаленных объектов в плагине синхронизации с AD / LDAP.

  126. Исправлена редкая ошибка при поиске объектов, принадлежащих referral серверам, в модуле синхронизации с AD / LDAP.

  127. Исправлено получение краткого имени пользователя в плагине синхронизации с AD / LDAP.

  128. При синхронизации с Active Directory исправлена ошибка получения PrimaryGroupID для объектов, не являющихся группами.

  129. Оптимизирована синхронизация с AD / LDAP в случае, если для синхронизируемого объекта (пользователя, подразделения или группы) отсутствуют изменения в домене в синхронизируемых полях. Ранее синхронизация выполнялась при изменении любых полей в домене.

  130. В представлении "Состояния документа" исправлено отображение колонки "Библиотека схемы", где вместо библиотеки "Standard solution" могла отображаться библиотека "Default".

  131. Исправлен расчёт замещений при добавлении/удалении сотрудников в статические роли и подразделения через списки ролей в карточке сотрудника.

  132. Исправлена локализация вида заданий при визуализации в типовом процессе отправки задач (плитка "Поставить задачу" или этап маршрута "Задача").

  133. Исправлена опечатка в уведомлении "Рассылка о заданиях" со ссылкой на просроченную задачу.

  134. Исправлена редкая проблема с выделением одинаковых номеров разными пользователями из одной и той же последовательности. Проблема появилась в сборках 2.7.9 и 3.2.0.

  135. Исправлено получение прав доступа на чтение карточки для пользователя, которому было отправлено ознакомление. Исправление реализовано через новое правило доступа "Default acquaintance access rule" и контекстную роль "Ознакомление" ("Acquaintance"). Ошибка появилась в сборке 3.4.0.

  136. В приложении TessaClient исправлен метод печати диаграммы, который в некоторых случаях печатал чистый лист без диаграммы.

  137. Исправлено возможное появление двух боковых панелей, где вторая панель не закрывалась, если в процессе выполнения асинхронных расширений пользователь с помощью мыши выполнил жест на открытие панели второй раз. Проблема появилась в сборке 3.4.0.

  138. Исправлена ошибка генерации шаблонов файлов Word, когда конец закладки для обозначения таблицы и конец закладки для обозначения группы внутри таблицы были в одном и том же месте документа.

  139. Исправлена ошибка вставки изображений в колонтитулы при генерации Word-документа по шаблону.

  140. В карточке настроек "Типовое решение" удалена вкладка "Уведомления", в котором уведомление о возврате заданий из отложенного состояния более не используется, теперь для этого имеются соответствующие тип уведомления и карточка уведомления.

  141. В desktop-клиентах TessaClient/TessaAdmin исправлено возможное размытие при отображении обводящей рамки для элементов управления "Текст", "Метка", "Строка" (в режиме "Avalon").

  142. Исправлено дублирование строк результата в представлении "Правила доступа", когда добавляются несколько значений для параметра "Тип карточки", "Состояние" или "Роль".

  143. Исправлены редкие ошибки при запуске приложения, связанные с невозможностью загрузить ресурс с расширением .xaml.

  144. Исправлено выполнение асинхронного кода в обработчике события GridViewModel.RowValidating для элемента управления "Таблица" в карточках.

  145. Исправлена публикация приложений в тихом режиме с параметром /q.

  146. Исправлена обработка имени набора параметров "По умолчанию" для представления, добавленного в рабочее место. Ошибка приводила к невозможности удаления поискового запроса из-за ошибки "Parameters SetName is empty".

  147. Исправлена ошибка при обработке NTLM токена при аутентификации Kerberos.

  148. Исправлена ошибка, из-за которой расширенные настройки прав доступа не скрывали элементы управления заданий в некоторых ситуациях.

  149. Исправлена ошибка проверки токена прав доступа при создании карточки, из-за которой действие создания карточки в конструкторе процессов и этап создания карточки в маршрутах не работали, если у сотрудника отсутствовал доступ на создание карточки указанного типа.

  150. Исправлена проверка доступа к файлу по категории в расширенных настройках правил доступа.

  151. Исправлена ошибка NRE в расширении KrVirtualFileGetContentExtension при загрузке виртуального файла с неизвестным идентификатором.

  152. Исправлены возможные проблемы при сбросе кэша метаинформации представлений для СУБД PostgreSQL, когда параллельно изменению метаинформации происходят запросы на выполнение представлений к другим рабочим процессам веб-сервиса или нодам кластера. При этом могла быть повторно создана хранимая процедура для выполнения представления по старой метаинформации.

  153. В схеме данных, которая поставляется со сборкой в папке Configuration\Scheme, удалены неиспользуемые файлы миграций и хранимых процедур. Файлы присутствовали в папке, но не использовались редактором схемы данных.

  154. Исправлен метод ValidationResultBuilder.Add(IValidationResultItem), который мог приводить к неправильному вычислению значения для метода IsSuccessful().

  155. Исправлена ошибка поиска сотрудника по логину для СУБД PostgreSQL в модуле синхронизации с AD / LDAP.

  156. Исправлена ошибка поиска штрих-кода для СУБД PostgreSQL в модуле потокового ввода документов.

  157. При запуске Chronos на ОС Linux теперь выполняется очистка файлов, используемых для синхронизации между процессами, которые могли остаться после предыдущего запуска Chronos, если его процесс был принудительно завершён. Такие файлы по умолчанию расположены в подпапке ~/.config/tessa/sync для учётной записи, от имени которой запущен сервис Chronos.

  158. Исправлена ошибка "Can’t acquire or create Linux event, error code is -28" в Chronos на ОС Linux. Ошибка появлялась в случае крайне продолжительной работы Chronos без перезапуска сервера.

  159. Исправлена команда tadmin MigrateFiles, которая не запускалась в сборке 3.4.0.

  160. Исправлена ошибка, из-за которой не взятое в работу задание, завершаемое с удалением или откладываемое, бралось в работу текущим пользователем, если при этом происходила ошибка.

  161. Исправлен предпросмотр типа карточки "Сотрудник" с расширениями. Ошибка появилась в сборке 3.4.0.

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

  163. При исправлении типа карточки, если был обнаружен неизвестный объект (элемент управления, валидатор и др.), то его имя теперь выводится в сообщении об ошибке с учётом локализации.

  164. Оптимизирован расчёт замещений.

  165. При генерации файла по шаблону в случае, если указано неизвестное расширение файла, для которого не зарегистрирован обработчик, - теперь выводится сообщение об ошибке вместо файла нулевого размера.

  166. Исправлены возможные ошибки "Could not load file or assembly" для библиотек System.**.dll, возникающие при использовании API системы, таких как методы интерфейса IEDSManager.

  167. При создании карточки сотрудника запрещено редактирование информации на вкладке "Мои замещения", поскольку указание замещений до первого сохранения карточки не поддерживается.

  168. Исправлена ошибка с текстом "Column count mismatch" при отладке представления с выводом текста запроса для СУБД PostgreSQL, когда основной СУБД является MSSQL.

  169. При создании новой процедуры в схеме данных её название по умолчанию теперь указано как "Procedure" (ранее было название "Function").

  170. В представлении "Задания от меня" удалён оператор "не равен" для параметра "Исполнитель", поскольку он не работал.

  171. При сборке проектов расширений исправлено копирование в папку Bin\extensions файлов Tessa.Extensions.Server.dll и Tessa.Extensions.Shared.dll (и их отладочных символов pdb).

  172. Параметры DateTime, передаваемые в IBusinessCalendarService, теперь всегда используют указанное время без перевода его в UTC. Временная зона, для которой указано это время, задаётся отдельным параметром. Исправление актуально для сборки 3.4.0, в которой появилась поддержка нескольких временных зон, и указание DateTimeKind.Local или Unspecified могло исказить время без учёта временной зоны.

  173. Исправлена обработка ошибок в TessaAdmin, возникших в процессе импорта или экспорта представлений и рабочих мест.

  174. В представлении "Правило доступа" поиск в параметре "Разрешение" сделан регистронезависимым, ранее он был регистрозависимым. Проблема появилась в сборке 3.4.0.

  175. Исправлена ошибка, из-за которой при формировании письма мобильного согласования прикладывался лист согласования в ситуациях, когда лист согласования отсутствовал в карточке.

  176. При открытии новой вкладки в TessaClient строка с вкладками теперь всегда прокручивается до новой вкладки. При выборе вкладки, которая частично уместилась на экране, также выполняется прокрутка.

  177. Оптимизирован расчёт генерации метаролей при большом количестве ролей, например, генерация сотен агрегатных ролей по подразделениям в орг. структуре.

  178. Исправлена ошибка проверки доступа на создание карточки, когда в правиле доступа на создание использовались контекстные роли и расширенные настройки прав доступа одновременно.

  179. Исправлен сброс кэша для карточки настроек, в которой были изменения, не связанные с увеличением версии карточки. Обычно это добавление файлов.

  180. Исправлена ошибка "The semaphore has been disposed", которая могла записываться в логе в процессе остановки сервиса Chronos или в других ситуациях.

  181. В схеме данных исправлена ошибка, из-за которой при изменении порядка колонок в индексе сам индекс не перестраивался.

  182. Исправлено получение результата операции по конвертации файлов IFileConverter, если она была вызвана с флагом FileConverterRequestFlags.DoNotCacheResult, но без флага WithoutResponse.

  183. Исправлена конвертация файлов средствами IFileConverter, если расширение файла набрано не в нижнем регистре (в т.ч. для предпросмотра в web-клиенте).

  184. Валидатор уникальности с признаком удаления строк-дубликатов теперь также удаляет данные в дочерних коллекционных секциях для удаляемых строк.

  185. Исправлена загрузка сборок на сервере и на клиенте по путям ProbingPath и по путям, в которых загружены расширения с модулями (из отдельных подпапок).

  186. Улучшено логирование ошибок веб-сервиса, связанных с запуском приложения и с ошибками запросов ASP.NET Core в части, не связанной с ошибками в Tessa. Например, это вывод ошибки конфигурации Swagger.

  187. Исправлены проблемы с ожиданием сброса глобального кэша, если cancellationToken, переданный в момент подписки на событие, был отменён после того, как ожидание было запущено (например, метод SubscribeAsync вернул управление). Описанная ситуация могла приводить к тому, что кэш не функционировал и одновременно с этим аномально повышалась загруженность процессора.

  188. Исправлена обработка ошибок, возникающих при установке прогресса операции по сохранению карточки с файлами.

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

  190. Исправлены ошибки при указании одной и той же сборки с расширениями в extensions.xml или одной и той же сборки с плагинами Chronos в plugins.xml. Теперь такие сборки игнорируются.

  191. Исправлен автоматический поиск сервера Exchange для отправки и получения почты, если в app.json веб-сервиса в поле "NoticeMailer.ExchangeServer" или "MobileApproval.ExchangeServer" указана пустая строка.

  192. Исправлены настройки автоматической Windows-аутентификации на сервер Exchange для получения почты, если в поле "MobileApproval.ExchangeUser" указана пустая строка. Ранее в этом случае использовались настройки Exchange для отправки почты.

  193. Оптимизированы уведомления по задачам в TessaClient, где с клиента не передавались параметры пейджинга, что при большом количестве новых заданий приводило к загрузке лишних данных на клиент.

  194. Для валидатора уникальности исправлена серверная проверка для строк коллекционной секции, если в настройках валидатора указана родительская секция. Клиентская проверка ранее выполнялась корректно в TessaClient, поэтому ошибке был подвержен web-клиент и кастомные клиенты, где уникальность не проверялась в этом случае.

  195. В клиентских расширениях TessaClient исправлены возможные ошибки при обращении к свойствам карточки IInitializationContainer.PersonalRoleSatellite параллельно из нескольких потоков.

  196. Исправлена установка замещений для статических ролей, подразделений, контекстных ролей и динамических ролей после импорта карточки и после восстановления удалённой карточки. Такие замещения задаются в диалоге "Мои замещения" при выборе "Все роли и подразделения", "Все статические роли" и "Все подразделения" в списке ролей для замещений.

  197. Исправлена ошибка при сохранении карточки, если для нее был добавлен валидатор уникальности, настроенный на виртуальную секцию.

  198. В карточках "Приложение" расчёт хеш-сумм файлов теперь выполняется на сервере при сохранении карточки. Это оптимизировало добавление файлов вручную в TessaClient, а также исправило такое добавление в web-клиенте, где хеш-суммы не рассчитывались.

  199. Исправлена ситуация, при которой для файлов, помеченных как большие или имеющих нелокальное содержимое RemoteFileContent, мог отображаться пункт контекстного меню "Открыть для чтения в папке".

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

  201. В контроле файлов исправлено поведение настройки группировки "Группы свёрнуты", если не указывался алиас группировки внутри параметра "Группировка".

  202. При создании карточки "Категория документа" больше не выбран по умолчанию тип карточки "Протокол".

  203. В уведомлении "Задание отправлено" исправлена ошибка, приводившая к дублированию сообщения.

  204. В Tessa Applications исправлена обработка загрузки приложения, которое было только что удалено с сервера, при этом список приложений в Tessa Applications не был обновлён.

  205. Исправлен автоматический выбор категории файлов, который мог ошибочно выбирать категорию, если доступен ввод категории вручную, или могла быть выбрана категория "Без категории", если файлы без категории запрещены.

  206. В контроле "Таблица" в карточках исправлено удаление строк по горячей клавише Delete. Ошибка появилась в сборке 3.3.0.

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

  208. Исправлено значение IViewContext.SelectedCellValue для представлений со включённым выбором по ячейкам, если ячейка была автоматически выбрана в момент загрузки представления (это первая ячейка первой строки).

  209. Исправлена работа типа условия "По состоянию" в бизнес-процессах Workflow Engine, если состояние было изменено в том же запросе, что и проверка условия.

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

  211. В Tessa Applications исправлено подключение к серверам при обновлении списка приложений, если с последнего обновления изменились параметры подключения VPN и другие глобальные сетевые настройки.

  212. При выгрузке в файлы для библиотек локализации, библиотек карточек и объектов схемы исправлены возможные появления символа &#xD; - это CR в переводе строки CR LF.

  213. При выгрузке в файлы для библиотек локализации пустой комментарий и комментарий, состоящий из пробелов, всегда выгружается без пустого тега <Comment>.

  214. Исправлена команда tadmin ExportLocalization, которая не выгружала комментарии для строк локализации.

  215. Для контрола "Ссылка" скрыта кнопка множественного выбора в диалоге выбора из представлений в desktop-клиенте. Кнопка отображается только для контрола "Список".

  216. Исправлен экспорт типов карточек, файлов и заданий в файлы .jtype таким образом, чтобы обеспечить стабильный порядок в коллекциях и чтобы файл с типом карточки не изменялся при экспорте различными способами (TessaAdmin, tadmin).

  217. В web-клиенте исправлена ошибка, из-за которой при переходе в топик из представлений "Мои обсуждения" и "Последние обсуждения" не открывалась вкладка "Обсуждения".

  218. Исправлена проблема, из-за которой сотрудник не добавлялся в статическую роль или подразделение через карточку сотрудника, если он уже входил в данную роль как заместитель.

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

  220. Исправлена ошибка проверки правил доступа на сохранение карточки, когда в строках секции с ссылками на родительскую секцию не были заданы значения ссылок на родителя.

  221. Исправлен некорректный вывод ошибки проверки прав доступа при загрузке карточки, когда система не могла инициировать проверку прав доступа.

  222. Исправлена ситуация, когда сплэш-окно о текущей выполняемой операции не скрывалось, если отображено сообщение об ошибке.

  223. В web-клиенте исправлена ошибка текстового поля в расширенном режиме, приводившая к некорректной подсветке синтаксиса кода.

  224. При открытии экспортированной в файл карточки "Ошибка" исправлена возможная ошибка "ArgumentNullException Value cannot be null. (Parameter 'json')" при нажатии кнопки "Показать в окне".

  225. В web-клиенте исправлен баг текстового поля в расширенном режиме, приводивший к сбросу пользовательского выделения в точку начала выделения.

  226. Исправлена ситуация, когда при запуске клиентского приложения (TessaClient, TessaAdmin, TessaAppManager) могли удаляться пустые подпапки в папке с временными файлами %temp%\tessa\files, которые могли быть созданы параллельно работающим приложением, но файлы туда ещё не были записаны.

  227. Исправлена ошибка расчёта заместителей динамических ролей и метаролей.

  228. В маршрутах в этапах "Согласование" и "Подписание" исправлена ошибка при запросе комментария, если в настройках типа задания KrApprove/KrSigning установлен флаг "Автоматически брать в работу".

  229. В конструкторе бизнес-процессов в действиях "Согласование" и "Подписание" исправлена ошибка при запросе комментария, если в настройках типа задания KrApprove/KrSigning установлен флаг "Автоматически брать в работу".

10. Версия 3.4 (13.11.2019)

10.1. Переход на новую сборку

  1. Изменены рабочие места: Administrator, User (переименовано представление по типам условий, добавлены узлы "Мои обсуждения" и "Последние обсуждения").

  2. Изменены представления: KrPermissionsExtensionView (удалено), ConditionTypes (переименовано из NotificationConditionTypes), ConditionUsePlaces (добавлено), FileTemplates, FunctionRoleCards (добавлено), KrDialogButtonTypes (добавлено), KrDialogCardAutoOpenModes (добавлено), KrDialogCardStoreModes (добавлено), KrPermissionFlags, KrPermissionRoles (добавлено), KrPermissionRuleAccessSettings (добавлено), KrPermissions, KrPermissionsControlTypes (добавлено), KrPermissionsExtendedCards (добавлено), KrPermissionsExtendedMandatory (добавлено), KrPermissionsExtendedTasks (добавлено), KrPermissionsExtendedVisibility (добавлено), KrPermissionsFileAccessSettings (добавлено), KrPermissionsMandatoryValidationTypes (добавлено), KrPermissionStates (добавлено), KrPermissionTypes (добавлено), KrStageTemplates, KrTypesForDialogs (добавлено), KrVirtualFiles (добавлено), LastTopics (добавлено), LinkedDocuments, MyTopics (добавлено), TaskKinds, TopicParticipants (добавлено).

  3. Изменены таблицы: AutoApproveHistory, ConditionsVirtual (переименована из PersonalRoleNotificationConditionsVirtual), ConditionTypes (переименована из NotificationConditionTypes), ConditionTypesBuildOutput (переименована из NotificationConditionTypesBuildOutput), ConditionTypeUsePlaces (добавлена), ConditionUsePlaces (добавлена), FileTemplates, FmAddTopicInfoVirtual (добавлена), FmAttachmentTypes (добавлена), FmAttachments (добавлена), FmForumSatellite (добавлена), FmMessages (добавлена), FmMessagesPluginTable (добавлена), FmMessagesTypes (добавлена), FmNotifications (добавлена), FmParticipantTypes (добавлена), FmTopicParticipantRoles (добавлена), FmTopicParticipantRolesUnsubscribed (добавлена), FmTopicParticipants (добавлена), FmTopicParticipantsInfoVirtual (добавлена), FmTopicParticipantsVirtual (добавлена), FmTopicRoleParticipantsInfoVirtual (добавлена), FmTopicTypes (добавлена), FmTopics (добавлена), FmUserSettingsVirtual (добавлена), FmUserStat (добавлена), FunctionRoles (добавлена), FunctionRolesVirtual (добавлена), KrAdditionalApprovalInfo, KrApprovalHistory, KrApprovalHistoryVirtual, KrApprovalSettingsVirtual, KrDialogButtonSettingsVirtual (добавлена), KrDialogButtonTypes (добавлена), KrDialogCardAutoOpenModes (добавлена), KrDialogCardStoreModes (добавлена), KrDialogSatellite (добавлена), KrDialogStageTypeSettingsVirtual (добавлена), KrDocType, KrPermissionExtendedCardRuleFields (добавлена), KrPermissionExtendedCardRules (добавлена), KrPermissionExtendedFileRuleCategories (добавлена), KrPermissionExtendedFileRules (добавлена), KrPermissionExtendedMandatoryRuleFields (добавлена), KrPermissionExtendedMandatoryRuleOptions (добавлена), KrPermissionExtendedMandatoryRules (добавлена), KrPermissionExtendedMandatoryRuleTypes (добавлена), KrPermissionExtendedTaskRuleFields (добавлена), KrPermissionExtendedTaskRules (добавлена), KrPermissionExtendedTaskRuleTypes (добавлена), KrPermissionExtendedVisibilityRules (добавлена), KrPermissionFlags (удалена), KrPermissionRoles, KrPermissionRuleAccessSettings (добавлена), KrPermissions, KrPermissionsControlTypes (добавлена), KrPermissionsFileAccessSettings (добавлена), KrPermissionsMandatoryValidationTypes (добавлена), KrPermissionsSystem (добавлена), KrProcessStageTypes, KrSecondaryProcesses, KrSettings, KrSettingsCardTypes, KrStages, KrStagesVirtual, KrRouteSettings (добавлена), KrRouteModes (добавлена), KrTaskKindSettingsVirtual (добавлена), KrTaskTypeCondition (добавлена), KrTaskTypeConditionSettings (добавлена), KrTypedTaskStageTypeSettings, KrVirtualFileCardTypes (добавлена), KrVirtualFileRoles (добавлена), KrVirtualFiles (добавлена), KrVirtualFileStates (добавлена), KrVirtualFileVersions (добавлена), LocalizationEntries, LocalizationStrings, OperationTypes, PersonalRoleSatellite, PlaceholderCompilationCache (добавлена), RoleDeputies, ServerInstances, UserSettingsFunctionRolesVirtual (добавлена), UserSettingsVirtual, WeConditionAction.

  4. Изменены миграции: KrPermissions (добавлена).

  5. Изменены процедуры: KrPermissionsObtainReadersLock (добавлена), KrPermissionsObtainWritersLock (добавлена).

  6. Изменены функции: CalendarAddWorkQuants, CalendarGetLastQuantStart.

  7. Изменены типы карточек: AuthorCondition, ConditionsBase (добавлен), ConditionType (переименован из NotificationConditionType), Currency, DepartmentCondition, DocStateCondition, DocTypeCondition, DocumentCategory, EmptyCondition (добавлен), FileCategory, FileTemplate, ForumSatellite (добавлен), FunctionRole (добавлен), InitiatorCondition, KrApprovalStageTypeSettings, KrApprove, KrCard, KrDeregistrationAction (добавлен), KrDialogStageTypeSettings (добавлен), KrDocType, KrEdit, KrEditInterject, KrExampleDialogSatellite (добавлен), KrPermissions, KrRegistration, KrRegistrationAction (добавлен), KrSatellite, KrSecondaryProcess, KrSettings, KrShowDialog (добавлен), KrSigning, KrTemplateCard, KrUniversalTaskStageTypeSettings, KrUnversalTask, KrVirtualFile (добавлен), Notification, NotificationType, NotificationUserSettings, PartnerCondition, PersonalizationUserSettings (добавлен), PersonalRoleSatellite, ReportPermissions, ServerInstance, TaskHistoryGroupType, TaskKind, TaskTypeCondition (добавлен), TopicTabs (добавлен), WorkflowConditionAction, RouteCondition (добавлен), KrSecondarySatellite.

  8. Изменены карточки: AdvisoryTaskKind (добавлен), ApprovalHistoryCondition, Assigned to me, AuthorCondition, DepartmentCondition, DocStateCondition, DocTypeCondition, File templates\ApprovalHistory, File templates\PrintableApprovalHistory, ForumNewMessagesNotification (добавлена), ForumNewMessagesNotificationType(добавлена), FullRecalcRouteButton (удалена), InitiatorCondition (добавлена), KrDocType, KrPermissions, KrSettings, PartnerCondition (добавлена), PersonalRoleSatellite, TasksNotification (добавлена), VirtualFiles\ApprovalHistory (добавлена), ReturnForAmendingTemplate (добавлена), RouteCondition (добавлена).

  9. Изменены карточки (необязательные изменения): Addendum, ApprovalGroup, Assigned to me (Excel), CancelButton, Contract, Default access rules, DeregisterButton, Directive, Document, EditTemplate, Incoming, NewIterationTemplate, Official note, Order, Outgoing, ProtocolBranchPure, RebuildButton, RegisterButton, RejectButton, SendProtocolTasksButton, Server settings (settings), Standard solution (settings), StartProcessButton, Protocol of the meeting, Protocol of the meeting (Excel).

  10. Изменены библиотеки локализации.

  11. Обновите файл app.json для веб-сервиса web в соответствии с тем, что поставляется со сборкой.

  12. Изменены файлы тем интерфейса в подпапке themes для приложения TessaClient. Начиная с этой сборки, файлы тем также используются в веб-сервисе (папка wwwroot\themes).

  13. У следующих приложений настройки из конфигурационного файла .config (например, TessaClient.exe.config) были перенесены в файл app.json: Publisher, SchemeEditor, TessaAdmin, TessaAppManager, TessaClient, TokenEditor, утилита tadmin. Убедитесь, что конфигурационные файлы обновлены из соответствующей папки в сборки и их содержимое актуально для вашей инсталляции. В ряде случаев файлы .config были удалены, т.к. все настройки перемещены в app.json.

  14. Настройки подключения к прокси-серверу для приложения TessaClient теперь указываются в файле app.json, значения ProxyUri и ProxyClass. В предыдущих версиях эти настройки задавались в DefaultProxy и system.net/defaultproxy/module соответственно.

  15. При обновлении сервиса Chronos, установленного как сервис Windows, при переходе на эту сборку требуется сначала удалить предыдущий установленный сервис, используя InstallUtil.exe, затем заменить файлы в папке, и затем установить сервис посредством команды sc.exe. Обратитесь к руководству по установке за обновлённой инструкцией по установке сервиса Windows. При инсталляции на Linux изменений нет.

  16. На сервере приложений теперь требуется установленный пакет .NET Core Runtime & Hosting Bundle версии 3.0.0 или старше. Ссылка для скачивания последней версии доступна по адресу https://dotnet.microsoft.com/download/dotnet-core/3.0

  17. Если для сборки проектов расширений вы используете IDE Visual Studio 2019, то теперь требуется версия 16.3 или старше. Также, независимо от выбранной IDE, требуется установленный пакет .NET Core SDK версии 3.0.100 или старше (устанавливается вместе с Visual Studio). Ссылка для скачивания последней версии доступна по адресу https://dotnet.microsoft.com/download/dotnet-core/3.0

  18. При развёртывании сервера приложений на Windows с использованием IIS для работы Windows-аутентификации в web-клиенте обратитесь к руководству по установке, чтобы указать параметры пула приложений для веб-приложения tw_winauth.

  19. При развёртывании сервера приложений на Windows теперь используется InProcess-хостинг процесса веб-сервиса внутри IIS. Это не позволяет настроить в IIS несколько раздельных веб-приложений для одного и того же пула приложений (например, приложение tw_winauth для Windows-аутентификации в web-клиенте, или веб-сервисы, разработанные в рамках проекта в отдельном веб-приложении, отличном от веб-сервиса "web"). Создайте отдельные пулы приложений для каждого веб-приложения в IIS. Пример настройки есть в руководстве по установке в разделе по настройке Windows аутентификации в web-клиенте. Также вы можете отключить InProcess-хостинг, отредактировав файл web.config в папке веб-сервиса "web" и укажите в параметре hostingModel="OutOfProcess" (это приведёт к снижению производительности при работе в высоконагруженной среде).

  20. Сервер приложений теперь работает с использованием платформы .NET Core. Версия .NET Framework, установленная на сервере приложений при развёртывании на Windows, не является важной. Серверные расширения Tessa.Extensions.Server, Tessa.Extensions.Shared (и библиотеки модулей, если используются) должны таргетироваться на платформу netstandard2.0 (если для проекта это указано по умолчанию в сборке) или на платформу netcoreapp3.0 (для использования функций API .NET Core, недоступных в .NET Standard). Если вы изменили платформу на net472 или другую версию .NET Framework, то необходимо изменить платформу обратно на netstandard2.0, а функциональность, связанную с .NET Framework (обычно это сторонние библиотеки или WPF) необходимо вынести в отдельное веб-приложение. Пример создания такого веб-приложения приведён в "Создание веб-сервиса WCF, который вызывает веб-сервис платформы" (аналогичное приложение может быть разработано как REST с использованием ASP.NET Core 2.x). Перечисленные изменения не затрагивают библиотеки клиентских расширений desktop-клиента, которые по-прежнему таргетируются на платформу .NET Framework.

  21. Swagger, встроенный в веб-приложение web (по пути /swagger от адреса веб-приложения), теперь генерирует json-файл для описания REST API платформы по спецификации OpenApi v3 (в предыдущих версиях использовалась версия спецификации v2). Если вы используете файл swagger.json для генерации клиентов к сервисам REST API, то убедитесь, что используемый для генерации инструментарий поддерживает спецификацию OpenApi v3.

  22. Утилита tadmin для Windows (папка Tools) теперь использует платформу .NET Core вместо .NET Framework. Начиная с этой сборки запуск утилиты на 32-битных версиях Windows невозможен.

  23. Веб-сервис (папки Services/web, linux/web), сервис Chronos (папки Chronos, linux/chronos) и утилита tadmin (папки Tools, linux/tools) публикуются в режиме ReadyToRun для ускорения запуска на 64-битных платформах Windows и Linux. Некоторые файлы .dll в этой папке (такие как Tessa.dll) больше по размеру и их нельзя копировать с заменой в другие папки, где выполнение возможно на других платформах. Обратное копирование возможно, например, если выйдет патч для библиотеки Tessa.dll, её можно в одинаковом виде скопировать в эту и другие папки сборки, где это требуется согласно инструкции к патчу.

  24. Веб-сервис (папки Services/web, linux/web) теперь ссылается на расширения в подпапке extensions. Убедитесь, что ваш файл app.json в настройке "ProbingPath" содержит относительный путь до этой папки (по умолчанию в сборке это так).

  25. Обновите файл решения Tessa.Extensions.sln. Он содержит ссылки на два новых проекта расширений, которые также требуется скопировать из сборки в ваш репозиторий: Tessa.Extensions.Default.Console и Tessa.Extensions.Console. Первый проект содержит исходные коды всех консольных команд утилиты tadmin, а второй позволяет аналогичным образом добавлять консольные команды в рамках проекта. Такие команды можно будет штатно вызывать при помощи утилиты tadmin (на Windows или Linux). Примеры доступны в руководстве разработчика.

  26. Обновите файл проекта Tessa.Extensions.Server.Web.csproj, используемого для разработки REST-контроллеров в рамках проекта, из аналогичного файла в сборке в папке Source\Extensions\Tessa.Extensions.Server.Web.

  27. Обновите файл проекта Tessa.Extensions.Server.csproj, используемого для разработки серверных расширений в рамках проекта, из аналогичного файла в сборке в папке Source\Extensions\Tessa.Extensions.Server. Вместо замены всего файла достаточно указать <TargetFramework>netcoreapp3.0</TargetFramework> вместо netstandard2.0.

  28. В сборках расширений Tessa.Extensions.*** (Client, Server, Shared) обновлён пример тестового веб-сервиса для интеграции. Если вы не используете тестовый веб-сервис, то код в проектах можно не обновлять.

  29. В файлах проектов .csproj для сборок расширений Tessa.Extensions.*** (Chronos, Server, Server.Web, Shared) и Tessa.Module.Sample.*** (Server, Shared) обновлён блок со скриптами таким образом, чтобы сборку проектов можно было выполнить из ОС Linux, используя .NET Core SDK. Вы можете не изменять файлы проектов, если выполнять сборку из ОС Linux не требуется.

  30. Если вы используете модули расширений (такие как Tessa.Module.Sample.***), то обновите файл .csproj для серверной сборки (Tessa.Module.Sample.Server), указав <TargetFramework>netcoreapp3.0</TargetFramework> вместо netstandard2.0.

  31. Сборка содержит большое количество изменений API в части асинхронности. Прочтите рекомендации в ReleaseNotes к сборке 3.3.1 в части асинхронности, и примените их к текущей сборке. Также в ваших проектах расширений замените соответствующие сигнатуры методов расширений из "override void BeforeRequest" в "override async Task BeforeRequest" (где вместо "BeforeRequest" последовательно указывайте разные методы расширений, т.е. AfterRequest и др.).

  32. Если обработчики событий в ваших расширениях (такие как Evaluating) также содержат асинхронные вызовы, то убедитесь, что аргументы событий в параметре "e" содержат метод Defer, тогда вызовите метод, обернув в него весь асинхронный код в вашем обработчике (или весь код обработчика целиком): "using (e.Defer()) { …​ /* код с await-ами */ }". В сигнатуре вашего обработчика укажите "async void" или просто "async", если это лямбда-выражение: async (s, e) ⇒ …​ Если метод e.Defer() отсутствует, то вызовите асинхронные методы синхронным образом: MethodAsync().GetAwaiter().GetResult().

  33. Удалены синхронные методы из интерфейса ICardRepository, используйте асинхронные методы и, при необходимости, укажите .GetAwaiter().GetResult() для синхронного вызова.

  34. В коде расширений для объекта DbManager используйте метод Execute<T> вместо ExecuteScalar<T>, и метод ExecuteList<T> вместо ExecuteScalarList<T>.

  35. Подсистема типов условий была вынесена из подсистемы уведомлений как подсистема платформы. Все объекты с именами *NotificationCondition* переименованы в *Condition* и перенесены из Tessa.Notices в Tessa.Platform.Conditions, а namespace Tessa.Compilation.Notifications переименован в Tessa.Compilation.Conditions.

  36. Лист согласования типового решения перенесен в карточку виртуального файла "Лист согласования" и шаблоны файлов "Лист согласования" и "Печатный лист согласования". Все старые расширения на лист согласования больше не поддерживаются по умолчанию, доработку листа согласования можно проводить непосредственно в карточках шаблонов листа согласования. Если необходимо включить старый лист согласования типового решения для поддержки старых расширений, то нужно скопировать файл Fixes\KrApprovalList\KrApprovalList.cs в серверные расширения, где реализованы старые расширения на лист согласования.

  37. Плагин TasksNotificationPlugin теперь работает через подсистему уведомлений. Формируемое уведомление расположено в карточке уведомления "Рассылка о заданиях", а логика загрузки данных письма осталась в коде плагина.

  38. Если в рабочих местах вы использовали расширение на узле AutomaticNodeRefreshExtension, то удалите его и добавьте, заново указав настройки.

  39. Для получения настроек расширений KrSettings укажите в конструкторе расширения объект KrSettingsLazy, на котором в месте использования вызовите метод GetValueAsync. Функция Func<KrSettings> больше не зарегистрирована в Unity.

  40. Подсистема расширений правил доступа была обновлена и теперь методы для проверки правил доступа находятся в IKrPermissionsManager, а не KrPermissionsHelper. Список флагов KrPermissionFlags был перенесен в KrPermissionFlagDescriptors (имена флагов остались прежними). В объекте KrToken свойство Permission теперь представляет из себя не значение типа Enum, а перечисление значений типа KrPermissionFlagDescriptor.

  41. Расширения правил доступа ITaskPermissionsExtension и IKrPermissionsExtension были обновлены на новую подсистему прав доступа и теперь разделены на ITaskPermissionsExtension, ICardPermissionsExtension и IKrPermissionsRuleExtension. Теперь данные расширения регистрируются как обычные расширения через IExtensionContainer.

  42. В расширениях используйте пространство имён Tessa.Themes вместо Tessa.UI.Themes для взаимодействия с темами оформления. Некоторые методы перенесены из ThemeHelper в UIHelper, а метод-расширения для класса Theme из пространства имён Tessa.UI.Themes в Tessa.UI.

  43. При запуске процесса Workflow Engine через IWorkflowEngineProcessor.StartNewProcessAsync теперь передается объект сигнала IWorkflowEngineSignal вместо типа сигнала.

  44. В конструкторе бизнес-процессов в действиях "Задание" и "Группа заданий" изменен порядок обработки события "Выполнить" и обработки таблицы "Варианты завершения" при завершении задания. Теперь сначала выполняются события "Выполнить" из таблицы "Обрабатываемые события", а затем обрабатывается таблица "Варианты завершения".

  45. Консольная команда tadmin SetToken теперь всегда требует путь к папке с файлами app.json в качестве параметра без имени. Ранее использовался или опциональный параметр /folder, или значение из конфигурационного файла, которое удалено в текущей версии.

  46. В руководстве по установке добавлен раздел с настройкой приложения, развёрнутого в среде управления контейнерами Docker. Ознакомьтесь с этим разделом, если вы используете систему, установленную в контейнерах Docker.

  47. Приложение Docker теперь использует версию PostgreSQL 12 в файле сборки Docker\tessa\docker-compose.yml. Если вы использовали Docker с предыдущими сборками, то в рамках работ по обновлению на новую версию платформы либо отредактируйте файл docker-compose.yml, заменив строку "postgres:12-alpine" на "postgres:11-alpine", чтобы в вашей инсталляции использовалась версия PostgreSQL 11. Либо выполните работу по обновлению файлов базы данных на диске "db" в Docker с версии PostgreSQL 11 на PostgreSQL 12, для этого обратитесь к документации PostgreSQL.

  48. В шаблонах этапов маршрутов для тех этапов, в которых был указан вид задания в предыдущих сборках, укажите этот вид в соответствующем поле. Обратите внимание, что если вы не укажете вид задания, то задания будут корректно отправлены с предыдущим указанным видом (несмотря на то, что он не отображается в настройках этапа). Однако, в следующих сборках такая обратная совместимость будет удалена.

10.2. Добавление и изменение функциональности

  1. В типовую поставку добавлен модуль "Форумы и обсуждения". Модуль должен быть указан в лицензии; лицензии Enterprise-редакции включают модуль автоматически, перевыписывать такие лицензии не требуется. Типы документов и карточек, для которых должны быть доступны обсуждения, следует включить в типовое решение, также для них должен стоять соответствующий флажок для работы обсуждений в строке таблицы в карточке настроек "Типовое решение" или в карточке "Тип документа".

  2. В карточках добавлен элемент управления "Представление". Он позволяет вывести любые представления внутри карточки, передав в них параметры через настраиваемый маппинг. Также возможно организовать связанные представления master-detail. Элемент управления не поддерживается в web-клиенте, поддержка будет добавлена в следующих версиях.

  3. В карточках добавлен элемент управления "Выбор цвета" для выбора или отображения цвета в формате ARGB. Элемент управления связывается с полем в карточке типа целое число Int32.

  4. В карточках заголовки блоков и элементов управления теперь могут указываться с форматированием строк локализации "…​ {$Alias} …​".

  5. В "Мои настройки" добавлена вкладка "Персонализация", на которой можно настроить цвет фона для заданий в различных функциональных ролях (автор или исполнитель) и цвет фона сообщений для форумов, все настройки индивидуальны для пользователя. Если какой-либо из цветов не указан (как задано по умолчанию), то используется соответствующий цвет из текущей выбранной темы. Функциональные роли заданий "Автор" и "Исполнитель" указаны в таблице-перечислении FunctionRoles, которая настраивается в справочнике: Администратор - Прочее - Функциональные роли. Для каждой функциональной роли автоматически формируются настройки цветов в диалоге "Мои настройки". В текущем релизе используются только две функциональные роли "Автор" и "Исполнитель", но дополнительные роли можно применять в расширениях, пример доступен в руководстве разработчика.

  6. В теме интерфейса добавлены цвета фона заданий отдельно для авторов и исполнителей с учётом того, видит ли пользователь задание как заместитель. В файле темы .json это ключи: TaskPerformerBackground, TaskPerformerDeputyBackground, TaskAuthorBackground, TaskAuthorDeputyBackground. Таким образом, для каждой темы можно настроить окрашивание заданий авторов и исполнителей в разные цвета без написания расширений. По умолчанию все эти цвета указаны такие же, как и цвета заданий по умолчанию (жёлтые задания).

  7. В подсистему плейсхолдеров добавлена возможность шаблонизировать текст с помощью скриптов. Для этого можно использовать конструкции вида <# …​ #>, <#= …​ #>, в которые можно встроить код. Данная возможность поддерживается в типе карточки Уведомление, в тексте шаблонов файлов текстового типа (.txt, .html) и в настройках действий Задание, Группа заданий, Уведомление в конструкторе бизнес-процессов.

  8. В шаблонах файлов .html и .txt добавлена возможность использовать тег <_table>…​<_/table>, чтобы исключить из документа всю таблицу вместе с заголовками колонок, когда нет ни одной строки внутри таблицы.

  9. В тип карточки "Шаблон файла" добавлена возможность писать методы расширения IPlaceholderReplaceExtension, которые будут вызваны только при формировании файла по данному шаблону.

  10. В тип карточки "Шаблон файла" добавлен флаг Системный, который позволяет отключить генерацию плиток для данного шаблона файлов на боковой панели карточки/представления.

  11. В шаблонах файлов добавлена возможность указания области таблицы, внутри которой весь текст будет удален, если таблица внутри данной области не содержит ни одной строки. Это может быть использовано для удаления заголовков таблицы в ситуациях, когда в данной таблице нет строк.

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

  13. В шаблонах файлов Excel добавлена возможность использовать в качестве обозначения строки/группы/таблицы строку Excel целиком.

  14. В шаблонах файлов добавлена возможность использования комплексных строк локализаций, внутри которых локализуется текст вида "…​ {$nested_string} …​".

  15. В шаблон файла "Мои задания" добавлена подсветка ячейки со сроком завершения задания при просрочке, аналогично представлению "Мои задания".

  16. Добавление подписок на уведомления в карточке через плитку "Настройки уведомлений по карточке" теперь возможно и без нажатия плитки "Редактировать", если есть доступ на возможность подписываться на уведомление по данной карточке.

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

  18. В тип карточки "Тип условия" добавлено поле "Места использования условия". Данное поле отвечает за то, где данный тип условия доступен для выбора.

  19. Добавлен тип карточки "Виртуальный файл", который позволяет настроить виртуальные файлы для карточек, генерируемые с помощью шаблонов файлов.

  20. Лист согласования типового решения перенесен в карточку виртуального файла "Лист согласования" и шаблоны файлов "Лист согласования" и "Печатный лист согласования". Также был добавлен тип условия "Видимость листа согласования".

  21. В конструкторе бизнес-процессов добавлены новые действия "Регистрация" и "Отмена регистрации". Данные действия идентичны этапам "Регистрация" и "Отмена регистрации" из маршрутов в режиме "Без отправки задания".

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

  23. В маршрутах добавлен тип этапа "Диалог", позволяющий отображать диалоговое окно для взаимодействия пользователя с системой.

  24. В маршрутах и бизнес-процессах вкладка со скриптом, который является непустым, отображается вместе со звёздочкой в заголовке вкладки. Также звёздочкой отмечается заголовок блока, внутри которого доступны вкладки со скриптами.

  25. В маршрутах в этап согласования добавлена настройка "Рекомендательное согласование", которое позволяет не возвращать этап на доработку при несогласовании.

  26. В маршрутах в настройках вторичного процесса в режиме "Кнопка" добавлена возможность указывать сочетание клавиш.

  27. В маршруты добавлена возможность пропуска этапов, созданных по шаблону этапов. Для этого этап надо удалить из таблицы "Этапов" на вкладке "Маршрут" в карточке, причём функциональность пропуска доступна пользователям без прав администратора при наличии правила доступа с флажком "Пропуск этапов".

  28. В конструкторе бизнес-процессов в настройках кнопки добавлена возможность указывать сочетание клавиш.

  29. В web-клиенте добавлена возможность использовать расширение на узел дерева рабочего места AutomaticNodeRefreshExtension для того, чтобы автоматически обновлять узел по расписанию (каждые несколько секунд).

  30. В web-клиенте добавлена светлая тема, которая ранее была только в desktop-клиенте.

  31. В web-клиенте добавлена возможность настраивать цвета тем оформления и добавлять новые темы в виде таких же файлов .json, какие используются в desktop-клиенте.

  32. В web-клиенте для каждой темы в соответствие задаются типовые фоны и фон по умолчанию, устанавливаемый при переходе на эту тему с другой темы, где также используется типовой фон. Файлы типовых фонов указываются в .json файле темы, это позволяет добавлять, удалять или заменять любые типовые фоны. Поведение аналогично desktop-клиенту.

  33. В web-клиенте добавлена возможность устанавливать корпоративные фоны по умолчанию для всех пользователей web-клиента. Настройка расположена в карточке "Настройки сервера". Для desktop-клиента по-прежнему используется фон, опубликованный в конфигурационном файле app.json для приложения TessaClient (настройка DefaultWallpaper).

  34. В web-клиенте при настроенной Windows-аутентификации выполняется автоматической вход для доменной учётной записи. Если компьютер не входит в домен, то браузер отображает окно ввода доменных логина/пароля. Если автоматический вход необходимо отключить, то для настройки "WinAutoLogin" укажите значение false в файле app.json веб-сервиса.

  35. В web-клиенте добавлен манифест PWA-приложения (Progressive Web App), расположенный по пути wwwroot/tessa.webmanifest. Это позволяет браузерам на мобильных устройствах устанавливать на рабочий стол ярлык для запуска сайта как отдельного от браузера приложения. PWA-приложение использует Service Worker для оффлайн-кэширования при наличии валидного сертификата HTTPS. При необходимости вы можете изменить свойства манифеста в этом файле, а также установить start_url и scope как путь от имени сервера, например "/tessa/web" (по умолчанию не установлены, поскольку путь может отличаться). Подробное описание формата манифеста доступно на сайте W3C: https://w3c.github.io/manifest

  36. В контрол "Ссылка" для представлений добавлен вызов выпадающего списка кнопками стрелок (вверх и вниз).

  37. Обновлена подсистема правил доступа, в карточке правил доступа можно настраивать дополнительные настройки доступа к карточке, заданиям, файлам, видимости элементов карточки (контролов, блоков, вкладок), видимость данных для пользователя. Также добавлена возможность возможность настраивать фильтрацию правил доступа через подсистему условий.

  38. В настройки типового решения можно добавить типы карточек "Сотрудник", "Подразделение" и "Статическая роль". После добавления данных типов карточки в типовое решение, карточки перестают быть доступными только для администратора и доступ к ним определяется через правила доступа.

  39. Доступные для выбора языки локализации теперь определяются строками в системной таблице-перечислении Languages. Для добавления языка достаточно отредактировать таблицу в схеме данных (указав отдельную библиотеку схемы). Также добавьте строку локализации вида "LanguageTemplate_код-языка".

  40. Изменено кодирование в теле сообщений почтовых уведомлений с Base64 на EightBit.

  41. Карточки "Валюта", "Вид задания", "Категория документа", "Категория файла", "Права на текущие отчёты", "Представление", "Рабочее место", "Тип группы истории заданий" и "Тип уведомления" теперь всегда создаются и открываются только в модальных диалогах. Плитки создания на правой панели скрыты для карточек, у которых они были, для этого используйте кнопки на панели пейджинга в соответствующих представлениях.

  42. В карточках "Шаблон" и "Удалённая карточка" специальные функции по работе с этими карточками вынесены на верхнюю панель тулбара. Также кнопка возврата из просмотра удалённой карточки в удалённую карточку закрывает вкладку с просмотром.

  43. Добавлена аутентификация Kerberos для серверов приложений на Linux и на сервере приложений Windows, который не входит в домен, и поэтому аутентификация Windows для него не работает. Также появилась возможность выполнять вход LDAP для пользователей с типом входа "Пользователь Windows".

  44. Добавлены настройки для аутентификации и синхронизации c AD / LDAP: количество попыток подключения к реферальным серверам и задержка перед повторным подключением. Также добавлена возможность отключать ненужные реферальные сервера и игнорировать системные разделы, такие как: ForestDnsZones, DomainDnsZones, Configuration.

  45. В файле app.json для TessaClient добавлены настройки подключения к прокси-серверу ProxyUri и ProxyClass, они по умолчанию закомментированы символами "//", которые надо удалить для того, чтобы соответствующая настройка работала. ProxyUri указывает адрес и порт для прокси-сервера (например, для Fiddler укажите http://127.0.0.1:8888), когда настройка указана, то весь трафик будет проходить через прокси. При этом и базовый адрес, и адрес прокси должны быть указаны как IP-адрес или имя сервера, но не как localhost (loopback-интерфейс игнорирует прокси). Если помимо ProxyUri задать настройку ProxyClass, то вместо стандартного прокси-объекта System.Net.IWebProxy будет использоваться класс с указанным именем типа. Этот класс должен иметь конструктор с единственным параметром типа Uri - это адрес из настройки ProxyUri. Укажите "Tessa.UI.WebProxy, Tessa.UI", чтобы использовать прокси с аутентификацией, при этом будет отображаться окно с логином-паролем.

  46. В сборке в папку с проектами расширений "Source" добавлен файл Export.bat, который позволяет выполнить полный экспорт конфигурации с карточками из веб-сервиса (т.е. из базы данных) по аналогии с тем, как устроена папка "Configuration" в сборке. Аналогично добавлен файл export.sh для запуска под Linux, не забудьте указать ему права перед запуском: sudo chmod 755 export.sh. Описание доступно в руководстве администратора в разделе "Экспорт конфигурации веб-сервиса".

  47. В руководстве по установке добавлен раздел с настройкой приложения, развёрнутого в среде управления контейнерами Docker. Ознакомьтесь с этим разделом, если вы используете систему, установленную в контейнерах Docker.

  48. Утилита tadmin: реализовано API для расширения набора консольных команд. Исходный код всех типовых консольных команд доступен для модификации в проектных расширениях Tessa.Extensions.Default.Console. В проекте Tessa.Extensions.Console рекомендуется добавлять новые консольные команды при необходимости. Примеры доступны в руководстве разработчика. Скомпилированные расширения с консольными командами подключаются таким же образом, как и другие расширения, - посредством файлов extensions.xml. В сборке по умолчанию расширения утилиты tadmin содержатся в папке Tools/extensions и linux/tools/extensions.

  49. Утилита tadmin: команды DeleteCards, ImportCards, ImportLocalization теперь сразу выводят сообщения о произведённых действиях в лог и по умолчанию в окно консоли после того, как действие производится (например, сразу после удаления или импорта карточки). Если какое-то из действий выполняется долго или приводит к зависанию, то теперь это заметно в логе и в окне консоли.

  50. Утилита tadmin: для команды ExportCards добавлен ключ /localize для локализации имён файлов с карточками на указанный язык, если они являются строками локализации (начинаются с символа "$"). Например: /localize:en или /localize:ru.

  51. Утилита tadmin: добавлена команда ExportScheme для экспорта схемы данных, полученной от веб-сервиса, в структуру папок схемы (файл *.tsd для описание базы данных и вложенные подпапки).

  52. Утилита tadmin: добавлена команда ExportSchemeSql для экспорта схемы данных, полученной из базы данных по прямому SQL-соединению, в структуру папок схемы (файл *.tsd для описания базы данных и вложенные подпапки).

  53. Утилита tadmin: добавлена команда ExportLocalization для экспорта библиотек локализации, полученных от веб-сервиса, в файлы *.tll.

  54. Утилита tadmin: добавлена команда ExportTypes для экспорта типов карточек, файлов и заданий, полученных от веб-сервиса, в файлы *.jtype.

  55. Утилита tadmin: добавлена команда ExportViews для экспорта представлений, полученных от веб-сервиса, в файлы *.view.

  56. Утилита tadmin: добавлена команда ExportWorkplaces для экспорта рабочих мест, полученных от веб-сервиса, в файлы *.workplace.

  57. API: Все расширения и большинство API в платформе сделаны асинхронными, это относится и к серверным API (веб-сервисы, Chronos), и к клиентским. В расширениях токен отмены операции передаётся в свойстве context.CancellationToken. На текущий момент синхронными остаются части API, связанные с маршрутами, Workflow Engine, и некоторыми API из типового решения Kr***. Скрипты в различных карточках настроек также синхронные, в т.ч. в карточках маршрутов, действий в Workflow Engine, в правилах доступа, шаблонах файлов и др.

  58. API: В web-клиенте добавлен новый вид расширений TabPanelUIExtension, где доступна возможность изменять кнопки на основной панели со вкладками рабочих мест и карточек.

  59. API: Добавлен новый вид серверных расширений IPlaceholderReplaceExtension, позволяющий модифицировать результат замены плейсхолдеров или сам формируемый документ при замене плейсхолдеров. Задействуется при обработке шаблонов файлов любых типов.

  60. API: В объект IPlaceholderManager в метод ReplaceText добавлен параметр withScripts, который включает возможность использования шаблонизации с помощью скриптов <#…​#> при замене переданного текста.

  61. API: В контекст обработки типов условий добавлено свойство CardID, которое возвращает идентификатор карточки.

  62. API: При выполнения проверки условия подсистемы типов условий в конструкторе бизнес-процессов добавлена возможность получить текущий контекст обработки процесса из Info контекста. Это можно сделать, добавив using Tessa.Workflow.Helpful, с помощью метода context.GetWorkflowContext(). Если проверка условия производится не в рамках обработки процесса из конструктора бизнес-процессов, данный метод вернёт null.

  63. API: Методы интерфейса IAdvancedCardDialogManager теперь возвращают объект IUIContext для диалога, который был открыт. Это позволяет в вызывающем такой метод коде получить данные, заполненные в диалоге IUIContext.CardEditor.CardModel.Card.

  64. API: В ICardUIExtensionContext добавлено свойство StoreRequest, позволяющее получить доступ к реквесту на сохранение в Saving расширении.

  65. API: В CardTask добавлено поле Settings, являющееся словарем, и позволяющее хранить произвольные данные для задания в рамках жизни задания. Данные хранятся в таблице Tasks столбец Settings.

  66. API: В API конвертации файлов IFileConverter для запроса IFileConverterRequest добавлены свойства CardTypeID, CardTypeName, FileTypeID, FileTypeName и FileRequestInfo, которые будут использованы в запросе на загрузку контента файла для конвертации в плагине Chronos (значения из FileRequestInfo переносятся в request.Info запроса GetFileContent). Задействуйте новые свойства для написания расширений на конвертируемые файлы в виде CardGetFileContentExtension, в т.ч. для конвертации виртуальных файлов. Эти свойства также используются при вычислении хеш-кода RequestHash, который влияет на возможность параллельно выполнять конвертацию одного и того же файла.

  67. API: В API синхронизации с AD / LDAP добавлена возможность изменять состав статической роли или подразделения во время синхронизации.

  68. API: В API потокового сканирования добавлена возможность переопределить поиск штрих-кода в системе, а так же загрузку и сохранение карточки с отсканированным файлом.

  69. API: В этапы маршрутов "Согласование", "Подписание", "Редактирование", "Регистрация" добавлен список завершённых заданий в Stage.Info по ключу "Tasks". Значение доступно в скриптах постобработки.

  70. API: Добавлен метод IFileConverter.DeleteFileAsync, позволяющий удалить сконвертированный файл из кэша, если он там присутствует. Для таких сценариев, как конвертация, инициируемая с веб-сервиса, но фактически выполняемая в плагине Chronos, где кэш файлов требуется как способ передачи содержимого файла после конвертации. Если известно, что операция по конвертации уникальна и результат конвертации не будет нужен, то посредством метода DeleteFileAsync можно удалить содержимое файла из карточки "Кэш файлов".

  71. API: Добавлен флаг FileConverterRequestFlags.AllowConcurrentIdenticOperations, позволяющий выполнять параллельную конвертацию файлов с идентичными параметрами конвертации IFileConverterRequest, определяемыми хеш-значением RequestHash.

  72. API: В модели представления контролов "Целое число", "Вещественное число" и "Десятичное число" добавлена возможность изменять свойства MinValue и MaxValue, ограничивающие соответственно минимально и максимально допустимые значения, вводимые пользователем.

  73. API: В расширениях на метаинформацию ICardMetadataExtension в методе ModifyTypesAsync теперь можно отложить проверку валидности схемы данных для типа карточки, добавив его идентификатор в коллекцию context.DelayedSchemeCheckCardTypeIDSet, если некоторые из секций или колонок cardType.SchemeItems отсутствуют в схеме данных (в т.ч. как виртуальные), но будут добавлены как объекты CardMetadataSection и CardMetadataColumn позже в методе расширения ModifyMetadataAsync. Если по завершении этого метода в типе карточки cardType.SchemeItems присутствуют ссылки на секции или колонки, отсутствующие в секциях cardMetadata.GetSectionsAsync(), то тип считается повреждённым, и добавляется такое же сообщение об ошибке, как если бы проверка типа не была отложена.

  74. API: Обновлена подсистема правил доступа. Теперь проверка настроек доступа через подсистему правил доступа выполняется через IKrPermissionsManager.

  75. API: Любые классы расширений (наследники IExtension, которые регистрируются как RegisterExtension) могут реализовать интерфейс IAsyncInitializable для асинхронной инициализации, которая выполняется после вызова конструктора.

  76. API: Классы для взаимодействия с темами интерфейса в большинстве своём перенесены в пространство имён Tessa.Themes в сборке Tessa.dll, при этом объекты отвязаны от зависимостей WPF. Т.о. информацию по темам интерфейса можно анализировать на сервере, в т.ч. выполнять парсинг .json файлов темы, и получать значения цветов и кистей в виде Storage-объектов. Это используется для поддержки тем в web-клиенте.

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

  78. API: При отправке писем можно указать новое свойство MailInfo.Format с указанием формата отправляемого сообщения. По умолчанию это Html (как и было ранее), но также можно указать PlainText для отправки в формате "простой текст".

  79. API: Добавлен интерфейс IBarcodeConverter (Tessa.Extensions.Platform.Server.DocLoad), используя который можно изменить типы штрих-кодов для их поиска и обработки в соответствии с используемой библиотекой, если в расширении IDocLoadExtension вместо библиотеки ZXing была использована другая библиотека. Реализация по умолчанию доступна в классе Tessa.Extensions.Default.Server.DocLoad.BarcodeConverter с открытым кодом.

  80. API: Обновлены библиотеки: .NET Core 3.0.0, AvalonEdit 6.0.0, BarcodeLib 2.2.3, CsvHelper 13.0.0, HtmlAgilityPack 1.11.16, ITfoxtec.Identity.Saml2 4.0.2, NLog 4.6.8, Npgsql 4.1.1, Linq2DB 2.9.3, Microsoft.CodeAnalysis.CSharp 3.2.1, Swashbuckle.AspNetCore 5.0.0-rc4, UAParser 3.1.43, ZXing.Net 0.16.5.

10.3. Исправления и оптимизации

  1. Исправлено отображение загруженных расширений в некоторых случаях, когда таблица отображалась пустой.

  2. В конструкторе бизнес-процессов исправлена проблема с зависанием блокировки экземпляра процесса, когда процесс обрабатывается успешно и завершается, но ошибка возникает после обработки процесса.

  3. В конструкторе бизнес-процессов исправлено падение действия Уведомление, если получатели уведомления не заданы.

  4. В конструкторе бизнес-процессов в действии "Отправить сигнал" исправлена ошибка, возникающая при отсутствии в настройках действия скриптов.

  5. В конструкторе бизнес-процессов исправлена ошибка завершения процесса, если завершение производится вызовом действия "Отправить сигнал".

  6. В конструкторе бизнес-процессов исправлена ошибка, иногда возникающая при асинхронной обработке действия таймера.

  7. В конструкторе бизнес-процессов исправлена ошибка формирования уведомления о создании задания в ситуациях, когда идет последовательная отправка заданий.

  8. В конструкторе бизнес-процессов исправлена ошибка, из-за которой новый экземпляр узла сохранялся в ситуации, когда условие входа в узел не было выполнено.

  9. В конструкторе бизнес-процессов в плагине планировщика таймеров исправлена проблема, из-за которой после перезапуска кроноса некорректно обновлялись уже созданные таймеры.

  10. В конструкторе бизнес-процессов в плагине планировщика таймеров исправлена ошибка, возникающая когда дата срабатывания таймера близка или меньше текущей даты.

  11. Исправлено выполнение делегатов OpenCardOptions.CardModifierActionAsync и CardModelModifierActionAsync в вызовах editor.OpenCardAsync и uiHost.OpenCardAsync в desktop-клиенте. Ошибка появилась в сборке 3.3.1.

  12. Исправлен метод IFileBuilder.AddWithNotificationAsync при добавлении в контейнер, связанный с элементами управления файлов в UI. Ошибка появилась в сборке 3.3.1.

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

  14. Исправлена замена гиперссылок в шаблоне файла Word внутри таблицы при использовании одного и того же плейсхолдера в тексте и ссылке.

  15. Исправлены наименования родительских подразделений при синхронизации в LDAP.

  16. Исправлен вход сотрудников типа "Пользователь LDAP" при наличии referrals.

  17. Исправлен SQL-запрос в представлении LinkedDocuments, запущенном на MSSQL, если при выполнении представления не заданы параметры фильтрации, связанные с постраничным отображением.

  18. Исправлена ошибка при сохранении карточки по нажатию на плитку в маршрутах, если сохранение не удалось.

  19. Исправлены проблемы, связанные с возможным зависанием процесса веб-сервиса при изменении конфигурации. Актуально только при установке на Linux. Ошибка присутствовала со сборки 3.0, но вероятность её возникновения значительно повысилась в 3.3.1.

  20. Исправлено выполнение этапа "Уведомление" в маршруте, если этап был создан в сборке платформы 3.3 или раньше. Ошибка появилась в сборке 3.3.1.

  21. Оптимизировано взаимодействие с пулом потоков в приложениях TessaAppManager, TessaClient, TessaAdmin. Это заметно повышает производительность TessaAppManager при взаимодействии с большим количеством серверов.

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

  23. В web-клиенте исправлено добавление этапов в таблицу маршрута.

  24. В web-клиенте исправлены возможные проблемы при открытии карточки сотрудника с последующим закрытием.

  25. В web-клиенте исправлена отправка на ознакомление при нажатии на кнопку отправки в диалоге несколько раз подряд.

  26. В web-клиенте исправлен выбор значения в контроле "Список" с использованием клавиши "стрелка вниз" на клавиатуре.

  27. В web-клиенте исправлено указание доп. согласующих в этапах маршрутов, если выполнен клик по согласующему. При этом ожидается, что отображаются текущие доп. согласующие для выбранного согласующего.

  28. В web-клиенте исправлена ошибка в валидации контрола таблицы с замещениями.

  29. В web-клиенте исправлена ошибка при закрытии вкладки в мобильной форме, если при этом открыто меню переключения вкладок.

  30. В web-клиенте исправлены ссылки на статические ресурсы на странице при использовании нескольких экземпляров сервера приложений по разным базовым путям при установке на Linux (Nginx или Apache).

  31. В web-клиенте исправлено отображение некоторых представлений с иерархической группировкой, в т.ч. для примеров представлений Groups, GroupsWithHierarchy и Hierarchy.

  32. В web-клиенте исправлено сохранение настройки "Показать пустые папки" для рабочего места. Ранее настройка сбрасывалась каждый раз при переоткрытии web-клиента.

  33. В web-клиенте исправлены копирование и вставка узлов-папок, в т.ч. в ситуации, когда поисковые запросы были добавлены в папку непосредственно перед копированием.

  34. В web-клиенте исправлено сохранение карточки без файлов в серверных расширениях, где, несмотря на отсутствие файлов, в расширениях на сохранение было установлено context.ContentStorePending = true, и событие context.ContentStoreCompleted вызывалось, хотя не должно было.

  35. Оптимизировано изменение библиотек локализации и массовое создание типов карточек на СУБД PostgreSQL.

  36. Удаление библиотек локализации теперь выполняется корректно при отключённых внешних ключах на базе данных.

  37. Исправлен предпросмотр с расширениями в TessaAdmin для типов карточек из типового решения. В предыдущих версиях системы при предпросмотре не добавлялись блок контролов с состоянием документа и вкладка "Маршрут".

  38. В контроле "Ссылка" исправлено лишнее срабатывание события "ValueSelected", если в контроле после подстановки остался фокус и произошло сохранение карточки.

  39. В контролах "Список" и "Ссылка" теперь при сохранении карточки по Ctrl+S с неподтверждённым значением, выбранным из выпадающего списка, будет автоматически подтверждено выбранное значение.

  40. В контроле "Список" исправлено поведение в тех случаях, когда для поиска и вставки данных из представления использовались разные поля, а поле для поиска позволяло ввести более длинное значение, нежели подставляемое. Это приводило к тому, что значение не переносилось в карточку (отсутствовало в структуре Card).

  41. Исправлено поведение системы при одновременном изменении карточки с отличающейся версией разными пользователями. Из-за ошибки в логике хотя пользователю, изменившему неактуальную версию карточки, и выдавалось сообщение об ошибке, его изменения всё равно частично сохранялись в базе данных, "затирая" изменения другого пользователя. Ошибка появилась со сборки 2.6.

  42. Исправлено возможное зависание приложения TessaClient, если в результате закрытия вкладки с карточкой выводится окно с сообщениями валидации. Ошибка появилась в сборке 3.3.1.

  43. Исправлено выполнение расширений ICardUIExtension.Finalizing при принудительном закрытии вкладки с карточкой cardModel.CloseAsync(force: true), обычно это при закрытии окна приложения.

  44. Исправлено получение объекта типа CardDialogManager в клиентских расширениях TessaClient так, чтобы возвращался тот же объект, что и при получении ICardDialogManager.

  45. Исправлена отладка представлений в TessaAdmin, где текст запроса заканчивался на имя параметра.

  46. Исправлена стилизация ячеек #appearance в представлениях в TessaClient и TessaAdmin.

  47. Исправлены файлы IgnoredFiles.txt, перечисляющие файлы, исключаемые для публикации, для приложений TessaClient, TessaAdmin, TessaAppManager. Теперь при использовании утилиты для публикации tadmin PackageApp файлы с карточками *.jcard и *.card, оставшиеся после предыдущего вызова команды или экспорта карточек, больше не добавляются в карточку приложения для публикации.

  48. Исправлена сортировка в колонках представлений по умолчанию, которая была всегда по возрастанию для любых представлений, если сервер приложений запущен на Linux, а в качестве клиента используется TessaAdmin или TessaClient. Ошибке подвержены все сборки, начиная с 3.0.

  49. Исправлена ошибка в методе IBusinessCalendarService.AddWorkingQuantsToDateAsync при выполнении на базе данных Postgres. Ошибка появилась в сборке 3.3.

  50. При использовании метода в API web-клиента для предпросмотра файлов с конвертацией на сервере, значения из параметра "info" теперь передаются в запрос CardGetFileContentRequest.Info, что позволяет использовать этот метод совместно с расширениями на виртуальные файлы.

  51. Исправлено подставление неверной даты в параметр типа Date Detail-представления, если он ссылается на другой параметр из Master-представления.

  52. В маршрутах исправлен возврат после согласования на последнем этапе, в этом случае состояние документа меняется на "На доработке", как это было до перехода к системе маршрутов в сборке 2.6. Ранее по ошибке устанавливалось состояние "Согласован".

  53. В маршрутах исправлено выполнение процесса, если был задан некорректный запрос для вычисления SQL исполнителей, что приводило к переходу на следующий этап и "зависанию" исполненного задания.

  54. В маршрутах исправлено переключение на сателлит вторичного процесса, после исполнения этапа "Задача" во вторичном процессе.

  55. В маршрутах исправлена ошибка при одновременной отмене нескольких заданий во вторичном процессе.

  56. Исправлено открытие экземпляра бизнес-процесса, к которому относится ошибка, из карточки ошибки.

  57. При добавлении виртуальных файлов на сервере посредством метода-расширения IFileContainer.AddVirtualAsync исправлена передача параметров в свойстве RequestInfo для виртуальных файлов и их версий в клиентские запросы загрузки содержимого файла/версии, списка версий для файлов и списка подписей для версии.

  58. Исправлены ошибки вида "Could not find any resources appropriate for the specified culture or the neutral culture" при использовании версии библиотеки PdfSharp из пространства имён Tessa.PdfSharp (библиотека Tessa.dll). Актуально при использовании библиотеки в расширениях для функциональности, не предусмотренной в типовом решении.

  59. Исправлен поиск местоположения сборки методом assembly.GetLocationFileNameFromCodeBase(), в т.ч. для поиска файлов app.json и extensions.xml, при выполнении на платформе .NET Core в ОС Windows. Ошибка появлялась только при запуске из сетевой папки вида \\computer\folder. Исправление ранее было неактуально для типовых сценариев использования системы в связке .NET Framework + Windows, но начиная с этой сборки типовым сценарием является .NET Core + Windows.

  60. Исправлена ошибка при обновлении руководителя подразделения в синхронизации AD/LDAP.

  61. Исправлена ошибка при определении отключенного аккаунта в синхронизации AD/LDAP.

  62. Исправлена ошибка перерасчета динамических ролей, возникающая в некоторых ситуациях.

  63. Исправлено обновление значения в контролах "Список" и "Ссылка", если они располагаются не на текущей открытой вкладке.

  64. Оптимизировано взаимодействие по сети в части параллельного выполнения запросов к серверу для desktop-приложений (TessaClient, TessaAdmin, TessaAppManager, tadmin).

  65. Исправлена поддержка на Linux для кодировок, основанных на кодовых страницах, таких как KOI8-R и Windows-1251.

  66. Исправлена отправка ежедневных уведомлений по заданиям для заместителей по взятым в работу заданиям, если они взяты в работу другим замещаемым сотрудником. Например, Иванов замещает Петрова, Васильев замещает Сидорова, все четыре сотрудника есть в роли, на которую назначено задание; Сидоров взял задание в работу; в тексте уведомления это задание должны увидеть только Сидоров и Васильев, но его также видели Иванов и Петров.

  67. Плитка "Печать штрих-кода" больше не отображается для ещё не сохранённых карточек.

  68. Исправлена ошибка при выборе значения из представления для контролов карточки "Ссылка" и "Список", если в нем включен ручной ввод, не указан алиас представления и до этого был вручную введен текст.

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

  70. Исправлен возврат полей строки представления в верхнем регистре при использовании IUIHost.ShowViewsDialog. В случаях, если в представлении использовалось расширение CreateCardExtension, с его помощью создавалась карточки и после этого нажать на кнопку в тулбаре "Сохранить и выбрать", SelectedRow содержал в себе поля в верхнем регистре.

  71. Исправлена выгрузка представления в HTML, если в колонке appearance SQL-запрос возвращает NULL.

  72. Исправлено поведение контрола "Ссылка" при открытии выпадающего списка с последующим его закрытием, без выбора элемента (клик в пустой области), если в поле контрола уже было введено некорректное значение.

  73. Исправлена ошибка исправления типов карточек для расширений "Запрет изменения" и "Очистка связанных полей", удаляющая эти расширения. Она проявлялась в том случае, если в поле "Отслеживаемая колонка" ("Очистка связанных полей") или "Поле" ("Запрет изменения") указывалось комплексное поле.

  74. Исправлена ошибка в приложении TessaClient, возникающая, если открыть любое подмножество в отдельной вкладке (например, Ctrl+клик по узлу в дереве), а затем добавить или изменить параметр фильтрации, или обновить представление, чтобы изменилось количество выводимых строк.

  75. Исправлено скрытие выпадающего списка в контроле "Список" по кнопке "Esc", если список был вызван по кнопке выпадающего списка или, если фокус уже находится внутри списка.

  76. Исправлена ошибка в PostgreSQL-версии функции CalendarGetLastQuantStart. Теперь для расчёта следующего дня не берётся входящее значение даты, поведение теперь совпадает с MSSQL-версией функции - берётся результат работы функции CalendarGetFirstQuantStart.

  77. Диалог валидации с ошибками и другими сообщениями теперь всегда отображается как окно на панели задач.

  78. Исправлено обращение к кэшу контекстных ролей ICardContextRoleCache из разных потоков.

  79. Исправлено обращение к dynamic-свойствам карточек из разных потоков.

  80. Исправлен метод GetNewCard() в скриптах маршрутов.

  81. Исправлена всплывающая подсказка на кнопке возврата в основную карточку из карточки задачи, которая отображается в тулбаре.

  82. Исправлены ситуации, когда после закрытия сплэша мог переключаться фокус с текущего диалогового окна на другое окно.

  83. Исправлен парсинг методов REST-запросов (разрабатываемых на проектах), которые получают строку в теле запросе в формате text/plain с указанием кодировки charset. Ранее можно было использовать только строки без указания кодировки.

  84. Кэш локализации на сервере (в т.ч. в плагинах Chronos) теперь всегда инициализируется в отдельном соединении с базой данных, поэтому исправлены ошибки, связанные с невозможностью инициализировать кэш при выполнении другого запроса в том же соединении, например, при попытке локализовать сообщение об ошибке в процессе чтения строк в открытом DataReader.

  85. В контроле "Список" исправлено выделение элементов и перемещение курсора по клику мышки, если имеется не до конца введённый элемент.

  86. Для приложения TessaClient исправлено подключение к прокси-серверу, с использованием аутентификации или без неё. Проблема появилась со сборки 3.0.

  87. Если файл открыт на редактирование, в открытом приложении файл блокируется для чтения (например, в приложении Word), то при сохранении карточки будет выдаваться предупреждение пользователю, чтобы он закрыл приложение, поскольку в нём могут быть несохранённые данные.

  88. Если добавление строки локализации отменено, то добавленная строка удаляется.

  89. Исправлено использование API FileSchemeService, которое при сохранении схемы на файловые папки могло приводить к созданию файла Partitions\Default\Default.tsp в текущей папке.

  90. В TessaClient и TessaAdmin исправлено отображение параметров фильтрации представлений, для которых указаны типы данных sbyte, short, ushort, uint, ulong.

  91. Оптимизированы серверные компоненты (веб-сервис web, сервис Chronos, утилита tadmin) благодаря переходу на платформу .NET Core 3.0 и использованию технологии ReadyToRun для ускорения запуска. Дополнительно веб-сервис для Windows при запуске на IIS работает в InProcess-режиме, что также оптимизирует время его запуска, время обработки запросов и потребляемую память.

  92. Исправлена ошибка импорта схемы данных в Postgres, из-за которой для колонок с типами string или binary не обрезалось имя констрейнта, проверяющего длину значения, из-за чего могла возникнуть ошибка дублирования имен объектов в базе данных Postgres.

  93. Исправлена ошибка в команде миграции базы данных tadmin MigrateDatabase при выполнении миграции на СУБД PostgreSQL 12. Неактуально для более ранних версий PostgreSQL.

  94. Исправлены ошибки в определении настроек SAML из конфигурационного файла app.json.

  95. В логе Chronos исправлено предупреждение "Attribute 'NoticeMailer.SmtpPickupDirectoryLocation' isn’t found", возникающее в случае, если соответствующая настройка равна null и для отправки почты установлен режим SMTP. Теперь значения null и пустая строка идентичны по поведению и не приводят к предупреждениям.

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

  97. Исправлено отображение вложенного исключения для класса исключений LdapException и его наследников, которые используются для ошибок входа пользователей LDAP и пользователей Windows (для включённой аутентификации Kerberos).

  98. В диалоге "Мои замещения" для уже сохранённой строки в таблице замещений исправлены ошибки при добавлении и удалении ролей или заместителей из списков.

  99. Если в настройках типа карточки в типовом решении или для типа документа включено автосогласование, но не указана настройка "Завершать при привешении срока более чем", то теперь выводится понятное сообщение об ошибке.

  100. Исправлено поведение CardTransactionExtendedStrategy, когда методы этого объекта вызываются вне запроса к компонентам CardStoreExtendedComponent и CardDeleteExtendedComponent, например, после расширений AfterRequest в событии context.ContentStoreCompleted.

  101. Исправлено автосогласование для заданий, назначенных на роль, в которую включено более одного сотрудника.

  102. Исправлено добавление автоикрементных колонок в схему данных для СУБД PostgreSQL, если на момент добавления колонки таблица уже существует.

11. Версия 3.3.1 (16.07.2019)

11.1. Переход на новую сборку

  1. Изменены представления: TaskHistory, TaskTypes.

  2. Изменены библиотеки локализации.

  3. Изменены таблицы: KrAddFromTemplateSettingsVirtual (добавлена), KrNotificationSettingVirtual, KrProcessStageTypes, KrRegistrationStageSettingsVirtual, KrStageBuildOutput, KrStageTemplates, KrStageTemplateGroupPosition, WorkflowEngineLogs.

  4. Изменены типы карточек: KrAddFileFromTemplateStageTypeSettings (добавлен), KrHistoryManagementStageTypeSettings (переименован из KrHistoryManagement), KrNotificationStageTypeSettings, KrRegistrationStageTypeSettings, KrSecondaryProcess, KrSettings, KrStageTemplate, KrTemplateCard (добавлен), KrTypedTaskStageTypeSettings, WorkflowAddFileFromTemplateAction.

  5. Изменены карточки: CancelButton, CancelGroup (удалена), CancelTemplate (удалена), DepartmentCondition, DeregisterButton, DeregisterGroup (удалена), DeregisterTemplate (удалена), DocStateCondition, FullRecalcRouteButton, InitiatorCondition, ProtocolBranchPure (добавлена), ProtocolDecisions (добавлена), RebuildButton, RebuildGroup (удалена), RebuildTemplate (удалена), RegisterButton, RegisterGroup (удалена), RegisterTemplate (удалена), RejectButton, RejectGroup (удалена), RejectTemplate (удалена), SendProtocolTasksButton (добавлена), Standard solution (включите флажок "Использовать маршруты" для типа карточки "Протокол"), StartProcessButton, StartProcessGroup (удалена), StartProcessTemplate (удалена).

  6. Изменён конфигурационный файл app.json для веб-сервисов (Services/app.json и linux/web/app.json) и сервисов Chronos (Chronos/app.json и linux/chronos/app.json).

  7. Изменены файлы тем интерфейса в подпапке themes для приложения TessaClient.

  8. Был исправлен скрипт миграции при миграции со сборок перед 2.6 на текущую сборку. Выполняйте сквозную миграцию на текущую сборку, например, с 2.5.3 сразу на 3.3.1, минуя предыдущие сборки.

  9. Для работы в web-клиенте функции со ссылками в виртуальном файле "Лист согласования" заполните базовый адрес web-клиента в карточке "Настройки сервера". Если адрес не заполнен, то ссылки в web-клиенте не отображаются.

  10. Изменён файл проекта с плагинами Chronos Tessa.Extensions.Chronos.csproj, чтобы все xml-файлы плагинов из папки configuration добавлялись в выходную папку. Изменять файл проекта необязательно, но это может быть удобно при появлении новых плагинов в вашем проектном решении.

  11. В коде расширений используйте интерфейс ICurrentUserViewService вместо интерфейса ICurrentUserViewWebService, который был удалён.

  12. В коде расширений для объекта DbManager используйте метод Execute<T> вместо ExecuteScalar, ExecuteScalar<T> и ExecuteObject, и метод ExecuteList<T> вместо ExecuteScalarList<T>. Методы ExecuteScalar<T> и ExecuteScalarList<T> сохранены для обратной совместимости, методы ExecuteScalar и ExecuteObject<T> удалены.

  13. В коде расширений многие синхронные методы заменены на асинхронные. Если при обновлении вы столкнётесь с отсутствующим платформенным методом, то допишите к концу его имени Async и вызовите на результате метода .GetAwaiter().GetResult(). Например, замените вызов operationRepository.IsAlive(id) на operationRepository.IsAliveAsync(id).GetAwaiter().GetResult(). На результирующем объекте Task не вызывайте метод Wait() или свойство Result, т.к. это приводит к упаковке результата исключения в AggregateException, что усложняет его проверку и стек-трейсы при логировании; вызов .GetAwaiter().GetResult() аналогичен этому методу или свойству, но исключение передаётся в исходном виде. Также вы можете переписать свой метод на асинхронный: укажите ключевое слово async в методе, задайте Task или Task<T> в качестве возвращаемого результата, допишите к имени метода Async (это соглашение, рекомендуемое Microsoft и используемое в платформе), добавьте параметр "CancellationToken cancellationToken = default" к концу списка параметров (это опционально, чтобы метод можно было асинхронно отменить), и добавьте ключевое слово await перед каждым вызовом асинхронного метода, например: await operationRepository.IsAliveAsync(id). Если ваш метод выполняется в потоке UI, то учитывайте особенности синхронизации в SynchronizationContext (например, там, где нужно отменить возврат в поток UI, надо добавить .ConfigureAwait(false) к результату вызова метода). Обратитесь к документации MSDN за особенностями использования паттерна async/await.

  14. Некоторые расширения теперь асинхронные; они возвращают Task, токен отмены операции передаётся через свойство context.CancellationToken. Допишите к сигнатуре метода ключевое слово async (слева от возвращаемого значения Task), чтобы метод мог работать без изменения кода. Если метод содержит асинхронные вызовы, то добавьте перед ними ключевое слово await. В текущей версии это затрагивает расширения: IAdExtension, IApplicationExtension, ICardRepairExtension, IClientInitializationExtension, IFileConverterExtension, IPluginExtension, IServerInitializationExtension, ISettingsExtension.

  15. Плагины Chronos теперь поддерживают только асинхронные методы EntryPointAsync вместо EntryPoint в интерфейсе плагина IPlugin. Интерфейс IPluginAsync удалён. Для любых плагинов рекомендуем унаследовать класс плагина от абстрактного класса Plugin и переопределить метод EntryPointAsync, указав его сигнатуру как public override async Task EntryPointAsync(CancellationToken cancellationToken = default). Код плагина может быть оставлен синхронный или переписан на асинхронный, используя конструкцию async/await.

  16. В расширениях для объектов CardSection, CardRow, ListStorage<T> были удалены неиспользуемые API, связанные с событиями FieldCoercing, FieldValidating, FieldValidated, ItemCoercing, ItemValidating, ItemValidated. События FieldChanged и ItemChanged работают без изменений.

  17. В расширениях desktop-клиента CardUIExtension для установки цветов элементов управления и их заголовков TextStyle и CaptionStyle (свойства Foreground, Background и BorderColor вместо BorderBrush), используйте тип данных Color вместо SolidColorBrush.

  18. Обновлены примеры тестового контроллера ServiceController в проекте Tessa.Extensions.Server.Web и соответствующего ему прокси-сервиса (объекты IService, ServiceWebProxy, ServiceClient). Теперь все методы сервиса являются асинхронными и поддерживают отмену.

11.2. Добавление и изменение функциональности

  1. В web-клиенте добавлена поддержка иерархии в представлениях. Также на вкладке "История заданий" добавлена ссылка "открыть в отдельной вкладке" аналогично desktop-клиенту.

  2. В web-клиенте иконки-тэги на файлах теперь можно задавать с указанием цвета фона. Для файлов в задачах иконка принадлежности файла к текущей задаче отображается на зелёном фоне. Функциональность работает аналогично desktop-клиенту.

  3. В web-клиенте для русской локализации окна входа кнопка "Логин" переименована во "Вход" в файле localization.json. Вы можете изменить локализацию в этом файле, независимо от версии платформы.

  4. В web-клиенте при сохранении карточки с файлами теперь добавляется операция, отображающая ход сохранения в представлении "Активные операции", по аналогии с desktop-клиентом. Также в окне карточки отображается прогресс-бар с ходом сохранения. Если сохранение завершилось ошибкой, то оно прерывается, не дожидаясь окончания загрузки.

  5. В web-клиенте реализованы настройки цвета и стиля текста для всех элементов управления в карточке, а также все настройки контролов по кнопке "Дополнительно".

  6. В web-клиенте теперь доступно изменение размера области предпросмотра файлов в карточке, и изменение её положения (слева или справа). Настройки области изменяются для всех открытых карточек сразу (аналогично desktop-клиенту) и сохраняются в cookies браузера.

  7. В web-клиенте доступно сворачивание/разворачивание блоков карточки, по аналогии с desktop-клиентом. В контекстном меню по пустой области в карточке можно свернуть/развернуть все блоки.

  8. В web-клиенте в виртуальном файле листа согласования добавлена ссылка на печатный лист согласования и ссылка на текущую карточку, по аналогии с desktop-клиентом. Для работы функции заполните базовый адрес web-клиента в карточке "Настройки сервера". Если адрес не заполнен, то ссылки в web-клиенте не отображаются.

  9. В web-клиенте добавлены пункты меню и плитки для копирования ссылок на файл, версию файла, карточку или узел дерева, по аналогии с desktop-клиентом. Открытие таких ссылок требует наличие активной сессии, при этом отображается окно входа, если сессия отсутствует (после входа действие по ссылке выполняется).

  10. В web-клиенте для параметров фильтрации представлений типа даты и/или времени установлены значения по умолчанию, по аналогии с desktop-клиентом.

  11. В web-клиенте фильтруемый текст подсвечивается жёлтым в контроле "Таблица" в карточке и на вкладке "История заданий", по аналогии с desktop-клиентом.

  12. В web-клиенте в представлениях добавлена плитка "Структура карточки" для администраторов, позволяющая отобразить структуру карточки на сервере без выполнения серверных и клиентских расширений, по аналогии с desktop-клиентом.

  13. В web-клиенте для закрытия вкладки с карточкой или рабочим местом добавлена горячая клавиша Ctrl+Shift+F4 (горячая клавиша также работает в desktop-клиенте). Горячие клавиши Ctrl+F4, Ctrl+W и Ctrl+Shift+W используются браузером, поэтому задействовать их нельзя. Также при закрытии вкладки с карточкой вы можете зажать клавишу Alt, чтобы выполнить закрытие без сохранения изменений и без подтверждения, по аналогии с desktop-клиентом. Информация об этом выводится во всплывающей подсказке на "крестике", закрывающем вкладку.

  14. В web-клиенте добавлены подтверждения при закрытии или обновлении вкладки с веб-приложением (т.е. вкладки браузера, а не вкладки карточки/рабочего места). Это предотвращает случайное закрытие вкладки. Отображаемые сообщения управляются самим браузером, причём во всплывающем окне с подтверждением закрытия обычно доступен флажок для отключения таких сообщений на сайте с приложением.

  15. В web-клиенте добавлено тестовое расширение на действие "Файлы из внешнего источника" в контекстном меню списка файлов в типе карточки "Автомобиль". Это демонстрирует возможности расширений для клиентского API web-клиента, по аналогии с desktop-клиентом.

  16. В web-клиенте добавлены всплывающие подсказки, в т.ч. на контролах и на файлах в карточке, на информации о заданиях, на плитках боковых панелей, на строках в истории заданий, на строках представлений и таблиц, которые были укорочены с троеточием, на заголовках таблиц (в представлениях и карточках). Всплывающие подсказки работают аналогично desktop-клиенту.

  17. В web-клиенте на вкладке "История заданий" разрешено открывать/закрывать окно с подробностями по выделенной строке, с использованием средней кнопки мыши, как это указано во всплывающей подсказке на строке. Функциональность работает аналогично desktop-клиенту.

  18. В web-клиенте добавлено перетаскивание вкладок с карточками и рабочими местами drag&drop, по аналогии с desktop-клиентом.

  19. В web-клиенте добавлена подсветка синтаксиса для контролов "Строка" в режиме Avalon.

  20. В web-клиенте добавлены модальные окна с карточками и тулбары, по аналогии с desktop-клиентом, в т.ч. создание карточки в режиме отбора, модальные диалоги по кнопке на панели пейджинга и по двойному клику для некоторых справочников, API для создания, открытия и редактирования карточек в диалоговых окнах, тулбар для возврата в карточку из задачи.

  21. В web-клиенте добавлено перетаскивание колонок представлений и их сохранение по контекстному меню для заголовка колонки, аналогично desktop-клиенту. Также возможно изменение порядка колонок drag&drop в таблицах карточек (элемент управления "Таблица" и вкладка "История заданий").

  22. В web-клиенте в контекстном меню на файле доступна группа действий "Заменить файл по шаблону" аналогично desktop-клиенту.

  23. В web-клиенте реализована плитка печати штрих-кода при наличии модуля потокового ввода.

  24. В web-клиенте в desktop-варианте (при наличии мыши) кнопка закрытия вкладки с карточкой или представлением отображается без кнопки-крестика, которая закрывается вкладку, эта кнопка выводится при наведении мыши на вкладку, аналогично desktop-клиенту. В мобильной форме, когда присутствует тач-скрин (на планшетах и смартфонах), крестик отображается всегда.

  25. В диалогах с карточками на панели действий (тулбар сверху) добавлены кнопка "Сохранить, закрыть и создать" и группа кнопок "Другие": выпадающие кнопки "Удалить", "Копировать ссылку", "Показать структуру".

  26. Справочники вариантов завершения и состояний документа теперь по двойному клику открывают виртуальные карточки в модальном окне, а не в отдельной вкладке.

  27. Плитка "Разослать задачи по решениям" в карточке "Протокол" теперь реализована на системе маршрутов без клиентских расширений. Это расширяет возможности настройки для этой функции.

  28. В маршрутах добавлена возможность указывать маршрут для вторичных процессов на вкладке "Маршрут" в карточке вторичного процесса. Все типовые вторичные процессы теперь в самой карточке содержат необходимые этапы. Связанные с ними группы и шаблоны больше не нужны, и их необходимо удалить. В скриптах автоматического обновления Upgrade.bat и upgrade.sh удаление типовых карточек выполняется автоматически.

  29. В типе этапа "Уведомление" добавлена возможность указывать сценарий для модификации письма.

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

  31. В маршрутах в настройки этапа "Регистрация" добавлен флажок "Без отправки задания", позволяющий не отправлять задание на регистрацию в асинхронных процессах, таких как основной маршрут документа.

  32. В маршрутах в настройках типов заданий при вводе типа поиск теперь производится как по имени Name, так и по отображаемому заголовку Caption.

  33. В конструкторе бизнес-процессов добавлен поиск по доступным действиям на панели слева.

  34. В конструкторе бизнес-процессов в редакторе объекта кнопка "Закрепить" теперь закрепляет панель редактора таким образом, что она не перекрывает собой редактор макета процесса.

  35. Во всплывающих уведомлениях по задачам клик по любому месту в уведомлении теперь приводит к открытию карточки, в которой находится задача. Клик по роли или автору не приведёт к случайному открытию карточки роли или сотрудника.

  36. В представлении TaskHistory записи без группы теперь выводятся в специальной группе "( без группы )".

  37. Добавлена настройка ViewAccessCacheTimeSpan в конфигурационных файлах app.json для веб-сервисов и сервисов Chronos. Настройка определяет максимальный интервал времени, в течение которого кэш прав доступа для каждого сотрудника может располагаться в памяти перед тем, как будет автоматически сброшен в текущем процессе. По умолчанию указан 1 час. Кэш прав доступа не используется для администраторов, поскольку для них доступны все представления, независимо от прав.

  38. Ошибки для неправильно введённого логина или пароля теперь записываются в серверный лог на уровне логирования Debug. По умолчанию на уровне Info логирование такого события не выполняется. Другие ошибки, связанные со входом в систему (SessionExceptionCode) теперь логируются на уровне логирования Warn (по умолчанию логирование выполняется). Ошибка ExpectedWindowsAuth по-прежнему всегда не логируется, потому что возникает каждый раз при Windows-аутентификации на сервере IIS. Другие ошибки по-прежнему логируются на уровне Error.

  39. В интерфейсе карточек добавлена панель тулбара в нижней части карточек. Её можно отобразить как в модальных диалогах, так и при обычном отображении карточек во вкладках, видимость настраивается через API аналогично панели тулбара сверху. Цвета фона и текста для обеих панелей по умолчанию одинаковы, но их можно настроить различным образом в файлах темы интерфейса (цвета CardBottomToolbarForeground, CardBottomToolbarBackground, CardBottomToolbarHoverBackground). Также была добавлена возможность выводить кнопки в тулбарах справа налево и изменять цвета тулбара индивидуально для карточки через API: например, при наличии каких-то важных действий выводим тулбар красным цветом или с использованием другого цвета темы.

  40. В приложении Tessa Applications в конфигурационном файле TessaAppManager.exe.config добавлена настройка CanSaveCredentials (по умолчанию true). Настройка определяет, могут ли логин и пароль пользователя сохраняться локально в зашифрованном виде для любого сервера, к которому подключается Tessa Applications. Указав false, можно скрыть возможность ввести логин или пароль в окне настроек сервера, причём ранее введённые логины и пароли перестают использоваться (т.е. пользователю каждый раз придётся их вводить заново). Вы можете опубликовать TessaAppManager, чтобы распространить настройку с этим параметром конфигурации на всех сотрудников.

  41. Утилита tadmin: в команде ImportUsers добавлена поддержка возможности указать в файлах временную зону для сотрудников и подразделений. Описание импорта сотрудников и подразделений вместе с временными зонами, а также формат содержимого файлов приведёны в руководстве администратора.

  42. Утилита tadmin: для команды DeleteCards добавлен параметр /c, предотвращающий вывод сообщений об ошибках при удалении несуществующих карточек, которые могли быть уже удалены к моменту вызова скрипта.

  43. API: В сценариях маршрутов добавлен метод GetProcessInfoForBranch, который позволяет в скрипте инициализации получить доступ к ProcessInfo веток. Актуально только для этапа ветвления.

  44. API: В web-клиенте доработано API управления областью предпросмотра для соответствия desktop-клиенту.

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

  46. API: Добавлено свойство ISettings.MaxSettingsTilesBeforeAddingSubgroup для настройки количества плиток, отображаемых в desktop-клиенте в группе "Настройки" для открытия карточек-настроек. По умолчанию указано 12.

  47. API: NuGet-пакет Tessa теперь ссылается на актуальные версии пакетов System.Memory, System.Threading.Tasks.Extensions и System.ValueTuple. Вы можете использовать типы, предоставляемые этими пакетами, в любых расширениях и других частях системы. Примеры типов: ValueTask<T>, ValueTuple<T1,T2>, Span<T>, Memory<T>. Также теперь не требуется указывать redirect-ы на версии этих пакетов в конфигурационных файлах для .NET Framework.

  48. API: Некоторые синхронные методы были заменены на асинхронные, при этом к их имени добавлен суффикс "Async". Каждый асинхронный метод опционально принимает параметр CancellationToken для асинхронной отмены операции. Это затрагивает такие интерфейсы, как ICardRepository (синхронные методы оставлены для совместимости), IFileManager, ISessionManager, ISessionServer, IOperationRepository, ICardTransactionStrategy, IRoleRepository и др. Вы можете вызвать такие методы синхронно, дописав к результату вызова .GetAwaiter().GetResult(). Например, замените вызов operationRepository.IsAlive(id) на operationRepository.IsAliveAsync(id).GetAwaiter().GetResult().

  49. API: Некоторые расширения теперь асинхронные; они возвращают Task, токен отмены операции передаётся через свойство context.CancellationToken. Допишите к сигнатуре метода ключевое слово async (слева от возвращаемого значения Task), чтобы метод мог работать без изменения кода. Если метод содержит асинхронные вызовы, то добавьте перед ними ключевое слово await. В текущей версии это затрагивает расширения: IAdExtension, IApplicationExtension, ICardRepairExtension, IClientInitializationExtension, IFileConverterExtension, IPluginExtension, IServerInitializationExtension, ISettingsExtension.

  50. API: Добавлен интерфейс ITransactionStrategy, доступный в Unity, для выполнения кода в транзакции ExecuteInTransactionAsync. Интерфейс ICardTransactionStrategy теперь наследует ITransactionStrategy, вы по-прежнему можете использовать его для выполнения кода в транзакции. Используйте класс WithoutTransactionStrategy (доступен в Unity) для выполнения кода без транзакции.

  51. API: Добавлена возможность отменить сохранение карточки в расширении модуля LDAP/AD.

  52. API: Модуль потокового ввода теперь поддерживает серверные расширения IDocLoadExtension для получения ID карточки по указанному штрих-коду. Проектное расширение должно унаследоваться от абстрактного класса DocLoadExtension или от класса с типовой логикой DefaultDocLoadExtension, переопределять методы и затем зарегистрироваться в Unity по интерфейсу IDocLoadExtension в методе регистратора RegisterUnity.

  53. API: В интерфейс IKrScope добавлен метод GetMainCardFileContainer для получения контейнера файлов для карточки, находящейся в KrScope. Это свойство использовать в типах этапов маршрутов, в которых требуется добавить, удалить или изменить файл в карточке. При сохранении карточки будут сохранены и файлы.

  54. API: Добавлено свойство ICardEditorModel.BottomToolbar с кнопками на панели тулбара в нижней части окна. Можно отображать как в диалоге, так и в карточках, открываемых во вкладках. Если список кнопок ICardToolbarViewModel.Actions пуст, то тулбар автоматически скрывается; при добавлении хотя бы одной отображаемой кнопки тулбар автоматически отображается.

  55. API: Добавлены свойства для настройки панелей тулбара в интерфейс ICardToolbarViewModel: LeftToRight (вывод кнопок слева направо, иначе справа налево и с выравниванием по правому краю), DropdownMenuPlacementMode (направление отрисовки вложенных действий для кнопок в тулбаре), Background (цвет фона при отображении в текущей карточке), Foreground (цвет кнопок по умолчанию при отображении в текущей карточке), HoverForeground (цвет кнопок по умолчанию при наведении мыши, когда кнопка подсвечена как выбранная, обычно является обратным от цвета Foreground).

  56. API: В компиляторы скриптов маршрутов IKrCompiler, условий INotificationConditionCompiler и процессов IWorkflowEngineCompiler добавлены свойства DefaultUsings и DefaultReferences, которые определяют наборы пространств имён и ссылок на сборки, используемых компилятором по умолчанию. Данные свойства можно изменить, добавив регистратор с методом FinalizeRegistration, в котором выполнить код следующего вида: this.UnityContainer.TryResolve<IWorkflowEngineCompiler>()?.DefaultReferences.Remove("Tessa.Extensions.Server").

  57. API: В расширениях для объектов CardSection, CardRow, ListStorage<T> были удалены неиспользуемые API, связанные с событиями FieldCoercing, FieldValidating, FieldValidated, ItemCoercing, ItemValidating, ItemValidated. События FieldChanged и ItemChanged работают без изменений.

  58. API: В контексте расширений по синхронизации с AD / LDAP IAdExtensionContext добавлено свойство Connection с параметрами соединения к серверу AdConnection. В объекте с параметрами доступно свойство IsActiveDirectory, определяющее, является ли сервер доменом Active Directory, или это другой каталог LDAP.

  59. API: Обновлены библиотеки: .NET Core 2.2.6, ITFoxTec.Identity.Saml2 4.0.0, Linq2DB 2.7.4, Microsoft.CodeAnalysis.CSharp 3.1.0, NLog 4.6.6, Npgsql 4.0.7, QRCoder 1.3.6, UAParser 3.1.38, Unity 5.11.1.

11.3. Исправления и оптимизации

  1. Оптимизированы накладные расходы на выполнение представлений в web-клиенте, если пользователь не обладает правами администратора.

  2. В web-клиенте исправлен выбор значения в ссылочных контролах "Ссылка" и "Список" при переводе клавиатурного фокуса на другой контрол (по клавише Tab).

  3. В web-клиенте выпадающие списки в ссылочных контролах теперь занимают максимум половину размера окна по ширине. Изменение не затрагивает мобильную форму или небольшие размеры окна браузера.

  4. В web-клиенте исправлены ситуации, когда настройки рабочих мест для пользователя могли изменяться на одном устройстве (в desktop-клиенте или в web-клиенте), и на другом устройстве (в web-клиенте) они не обновлялись до повторного входа в систему, пока работает функциональность Service Workers.

  5. В web-клиенте исправлено отображение представлений, недоступных для пользователя по его правам доступа.

  6. В web-клиенте исправлена ширина поля для ввода параметра фильтрации представления типа Guid (уникальный идентификатор).

  7. В web-клиенте исправлены отображаемые ошибки при сохранении виртуальных карточек "Состояние документа" и "Вариант завершения", если не заполнены обязательные поля.

  8. В web-клиенте исправлена смена фонового изображения на мобильных устройствах.

  9. В web-клиенте исправлено выравнивание иконок и текста во вкладках карточек и рабочих мест при отображении на Linux.

  10. В web-клиенте исправлено создание файла по шаблону из контекстного меню на файлах.

  11. В контролах "Список" и "Сссылка" исправлен алгоритм работы при ручном вводе. Теперь необязательно, чтобы колонки в представлении, входящие в референс, располагались одна за другой.

  12. Исправлено отображение плиток в группе "Настройки" для открытия карточек-настроек, если они не вмещаются на экране. Теперь выполняется их автоматическая группировка. Также названия карточек настроек автоматически переносятся на две строки при необходимости.

  13. Метод TileHelper.SplitCaption() больше не выполняет перенос текста на две строки, если в тексте уже есть явно заданный перевод строки. Метод используется для отображения заголовков плиток для типов карточек, типов документов и др.

  14. При открытии/импорте файлов схемы через SchemeEditor и TessaAdmin в случае возникновения ошибки десериализации открываемой схемы теперь выводится корректный путь к файлу, в котором была обнаружена ошибка.

  15. В конструкторе бизнес-процессов ширина панели поиска теперь не сбрасывается на первоначальную после ее повторного открытия.

  16. В конструкторе бизнес-процессов исправлена проблема синхронизации скриптов процесса с проектом в Visual Studio. А также исправлено падение клиента, возникающее при изменении выгруженных файлов через блокнот.

  17. В конструкторе бизнес-процессов исправлена ошибка формирования срока задания, если задана явная дата завершения задания.

  18. В конструкторе бизнес-процессов исправлена ошибка, возникающая при компиляции действий "Задание" и "Группа заданий" при наличии строк обрабатываемых событий без скриптов.

  19. В конструкторе бизнес-процессов исправлена ошибка, возникающая при завершении процесса с включенным логированием действий с уровнем Debug.

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

  21. В конструкторе бизнес-процессов исправлена возможность использования директивы #reference в основном скрипте процесса.

  22. Исправлено длительное ожидание при остановке сервисов Chronos после возникновения ошибок конвертации файлов.

  23. Исправлено использование объекта DbScope в случае, если внутри блока using присутствует await на асинхронную операцию.

  24. Исправлен метод загрузки контента для RemoteFileContent, который используется для предоставления контента в виде функции Func<Stream>. По ошибке функция вызывалась дважды, что могло приводить к незакрытым ресурсам, поскольку только один объект Stream возвращался методом загрузки контента, а второй создавался, но не возвращался. Это в т.ч. приводило к невозможности удалить временные файлы при конвертации в FileConverterPlugin. Ошибка появилась в сборке 3.0.

  25. Исправлены сообщения об ошибке, если не удалось определить временную зону для задания или записи в истории заданий.

  26. Исправлено удаление штрих-кода при создании карточки по шаблону или копировании существующей.

  27. Исправлена ошибка при запуске вторичного процесса с ветвлением.

  28. Исправлена ошибка открытия файловой схемы данных при наличии в одной комплексной колонке нескольких ссылочных колонок из разных библиотек.

  29. Исправлена отправка заданий на контекстные роли с указанием вида задания (в т.ч. для типовых задач, маршрутов, бизнес-процессов Workflow Engine и кастомизированных процессов). Ошибка появилась в сборке 3.3.

  30. Исправлена фильтрация представлений по параметрам типа "Дата" при выполнении на СУБД PostgreSQL. Ошибка появилась в сборке 3.3.

  31. Исправлена проблема при изменении состава метаролей, которые задаются по числовому или строковому идентификатору.

  32. Исправлено выполнение запроса в генераторе метаролей, у которого пятая колонка с идентификатором временной зоны возвращается с типом, отличным от smallint (например, тип данных int).

  33. Оптимизирован расчёт динамических ролей и метаролей при наличии замещений.

  34. Улучшено логирование ошибок в логах Chronos при выполнении запроса в генераторе метаролей.

  35. При возникновении ошибок при удалении временных файлов или папок в тексте предупреждения теперь выводится текущий стек вызовов для упрощения отладки.

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

  37. Исправлено выполнение представлений в PostgreSQL, если представление было добавлено в кэш хранимых процедур, после чего изменился тип параметра в схеме данных, но не изменилась метаинформация представления.

  38. В потоковом сканировании в плагине Chronos при прикреплении PDF-документа к карточке исправлено удержание временных файлов в открытом состоянии.

  39. В редакторе типов в TessaAdmin исправлено уведомление о наличии изменений в типах при попытке их обновления.

  40. В команде tadmin ImportUsers исправлено изменение уже существующих карточек сотрудников и подразделений. Ошибка появилась в сборке 3.3.

  41. Исправлена ошибка KeyNotFoundException при компиляции этапа с дополнительными скриптами (Ветвление, Типизированное задание, Уведомление), в которых есть ошибка.

  42. В представлениях исправлено отображение записей без группы при использовании полей с иерархической группировкой. Ошибка появилась в сборке 3.3.

  43. Исправлен запрос миграции на сборку 2.6.0, в котором формируется Info для этапа доработки. В некоторых случаях оно равнялось null, что при миграции с активным этапом доработки после согласования не позволяло продолжить процесс с необходимого этапа.

  44. Исправлена генерация запроса при выполнении плейсхолдеров {f} и {t}, в которых выполняется join для строк одной и той же таблицы несколько раз. Например: {f:Roles.ParentID→Roles.Name}.

  45. В TessaAdmin исправлена ошибка добавления вкладок, копируемых через буфер обмена, в контрол "Вкладки".

  46. Исправлена работа кнопки "Свернуть все" в представлениях, когда в нем отображается большое количество групп.

  47. Исправлен экспорт карточки, в которой есть задание на временную роль, которая не связана с контекстной (например, Исполнители задания), но вместе с тем нет ни одного задания на контекстную роль. Ошибка появилась в сборке 2.6.

  48. Исправлено подтверждение при обновлении списка библиотек локализации в TessaAdmin.

  49. Исправлено удаление строк в таблицах, когда для удаляемой строки существуют строки дочерней коллекционной секции, где есть несколько колонок со ссылкой на родителя, причём только одна из колонок добавлена в тип карточки, а другая - отсутствует в типе.

  50. Исправлена отправка ежедневных уведомлений по текущим заданиям. Ошибка появилась в сборке 3.3.

  51. Исправлена ошибка входа в систему в desktop-клиентах (TessaClient, TessaAdmin, TessaAppManager, tadmin), если с клиента передаётся текущая культура CurrentCulture, которая не существует на сервере. Обычно это возможно при соединении клиента Windows с сервером Linux.

  52. Исправлена локализация в почтовом уведомлении по ежедневным заданиям для таблицы с заданиями автосогласования.

  53. Исправлена редкая ошибка "An item with the same key has already been added" при инициализации лицензии в кэше на клиенте или на сервере.

  54. Исправления в плагине синхронизации с AD / LDAP для лучшей совместимости с каталогами LDAP.

  55. В плагине потокового сканирования улучшена обработка ошибок, связанных с проблемами при обработке файлов.

12. Версия 3.3 (17.05.2019)

12.1. Переход на новую сборку

  1. Изменены рабочие места: Administrator, User (в узле "Состояния согласования" изменён заголовок на $Workplaces_User_DocumentStates и представление на KrDocStates; в узел "Контрагенты" для режима отбора добавлено расширение CreateCardExtension с алиасом Partner и параметром представления PartnerID; в папке "Диаграммы" указано "Где отображать узел" - "Tessa Client"; добавлено представление "Типы условий для правил уведомлений" в режиме отбора; добавлено представление с подписками на уведомления внизу; изменены узлы "Уведомления" и "Типы уведомлений" в режиме отбора).

  2. Изменены представления: AvailableDeputyUsers, BusinessProcessTemplates, CompletedTasks, CompletionOptionCards (добавлено), CompletionOptions, ContractsDocuments, Documents, EmittedTasks, IncomingDocuments, KrApprovalStates (удалено), KrDocStateCards (добавлено), KrPermissions, KrSecondaryProcesses, KrStageCommonMethods, KrStageTemplates, LinkedDocuments, MyCompletedTasks, MyDocuments, MyTasks, NotificationConditionTypes (добавлено), NotificationSubscriptions (добавлено), NotificationTypes, Operations, OutgoingDocuments, Partitions (добавлено), Partners, PartnersTypes, ProtocolCompletedTasks, ReportCurrentTasksByDepartment, ReportCurrentTasksByDepUnpivoted, ReportCurrentTasksByUser, ReportPastTasksByDepartment, ReportPastTasksByUser, TaskHistory, TaskTypes, TimeZones (добавлено), Types, VatTypes, WorkflowEngineLogs.

  3. Изменены таблицы: AdSyncSettings, AdSyncSettingsVirtual, CalendarExclusions, CalendarSettings, CompletionOptionsVirtual (добавлена), DefaultTimeZone (добавлена), DepartmentRoles, DocLoadSettings, KrApprovalCommonInfo, KrDepartmentCondition (добавлена), KrDepartmentConditionSettings (добавлена), KrDocStateCondition (добавлена), KrDocStateVirtual (добавлена), KrDocTypeCondition (добавлена), KrNotificationSettingVirtual, KrPartnerCondition (добавлена), KrPermissionFlags, KrPermissions, KrStages, KrStagesVirtual, KrProcessStageTypes, KrSettingsRouteExtraTaskTypes (добавлена), KrTypedTaskSettingsVirtual (добавлена), KrUniversalTaskOptions, KrUniversalTaskOptionsSettingsVirtual, KrUniversalTaskSettingsVirtual, KrUsersCondition (добавлена), NotificationConditionTypes (добавлена), NotificationConditionTypesBuildOutput (добавлена), Notifications, NotificationSubscribeTypes (добавлена), NotificationSubscriptions (добавлена), NotificationSubscriptionSettings (добавлена), NotificationTypeCardTypes (добавлена), NotificationTypes, NotificationUnsubscribeTypes (добавлена), Operations, OperationsVirtual (добавлена), PersonalRoleNotificationConditionsVirtual (добавлена), PersonalRoleNotificationRulesVirtual (добавлена), PersonalRoleNotificationRuleTypesVirtual (добавлена), PersonalRoles, PersonalRoleSatellite, PersonalRoleUnsubscibedTypesVirtual (добавлена), Roles, ServerInstances, Sessions, TaskCommonInfo, TaskHistory, TaskKinds (перенесена в библиотеку Default), Tasks, TimeZones (добавлена), TimeZonesSettings (добавлена), TimeZonesVirtual (добавлена), WeEmailAction, WeTaskAction, WeTaskActionOptions, WeTaskActionNotificationRoles, WeTaskGroupAction, WeTaskGroupActionOptions, WfSatelliteTaskHistory, WorkflowEngineLogs, WorkflowMain.

  4. Изменены функции: CalendarAddWorkingDaysToDate, CalendarAddWorkingDaysToDateExact, CalendarAddWorkQuants, CalendarGetDateDiff, CalendarGetDayOfWeek, CalendarGetFirstQuantStart, CalendarGetLastQuantStart, CalendarIsWorkTime, FormatAmount (добавлена), GetAggregateRoleUsers.

  5. Изменены процедуры: CalendarGetDefaultPeriodInfo, CalendarGetExclusionPeriodInfo, CalendarGetPeriodInfo, CalendarGetQuantType, CalendarPrepareQuants.

  6. Изменены миграции: Platform, WorkflowEngine (удалена).

  7. Изменены типы карточек: AdSync, AccountUserSettings, ActionHistoryRecord, AuthorCondition (добавлен), BusinessProcessTemplate, Calendar, Car, CompletionOption (добавлен), ContextRole, Deleted, DepartmentCondition (добавлен), DepartmentRole, Dialogs, DocLoad, DocStateCondition (добавлен), DocTypeCondition (добавлен), DynamicRole, Error, InitiatorCondition (добавлен), KrCard, KrCheckStateWorkflowTileExtension, KrDocState (добавлен), KrNotificationStageTypeSettings, KrPermissions, KrSatellite, KrSecondaryProcess, KrSecondarySatellite, KrSettings, KrStageGroup, KrStageTemplate, KrTypedTaskStageTypeSettings (добавлен), KrUniversalTask, KrUniversalTaskStageTypeSettings, Metarole, Notification, NotificationConditionType (добавлен), NotificationSubscriptions (добавлен), NotificationType, NotificationUserSettings (добавлен), Operation (добавлен), PartnerCondition (добавлен), PersonalRole, PersonalRoleSatellite, ServerInstance, StaticRole, TaskRole, TimeZones (добавлен), WfSatellite, WorkflowActionEditor, WorkflowEngineSettings, WorkflowLinkEditor, WorkflowNotificationAction, WorkflowProcessEditor, WorkflowTaskAction, WorkflowTaskGroupAction.

  8. Изменены карточки: Acquaintance, AcquaintanceType (добавлена), AdditionalApprovalCompletedNotification (добавлена), AdditionalApprovalCompletedNotificationType (добавлена), AdditionalApprovalNotification (добавлена), AdditionalApprovalNotificationType (добавлена), Aggregate roles, ApprovedNotification (добавлена), ApprovedNotificationType (добавлена), AuthorCondition (добавлена), CommentNotification (добавлена), CommentNotificationType (добавлена), Default access rules (флажок "Подписка на уведомления"), DepartmentCondition (добавлена), DocStateCondition (добавлена), DocTypeCondition (добавлена), InitiatorCondition (добавлена), NotificationTypes\Other (добавлена), NotificationTypes\System (добавлена), PartnerCondition (добавлена), PasswordExpires, PostgreSql\Roles\Aggregate roles, PostgreSql\Roles\All employees, ReturnFromPostponeNotification (добавлена), ReturnFromPostponeNotificationType (добавлена), TaskNotification (добавлена), TaskNotificationType (добавлена), TasksNotificationType (добавлена), Time zones (settings) (добавлена), TokenNotification (добавлена), WfChildResolutionNotification (добавлена), WfChildResolutionNotificationType (добавлена), WfRevokeNotification (добавлена), WfRevokeNotificationType (добавлена).

  9. Изменены карточки (необязательные изменения): Active Directory Sync (settings), All employees, Author of document, CancelTemplate, Calendar (settings), Computed performers, Continuous document load (settings), Creator of card, DeregisterTemplate, EditTemplate, Initiator, NewIterationTemplate, PostgreSql\Roles\Author of document, PostgreSql\Roles\Computed performers, PostgreSql\Roles\Creator of card, PostgreSql\Roles\Initiator, PostgreSql\Roles\Registrator of document, PostgreSql\Roles\Registrators, PostgreSql\Roles\Supervisor of initiator, RebuildTemplate, RegisterTemplate, Registrator of document, Registrators, RejectTemplate, Server settings (settings), Standard solution (settings), StartProcessTemplate, Supervisor of initiator.

  10. Изменены библиотеки локализации.

  11. Перед обновлением схемы выполните скрипт Fixes/Migration-3.3-pre.*.sql.

  12. После обновления схемы выполните скрипт Fixes/Migration-3.3.*.sql.

  13. После окончания обновления всей конфигурации выполните скрипт Fixes/Migration-3.3-final.*.sql.

  14. Обновление схемы выполните с помощью приложения SchemeEditor или консольной утилиты tadmin ImportSchemeSql (если не используются скрипты Upgrade.bat / upgrade.sh). Приложение TessaAdmin и команда tadmin ImportScheme (соединение с веб-сервисом) не будут запускаться при подключении к серверу до того, как будет импортирована схема данных через прямое подключение к базе данных.

  15. Изменён конфигурационный файл app.json для веб-сервисов (Services/app.json и linux/web/app.json).

  16. Изменены файлы тем интерфейса в подпапке themes для приложения TessaClient.

  17. Если в рабочих местах вы использовали расширение на узле ManagerWorkplaceExtension, то удалите его и добавьте, заново указав настройки.

  18. При обновлении системы вручную (без использования скрипта Upgrade.bat или upgrade.sh) откройте карточку настроек "Временные зоны" и нажмите плитку "Обновить смещения" на левой боковой панели.

  19. После обновления с предыдущих сборок (и для автоматического, и для ручного режима) откройте карточку настроек "Временные зоны". Для зоны "Default" (с идентификатором 0) укажите сдвиг, соответствующей вашему часовому поясу (в соответствии с которым сотрудники работали с системой ранее). Для часового пояса UTC+03:00 в поле "Сдвиг" должно быть "3:00:00". Для временных зон с отрицательным смещением (т.е. UTC-03:00) поставьте флажок "Отрицательное направление сдвига". Теперь сохраните карточку и далее выполните подряд три скрипта: Fixes/SetTimeZoneForMetaAndTaskRoles.**.sql, Fixes/UpdateTimeZoneForTaskHistory.**.sql и Fixes/UpdateTimeZoneForTasks.**.sql (ms - версия для MS SQL, pg - версия для PostgreSQL). Эти скрипты обновят таблицы с заданиями и историей заданий так, чтобы указать им зону "Default" и заданное вами количество часов.

  20. После обновления с предыдущих сборок (и для автоматического, и для ручного режима) проверьте настройки в карточке настроек "Календарь". Скорее всего, во всех полях со временем (в т.ч. в таблице "Исключения") будет смещение на несколько часов, в зависимости от часового пояса, в котором выполнялась настройка. Например, если у вас сервер приложений в часовом поясе UTC+03:00, то в карточке календаря после обновления все поля со временем будут на три часа раньше положенного (рабочий день начинается в 6:00, а не в 9:00, и т.п.). Для их изменения откройте скрипт Fixes/ShiftCalendarSettingsIntervals.**.sql на редактирование (ms - версия для MS SQL, pg - версия для PostgreSQL). В параметре offsetMinutes укажите количество минут для вашего часового пояса, т.е. для UTC+03:00 должно быть указано число 180 (это 60 минут в часе умножить на 3 часа). Выполните скрипт ровно один раз. Далее обновите карточку "Календарь" и проверьте поля со временем ещё раз. После того, как все интервалы будут корректными - выполните штатный перерасчёт календаря.

  21. Временная папка с дампами схемы данных для Windows теперь расположена по пути "%appdata%\tessa\Dumps", а для Linux по пути "$HOMEDIR/.config/tessa/dumps".

  22. Расширения web-клиента, использующие старые объекты viewContext, должны быть переписаны с использованием нового API. Расширения на карточки это не затрагивает.

  23. Команда Select в утилите tadmin теперь выводит значения во всех строках и колонках в формате CSV (с учётом эскейпинга). Старое поведение (первая колонка первой строки без эскейпинга) можно восстановить, указав параметр -text. Если вы использовали эту команду в своих скриптах, то проверьте, требуется ли указать параметр -text в вашем случае (отличается ли результат с параметром и без него).

  24. В карточках с типом "Уведомление" теперь поле "Тип уведомления" является обязательным. По умолчанию для всех существующих уведомлений прописывается тип уведомления "Прочее". После обновления следует задать корректный тип уведомления для всех уведомлений, где это необходимо.

  25. Убедитесь, что в карточках правил доступа для состояния "Проект" поставлен новый флажок "Подписка на уведомления". В противном случае для карточек в состоянии "Проект" также будет доступна кнопка "Редактировать".

  26. В проект расширений Tessa.Extensions.Client добавлена ссылка на сборку System.Net.Http из состава .NET Framework.

  27. В клиентских расширениях desktop-клиента для модели представления GridViewModel в контроле "Таблица" добавлены свойства AddRowButton и DeleteRowsButton с объектами-параметрами для кнопок "Добавить" и "Удалить". Используйте их вместо свойств AddRowCommand, AddButtonVisibility, DeleteRowsCommand, DeleteButtonVisibility.

  28. В методе-расширении unityContainer.RegisterServer() удалён параметр registerSettingsFromConfig, теперь метод работает так, если бы параметр всегда был равен false. Явно вызовите метод unityContainer.RegisterApplicationServerSettingsFromConfig() для регистрации настроек.

  29. Во всех методах объекта INotificationManager был изменен набор параметров. Теперь различные варианты метода вместо нескольких общих параметров принимают объект INotificationSendContext, который содержит все ранее передаваемые параметры.

  30. Удалены классы-реализации INotificationSender для типовых и системных уведомлений. Используйте отправку уведомлений по карточкам-уведомлениям. Кастомизированные реализации INotificationSender продолжат работать.

  31. В интерфейсе IUIHost параметры методов CreateCardAsync, OpenCardAsync и ShowCardAsync перенесены в объекты настроек options. В коде расширений проверьте вызовы этих методов. Также в объект options передайте Splash, если операция выполняется в сплэш-окне, это гарантирует корректное закрытие сплэш-окна, если ваш код будет вызван с переопределением открытия в модальном диалоге.

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

  33. Было удалено представление KrApprovalStates, поскольку оно полностью дублировало KrDocStates. Во всех представлениях и типах карточек, где у вас использовалось это представление, замените его на KrDocStates. Вы можете найти все места использования поиском по папке Configuration.

  34. Прогресс активной операции теперь является вещественным числом Double вместо целого числа Int16. Число по-прежнему представляет проценты от 0 до 100, но в представлении выводится дополнительно два знака после запятой (актуально для длительных операций). Проверьте код ваших расширений, использующий IOperationRepository.

  35. Удалены методы RuntimeHelper.InvokeAsync(), используйте вместо них методы Task.Run(). Также удалены параметры longRunning из асинхронных методов, для выполнения длительной обработки в отдельном потоке используйте вызов Task.Factory.StartNew(() ⇒ { …​ }, CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default). Если вы не уверены, будет ли обработка длительной (десятки секунд), то используйте Task.Run().

  36. В интерфейс ICardContentStrategy добавлен метод Move(sourceContext, targetContext). Если вы используете собственную реализацию интерфейса ICardContentStrategy для организации файловых хранилищ, то добавьте определение этого метода в интерфейс. В качестве реализации "влоб" вы можете сначала скопировать файл, и затем удалить исходный файл. Или же вы можете оптимизировать, и, например, использовать метод System.IO.File.Move(…​).

  37. Удалено свойство IConnectionSettings.ReceiveTimeout, поскольку оно не используется при подключении со стороны клиента. Также удалены аналогичные настройки "ReceiveTimeout" в конфигурационных файлах. Удалять их необязательно, но они не оказывают влияние на клиентские таймауты.

  38. В расширениях во всех местах вызова метода ICardStoreExecutionStrategy.InsertTaskHistory убедитесь, что заполнены свойства TimeZoneID и TimeZoneUtcOffsetMinutes в объекте CardTaskHistoryItem.

12.2. Добавление и изменение функциональности

  1. Добавлена поддержка бизнес-календарей в различных временных зонах. Настройки доступны в карточке настроек "Временные зоны" и описаны в руководстве администратора. Сроки задач по бизнес-календарю считаются в часовом поясе исполнителя. У каждого сотрудника и у каждой роли есть часовой пояс (для контекстных ролей он определяется в момент расчёта по часовому поясу сотрудника). По умолчанию все роли используют временную зону по умолчанию, которая равна UTC+03:00, её можно изменить при установке скриптом Setup.bat/setup.sh или позже через карточку настроек. Если в карточке или в представлении указан срок по календарю для исполнителя, часовой пояс которого отличается от текущего, то рядом со сроком в скобках указывается этот пояс, например: "до завершения 3 дня (UTC+4:00)".

  2. Плагин синхронизации с Active Directory теперь функционирует на сервере Linux, а также при соединении с другими каталогами LDAP помимо Active Directory. Все связанные настройки переименованы с указанием "LDAP" в названии.

  3. В карточке настроек "Синхронизация с AD / LDAP" в блоке "Ручная синхронизация" добавлена кнопка "Запустить синхронизацию", по которой можно отметить флажками типы объектов, для которых будет запущена синхронизация: сотрудники, подразделения и статические роли (группы).

  4. В модуле потокового сканирования добавлены настройки выравнивания штрих-кода и печати без заголовка. Плитка "Выбрать принтер" заменена на "Выбрать принтер и напечатать".

  5. Добавлен флажок "Синхронизируется независимо от корневых элементов" в раздел Active Directory для карточек подразделения/сотрудника/статической роли. Флажок позволяет синхронизировать объект, который не входит в корень синхронизации, вместо его скрытия.

  6. Для заданий "Подписание" добавлены ссылки "Подписать" и "Отказать" в письмах мобильного согласования.

  7. В маршрутах для типов этапов добавлена настройка "Использовать дату выполнения", позволяющая указывать в интерфейсе или в скриптах конкретную дату/время помимо срока в бизнес-днях. Она включена для типов этапов "Доработка", "Настраиваемое задание", "Регистрация", "Согласование", "Подписание".

  8. В маршрутах добавлен тип этапа "Типизированное задание". Он позволяет связывать с этапом маршрута любые типы заданий, настроенные в TessaAdmin. Список доступных типов заданий определяется в таблице на вкладке "Настройки этапов маршрута" в карточке настроек "Типовое решение".

  9. В маршрутах для типа этапа "Настраиваемое задание" добавлено поле "Вид" для указания вида задания, позволяющего заменить отображаемое название задания.

  10. В маршрутах для варианта завершения в типе этапа "Настраиваемое задание" добавлено поле "Сообщение", в котором можно вывести любой поясняющий текст для пользователей, выводимый в форме варианта завершения.

  11. В маршрутах изменён порядок колонок в таблице "Маршрут" на более оптимальный для шаблонов этапов и для вкладки "Маршрут" в документах.

  12. В TessaClient при поиске по таблицам карточки и по истории заданий искомый текст теперь выделяется жёлтым фоном.

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

  14. В TessaAdmin добавлено расширение на узел дерева рабочего места RefSectionExtension, которое позволяет указать список значений RefSection и список алиасов параметров представлений, по которым будет отображаться или скрываться узел в режиме отбора (по троеточию из ссылочных контролов). Параметры используются для того, чтобы узел отображался при маппинге на один или несколько указанных параметров. Если расширение не используется, то задействуются настройки представлений, размещённых в узле. Также при отсутствии представлений, но при наличии любых расширений (например, расширение на узел с папкой) узел будет скрываться, если не указано его отображение с помощью RefSectionExtension, или при написании расширений кодом. Код расширения RefSectionExtension доступен в коде типового решения в классе Tessa.Extensions.Default.Client.Workplaces.RefSectionExtension.

  15. В TessaAdmin для расширения CreateCardExtension на создание карточки из узла рабочего места добавлена настройка "Алиас параметра представления для поиска по идентификатору строки". Если указать алиас параметра представления, то при создании карточки в диалоговом окне появится кнопка "Сохранить и выбрать", по которой карточка сохраняется, диалог закрывается, и далее карточка выбирается в контроле "Ссылка" или добавляется в контрол "Список".

  16. В TessaAdmin для расширения CreateCardExtension на создание карточки из узла рабочего места добавлена настройка "Открытие созданной карточки" с указанием способа: "Во вкладке в главном окне" - это обычное создание карточки, выбрано по умолчанию; "В модальном диалоге" - карточка открывается в отдельном диалоговом окне. Настройка игнорируется в web-клиенте в текущей версии.

  17. При создании карточки с использованием кнопки в расширении представления CreateCardExtension вкладка с создаваемой карточкой будет открыта справа от выбранной вкладки с представлением.

  18. Изменена иконка для кнопки открытия вкладки с рабочим местом.

  19. В конфигурационном файле app.json для веб-сервисов добавлен раздел "WebServerLimits", в котором перечислены настройки для ограничений веб-сервера Kestrel (такие как максимальное количество соединений или максимальный размер запроса). Не изменяйте настройки по умолчанию, если явно не выявлена проблема, которая исправляется изменением одного из ограничений. Описание настроек доступно в руководстве по установке в разделе "Настройка ограничений и таймаутов WebServerLimits".

  20. В desktop-приложениях TessaClient и TessaAdmin в конфигурационном файле *.exe.config добавлена настройка "UseFilePreview64Bit" (по умолчанию false). Если указано "true", то система отображает предпросмотр файла в 64-битном процессе, если приложение также запущено в 64-битной среде. Если указано "false", то предпросмотр выполняется в 32-битном процессе. В версиях системы, начиная со сборки 2.5.2 (и 2.4.11 для LTS), использовался предпросмотр в режиме "true", но это могло приводить к проблемам со старыми версиями Office или с предпросмотром писем Outlook (в любых версиях). Рекомендуется оставить значение по умолчанию "false", если предпросмотр не начал работать хуже с этой версией для используемых вами форматов файлов. Настройка не оказывает влияние на предпросмотр при запуске на 32-битных ОС. При запуске на 64-битной ОС с использование запускающего файла TessaClient32.exe настройка по-прежнему актуальна, т.к. при установке true предпросмотр будет 64-битным (по разрядности ОС).

  21. В web-клиенте расширены возможности представлений: master-detail представления, в т.ч. типовые отчёты по текущим и завершённым заданиям; выделение по ячейкам; множественное выделение с зажатым Shift или при нажатии на кнопку множественного выбора на панели пейджинга; подсветка строк и ячеек (например, "Мои задания" и "Мои документы"); можно сортировать кликом по заголовку столбца (помимо отдельной кнопки); в контекстном меню на заголовке добавлены группировка по столбцу и скрытие столбцов. Функциональность работает аналогично desktop-клиенту.

  22. В web-клиенте добавлены функции по работе со вкладками: контекстное меню на вкладках с возможностью их массового закрытия; по умолчанию открывается только одно рабочее место или в соответствии с диалогом "Мои настройки"; добавлена кнопка открытия новых рабочих мест; возможность закрытия вкладок с рабочими местами. Функциональность работает аналогично desktop-клиенту.

  23. В web-клиенте расширены возможности работы с деревом рабочего места: ширина дерева сохраняется на устройстве пользователя и больше не сбрасывается при обновлении страницы в браузере; сабсеты теперь могут быть добавлены или раскрыты по умолчанию, если это определено в настройках рабочего места; обновление плиткой "Обновить" или кнопкой F5 теперь обновляет и представление, и иерархию раскрытых сабсетов (асинхронно); добавлено контекстное меню на узлах дерева; добавлена группа плиток "Настройки дерева" в левой панели, в которой можно в т.ч. скрыть/показать дерево. Функциональность работает аналогично desktop-клиенту.

  24. В web-клиенте добавлены функции по созданию поисковых запросов из меню фильтра или из контекстного меню на узлах дерева. Функциональность работает аналогично desktop-клиенту.

  25. В web-клиенте реализованы все типовые клиентские расширения на представления, кроме диаграмм, которые присутствовали в desktop-клиенте. Это включает расширение на контекстное меню представления (по умолчанию в представлении "Мои документы") и расширение на рабочее место руководителя (папки с заданиями). Новое API позволяет реализовывать свои такие же расширения.

  26. В web-клиенте при изменении карточки и возврате на вкладку с представлением, из которого открыта карточка, это представление теперь автоматически обновляется, отображая строку с изменённой карточкой. Функциональность работает аналогично desktop-клиенту.

  27. В web-клиенте улучшена разметка карточки, теперь используются горизонтальные и вертикальные отступы между контролами и блоками.

  28. В web-клиенте для диалоговых окон типа MessageBox добавлены сочетания клавиш: Y = Да, N = Нет, O (англ. раскладка) = ОК, C = Отмена. Для большинства окон также работают горячие клавиши Enter (подтверждение) и Esc (закрытие без подтверждения).

  29. В web-клиенте окно входа автоматически определяет язык пользователя по HTTP-заголовку "Accept-Language". Если для пользователя браузер вернул русский язык, то выводятся кнопки и сообщения на русском языке, для любого другого языка - на английском. Текст переводимых строк настраивается в файле localization.json, который обычно расположен рядом с файлом app.json веб-сервиса. Там же можно добавить локализацию для других языков.

  30. В web-клиенте добавлено контекстное меню в контроле карточки "Таблица" и на вкладке "История заданий". API также было расширено для изменения контекстного меню в расширениях.

  31. В web-клиенте реализован поворот страниц в предпросмотре для PDF и форматов файлов, конвертируемых в PDF (в т.ч. TIFF и офисные форматы .doc, .docx и др.) Страница поворачивается только при отображении, это не изменяет документ. Функция работает аналогично desktop-клиенту.

  32. В web-клиенте реализованы функции всех настроек колонок в контроле "Таблица", в т.ч.: "Имя выбираемого контрола", "Выравнивание", "Выравнивание заголовка", "Не разрывать строки", "В одну строку", "Без оконечных пробелов".

  33. В web-клиенте для представлений реализовано ограничение длины выводимого текста по настройке колонки в метаинформации #column(MaxLength: count). Функциональность работает аналогично desktop-клиенту, но не поддерживаются всплывающие подсказки с полным текстом значения в ячейке (как и всплывающие подсказки в других местах системы).

  34. В приложении Tessa Applications в окне ввода логина/пароля добавлен флажок "Сохранить пароль", позволяющий сохранить введённые логин и пароль в настройках сервера, если вход будет успешен. Изменить сохранённые логин/пароль или очистить их можно по-прежнему в настройках сервера. Поскольку Tessa Applications обратносовместимый со старыми серверами, в т.ч. от сборок 2.х, то его можно обновить, не обновляя платформу.

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

  36. Для администраторов в окне "Мои настройки" и в карточке сотрудника на вкладке "Мои настройки" добавлена кнопка "Сохранить и применить настройки для сотрудников". Кнопка позволяет указать сотрудников или роли (в т.ч. роль "Все сотрудники"), которым будут скопированы текущие выбранные настройки.

  37. В карточке "Настройки сервера" добавлено поле "Расширения файлов со встроенными предпросмотром в desktop-клиенте с преобразованием в PDF". Укажите в этом поле расширения файлов без ведущей точки, разделённые пробелом, предпросмотр для которых выполняется через преобразование в PDF в desktop-клиенте, т.е. аналогично предпросмотру в web-клиенте. Например, укажите: "doc docx xls xlsx ppt pptx odt" (без кавычек). Таким образом, на компьютере пользователей не требуется установленное приложение для предпросмотра (такое как Word). Однако, первый предпросмотр для каждой версии файла с такими расширениями приводит к конвертации в PDF, которая может занять длительное время для больших файлов (при этом должен быть запущен Chronos и настроен LibreOffice). Если файл только что добавлен или его содержимое изменено (файл жёлтый), то предпросмотр с конвертацией отключается для таких файлов (т.е. используется обычный предпросмотр как раньше) до того момента, как карточка с файлами будет сохранена. По умолчанию список расширений пуст, т.е. предпросмотр выполняется приложениями на компьютере пользователя. Переопределить поведение можно в расширениях.

  38. В TessaAdmin в редакторе типов карточек добавлена возможность размещать блоки с контролами в узлах настраиваемой сетки, используя конструктор по кнопке "Расположение блоков" (рядом с кнопками предпросмотра карточки). Для гибкого управления разметкой также добавлен флажок "Включить прокрутку" в контролах "Вкладки" и "Контейнер", флажок "Разрешить прокрутку" в контроле "Таблица", и флажок "Растягивать по вертикали" в блоках. Если включён режим размещения блоков в сетке, то над списком блоков выводится надпись "Форма с расположением блоков" вместо "Стандартная форма".

  39. В TessaAdmin в редакторе типов карточек добавлен тип блока "Горизонтальный блок", позволяющий размещать элементы управления на одной строке. Элементы управления, не уместившиеся на строке, автоматически переносятся на следующую строку.

  40. В TessaAdmin в редакторе типов карточек добавлен тип элемента управления "Предпросмотр файлов", используемый для просмотра файлов. Укажите настройку "Алиас предпросмотра" для контрола "Список файлов", чтобы связать список файлов с контролом предпросмотра, у которого задан соответствующий алиас. Если все контролы "Список файлов" связаны с контролами предпросмотра, то стандартная область предпросмотра не выводится.

  41. В TessaAdmin в редакторе типов карточек добавлена настройка блоков "Заголовки слева", позволяющая размещать заголовки элементов управления слева, а не сверху.

  42. В TessaAdmin на вкладке "Локализация" при создании строки теперь сразу открывается окно её редактирования.

  43. В TessaAdmin на вкладке "Информация" теперь выводится количество доступных лицензий мобильного согласования при наличии соответствующего модуля.

  44. В TessaAdmin в настройках формы в типах карточек добавлен флажок "Без предпросмотра файлов". Если он включён, то стандартная область предпросмотра не отображается на этой вкладке, даже при наличии элемента управления со списком файлов. При этом область предпросмотра нельзя отобразить через меню на списке файлов, и она не управляется вместе со всеми областями на других вкладках при их скрытии/отображении.

  45. В TessaAdmin в настройки рабочего места добавлен флажок "Скрыть дерево по умолчанию". Если он установлен, то при открытии рабочего места дерево представлений скрывается. Это актуально, в первую очередь, для вкладок с единственным представлением без сабсетов, таким как РМ Руководителя с представлением KrManagerTasks.

  46. При использовании неизвестных системе типов контролов, блоков, форм, валидаторов и расширений типов для карточек/файлов/заданий теперь не происходит ошибок. При отображении на клиенте соответствующие элементы интерфейса скрываются, а в TessaAdmin можно просмотреть их структуру или удалить (ранее тип, содержащий неизвестные объекты, не импортировался, или его редактирование было невозможным). Все неизвестные объекты могут быть удалёны кнопками "Исправить" или "Исправить всё".

  47. В настройках типов карточек для контрола "Кнопка" добавлена настройка "Использовать всё пространство". При включении данной настройки кнопка будет растягиваться на все выделенное под нее пространство по ширине и высоте. По умолчанию при отключённой настройке ширина и высота кнопки определяются размером текста внутри неё.

  48. В настройках колонки в схеме данных добавлен флажок "Автоинкрементая колонка", позволяющий создавать колонку, значение в которой определяется автоматически средствами СУБД. Также доступны настройки "Начальное значение" и "Шаг", чтобы определить, каким образом будет изменяться числовое значение в колонке при добавлении строк в таблицу.

  49. В конструктор процессов добавлена возможность выгрузки скриптов процесса в проект на языке C# для возможности изменения скриптов процесса с помощью более продвинутого редактора (например, Visual Studio).

  50. В конструктор процессов добавлена возможность копирования сразу нескольких узлов с сохранением связей между ними. Узлы можно выделять, обведя их рамкой с зажатым Shift, или используя Ctrl+клик по узлу.

  51. В конструкторе бизнес-процессов в действие "Уведомление" добавлен скрипт для модификации шаблона письма перед отправкой и поле "Тип уведомления" в блок "Настраиваемое уведомление", если не используется карточка уведомления для формирования письма.

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

  53. В конструкторе бизнес-процессов в действия "Задания" и "Группа заданий" добавлены настройки для возможности указать карточку уведомления, отправляемого при завершении задания с определённым вариантом завершения на заданный список ролей, а также при необходимости автору и/или исполнителю. Данные настройки находятся в таблице "Варианты завершения".

  54. Кнопка возврата в основную карточку из карточки задачи в TessaClient размещена на панели тулбара (сверху от карточки) вместо гиперссылки. Панель тулбара в текущей версии недоступна в web-клиенте, поэтому там используется гиперссылка, как было раньше.

  55. Добавлена подсказка к списку ролей в карточках правил доступа.

  56. Доработаны настройки для экрана загрузки desktop-приложений. В параметре LogoText можно указать строку с символами "\n", заменяемыми на перевод строки. В новом параметре LogoHideVersion укажите true, чтобы скрыть строку с версией. Параметры используются в конфигурационных файлах TessaClient.exe.config, TessaAdmin.exe.config, TessaAppManager.exe.config.

  57. Контрол "Список файлов" теперь доступен для добавления в типах заданий. Однако, для его использования потребуется поддержка клиентских и серверных расширений, по умолчанию список файлов будет пустым и без возможности добавить файл.

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

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

  60. В тип карточки "Тип уведомления" добавлены новые настройки, которые позволяют определить тип уведомления (глобальный, по карточке), возможность подписаться на уведомления данного типа по карточке, видимость данного типа уведомления обычным пользователям.

  61. Добавлен новый справочник "Тип условия для правил уведомлений", который определяет типы условий, используемые при фильтрации уведомлений по правилам.

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

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

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

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

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

  67. Добавлена хранимая функция FormatAmount, используя которую можно форматировать значение суммы Amount с разделителями разрядов. Например, для MSSQL: SELECT [FullNumber], [dbo].[FormatAmount]([Amount]) FROM [DocumentCommonInfo] WITH (NOLOCK). Для PostgreSQL: SELECT "FullNumber", "FormatAmount"("Amount") FROM "DocumentCommonInfo".

  68. Переменная окружения TESSA_CONFIG_ROOT может использоваться для поиска файлов app.json и extensions.xml во всех приложениях системы, в т.ч. для desktop-клиентов, консольной утилиты tadmin, веб-сервиса и сервиса Chronos. Если переменная не задана, то используется папка со сборкой Tessa.dll.

  69. Отправка всех стандартных уведомлений системы переделана на использование карточек уведомлений. Теперь пользователи могут отписаться от определенных типов уведомлений или определить правила на их получение.

  70. В представлении "Шаблоны процессов" добавлен мультивыбор для возможности массового удаления и экспорта шаблонов бизнес-процессов.

  71. В карточке настроек "Календарь" по умолчанию теперь заданы более распространённые параметры для рабочего дня: с 9 до 18 с перерывом с 13 до 14.

  72. Добавлена поддержка Swagger для документации REST API для стандартных контроллеров ASP.NET Core и контроллеров в расширениях Tessa.Extensions.Server.Web (и в других сборках, перечисленных в настройке WebControllers в app.json). Убедитесь, что в app.json веб-сервиса установлена настройка SwaggerDocIsEnabled, равная true. После этого перейдите по адресу /swagger (например: https://localhost/tessa/web/swagger).

  73. Активную операцию теперь можно открыть как виртуальную карточку двойным кликом. Представление с операциями доступно в рабочем месте "Администратор", папка "Прочее", представление "Активные операции".

  74. В рабочем месте "Администратор" добавлены кнопки создания карточки на панель инструментов для большинства справочников.

  75. В рабочем месте "Администратор" в папке "Прочее" добавлено представление "Варианты завершения", через которое можно создавать, изменять и удалять варианты завершения заданий как виртуальные карточки. При изменениях вариантов завершения на сервере выполняется изменение таблицы в схеме данных, т.е. работа со справочником вариантов завершений аналогична редактированию таблицы CompletionOptions на вкладке "Схема".

  76. Прогресс активной операции теперь является вещественным числом Double вместо целого числа Int16. Число по-прежнему представляет проценты от 0 до 100, но в представлении выводится дополнительно два знака после запятой (актуально для длительных операций).

  77. В подсистему плейсхолдеров добавлен новый плейсхолдер task, который позволяет получить данные задания (AuthorID/AuthorName, RoleID/RoleName, CreatedByID/CreatedByName и др. свойства по аналогии с таблицей Tasks и объектом CardTask; но это не секции задания!). Задание должно быть указано в контексте обработки плейсхолдеров. Плейсхолдер по функциональности аналогичен плейсхолдеру "f", за исключением, что для указания первого поля не требуется указывать секцию. Например, плейсхолдер {task:AuthorName} вернет имя автора, а {task:AuthorID→PersonalRoles.Email} вернёт его email.

  78. В подсистему плейсхолдеров для плейсхолдеров "f" и "t" добавлен атрибут task, который указывает, что в качестве источника данных для плейсхолдера необходимо использовать секции задания, указанного в контексте обработки плейсхолдеров, а не секции карточки. Например, {f:TaskCommonInfo.Comment task} вернет поле "Comment" из секции задания "TaskCommonInfo".

  79. В подсистему плейсхолдеров добавлены новые плейсхолдеры "info" и "tinfo", которые работают аналогично плейсхолдерам "f" и "t", но в качестве источника данных берут info замены плейсхолдеров. Параметр плейсхолдера пишется как последовательность ключей, разделенных через точку и определяющих путь к искомому объекту в переданном info. Например: Key1.Key2.Key3. Плейсхолдер "info" поддерживает написание составных параметров для получения данных из базы. Например, {info:Key1.Key2.UserID→PersonalRole.Email} вернет email пользователя, если "Key1.Key2.UserID" содержит идентификатор сотрудника. Плейсхолдер "tinfo" не поддерживает написание составных параметров.

  80. В форматтер плейсхолдеров #barcode, используемый для вывода изображений со штрих-кодом, добавлен параметр l=alignment для вывода метки с текстовым представлением штрих-кода рядом с изображением. Описание см. в руководстве администратора. Пример: {f:DocumentCommonInfo.FullNumber:#barcode(t=ean13;l=bottomcenter;w=150;h=30)}

  81. Утилита tadmin: добавлена команда DeleteCards, позволяющая удалять карточки (без возможности восстановления из корзины). Идентификаторы удаляемых карточек указываются параметром без имени (разделяются пробелом, запятой или точкой с запятой), или из стандартного ввода, т.е. при вводе с клавиатуры или при получении списка из предыдущей команды, например: tadmin Select getCardIds.sql -q|tadmin DeleteCards

  82. Утилита tadmin: добавлена команда ExportCards, выполняющая экспорт карточек. Идентификаторы экспортируемых карточек указываются параметром без имени (разделяются пробелом, запятой или точкой с запятой), или из стандартного ввода, т.е. при вводе с клавиатуры или при получении списка из предыдущей команды, причём имя карточки можно указать второй колонкой через точку с запятой. Параметр -l:library.cardlib позволяет указать имя создаваемой библиотеки, а параметр -o:folder - имя подпапки относительно библиотеки (или относительно текущей папки, если библиотека не указана). Пример запроса из другой команды: echo SELECT "ID", "Name" FROM "Applications"|tadmin Select -q|tadmin ExportCards -l:Cards/Tessa.cardlib -o:Applications

  83. Утилита tadmin: команда Select теперь выводит значения во всех строках и колонках в формате CSV (с учётом эскейпинга). Старое поведение (первая колонка первой строки без эскейпинга) можно восстановить, указав параметр -text. Добавлен параметр -top:N для ограничения количества строк, и параметр -s:char для указания символа-разделителя между колонками CSV (по умолчанию точка с запятой). Параметр -h выводит имена колонок как первую строку в CSV.

  84. Утилита tadmin: команды Select и Sql могут принимать несколько скриптов или путей к папкам, разделённых пробелами. Если параметр с именем скриптов не указан, то текст запроса запрашивается из стандартного консольного ввода. Это позволяет, например, передавать текст выполняемой команды таким образом: echo DELETE FROM Sessions|tadmin Sql

  85. Утилита tadmin: добавлена команда TimeZone, позволяющая выполнить операции с временными зонами, а именно: Update - обновить смещение у определённого идентификатора; GenerateFromSystem - заполнить временные зоны из настроек ОС на сервере приложений; SetDefaultForAllRoles - установить временную зону по умолчанию для всех ролей; UpdateInheritance - проверить и исправить наследование временных зон между связанными карточками подразделений и сотрудников; UpdateOffsets - проверить и исправить смещения в карточках ролей по смещениям в карточке настроек. Вы можете указать одну или несколько выполняемых операций. Аналогичные функции доступны через интерфейс карточки настроек "Временные зоны".

  86. Утилита tadmin: в различных командах при указании тихого режима параметром -q теперь не требуется указывать -nologo для отключения вывода логотипа, в этом случае он не будет выводится по умолчанию. У команды Select также был добавлен вывод логотипа по умолчанию (если не указан тихий режим -q).

  87. API: Плагин синхронизации с Active Directory теперь поддерживает расширения IAdExtension для определения соответствия между полями объектов из AD/LDAP, которые переносятся в поля карточек сотрудника/роли/подразделения. Подробнее в типовом расширении DefaultAdExtension. Проектное расширение должно наследоваться от типового, переопределять его методы и затем регистрироваться в Unity по интерфейсу IAdExtension.

  88. API: В типе этапа "Создание карточки" в режиме "Открыть новую карточку" добавлена возможность модифицировать карточку перед открытием в скрипте этапа. Пример: NewCard.DocumentCommonInfo.Subject = "Новая тема документа". Также можно использовать свойство NewCardTables для коллекционных секций и метод GetNewCard() для получения объекта Card.

  89. API: В конструкторе бизнес-процессов в действие "Создать карточку" в сценарий добавлена возможность использовать файловый контейнер создаваемой карточки в свойстве FileContainer.

  90. API: В обработчик бизнес-процессов в объект Context (тип IWorkflowEngineContext) добавлено свойство StoreDateTime, которое определяет дату/время вызова сохранения карточки.

  91. API: В объект NotificationEmail, используемый в INotificationManager как объект, содержащий всю информацию об отправляемом уведомлении, добавлены свойства ModifySubjectFunc и ModifyBodyFunc, в которые можно передать функцию, изменяющую тему и тело письма соответственно индивидуально для каждого получателя.

  92. API: Для объекта KrNotificationManager, управляющего всплывающими уведомлениями по заданиям, добавлен интерфейс IKrNotificationManager, позволяющий переопределить поведение уведомлений.

  93. API: Для всех скриптов конструктора процесса добавлены новые свойства ActionObject, ActionHash, NodeObject, NodeHash, ProcessObject, ProcessHash, SignalHash, которые возвращают объект и параметры действий, узла, процесса или сигнала соответственно.

  94. API: Методы DefaultDateFormatting и DefaultSinglePerformerFormatting из класса Tessa.Extensions.Default.Shared.Workflow.KrProcess.Formatters.StageTypeFormatterBase теперь объявлены как protected.

  95. API: Для обработчика сообщений мобильного согласования IMessageProcessor добавлена возможность обработки файлов, приложенных к письму. В метод IMessageProcessor.ProcessMessage в параметр message добавлено свойство Attachments, в котором передаются все приложенные к письму файлы в виде объектов NoticeAttachment. Обработчик по умолчанию приложенные файлы игнорирует.

  96. API: В web-клиенте реализовано API по работе с представлениями посредством ViewContext, в т.ч. с возможностью написания собственных клиентских расширений для представлений. Новое API дублирует функциональность толстого клиента. Примеры использования доступны в расширениях default.

  97. API: В объекте предпросмотра в desktop-клиенте доступен контрол предпросмотра IFilePreviewModel.PagingControl, и событие подписки на изменения его свойств IFilePreviewModel.PagingControlPropertyChanged. Вы можете подписаться на переключение страницы в области предпросмотра, переключать текущую страницу, выполнять её поворот и др. Область предпросмотра доступна на вкладке карточки в свойстве IFormViewModel.FilePreview (cardModel.Forms) или в контроле "Предпросмотр файлов": FilePreviewViewModel.FilePreview (control as FilePreviewViewModel). Пример синхронизации номера страницы есть в расширении для карточки автомобиля: Tessa.Extensions.Default.Client.UI.CarUIExtension.

  98. API: Элемент управления файлами IFileControl теперь можно связать с другим контейнером IFileContainer, изменив его свойство IFileControl.Container.

  99. API: Объектная модель файлов доработана для поддержки отдельного объекта содержимого IFile.PreviewContent для предпросмотра файла, который может отличаться от основного контента файла, используемого для открытия, редактирования и выгрузки. Например, для предпросмотра используется файл .docx, сконвертированный в .pdf.

  100. API: Добавлен вызов метода SetFilePreviewAction, чтобы переопределить поведение для предпросмотра файлов с их конвертацией в PDF (или другой формат). Рекомендуется вызывать метод в расширениях ICardUIExtension таким образом: context.Model.FileContainer.SetFilePreviewAction(ctx ⇒ …​). Также можно вызвать метод на контроле файлов IFileControl. Пример доступен в типовом расширении CarUIExtension для карточки "Автомобиль".

  101. API: Добавлена возможность открытия карточек в модальном диалоге с помощью IAdvancedCardDialogManager (можно получить из Unity в расширениях через конструктор). В диалоге можно создавать новую карточку, открывать существующую, а также отображать модель карточки ICardModel или заданный ICardEditorModel в модальном окне.

  102. API: Добавлено свойство ICardEditorModel.Toolbar с кнопками в верхней части окна (такими как "Сохранить и закрыть" или "Обновить"). Можно отображать как в диалоге, так и в карточках, открываемых во вкладках. Если список кнопок ICardToolbarViewModel.Actions пуст, то тулбар автоматически скрывается; при добавлении хотя бы одной отображаемой кнопки тулбар автоматически отображается.

  103. API: Добавлено свойство ICardEditorModel.DialogName для указания названия диалога, чтобы настраивать кнопки в тулбаре и другие свойства карточки в зависимости от того, зачем этот диалог был открыт и в какой ситуации. При открытии карточки во вкладке (не в диалоге) свойство равно null.

  104. API: Добавлено свойство ICardEditorModel.BottomDialogButtons для отображения кнопок в диалогах с карточками в нижней части окна (не используется для карточек, отображаемых во вкладках).

  105. API: Добавлено свойство ICardEditorModel.StatusBarIsVisible, позволяющее скрыть/показать строку статуса (снизу от карточки).

  106. API: Добавлено свойство ICardEditorModel.WithUIExtensions для отключения вызова любых расширений ICardUIExtension для этого объекта ICardEditorModel. По умолчанию значение равно true, и расширения включены. Укажите false, чтобы отключить расширения.

  107. API: В интерфейсе IUIHost параметры методов CreateCardAsync, OpenCardAsync и ShowCardAsync перенесены в объекты настроек options. В них также добавлены новые свойства: OpenToTheRightOfSelectedTab для открытия карточки справа от текущей выбранной вкладки; WithUIExtensions для отключения расширений UI; Splash для связи операции с карточкой со сплэш-окном, которое будет закрыто при открытии в диалоге; WithDialogWallpaper и DialogWindowModifierAction управляют окном при открытии в диалоге.

  108. API: Для модели представления GridViewModel в контроле "Таблица" добавлены свойства AddRowButton и DeleteRowsButton с объектами-параметрами для кнопок "Добавить" и "Удалить". Используйте их вместо свойств AddRowCommand, AddButtonVisibility, DeleteRowsCommand, DeleteButtonVisibility. Через свойство Caption таким кнопкам можно изменить заголовок.

  109. API: Добавлено свойство-делегат RuntimeHelper.ConfigRootPathFunc для переопределения папки, в которой выполняется поиск app.json и extensions.xml. Также добавлен делегат RuntimeHelper.AssemblyResolveActualLocationFunc, позволяющий определить действительное местоположение сборок Assembly, по умолчанию оно вычисляется из свойства assembly.CodeBase.

  110. API: В классе DbManager добавлены методы для асинхронного выполнения запросов. Такие методы называются как синхронные, но имеют суффикс Async, например: var reader = await db.ExecuteReaderAsync().

  111. API: Интерфейс Tessa.Platform.EDS.IEDSManager теперь доступен на сервере Linux. Вы можете запросить его на сервере из расширений, чтобы использовать криптографические функции на сервере.

  112. API: Добавлен класс DeleteIntegerCardOperation для массового удаления виртуальных карточек из представления, где в качестве идентификатора карточки используется целое число. Пример использования см. в расширении Tessa.Extensions.Default.Client.Tiles.KrDocStateTileExtension.

  113. API: Добавлен базовый класс OpenCardIntegerDoubleClickAction, рекомендуемый для разработки расширений на действие с карточкой по двойному клику, где идентификатором карточки является целое число. Пример использования см. в расширении Tessa.Extensions.Default.Client.Cards.OpenFromKrDocStatesOnDoubleClickExtension.

  114. API: Удалены методы RuntimeHelper.InvokeAsync(), используйте вместо них методы Task.Run(). Также удалены параметры longRunning из асинхронных методов, для выполнения длительной обработки в отдельном потоке используйте вызов Task.Factory.StartNew(() ⇒ { …​ }, CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default). Если вы не уверены, будет ли обработка длительной (десятки секунд), то используйте Task.Run().

  115. API: Добавлен метод ICardContentStrategy.Move(sourceContext, targetContext), позволяющий выполнить перенос содержимого версии файла из одного местоположения в другое. Метод может использоваться аналогично методу Copy(sourceContext, targetContext) как для переноса между разными хранилищами, так и для быстрого переноса в пределах одного хранилища (метод выполняется не медленнее, чем копирование с последующим удалением исходного файла).

  116. API: Обновлены библиотеки: .NET Core 2.2.5, BarcodeLib 2.2.2, BitMiracle.LibTiff.NET 2.4.633, BrotliSharpLib 0.3.3, DocumentFormat.OpenXml 2.9.1, ITFoxTec.Identity.Saml2 3.0.1, Microsoft.CodeAnalysis.CSharp 3.0.0, Newtonsoft.Json 12.0.2, NLog 4.6.3, Npgsql 4.0.6, Unity 5.10.3.

  117. API: В классе CardTask обновлена обработка свойства PlannedQuants. Теперь оно позволяет реализовать отправку заданий не на конкретную дату, а с указанием плановых квантов. Для этого необходимо указать PlannedQuants и не указывать Planned. В этом случае система сама рассчитает плановую дату на основе временной зоны роли, на которую отправляется задание.

  118. API: В классе CardTask добавлено свойство PlannedType, которое позволяет при отправке задания на конкретную дату, трактовать переданную с клиента плановую дату исполнения задания (Planned), как дату во временной зоне автора задания, исполнителя задания, или же не производить никаких манипуляций и воспринимать пришедшую плановую дату - "как есть". В зависимости от значения PlannedType в задании - на сервере будет произведена соответствующая коррекция пришедшей даты (будет вычтено соответствующее смещение, или же никаких манипуляций не будет вовсе).

12.3. Исправления и оптимизации

  1. Для Tessa Applications исправлено подключение из Windows 7 к серверу 3.x, запущенному на IIS со включённой аутентификацией Windows, если текущий пользователь не входит в домен, в который входит сервер IIS.

  2. Для Tessa Applications исправлено логирование в текстовый файл AppManager.txt и в журнал событий Windows, чтобы туда не попадали сообщения, не являющиеся ошибками, которые регулярно возникают в процессе логина (например, при подключении к серверам 2.x, или при подключении к серверу, не входящему в текущий домен и др.).

  3. Для Tessa Applications, устанавливаемого вместе с msi-пакетом, исправлен файл NLog.config, в котором отсутствовало логирование в журнал событий Windows, и были неправильно установлены уровни логирования в текстовый файл AppManager.txt.

  4. Для этапов "Ветвление" и "Управление ветвлением" исправлено форматирование списка вторичных процессов в колонке "Настройки".

  5. Оптимизировано вычисление агрегатных ролей.

  6. Для типовых задач и этапов "Задача" в маршрутах исправлена отправка с ответственным исполнителем и одновременным возвратом на роль.

  7. Исправлена ошибка при выборе из представлений, если есть #reference без указания свойства RefSection.

  8. Исправлены проблемы в синхронизации с Active Directory.

  9. Исправлена ошибка открытия схемы данных, когда таблица имела комплексную колонку, ссылающуюся на себя.

  10. В схеме данных теперь запрещено изменять библиотеку для системных колонок в таблице (ID, RowID, ParentRowID), это исправило потенциальные проблемы такого изменения.

  11. Исправлена сортировка таблиц в схеме данных при их переименовании.

  12. Исправлено дублирование группы "Без группы" в схеме данных при перемещении таблиц между группами.

  13. В конструкторе бизнес-процессов при открытии редактора без необходимой лицензии теперь выводится корректная ошибка лицензии.

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

  15. В конструкторе бизнес-процессов исправлена ошибка компиляции условий в действиях "Условие" и "Таймер".

  16. В конструкторе бизнес-процессов исправлена ошибка при попытке произвести замену строки до первого ввода значения в поле "Заменить на".

  17. В конструкторе бизнес-процессов исправлена ошибка, из-за которой в некоторых случаях у пользователя не было доступа к кнопкам процесса (плитки были недоступны на боковых панелях).

  18. В конструкторе бизнес-процессов исправлена ошибка, из-за которой происходил повторный вызов обработки сигнала для того же экземпляра узла в некоторых ситуациях.

  19. В конструкторе бизнес-процессов исправлена ошибка, возникающая при асинхронной обработке узлов процесса.

  20. В конструкторе бизнес-процессов исправлена ошибка, из-за которой при изменении параметров экземпляра узла он не помечался изменённым, и произведённые изменения не сохранялись при нажатии кнопки "Сохранить".

  21. В конструкторе бизнес-процессов исправлена ошибка получения данных по привязке из поля "Результат" в настройках вариантов завершения действий "Задание" и "Группа заданий".

  22. В конструкторе бизнес-процессов исправлена ошибка в работе действия "Управление группой заданий", когда список новых ролей не был задан.

  23. В конструкторе бизнес-процессов исправлен выбор внешнего вида узла в зависимости от первого действия в списке.

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

  25. В конструкторе бизнес-процессов в действии "Подпроцесс" исправлена ошибка в контролах настройки маппинга параметров.

  26. В конструкторе бизнес-процессов исправлена ошибка, возникающая при работе со списком через редактор параметров.

  27. В конструкторе бизнес-процессов исправлена ошибка, возникающая в ситуации, когда в действии "Уведомление" не была указана "Тема письма".

  28. В представлении "Доступные заместители" исправлен вывод колонки "Статические роли" для MSSQL Server.

  29. При выполнении ссылок tessa:// алиас сервера всегда определяется без учёта регистра, т.е. ссылки tessa://tessaclient.prod и tessa://tessaclient.Prod идентичны.

  30. Исправлена сортировка по колонке таблицы в карточке для колонок с датами, у которых задан формат поля, если в строках для этой колонки присутствуют незаполненные значения null.

  31. При удалении рабочего места в историю действий в колонке "Объект" теперь записывается имя рабочего места вместо его идентификатора.

  32. В представлении "История заданий", которое доступно в карточках по ссылке из вкладки "История заданий", исправлено отображение записей по задачам, которые были отправлены с указанием вида задачи (с другим отображаемым именем).

  33. Исправлены отзыв и отмена процесса, если текущая группа в маршруте не является последней группой.

  34. При изменении версии платформы кэш для скриптов, скомпилированных в маршрутах, автоматически очищается.

  35. В TessaAdmin для отладки представлений исправлены повторные нажатия на кнопку выполнения запроса.

  36. Улучшены стабильность и обработка ошибок в предварительном просмотре файлов в TessaClient, если задействуется внешняя программа предпросмотра.

  37. Исправлена редкая ошибка "ValueFactory attempted to access the Value property of this instance" при создании карточек и открытии некоторых диалоговых окон, если при запуске или перезапуске веб-сервиса "неудачно" произошло несколько одновременных запросов (проблема решалась перезапуском сервисов). Ошибка появилась в сборке 3.2.

  38. Во всплывающих уведомлениях по заданиям описание задания (Digest) теперь ограничено 350 символами.

  39. Если отправка ознакомления выполняется длительное время (например, при недоступности сервера), то теперь нельзя выполнить отправку несколько раз через множественное нажатие на кнопку "ОК".

  40. Оптимизирован импорт подразделений и сотрудников посредством консольной команды tadmin ImportUsers.

  41. Исправлена ошибка в скрипте Fixes\ImportApplications.pg.sql, возникающая при автоматическом обновлении сборки (скрипты Upgrade.bat, upgrade.sh), если в базе данных отсутствуют приложения с хотя бы одной указанной ролью (или в базе данных нет опубликованных приложений). Ошибка была только в скрипте для PostgreSQL.

  42. Исправлена редкая ошибка "Item already exists" при импорте библиотек локализации.

  43. Для установки сервера приложений на Linux исправлена ошибка "Could not find a part of the path /tmp/tessa/sync/storage/…​"

  44. В TessaClient исправлено исчезновение подписей ЭЦП из таблицы, если открыть диалог ЭЦП без проверки подписей, а потом нажать на кнопку проверки.

  45. Удалена неиспользуемая сортировка в представлении ReportCurrentTasksByDepUnpivoted (диаграмма "Текущие задания").

  46. Исправлено восстановление информации по группам истории заданий при импорте карточек или при восстановлении удалённых карточек.

  47. Для контрола "Таблица" исправлен вывод стрелок вверх/вниз, если не задано поле для сортировки.

  48. Для контрола "Таблица" исправлены проблемы с массовым выделением строк (и затем с их удалением, например), если не все выделенные строки вмещаются на экране.

  49. Если Tessa Applications в качестве основного сервера подключается к веб-сервису от более старой версии системы, в которой нет некоторых строк локализации, то эти строки используются из встроенных ресурсов приложения. Раньше такие строки не локализовывались (выводился алиас строки и язык).

  50. Исправлена ошибка, возникающая при копировании карточки с запущенным маршрутом и пересчетом маршрута. Если при этом удалялись этапы, то возникала ошибка.

  51. Исправлены ошибка, возникающая при возврате после согласования в этапе согласования. Ошибка заключалась в том, что отправлялись одновременно задания доработки и следующего этапа.

  52. Исправлена ошибка, возникающая при запуске этапа согласования, у которого был возврат после согласования, в следующем цикле.

  53. Текст ошибок при обращении к IBusinessCalendarService сделан более понятным для конечного пользователя, который может увидеть такую ошибку, например, указав дату, выходящую за границы календаря.

  54. Исправлена ошибка, когда при повторной генерации файла по шаблону с типом .docx не все плейсхолдеры успешно заменялись.

  55. В подсистеме плейсхолдеров при получении данных по плейсхолдерам в случае, когда возникает ошибка SQL, теперь результат возвращается с уровнем Error, а не Warning.

  56. Исправлено сохранение ширины дерева рабочего места в TessaClient.

  57. Исправлены ошибки при выводе представлений при отображении большого количества строк, если выводились группы или строки с дочерними строками.

  58. Исправлена ошибка, когда после импорта старого шаблона бизнес-процесса поверх нового не сбрасывался кэш процесса.

  59. Если кнопка "Редактировать" уже была нажата для расчёта прав, она не будет отображаться повторно до обновления карточки, даже если кнопка выдала не все возможные права (например, выданы права на карточку и собственные файлы, но не на все файлы). Такое поведение было в версии 2.3 и раньше.

  60. В редакторе локализации в TessaAdmin исправлена отметка строк локализации как изменённых, если они были изменены, затем сохранены, и далее открыты и закрыты без изменений.

  61. Установлен стабильный порядок сортировки расширений при указании одинаковых порядковых номеров при регистрации расширений .WithOrder(…​). Это предотвращает возможные плавающие ошибки при использовании одинакового порядка расширений, делая их стабильными (если расширения в своей логике как-либо конфликтуют друг с другом). Мы по-прежнему рекомендуем явно указывать порядок расширений с различным значением .WithOrder(…​).

  62. В представлении "Договоры" в колонке "Сумма" теперь выводится сумма с разделителями разрядов. Разделители разрядов по ошибке пропали со сборки 2.6.

  63. В web-клиенте фоновое изображение больше не растягивается при прокрутке.

  64. В web-клиенте при смене языка теперь происходит перезагрузка приложения (обновление страницы в браузере), что гарантирует отсутствие ошибок отображения сразу после смены языка.

  65. В web-клиенте исправлены проблемы с неправильно введённым логином/паролем, если сервер приложений на IIS и для него включена Windows-аутентификация.

  66. В web-клиенте исправлена ошибка при неудачном сохранении карточки с файлами, если файлы передаются длительное время на слабых каналах связи. В этом случае вместо ошибки, объясняющей причины неудачного сохранения, выводилась ошибка сервера.

  67. В web-клиенте исправлены проблемы с выравниванием различных элементов интерфейса, в т.ч. многострочного текста в браузере Firefox, и выравнивание заголовков контролов в строках таблиц.

  68. В web-клиенте исправлено отображение текста удалённой карточки на вкладке "Системная информация".

  69. В карточке "Группа этапов" исправлено сообщение, возникающее при незаполненном поле "Порядок". Теперь в тексте сообщения не указывается, что порядок уникальный, т.к. он может быть неуникальным.

  70. Исправлена ошибка "Task was cancelled" (или "Отменена задача") при загрузке или предпросмотре файлов в карточке, в которой предыдущее сохранение или обновление завершилось с ошибкой.

  71. Улучшены запросы на "здоровье" веб-сервиса по адресу /hcheck в отношении соединений с базой данных.

  72. Исправлено сохранение файлов в отдельную базу данных MS SQL, если основной базой данных является PostgreSQL.

  73. В редакторе типов в TessaAdmin для контролов "Таблица" и "Список" при нажатии "Исправить" или "Исправить всё" будут удалены колонки "Поле для сортировки", для которых поменялся тип колонки с целочисленного на любой другой. В этом поле должна быть указана только колонка для сохранения порядкового номера строк в контроле.

  74. Проверка состояния веб-сервиса по адресу /check теперь отключена, если в app.json явно не указана настройка HealthCheckIsEnabled, равная true. Также тестовый контроллер Tessa.Extensions.Server.Web.Services.ServiceController по адресу /service теперь не возвращает информацию по состоянию веб-сервиса, если в app.json не указана настройка HealthCheckIsEnabled, равная true.

  75. Исправлен параметр параметр поиска "Тип" и оптимизирован поиск по этому параметру для представления MyCompletedTasks "Завершённые от меня".

  76. В представлении "Шаблоны процессов" исправлен вывод в колонке "Типы карточек".

  77. В типе карточки "Шаблон бизнес-процесса" добавлена автоматическая сортировка в поля-списки и в таблицу с кнопками. Также добавлено удаление дубликатов в некоторых полях-списках.

  78. В типе карточки "Шаблон бизнес-процесса" в поле "Расширения проверка доступа для кнопок (плиток)" ввод с автодополнением теперь работает без учёта регистра символов.

  79. Исправлены расчёты рабочего времени по календарю при отображении в типовых представлениях Мои задания, Задания от меня и Отчёты - Текущие задания; при этом текущее смещение сервера БД могло быть прибавлено при расчёте (например, для UTC+03:00 можно было получить отображаемый срок на полдня больше, чем действительный). Проблема присутствовала только при установке на СУБД PostgreSQL.

  80. В системных карточках "Запись в истории", "Удалённая карточка" и "Ошибка" на вкладке "Системная информация" текстовое поле не ограничено по высоте и расширяется, в зависимости от размера окна.

  81. Исправлено контекстное меню и цвет фона для предпросмотра текстовых файлов.

  82. Оптимизировано потребление памяти на сервере при скачивании файлов .txt в web-клиенте.

  83. Исправлен вызов расширений финализации ICardUIExtension.Finalizing/Finalized для карточки, которая открывается методом IUIHost.OpenCardAsync, если cardID передаётся как null, а идентификатор карточки определяется по факту загрузки, и карточка с таким идентификатором уже была открыта. Например, если открывается карточка настроек через правую боковую панель, когда эта карточка настроек уже открыта. Аналогичная проблема была исправлена для метода CreateCardAsync, но для него ошибка не повторялась в типовых сценариях.

  84. В редакторе типов в TessaAdmin исправлено отображение шрифта "Tessa Default" дважды в списке выбора.

  85. Улучшены описание ключевых слов при редактировании SQL в представлениях и подстановка выражений для ключевых слов.

  86. В представлении "Уведомления" исправлена сортировка в сабсете "По типу уведомления".

  87. Удалено представление KrApprovalStates, поскольку оно полностью дублировало KrDocStates. Представление заменено на KrDocStates в представлениях и типах карточек типового решения.

  88. Исправлена метаинформация в представлениях PartnersTypes и VatTypes.

  89. Исправлена сериализация строковых параметров к POST-запросам для desktop-клиента, если некоторые из символов в строке кодируются в UTF-8 больше, чем в один символ (например, русские буквы). Это приводило к проблемам при создании операций (Digest мог быть усечён) и при логине в desktop-клиент по паре логин/пароль (например, если логин или пароль содержали русские буквы). Также проблема могла проявляться в кастомизированных REST-контроллерах, если вы использовали параметры методов вида [FromBody] string s. Ошибка появилась в сборке 3.0.

  90. Исправлено некорректное отображение подсветки синтаксиса для структуры Storage-объектов в некоторых ситуациях.

  91. Реализовано обновление типов карточек после сохранения схемы данных, чтобы не было ошибок, связанных со старой схемой данных.

  92. Исправлен выбор колонок в редакторе типов карточек сразу после того, как колонка была удалена в схеме данных (без нажатия "Обновить" на вкладке с типами). С учётом автоматического обновления типов это актуально, если схема данных была изменена другим пользователем и обновлена на вкладке схемы, но не сохранена.

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

  94. Исправлена ошибка в типах этапов "Согласование" и "Подписание", которая заключалась в том, что при возврате после согласования, отзыва процесса и запуска первого цикла этап пропускался.

  95. В таблицу KrApprovalCommonInfo добавлен индекс для колонки StateID, чтобы при удалении состояний не выполнялось сканирование таблицы целиком для проверки ограничения FK (что может занять длительное время пропорционально количеству документов в системе).

  96. Исправлено получение рабочего времени путём добавления некоторого количества квантов к моменту времени. Исправлено в хранимых функциях "CalendarAddWorkQuants" и "CalendarAddWorkingDaysToDate", а также в тех местах, где платформа аналогичным образом обращается к календарю.

  97. В карточке "Все сотрудники" для PostgreSQL период расчёта теперь по умолчанию 1800 секунд, как и в MSSQL. Ранее период расчёта был 60 секунд, что по умолчанию могло приводить к блокировкам на таблицу ролей.

  98. Удалено свойство IConnectionSettings.ReceiveTimeout, поскольку оно не используется при подключении со стороны клиента. Также удалены аналогичные настройки "ReceiveTimeout" в конфигурационных файлах. Удалять их необязательно, но они не оказывают влияние на клиентские таймауты.

13. Версия 3.2 (05.02.2019)

13.1. Переход на новую сборку

  1. Изменены рабочие места: Administrator.

  2. Изменены представления: BarcodeTypes (добавлена), IncomingDocuments, KrForkManagementStageTypeModes (добавлено), KrProcessManagementStageTypeModes, KrSecondaryProcesses, KrStageTemplates, WorkflowSignalTypes.

  3. Изменены таблицы: BarcodeTypes (добавлена), DocLoadBarcodeRead (добавлена), DocLoadSettings (добавлена), KrApprovalCommonInfo, KrForkManagementModes (добавлена), KrForkManagementSettingsVirtual (добавлена), KrForkNestedProcessesSettingsVirtual (добавлена), KrForkSecondaryProcessesSettingsVirtual (добавлена), KrForkSettingsVirtual (добавлена), KrProcessStageTypes, KrSecondaryProcessCommonInfo, KrStages, KrStagesVirtual, PersonalRoleSatellite, WeSendSignalAction (добавлена), WeTaskActionOptions, WeTaskGroupActionOptions, WeTaskGroupControlAction (добавлена), WorkflowEngineTaskActions, WorkflowSignalTypes.

  4. Изменены функции: CalendarAddWorkQuants.

  5. Изменены типы карточек: BusinessProcessTemplate, DocLoad (добавлен), Incoming (добавлено поле "Штрих-код" и колонка DocumentCommonInfo.Barcode), KrAdditionalApproval, KrApprove, KrCard, KrCheckStateWorkflowTileExtension, KrForkManagementStageTypeSettings (добавлен), KrForkStageTypeSettings (добавлен), KrSatellite, KrSecondarySatellite, KrStageGroup, KrStageTemplate, Outgoing (добавлено поле "Штрих-код" и колонка DocumentCommonInfo.Barcode), PersonalRoleSatellite, WorkflowActionEditor, WorkflowConditionAction, WorkflowProcessEditor, WorkflowScenarioAction, WorkflowSendSignalAction (добавлен), WorkflowTaskAction, WorkflowTaskGroupAction, WorkflowTaskGroupControlAction (добавлен).

  6. Изменены карточки: Acquaintance, CancelButton, CancelTemplate, Continuous document load (settings) (добавлена), DeregisterButton, RebuildButton, RejectButton, RejectTemplate.

  7. Изменены карточки (необязательные изменения): DeregisterTemplate, EditTemplate, NewIterationTemplate, RebuildTemplate, RegisterTemplate, StartProcessTemplate.

  8. Изменены библиотеки локализации.

  9. Перед обновлением схемы выполните скрипт Fixes/Migration-3.2-pre.*.sql.

  10. Изменены файлы в нетиповых проектных расширениях в Tessa.Extensions.Client: Registrator.cs (в корне проекта) и Themes\Icons.xaml (добавлен). Эти файлы содержат пример иконки, добавляемой в рамках проекта.

  11. Требуется переустановить Tessa Applications, используя msi-инсталлятор, если необходимо исправить ошибку обновления Tessa Applications, которая возникает при отказе в доступе к папке в профиле пользователя (%appdata%\tessa), что приводит к "зацикливанию" и увеличению размеров логов.

  12. При установке сервера приложений на Linux начиная с этого релиза требуется создать символьную ссылку для библиотеки libdl.so. Обратитесь к руководству по установке на Linux. Для большинства дистрибутивов потребуется выполнить команду в терминале (пути к папкам могут отличаться для разных дистрибутивов, см. руководство): sudo ln -s /lib/x86_64-linux-gnu/libdl.so.2 /lib/x86_64-linux-gnu/libdl.so

  13. Для регистрации типов-наследников INumberDirector теперь используйте объект INumberDirectorContainer в методе FinalizeRegistration. Пример такой регистрации см. в Tessa.Extensions.Default.Shared.Numbers.Registrator. В методе Register укажите идентификатор типа карточки в параметре typeID.

  14. Для регистрации расширений на лист согласования IKrApprovalListExtension используйте объект IKrApprovalListExtensionResolver в методе FinalizeRegistration. Пример такой регистрации есть в описании интерфейса IKrApprovalListExtensionResolver.

  15. Начиная с этой версии в коде расширений используйте пространство имён Unity вместо Unity.Attributes. Некоторые классы, такие как InjectionMember, также перенесены из Unity.Registration в Unity.Injection. Вместо базового класса LifetimeManager используйте интерфейс ITypeLifetimeManager. Вместо объекта ParameterOverrides используйте массив объектов ParameterOverride, вместо DependencyOverrides - массив DependencyOverride. Если в вашем регистрируемом в Unity классе несколько конструкторов, то во избежание проблем с выбором конструктора при резолве явно укажите конструктор при помощи InjectionConstructor с перечислением типов параметров typeof(T), или же добавьте атрибут [InjectionConstructor] для конструктора по умолчанию. Если вы используете InjectionFactory, то рекомендуется заменить RegisterType<> на RegisterFactory<>, т.к. InjectionFactory помечен как устаревший [Obsolete]. Не указывайте в InjectionConstructor typeof() для класса-наследника, если конструктор принимает базовый класс или интерфейс; например, если конструктор получает ICardTransactionStrategy и ему требуется передать объект CardWithoutTransactionStrategy, то вместо typeof(CardWithoutTransactionStrategy) передайте new ResolvedParameter<ICardTransactionStrategy>(CardTransactionStrategyNames.WithoutTransaction). Обратитесь к описанию библиотеки Unity для полного списка изменений.

13.2. Добавление и изменение функциональности

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

  2. В маршрутах добавлены тип этапа "Ветвление", позволяющий выполнять несколько любых этапов параллельно, и тип этапа "Управление ветвлением", позволяющий добавлять или завершать ветки для этапа "Ветвление". Возможны вложенные ветвления, когда в ветке добавлен ещё один этап "Ветвление" со своими ветками.

  3. Добавлены иконки набора Int***, которые можно использовать в тех же местах, что и иконки набора Thin***, т.е. в плитках боковых панелей, в контекстных меню, в узлах рабочих мест и др. В сборке в папке Docs\Icons\ для каждого набора есть картинка с иконкой и её кодом.

  4. Реализована возможность добавлять свои иконки в проекте Tessa.Extensions.Client (см. файл Themes\Icons.xaml) для desktop-клиента. Иконки по указанным кодам доступны в тех же местах, что и типовые иконки Thin*** и Int***.

  5. В контроле "Таблица" добавлена настройка "Разрешить сортировку". Если настройка активна (по умолчанию для всех контролов), то пользователь может сортировать таблицу по любой колонке, кликнув по её заголовку. Сортировка влияет только на отображение, т.е. не влияет на порядок в коллекциях моделей (section.Rows) и моделей представления (gridViewModel.Rows), и не влияет на перемещение строк вверх/вниз при сохранении порядка в строках таблицы.

  6. В контроле "Таблица" добавлена настройка "Макс. строк для авторазмера столбцов". Если количество строк в таблице становится больше указанного значения, то автоматическое определение размера столбцов в приложении TessaClient отключается, что позволяет показать на экране несколько сотен строк без заметного снижения производительности. Для web-клиента настройка игнорируется ввиду другого способа построения интерфейса.

  7. В контроле "Таблица" добавлена настройка "Максимальная высота", которая позволяет ограничить высоту таблицы, что положительно сказывается на отображении большого количества строк. По умолчанию указана максимальная высота в 800 пикселей. Вертикальная прокрутка в таблице при ограниченной высоте возможна по колесу мыши с зажатыми Ctrl или Alt, или используя стандартные кнопки прокрутки (PageDown и др.). Для web-клиента выполняется постраничное отображение, примерная высота строки приравнивается 20, т.е. для настройки по умолчанию 800 таблица выводится по 40 строк на странице.

  8. В контроле "Таблица" в настройках колонки добавлен параметр "Ширина подсказки, символов", который задаёт примерную ширину всплывающей подсказки для ячеек в этой колонке. Текст в подсказке переносится по словам на несколько строк. По умолчанию значение равно 100 символам. Это актуально прежде всего для колонок, в которых отображаемая длина ограничена троеточием, а весь текст доступен во всплывающей подсказке.

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

  10. В контроле "Таблица" рядом с кнопками Добавить/Удалить отображается поле поиска. Поиск выполняется по вхождению текста без учёта регистра для всех ячеек таблицы. Поиск можно сбросить по нажатию на кнопку крестика в этом поле или по клавише Esc. Поиск по умолчанию скрыт, если недоступны кнопки Добавить/Удалить или кнопки изменения порядка (поведение можно определить в расширении, изменив свойство gridViewModel.SearchBoxVisibility).

  11. На вкладке "История заданий" теперь доступны сортировка по клику по заголовку колонки и поиск по тексту во всех ячейках.

  12. Ширина подсказки, выводимой для ячеек представлений, текст в которых не вместился и был ограничен троеточием, теперь указана как треть ширины экрана, что упрощает чтение текста (но не более 800 пикселей, и не менее 200 пикселей для 96 dpi).

  13. В контроле "Таблица" можно открывать строки по нажатию Enter, если выбранная строка находится в клавиатурном фокусе (по ней только что кликнули или выделили её с помощью клавиатуры).

  14. В TessaClient кнопки открытия/закрытия боковых панелей в строке с вкладками изменяются визуально, когда соответствующая панель открыта. Нажатие на кнопку закрывает эту панель.

  15. В TessaClient нажатие на горячую клавишу, открывающую боковую панель, теперь закрывает её, если панель уже открыта.

  16. В TessaClient добавлены функции поворота страницы для предпросмотра файлов PDF/TIFF.

  17. В TessaClient в окне предпросмотра и в окне справки ссылки в html-страницах теперь открываются в браузере по умолчанию вместо Internet Explorer.

  18. Изменены иконки-стрелки для переключения страниц в представлениях.

  19. В конструкторе бизнес-процессов добавлена возможность в качестве привязки значений использовать представление, поле/секцию карточки, поле/секцию заданий.

  20. В конструкторе бизнес-процессов добавлена возможность выбрать все узлы в редакторе по нажатию сочетания клавиш Ctrl+A.

  21. В конструкторе бизнес-процессов добавлена возможность перемещать выбранные объекты на макете с помощью клавиш со стрелками.

  22. В конструкторе бизнес-процессов добавлено новое действие "Управление группой заданий", которое позволяет управлять активными действиями "Группа заданий" (приостановить и возобновить выполнение группы, отменить выполнение группы, добавить новое задание в группу).

  23. В конструкторе бизнес-процессов доработано действие "Группа заданий". В таблицу обработки вариантов завершения добавлены настройки для возможности управления текущей группой заданий.

  24. В конструкторе бизнес-процессов добавлено новое действие "Отправить сигнал", которое позволяет отправить в текущий процесс сигнал на все узлы, подписанные на данный тип сигнала.

  25. В конструкторе бизнес-процессов доработано визуальное отображение стрелки, а точки привязки стрелки теперь не препятствуют отрисовке других стрелок.

  26. В конструкторе бизнес-процессов в редакторы действий "Задание" и "Группа заданий" в настройки вариантов завершения добавлена возможность указать результат, который запишется в историю действий при завершении задания с данным вариантом завершения.

  27. В конструкторе бизнес-процессов в редакторе узла в контекстное меню таблицы с действиями добавлены варианты "Копировать" и "Вставить скопированные действия в узел".

  28. В конструкторе бизнес-процессов добавлена кнопка поиска объектов (узлов, действий и др.) по их содержимому (в т.ч. по содержимому скриптов в действиях).

  29. В представлении "Шаблоны процессов" со списком шаблонов бизнес-процессов добавлена кнопка создания карточки на панель пейджинга.

  30. В области предпросмотра файлов теперь выводится содержимое файлов .json (например, в карточке "Приложение").

  31. По адресу веб-сервиса /hcheck (например, https://localhost/tessa/web/hcheck) теперь доступен автоматизированный сервис проверки "здоровья" веб-сервиса, которое в текущей версии определяется способностью веб-сервиса принимать запросы, а также наличием соединения с основной базой данных (в строке подключения "default" в файле app.json). В качестве результата сервис возвращает только статус здоров/не здоров, что позволяет использовать его в автоматизированных сценариях, таких как проверка работоспособности контейнера с веб-сервисом. В отличие от адреса /check, адрес /hcheck не выполняет длительных проверок и не возвращает системную информацию по состоянию сервера. Настройка "HealthCheckIsEnabled" в файле app.json не влияет на доступность адреса /hcheck.

  32. В файлах app.json в качестве настройки LicenseFile теперь можно указать маскированный путь, например: "@*.tlic". Если найден хотя бы один файл, подходящий под маску, то используется первый файл из найденных по имени (сортировка по алфавиту).

  33. Скрипты установки Setup.bat (setup.sh) и автоматического обновления сборки Upgrade.bat (upgrade.sh) теперь выполняют автоматическую публикацию приложений TessaClient, TessaAdmin и TessaAppManager.

  34. Для desktop-приложений TessaClient, TessaAdmin, TessaAppManager в параметрах командной строки теперь можно использовать префикс с дефисом -param, причём префикс со слэшом /param по прежнему доступен.

  35. Доступна установка сборки в системе Docker. Такая установка может задействоваться в целях тестирования без развёртывания системы в виртуальной машине. Инструкция по установке и использованию такой инсталляции доступна в файле Docker\readme.txt в сборке.

  36. Добавлен NuGet-пакет Tessa.PostgreSql, который задействуется для создания приложений (рабочих мест, утилит и веб-сервисов), использующих API системы совместно с СУБД PostgreSQL. В руководстве разработчика добавлен пример такого использования.

  37. Интеграция с ADFS в web-клиенте теперь доступна при установке сервера приложений на Linux. Настройка выполняется в app.json таким же образом, как для Windows.

  38. В плагинах Chronos, выполняющих отправку почты (NoticeMailer) и получение почты (MobileApproval для мобильного согласования) появилась возможность использовать Exchange через http-прокси. В файле app.json это настройки NoticeMailer.ExchangeProxy*** и MobileApproval.ExchangeProxy***. Оставьте значения null, если подключение к Exchange выполняется без участия прокси-сервера.

  39. При выгрузке карточек в .jcard выполняется распаковка/упаковка вложенных json-объектов для дополнительных полей из типового решения: KrApprovalCommonInfo.Info и KrStages.Info. За счёт этого результирующий json получается более читаемый. Сохраняется обратная совместимость для выгруженных ранее карточек.

  40. Утилита tadmin: добавлена команда PackageApp, создающая файл .jcard с карточкой desktop-приложения (TessaClient, TessaAdmin или TessaAppManager). Импорт такой карточки аналогичен публикации приложения.

  41. Утилита tadmin: для Windows теперь можно использовать префикс с дефисом -param, как и для Linux, причём префикс со слэшом /param по прежнему доступен для Windows. Для вывода справки для утилиты или её отдельной команды можно указать -help или --help помимо /? или -?.

  42. Утилита tadmin: локализован весь текст в сообщениях справки и в некоторых сообщениях об ошибках.

  43. Утилита tadmin: сокращён вывод сообщений ValidationResult на консоль в части вывода имени класса, в котором возникло сообщение. В лог по-прежнему выводится полная информация.

  44. Утилита tadmin: дата сборки теперь выводится, используя текущий формат дат, установленный для пользователя в системе. Например, 01/30/2019 вместо 30.01.2019.

  45. API: Для контрола "Таблица" добавлено свойство GridViewModel.KeyDownHandlers с возможностью добавлять горячие клавиши, когда выбранная строка в клавиатурном фокусе (по ней только что кликнули или выделили её с помощью клавиатуры). Пример использования в тестовом расширении Tessa.Extensions.Default.Client.UI.CarUIExtension.

  46. API: Для контрола "Таблица" добавлены методы AddRow(), EditRow() и DeleteRows(), позволяющие вызывать соответствующие функции контрола, связанные со строками таблицы, из кода расширений (например, при нажатии кнопок под таблицей или пунктов контекстного меню).

  47. API: Для объектов карточки Card, результата валидации ValidationStorageResultBuilder и объектов Card***Request/Response добавлены методы ToTypedJson() и FromTypedJson() для сериализации/десериализации в текстовый JSON с сохранением информации по типам всех подобъектов. Таким образом, можно сериализовать/десериализовать объекты в читаемый текст без потерь. Также для всех таких объектов добавлен метод ToJson() для сериализации в JSON без сохранения информации по типам, и для некоторых объектов также есть метод FromJson(), который пытается восстановить информацию по типам тех свойств, о которых знает система (что не учитывает данные в card.Info и некоторые другие свойства).

  48. API: Во все сценарии конструктора бизнес-процессов добавлены свойства Task (тип CardTask) и Tasks (тип List<CardTask>), позволяющие получить текущие объекты заданий из контекста обработки, или изменить список заданий. Эти задания используются при получении значений по привязкам к заданиям.

  49. API: В методах отправки писем в объекте INotificationManager теперь можно определить прикладываемые к письмам файлы и список дополнительных получателей (поля CC/BCC в письме). Для этого в параметре modifyEmailAction укажите делегат, который установит новое свойство NotificationEmail.MailInfo (это тот же объект, передающийся в низкоуровневый метод отправки письма IMailService.PostMessage). Также можно задать функцию NotificationEmail.GetMailInfoFunc, которая позволяет определять разные параметры письма для разных получателей NotificationRecipient.

  50. API: При отправке уведомлений INotificationManager.Send() в объекте NotificationRecipient добавлен признак наличия у пользователя мобильного согласования HasMobileApproval (если пользователь есть в списке сотрудников с мобильным согласованием и доступна соответствующая лицензия). В объекте плейсхолдеров этот признак также доступен через context.Info.Get<bool>(PlaceholderHelper.HasMobileApprovalKey).

  51. API: Добавлено виртуальное свойство CardSatelliteGetExtension.AllowRequestsFromClient, позволяющее разрешить запросы на загрузку карточки-сателлита, отправляемые непосредственно с клиента. Обычно карточки-сателлиты загружаются на сервере вместе с основной карточкой или внутри бизнес-процессов. Для таких карточек, как сателлит сотрудника, который содержит информацию по настройкам сотрудника, возможно выдать разрешение на загрузку с клиента, если в расширениях на загрузку таких карточек предусмотрено ограничение доступа к данным сателлита. По умолчанию свойство AllowRequestsFromClient возвращает false.

  52. API: Добавлены статические свойства EnvironmentHelper.IsNetFramework и EnvironmentHelper.IsNetCore, позволяющие определить, для какой платформы выполняется текущее приложение - для .NET Framework или .NET Core (или другой совместимой с .NET Standard платформой, если оба свойства возвращают false).

  53. API: Добавлен объект INumberDirectorContainer, предоставляющий способ запросить объекты API номеров для заданного типа карточки, такие как INumberDirector, INumberComposer и INumberQueueProcessor. Этот объект также используется для регистрации INumberDirector и других объектов, пример такой регистрации см. в Tessa.Extensions.Default.Shared.Numbers.Registrator. В методе Register укажите идентификатор типа карточки в параметре typeID.

  54. API: Добавлен объект IKrApprovalListExtensionResolver, предоставляющий способ запросить расширение на лист согласования IKrApprovalListExtension, а также выполнить регистрацию расширения по алиасу типа карточки или для всех типов (без указания строки с алиасом). Пример такой регистрации есть в описании интерфейса IKrApprovalListExtensionResolver.

  55. API: Добавлен метод ICardFileManager.CreateContainerRemote(card) для создания контейнера файлов, каждый из которых загружается с Remote-содержимым, которое не кэшируется во временной папке. Загрузка и замена такого содержимого всегда выполняется в памяти, что позволяет оптимизировать операции с содержимым уже существующих в карточке файлов без задействования временной папки. Дополнительно для файлов IFile добавлен метод-расширение file.Replace(), принимающий Func<Stream> и размер содержимого, что позволяет выполнять замену Remote-содержимого. При вызове file.Replace(stream) для Remote-содержимого выполняется копирование переданного потока в MemoryStream, также стала возможна замена массива байт byte[] или строки текста string.

  56. API: Обновлены библиотеки: .NET Core 2.2.1, BarcodeLib 2.2.1, CsvHelper 12.1.2, DocumentFormat.OpenXml 2.9.0, ITFoxTec.Identity.Saml2 3.0.0, Linq2DB 2.7.0, PdfSharp-wpf 1.50.5147, UAParser 3.1.36, Unity 5.9.3. Вместо библиотеки ZKWeb.System.Drawing теперь используется библиотека System.Drawing.Common из состава .NET Core. Библиотеки BarcodeLib и QRCoder подключаются в исходном виде как NuGet-пакеты, они больше не интегрированы в Tessa.dll.

13.3. Исправления и оптимизации

  1. Исправлено отображение завершённых заданий доп. согласования в файле листа согласования.

  2. В почтовом уведомлении о завершении последнего задания доп. согласования добавлены пропущенные ссылки на открытие карточки в desktop-клиенте и в web-клиенте.

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

  4. Исправлено указание должности автора в заданиях, отправляемых в типовых и платформенных процессах. Это относится к типовым задачам, маршрутам и к задачам конструктора бизнес-процессов.

  5. Улучшены алгоритмы открытия боковых панелей в TessaClient, теперь панели всегда открываются, когда должны (при наведении мыши или при клике). При переключении или закрытии вкладок боковые панели принудительно закрываются.

  6. Исправлено редактирование схемы данных при активной фильтрации.

  7. Исправлена ошибка при наличии нескольких типов этапов, использующих один и тот же тип карточки настроек этапа.

  8. В конструкторе бизнес-процессов в редакторе параметров исправлено выделение текущего объекта при изменении размера окна редактора.

  9. В конструкторе бизнес-процессов исправлена ошибка компиляции скриптов событий заданий и группы заданий.

  10. В конструкторе бизнес-процессов исправлена ошибка, возникающая при попытке копировать объект по горячей клавише при наличии выделенной стрелки.

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

  12. В конструкторе бизнес-процессов убрана возможность менять шаблон процесса после снятия блокировки путем использования Undo/Redo.

  13. Улучшен вывод ошибок при выполнении SQL-запросов таким образом, чтобы текст возникшего исключения был рядом с запросом, при выполнении которого возникла ошибка.

  14. Исправлена проверка разрешений при создании карточки, если для неё был создан токен вызовом метода ICardServerPermissionsProvider.SetFullPermissions(newRequest). До исправления возникала ошибка "PropertyNotExists".

  15. В приложении TessaClient оптимизированы отображение диалога со списком версий файла и диалога результата валидации в режиме "Подробно", когда в таблицах отображается большое количество строк (более 50).

  16. При удалении подписей в диалоге проверки ЭЦП удалённая подпись теперь исчезает из таблицы в диалоге.

  17. Исправлен автоподбор размеров столбцов и некоторые другие свойства представлений в области предпросмотра в TessaAdmin и во вкладке TessaClient, которая открывается вызовом метода IUIHost.ShowView (например, для истории заданий, открываемой в отдельной вкладке по ссылке).

  18. Исправлено отображение таблиц комментариев и доп. согласования в заданиях согласования и доп. согласования в различных формах вариантов завершения.

  19. Исправлена работа команды tadmin CheckDatabase, которая при подключении к серверу MSSQL возвращала ошибку, если текущая схема для базы данных master не равна dbo.

  20. Оптимизирована генерация файлов по шаблону Excel для таблиц с большим количеством строк (десятки тысяч).

  21. Исправлена проверка на вхождение в несколько контекстных ролей во вторичных процессах маршрутов (в кнопках и действиях).

  22. Исправлена проверка состояний на сервере во вторичных процессах маршрутов (в кнопках и действиях).

  23. Убрана проверка на уникальность поля "Порядок" в карточке "Группа этапов".

  24. Исправлен поиск по названию в представлении "Вторичные процессы" для СУБД PostgreSQL.

  25. Исправлено отображение ошибки "A task was canceled." при отмене асинхронной загрузки файла.

  26. Хранимая функция CalendarAddWorkQuants исправлена так, чтобы всегда возвращать тот же квант, что и функция CalendarAddWorkingDaysToDate (раньше могла возникнуть разница в 1 квант).

  27. Исправлена всплывающая подсказка для кнопки "Создать карточку" на панели пейджинга представления, если кнопка создаёт указанный в настройках тип карточки, а не тип по выделенной строке.

  28. Скрипты обновления сборки Upgrade.bat и upgrade.sh теперь явно выполняют включение ограничений в БД (constraints) перед импортом локализации. Ограничения могут остаться отключёнными после неудачного импорта карточек при предыдущем запуске скрипта.

  29. Исправлено обновление Tessa Applications, которое при наличии ошибки доступа к папке пользователя (%appdata%\tessa) могло привести к "зацикливанию" и увеличению размеров логов. Для исправления проблемы необходимо переустановить приложение через msi-инсталлятор.

  30. При обновлении Tessa Applications исправлен вывод прогресса в процентах.

  31. Импорт карточек приложений теперь выполняется успешно, если идентификатор у импортируемой карточки отличается от идентификатора в базе данных, а алиас приложения совпадает. Также если у карточки приложения поменялся идентификатор, то её файлы не загружаются заново, если они совпадают по имени (с учётом подпапки) и по содержимому (по хеш-функции).

  32. Исправлен эскейпинг логина пользователя при поиске в LDAP. Также улучшены возникающие сообщения об ошибках для упрощения поиска проблем при интеграции с LDAP.

  33. Исправлена утечка памяти при использовании реализованной в рамках проекта группировки файлов IFileGrouping или сортировки файлов IFileSorting для desktop-клиента.

  34. В маршрутах в этапах регистрации и дерегистрации теперь явно указывается NumberTransactionMode.WithoutTransaction, чтобы не было ошибок с вложенными транзакциями при взаимодействии с номерами, поскольку снаружи всегда есть транзакция на сохранение карточки.

  35. Для контрола "Строка" в режиме "Avalon" исправлен расчёт высоты при выводе с номерами строк.

  36. Исправлена загрузка на Windows для desktop-приложений, опубликованных на сервере Linux. Теперь содержимое подпапок не будет загружаться каждый раз при запуске так, как если бы оно было изменено.

  37. В скриптах установки Setup.bat (setup.sh) и обновления системы Upgrade.bat (upgrade.sh) увеличен таймаут проверки подключения к веб-сервису до 20 секунд, поскольку 10 секунд иногда недостаточно для успешной инициализации сервиса, если сервер загружен задачами в этот момент.

  38. Добавлен файл IgnoreFiles.txt в папку TessaAppManager.exe, предотвращающий попадание файлов логов и других временных файлов в публикуемое приложение.

  39. При обновлении менеджера приложений Tessa Applications больше не требуется вводить логин/пароль повторно.

  40. В логе AppManager.txt выводится меньше сообщений при настройках логирования по умолчанию, в т.ч. при отключённой Windows-аутентификации.

  41. Исправлены скрипты Fixes/LocalizeEnglish.sql и Fixes/LocalizeRussian.sql в части имени динамической роли "Все сотрудники".

  42. Исправлен тип параметра "Дата создания" в представлении "Входящие".

  43. Исправлено перемещение файлов на Linux из одной карточки в другую для хранилища на файловой системе, обычно при удалении в корзину и восстановлении из корзины.

  44. Исправлено восстановление содержимого файлов, приложенных к заданиям для восстанавливаемой из корзины карточки, если используется хранилище на файловой системе.

  45. Исправлено сохранение карточки по горячей клавише Ctrl+S при наличии активного выделения в контроле "Ссылка" или "Список".

  46. В представлении KrStageTemplates исправлен вывод шаблонов этапов, в которых указана уже удалённая группа этапов.

  47. В скриптах шаблонов этапов теперь по умолчанию подключено пространство имён Tessa.Cards.Extensions, которое предоставляет доступ к интерфейсам контекстов расширений ICardStoreExtensionContext и др.

  48. В уведомлении по ознакомлению добавлен пропущенный пробел.

  49. Исправлены права, выдаваемые типовыми задачами WfResolution.

  50. При редактировании схемы данных убрана колонка ID из списка доступных ссылочных колонок при создании комплексной колонки, которая ссылается на таблицу Tasks или Files.

  51. Исправлен импорт карточек с несколькими разнотиповыми сателлитами (KrSatellite и WfSatellite).

  52. Исправлен параметр localize в методе StampWriter.AppendLine(), который выводит строку в штамп PDF.

  53. Исправлено логирование ошибок SchemeEditor при сохранении схемы в базу данных.

  54. Исправлено именование индексов с именем длиннее 63 символов для PostgreSQL. Такие имена теперь укорачиваются с добавлением уникального хеш-кода, поскольку PostgreSQL не разрешает имена объектов длиннее 63 символов. В метаинформации схемы сохраняется исходное имя. Это изменение не влияет на MS SQL Server.

14. Версия 3.1.1 (11.12.2018)

14.1. Переход на новую сборку

  1. Изменены таблицы: PersonalRoleSatellite.

  2. Изменены типы карточек: DepartmentRole, KrCheckStateWorkflowTileExtension, PersonalRole, PersonalRoleSatellite.

  3. Изменены библиотеки локализации.

  4. На сервере приложений теперь требуется установленный пакет .NET Core Runtime & Hosting Bundle версии 2.2.0 или старше. Ссылка для скачивания последней версии доступна по адресу https://dotnet.microsoft.com/download/dotnet-core/2.2

  5. Для сборки проектов расширений теперь требуется Visual Studio 2017 версии 15.9 или старше. Также требуется установленный пакет .NET Core SDK версии 2.2.100 или старше. Ссылка для скачивания последней версии доступна по адресу https://dotnet.microsoft.com/download/dotnet-core/2.2

14.2. Добавление и изменение функциональности

  1. В приложении TessaClient рядом со вкладками добавлены кнопки открытия боковых панелей (по аналогии с web-клиентом), что упрощает открытие панелей как в полноэкранном, так и в оконном режиме, когда окно не развёрнуто на весь экран.

  2. В приложении TessaClient добавлена возможность уменьшить область карточки (вместе с заданиями), перетащив невидимый разделитель сразу слева от правой боковой панели. Это удобно для широкоформатных мониторов для удобства чтения полей в карточках. Соотношение области с карточкой к общей области автоматически запоминается для всех карточек в профиле сотрудника.

  3. Представления Sections и Fields теперь позволяют выбирать таблицы-перечисления и их колонки. Например, тип объекта в карточке "Конструктор процессов" может быть связан с таблицей-перечислением.

  4. В документации описана поддержка ALT Linux 8.2+ для сервера приложений.

  5. В конструктор процессов добавлена возможность в качестве привязки значений использовать SQL-запросы.

  6. API: Обновлены библиотеки: .NET Core 2.2, BarcodeLib 2.0.0, BrotliSharpLib 0.3.2, CsvHelper 12.0.1, Newtonsoft.Json 12.0.1, Npgsql 4.0.4, NTwain 3.6.0, QRCoder 1.3.5, UAParser 3.1.32, Unity 5.8.13.

14.3. Исправления и оптимизации

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

  2. Исправлена ошибка в редакторе действия "Группа заданий", возникающая при добавлении новой строки в настройки завершения действия.

  3. В редакторе типов карточек TessaAdmin исправлен текст сообщения при нажатии "Исправить" на типе карточки, если исправление успешно завершено.

  4. В редакторе типов карточек TessaAdmin исправлена возможность перевыбрать секцию или колонку в случае, если контрол был скопирован из контекста, в котором соответствующая секция не может быть доступна. Например, если контрол был скопирован из области таблицы в строковую часть карточки, или если контрол скопирован из задания в карточку, и т.п.

  5. Исправлена редкая ошибка "Object reference not set to an instance of an object" в методе ExtensionsSchedulerPluginBase.EntryPoint(), которая фиксируется в логе Chronos в момент остановки сервиса.

  6. Исправлено зацикливание при удалении данных из карточки (строк из коллекционных секций, файлов, завершении заданий и др.), выполненное в скриптах маршрутов через объект текущей карточки CardObject.

  7. Исправлено зацикливание при сохранении файлов и заданий с флагами Update*** (например, CardTaskFlags.UpdateDigest), выполненное в скриптах маршрутов через объект текущей карточки CardObject.

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

  9. Исправлена проблема с копированием из текстовых полей для скриптов при работе в конструкторе процессов.

  10. Исправлена ошибка при копировании элемента null в редакторе параметров.

  11. Исправлена отрисовка фона выбранной строки при изменении размера редактора параметров.

  12. Исправлено подключение Tessa Applications к серверу 2.x, который выбран в качестве основного сервера. С такого сервера не будут загружены обновления и локализация Tessa Applications, но опубликованные приложения смогут быть запущены.

  13. Исправлено отображение окна ввода логина-пароля при подключении Tessa Applications к серверу 2.x, если в настройках сервера заданы неверный логин/пароль, о чём сообщает веб-сервис 2.x.

  14. В конструкторе процессов при отображении экземпляра процесса исправлено падение редактора в случае, когда набор действий узла в шаблоне процесса был изменен.

  15. Исправлено визуальное размещение поля "Внешний ID" в карточках сотрудника и подразделения.

15. Версия 3.1 (01.12.2018)

15.1. Переход на новую сборку

  1. Изменены рабочие места: Administrator.

  2. Изменены таблицы: KrActionTypes, KrAcquaintanceSettingsVirtual, KrAdditionalApproval, KrAdditionalApprovalInfo, KrAdditionalApprovalInfoUsersCardVirtual, KrAdditionalApprovalInfoVirtual, KrAdditionalApprovalTaskInfo, KrAdditionalApprovalUsers, KrAdditionalApprovalUsersCardVirtual, KrApprovalSettingsVirtual, KrAuthorSettingsVirtual, KrChangeStateSettingsVirtual, KrCommentators, KrCommentsInfo, KrCommentsInfoVirtual, KrCreateCardStageSettingsVirtual, KrCreateCardStageTypeModes, KrEditSettingsVirtual, KrHistoryManagementStageSettingsVirtual, KrNotificationSettingVirtual, KrPerformersVirtual, KrProcessManagementStageSettingsVirtual, KrProcessManagementStageTypeModes, KrProcessStageTypes, KrRegistrationStageSettingsVirtual, KrResolutionSettingsVirtual, KrSigningStageSettingsVirtual, KrSinglePerformerVirtual, KrStagesVirtual, KrTask, KrTaskCommentVirtual, KrUniversalTaskOptions, KrUniversalTaskOptionsSettingsVirtual, KrUniversalTaskSettingsVirtual, KrUserSettingsVirtual, WorkflowEngineSettingsObjectTypes (добавлена), WorkflowEngineSettingsObjectTypeFields (добавлена).

  3. Изменены типы карточек: KrCard, KrCheckStateWorkflowTileExtension, KrRegistrationStageTypeSettings, KrSecondaryProcess, WorkflowEngineSettings, WorkflowNodeEditor.

  4. Изменены карточки: Business process designer (settings).

  5. Изменены библиотеки локализации.

  6. Все типы и экземпляры карточек преобразованы в новый формат (папки Configuration/Cards и Configuration/Types). Перед объединением проектной конфигурации с этой сборкой выполните команду tadmin ConvertConfiguration "Путь_к_вашей_папке_Configuration" - это преобразует файлы в ней к новому текстовому формату, который можно будет объединить средствами репозитория с конфигурацией из этой сборки. Мы рекомендуем в дальнейшем использовать новый формат типов карточек .jtype и экземпляров карточек .jcard.

  7. В проекты расширений Tessa.Extensions.Shared, Tessa.Extensions.Server и Tessa.Extensions.Server.Web добавлены папки System.CodeDom.Compiler, которые используются компилятором для генерации T4-шаблонов. Наличие классов в проекте необходимо с версии платформы 3.0 для генерации T4-шаблонов. Если вы не используете такие шаблоны, то папку с классами можно не копировать.

15.2. Добавление и изменение функциональности

  1. Добавлена поддержка форматов текстовых JSON-файлов для типов карточек .jtype и экземпляров карточек .jcard. Экспорт по умолчанию теперь выполняется в этих форматах. Импорт возможен как в старых форматах, так и в новых. При экспорте объектов можно указать файл со старым расширением (например, перезаписать существующий файл старого формата), в этом случае экспорт также будет выполнен для старого формата (.tct или .card), который можно использовать в предыдущих сборках.

  2. В карточке "Вторичный процесс" для режима "Действие" вместо типа события "Сохранение задания" теперь используются типы: "Перед завершением задания" (BeforeRequest только при завершении), "Завершение задания" (BeforeCommitTransaction только при завершении), "Перед созданием задания" (BeforeRequest только при добавлении задания), "Создание задания" (BeforeCommitTransaction только при добавлении задания). Это упрощает настройку для часто распространённых сценариев. Если для задания необходимо отслеживать другие специфичные действия (взятие в работу, откладывание и др.), то используйте тип события "Сохранение карточки", в котором проверьте список заданий вручную.

  3. В конструкторе бизнес-процессов в редакторе параметров для типов "Объект (хеш-таблица)" и "Список" добавлена возможность указания типа объекта и возможность выбора объекта из представлений. Например, можно задать ссылку на контрагента, выбрав значение ссылки через представление. Тип объекта настраивается в карточке настроек "Конструктор процессов". По умолчанию добавлены типы: Сотрудник, Роль, Контрагент.

  4. В конструкторе бизнес-процессов в редакторе параметров для типов "Список" при указании типа объекта добавлена возможность включения режима секции. При добавлении новых объектов с включенным режимом секции к элементам добавляется значение RowID, а сами данные объекта хранятся во вложенной хеш-таблице.

  5. Добавлены програмные представления Sections и Fields, которые отображают секции и поля по секциям из ICardMetadata.

  6. Утилита tadmin: добавлена команда ConvertConfiguration для преобразования файлов конфигурации в обновлённый формат. Команде указывается имя файла или папка, в которой выполняется поиск (вместе с вложенными папками). Файлы типов карточек .tct преобразуются в формат .jtype, файлы экземпляров карточек .card - в формат .jcard, файлы библиотек карточек .cardlib изменяются таким образом, чтобы ссылаться на файлы карточек с расширением .jcard.

  7. Утилита tadmin: добавлена команда CreateFromTemplate для создания карточки по шаблону из заданного файла выгруженной карточки .jcard или .card. Можно указать папку для создания по шаблону для всех файлов карточек в этой папке, а также указать количество создаваемых карточек по каждому из шаблонов /n:count.

  8. Утилита tadmin: в команде User добавлен параметр /ldap, позволяющий указать учётную запись для сотрудника с типом входа "Пользователь LDAP". Если не указано, то используется тип входа "Пользователь Windows".

  9. API: В объекты типов карточек CardType добавлены методы сериализации в текстовый JSON (SerializeToJson) и десериализации из текстового JSON (DeserializeFromJson).

  10. API: В методы экспорта-импорта карточек в интерфейсах ICardManager, ICardUIManager, ICardEditorModel добавлен параметр CardFileFormat для указания формата карточки: Binary (бинарный формат .card) или Json (текстовый формат .jcard).

  11. API: В типах этапов IStageTypeHandler добавлены методы BeforeInitialization (перед вызовом предскрипта этапа) и AfterPostprocessing (после вызова постскрипта этапа).

  12. API: Обновлены библиотеки: CsvHelper 9.2.3, Linq2DB 2.5.4.

15.3. Исправления и оптимизации

  1. Исправлено подключение к некоторым серверам предыдущих версий 2.x для нового Tessa Applications.

  2. Улучшен вывод ошибок при подключении к серверу. Теперь выводится текст ошибки (полный текст в деталях) и расширенный код, если он доступен (например, 502.3 вместо 502). В первую очередь актуально для ошибок, выводимых в Tessa Applications.

  3. Актуализирована локализация для настроек вторичных процессов.

  4. Исправлено указание дайджеста карточки в истории действий при увеличении версии карточки в результате смены состояния в процессе маршрутов. Проблема появилась в 2.7.3.

  5. В рабочем месте "Администратор" для узла дерева "Вторичные процессы" исправлена кнопка создания карточки.

  6. Исправлено автосогласование в ситуации, когда Digest карточки является более длинным, чем размер колонки (255 символов).

  7. Исправлено отображение фона для некоторых узлов в визуализаторе маршрута.

  8. При публикации приложений исправлен вывод прогресса в процентах.

  9. В web-клиенте исправлены некоторые операции с файлами в браузерах Edge и в мобильном Safari, такие как предпросмотр и копирование файлов.

  10. В web-клиенте копирование файлов теперь выполняется без скачивания их содержимого на клиент (как и в desktop-клиенте). Т.о. можно быстро создавать копию файлов любых размеров.

  11. В web-клиенте исправлено возможное появление вертикальной полосы прокрутки в контроле "Нумератор" на определённых размерах дисплея в браузере Edge (и потенциально в других браузерах).

  12. В web-клиенте исправлено отображение структуры для карточек в некоторых ситуациях, когда вместо структуры актуальной карточки отображалась структура другого объекта.

  13. Оптимизирована сборка мусора для сервисов "chronos" и "web" при запуске на Linux.

  14. В конструкторе бизнес-процессов исправлена обработка ошибок при некорректных привязках контролов-настроек к параметрам (процесса, узла и др.), теперь наличие таких ошибок не приводит к невозможности редактировать другие параметры того же узла (действия и др.).

16. Версия 3.0.1 (17.11.2018)

16.1. Переход на новую сборку

  1. Изменены таблицы: BusinessProcessButtons, KrAcquaintanceAction (добавлена), KrAcquaintanceActionRoles (добавлена), WeConditionAction.

  2. Изменены типы карточек: BusinessProcessTemplate, KrAcquaintanceAction (добавлен), WorkflowConditionAction.

  3. Изменены карточки (необязательные изменения): License (settings).

  4. Изменены библиотеки локализации.

  5. Обновите файл app.json в папке веб-сервисов.

16.2. Добавление и изменение функциональности

  1. В редактор бизнес-процессов добавлена кнопка "Открыть руководство разработчика бизнес-процессов".

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

  3. Добавлено новое действие "Ознакомление" для редактора бизнес-процессов.

  4. Доработано действие "Условие" для редактора бизнес-процессов. Теперь в нем можно задавать условия для выполнения переходов по связям.

  5. В редакторе бизнес-процессов добавлена возможность выполнять привязку к параметрам сигнала.

  6. При добавлении документов через диалог сканирования имя файла по умолчанию теперь определяется через строку локализации $UI_Controls_FilesControl_Scan_FileName, которую можно переопределить в проектном решении без написания расширения. По умолчанию теперь это имя "Документ" или "Document", в зависимости от выбранного пользователем языка.

  7. В конфигурационном файле веб-сервиса добавлена настройка "HealthCheckIsEnabled" (по умолчанию true). Если указано значение false, то это позволяет запретить проверку работоспособности веб-сервиса при переходе по адресу https://сервер/tessa/web/check (или https://сервер/check на Linux).

  8. При редактировании типов карточек текущий выбранный узел в дереве теперь всегда подсвечивается синим. Также в редакторе локализации текущая выбранная библиотека всегда подсвечивается синим.

  9. В запросах представлений для MS SQL Server восстановлена возможность гибко указывать колонки в SELECT независимо от списка колонок в метаинформации, как это было до выпуска сборки 2.6. Теперь порядок колонок в SELECT может не совпадать с порядком колонок в метаинформации (при этом колонки выводятся пользователю по порядку из метаинформации). Некоторые из колонок, описанных в метаинформации, могут отсутствовать в выражении SELECT; связанные с ними колонки не выводятся пользователю. Запрос SELECT может возвращать колонки, отсутствующие в метаинформации, такие колонки выводятся пользователю по тем же именам, которые им назначены в SELECT. Перечисленные возможности недоступны в PostgreSQL, где выполняется генерация хранимых процедур перед выполнением представлений.

  10. В запросе представления добавлен специальный объект "session" для использования в выражениях #eval и #var, что позволяет подставлять любые значения из сессии в представление. Например, выражение #eval(session.ClientUtcOffset) возвращает строку с текущим часовым поясом пользователя: "03:00:00". Выражение #eval(session.Token.HostName) подставляет имя компьютера из сессии. Для полного списка возвращаемых свойств обратитесь к документации по API для объекта ISession.

  11. API: Обновлены библиотеки: .NET Core 2.1.6, CsvHelper 9.1.0, ITfoxtec.Identity.Saml2.MvcCore 2.0.2, Microsoft.CodeAnalysis.CSharp 2.10.0.

  12. API: В клиентском API добавлен интерфейс IWorkflowEngineTileManagerUIExtension, с помощью реализации которого можно управлять данными, выводимыми в колонке "Настройки" в таблице с настройками кнопок в карточке шаблона бизнес-процесса.

16.3. Исправления и оптимизации

  1. В конструкторе бизнес-процессов исправлена ошибка при редактировании процесса, когда добавляется привязка к структуре на значение null или удаляется привязка, которая в текущий момент ссылается на null.

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

  3. В конструкторе бизнес-процессов исправлена опечатка в имени параметра для хранения текущей группы истории заданий.

  4. В конструкторе бизнес-процессов исправлена проверка уникальности имени связи.

  5. Исправлена ошибка "Object 'ViewMetadata' is sealed", возникающая в TessaAdmin при изменении представлений в ситуации, когда есть ссылки из представлений на несуществующие таблицы и колонки в схеме данных. Проблема появилась в 3.0.

  6. Исправлено открытие контекстного меню в текстовых контролах Avalon (с подсветкой синтаксиса), которое сбрасывало выделение текста.

  7. При завершении задания запроса комментария почтовое уведомление теперь отправляется тому, кто запросил комментарий (автору задания), а не тому, кто завершил задание. Исправление работает только для новых запросов комментария. Ошибка появилась в сборке 2.6.

  8. Удалён ряд папок с языковыми сборками в папке веб-сервиса "web". Такие папки в действительности не задействовались в сценариях использования сервиса.

  9. Исправлены блокировки интерфейса в desktop-приложении при использовании сложной асинхронной обработки совместно со сплэш-окнами. Например, это добавление изображений в диалоге сканирования, которое приводило к "зависанию" приложения. Проблема появилась в 3.0.

  10. Исправлены проблемы при перемещении этапов маршрута и при выполнении перехода в основном маршруте.

  11. Исправлено отображение окна ввода логина/пароля в desktop-приложениях (в т.ч. в Tessa Applications), если текущая учётная запись не входит в домен сервера приложений, и Windows аутентификация включена на сервере. Проблема появилась в 3.0.

  12. Исправлено отображение сообщения о неправильно введённом логине/пароле в Tessa Applications.

  13. В web-клиенте исправлено отображение контрола "Строка" в режиме "ввод пароля". Теперь вводимый пароль закрывается маркерами. Проблема появилась в 3.0.

17. Версия 3.0 (12.11.2018)

17.1. Переход на новую сборку

  1. Изменены рабочие места: Administrator.

  2. Изменены представления (добавлены): ActiveWorkflows, BusinessProcessTemplates, ErrorWorkflows, WeTaskControlTypes, WeTaskGroupActionOptionTypes, WorkflowEngineCompiledBaseTypes, WorkflowEngineErrors, WorkflowEngineLogLevels, WorkflowEngineLogs, WorkflowEngineTaskActions, WorkflowEngineTileManagerExtensions, WorkflowLinkModes, WorkflowNodeInstanceSubprocesses, WorkflowNodeInstanceTasks, WorkflowSignalTypes.

  3. Добавлена библиотека схемы WorkflowEngine (папка Partitions\Workflow и всё её содержимое). Библиотека обязательна для установки даже в случае, если в проекте не используется визуальный конструктор.

  4. Изменены таблицы: ActionTypes, FileVersions, LicenseTypes, LicenseVirtual, LoginTypes, KrChangeStateAction (добавлена), KrCheckStateTileExtension (добавлена), KrCreateCardAction (добавлена), MobileClientLicenses (удалена), MobileLicenses (добавлена), OperationTypes, PersonalClientLicenses (удалена), PersonalLicenses (добавлена), PersonalWebLicenses (удалена), ServerInstances.

  5. Изменены типы карточек: ActionHistoryRecord, License, ServerInstance.

  6. Изменены типы карточек (добавлены): BusinessProcessTemplate, KrChangeStateAction, KrCheckStateWorkflowTileExtension, WorkflowActionEditor, WorkflowActionInstanceEditor, WorkflowAddFileFromTemplateAction, WorkflowAndAction, WorkflowCheckContextRoleTileExtension, WorkflowCommandAction, WorkflowConditionAction, WorkflowCreateCardAction, WorkflowEndAction, WorkflowEngineSettings, WorkflowHistoryManagementAction, WorkflowLinkEditor, WorkflowNewItemEditor, WorkflowNodeEditor, WorkflowNodeInstanceEditor, WorkflowNotificationAction, WorkflowProcess, WorkflowProcessEditor, WorkflowProcessInstanceEditor, WorkflowScenarioAction, WorkflowStartAction, WorkflowSubprocessAction, WorkflowSubprocessControlAction, WorkflowTaskAction, WorkflowTaskControlAction, WorkflowTaskGroupAction, WorkflowTimerAction, WorkflowTimerControlAction.

  7. Изменены карточки: Business process designer (settings) (добавлена).

  8. Изменены карточки (необязательные изменения): Server settings (settings).

  9. Изменены библиотеки локализации.

  10. Перед обновлением схемы выполните скрипт Fixes/Migration-3.0-pre.*.sql.

  11. После обновления схемы выполните скрипт Fixes/Migration-3.0.*.sql.

  12. Для Windows-приложений (клиент и сервер) изменены требования к .NET Framework. Теперь требуется версия 4.7.2 или старше. Требования к ОС и оборудованию не изменились.

  13. Обновите все компоненты системы и их конфигурационные файлы, в т.ч. Chronos и веб-сервис web (теперь это единственый веб-сервис, требуемый для desktop-клиента и web-клиента). По изменениям в настройке конфигурационных файлов обратитесь к руководству по установке.

  14. Настройки отправки и получения почты теперь указываются в файле app.json в папке Chronos (вместо файла app.config в папке с плагинами). За описанием настроек обратитесь к руководству по установке.

  15. Включите Windows-аутентификацию для веб-сервиса web при установке на Windows. Также потребуется установить IIS Hosting Bundle для последней версии .NET Core 2.1 (версия 2.1.5 на момент выхода сборки). Пул приложений, в который добавлен веб-сервис web, должен быть указан как "No managed code" (как раньше указывалось для web-клиента). За подробностями обратитесь к руководству по установке.

  16. Для подключения к web-клиенту теперь не указывайте адрес экземпляра приложений. Например, вместо https://сервер/tessa/web/tessa правильно использовать ссылку вида https://сервер/tessa/web. Для почтовых уведомлений измените ссылку на web-клиент в карточке "Настройки сервера", если она там указана.

  17. На компьютеры, подключаемые к серверам Tessa 3.x с использованием desktop-клиента, требуется установить актуальную версию Tessa Applications через msi-инсталлятор. Его установка и настройка выполняются, как и прежде: устанавливаемая версия заменит предыдущую и перезапишет список серверов, к которым выполняется подключение. Установка также доступна через доменные политики, а список серверов указывается в mst-трансформации, используемой вместе с msi-пакетом инсталлятора. Новые версии опубликованных приложений TessaClient и TessaAdmin автоматически установятся на компьютеры пользователей, для этого не требуется дополнительных действий (кроме их публикации на сервере).

  18. Приложение Tessa Applications версий 3.x может подключаться к серверам Tessa 2.x, если это не основной сервер (не отмечен звёздочкой в списке серверов). Это полезно при развёртывании версии 3.x на тестовом сервере при одновременной работе с production-сервером, на котором ещё установлена версия Tessa 2.x.

  19. Обновите solution с расширениями из папки Extensions (включая файл .sln и файлы проектов .csproj). Обратите внимание на изменённый формат файлов .csproj. Файлы с исходным кодом и ресурсами автоматически добавляются в проект, их не следует перечислять в файле .csproj. Скорее всего вам подойдут файлы .csproj в том виде, в каком они есть в сборке.

  20. В проектах расширений ссылки на сторонние библиотеки .dll должны выполняться через ссылки на NuGet-пакеты. Исключением являются клиентские расширения desktop-клиента, для которых по-прежнему возможны ссылки на файлы .dll. Если у библиотеки отсутствует NuGet-пакет (что бывает очень редко), то вы можете самостоятельно создать NuGet-пакет и положить его в папку Bin\packages, за подробностями обратитесь к MSDN.

  21. Если у вас есть серверные плагины Chronos, задействующие серверное API (есть вызов метода RegisterServerForPlugin), то добавьте строку TessaPlatform.InitializeFromConfiguration() в самое начало метода EntryPoint() вашего плагина.

  22. Прочтите файл readme.txt в папке с расширениями Extensions. Он описывает изменённые требования к ПО для разработки расширений сервера и desktop-клиента.

  23. Обновлена библиотека Unity до версии 5.8.11. Также вместо форка библиотеки в Tessa.dll теперь используется оригинальные NuGet-пакеты Unity.Container и Unity.Abstractions. В связи с этим замените пространство имён Tessa.Unity на одно из пространств имён: Unity, Unity.Attributes, Unity.Extension, Unity.Injection, Unity.Lifetime, Unity.Resolution. Метод-расширение unityContainer.TryResolve<T>() был перенесён в пространство имён Tessa.Platform. Также учитывайте, что новая версия Unity не разрешает при регистрации указывать одновременно интерфейс вместе с классом и InjectionFactory. Вместо RegisterType<IMyType, MyType>(new InjectionFactory(…​))) правильно указывать RegisterType<IMyType>(new InjectionFactory(…​)).

  24. API расширений web-клиента полностью изменён, теперь он задействует библиотеку MOBX вместо библиотеки Redux. Все расширения web-клиента необходимо переписать с использованием нового API. Обратитесь к руководству разработчика web-клиента. В папке WebClient SDK доступны обновлённые примеры расширений для часто решаемых задач. Также в составе сборки теперь поставляются расширения типового решения для web-клиента в папке WebClient SDK\src\default.

  25. Интеграция с внешними системами теперь выполняется с использованием контроллеров ASP.NET Core вместо WCF-сервисов. Обращение к контроллеру выполняется посредством REST API. Пример контроллера доступен в проекте расширений Tessa.Extensions.Server.Web, который можно произвольно изменять в рамках проекта. Клиентская функциональность контроллера, как и раньше, располагается в сборках Tessa.Extensions.Client и Tessa.Extensions.Shared в папке Services. В соответствии с правилами ASP.NET Core контроллерами являются любые классы, заканчивающиеся на ***Controller и наследуемые от базового класса контроллеров; по вопросам написания таких классов обратитесь к MSDN. Классы контроллеров могут быть добавлены в сборки, перечисленные в файле app.json веб-сервисов в настройке Settings→WebControllers; мы рекомендуем добавлять такие классы в сборку Tessa.Extensions.Server.Web.

  26. При условии корректного обновления веб-сервисов и конфигурационных файлов, возможно автоматизированное сквозное обновление конфигурации в базе данных с любой из предыдущих сборок 2.x посредством скрипта Upgrade.bat. Также обновление возможно для сервера, развёрнутого на Linux, посредством скрипта upgrade.sh.

  27. При использовании Linux-версии консольной утилиты tadmin ключи командной строки указывайте, начиная с символа "-" вместо "/". Пример: ./tadmin CheckService -a:https://localhost/tessa -u:admin -p:admin

  28. После обновления системы проверьте настройки персональных лицензий и лицензий мобильного согласования в карточке настроек "Лицензия".

  29. В связи с изменениями лицензионной политики, начиная с этой сборки для использования более одного файлового хранилища для базы данных и/или более одного хранилища в файловых папках теперь требуется модуль лицензии "Несколько файловых хранилищ". Для использования параметра #view(ConnectionAlias) для выполнения представлений на других базах данных теперь требуется модуль лицензии "Кластеризация". Если вы являетесь владельцем лицензии от предыдущих версий системы, то обратитесь к вендору для получения лицензии со включёнными модулями. Для новых выписываемых лицензий перечисленные модули включены в Enterprise-редакцию системы, но не включены в обычную редакцию.

17.2. Добавление и изменение функциональности

  1. Добавлена поддержка сервера приложений на ОС Linux. По вопросам установки на Linux обратитесь к инструкции "Руководство по установке на Linux". Также в инструкции описаны ограничения, существующие в Linux-версии. Приложения TessaClient, TessaAdmin, Tessa Applications и SchemeEditor не поддерживают работу в среде Linux, для этого используется web-клиент. Для разработки конфигурации используйте приложения TessaAdmin и SchemeEditor на Windows. Импорт конфигурации может быть выполнен консольной утилитой tadmin, которая доступна на Linux. Также при установке на Linux вместо приложения TokenEditor используйте консольную утилиту tadmin (команды GetToken и SetToken).

  2. В карточке сотрудника добавлен тип входа "Пользователь LDAP", который позволяет связать сотрудников Tessa с пользователями службы каталогов LDAP. Используя такие настройки, можно связаться с доменом Active Directory (или другим сервером LDAP) от сервера приложений Tessa, который не принадлежит домену, например, от сервера приложений на Linux. Настройки LDAP описаны в файле app.json веб-сервиса.

  3. Модуль Workflow Engine с графическим конструктором бизнес-процессов добавлен в состав платформы. Для функционирования требуется соответствующий модуль лицензии. По разработке процессов обратитесь к инструкции "Tessa. Руководство разработчика бизнес-процессов".

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

  5. В web-клиенте расположение плиток на боковых панелях приближено к тому, как они выглядят в desktop-клиенте. Также для всех плиток доступны горячие клавиши, если они были доступны в desktop-клиенте.

  6. В web-клиенте доступно редактирование карточек в шаблонах аналогично desktop-клиенту, используя плитки "Редактировать" и "Назад к шаблону".

  7. В web-клиенте доступен просмотр удалённых карточек аналогично desktop-клиенту в том виде, в котором они были на момент удаления, используя плитку "Просмотр" в удалённых карточках.

  8. В web-клиенте доступны дополнительные действия с файлами, содержимое которых изменено, но которые ещё не сохранены (аналогично возможностям desktop-клиента).

  9. Система поддерживает изменения в лицензионной политике с новыми модулями лицензии, редакцией Enterprise и универсальными клиентскими лицензиями, которые задействуются и для desktop-клиента, и для web-клиента. Уже выписанные файлы лицензий продолжат работу.

  10. В карточке "Настройки сервера" добавлена настройка "Максимальный размер файла для загрузки в систему". По умолчанию размер не ограничен. Если указанный размер превышен, то будет выведена ошибка при добавлении файла с desktop- или web-клиента.

  11. В карточке "Настройки сервера" добавлена настройка "Начальный размер большого файла". По умолчанию указывается 500 Мб. Файлы, содержимое которых занимает указанный размер или больше, будут считаться большими файлами, и для них выполняется особая обработка на клиенте, в т.ч. запрет на копирование во временную папку, и связанные с этим невозможность выполнить предпросмотр, подписать файл или отредактировать файл в приложении.

  12. Доступна работа с файлами, приложенными к карточке, размером более 2 Гб. Для desktop-клиента ограничения размера одного файла отсутствуют. Для web-клиента они зависят от настроек браузера и веб-сервера (IIS / Nginx / Apache), обычно это составляет около 2 Гб на загрузку файла на сервер и около 4 Гб на скачивание файла с сервера.

  13. Отключена возможность административного удаления истории действий через плитку "Удалить для карточки" или через соответствующий запрос к серверу.

  14. Доступен режим локальной (временной) установки сервера приложений без использования IIS, см. раздел "Локальная установка без настройки IIS" в руководстве по установке.

  15. Файлы логов, настроенные в NLog.config, теперь записываются в кодировке UTF-8 + BOM. При необходимости вы можете изменить эти настройки в файлах NLog.config.

  16. Визуализатор процессов маршрутов и типовых задач получил такие же улучшения, которые используются в визуальном конструкторе процессов: сетка с привязкой к ней узлов, возможность изменения размеров узлов, улучшенная расстановка стрелок, сохранение в картинку (в контекстном меню).

  17. В файлах app.json добавлена шаблонизация, используя конструкцию ".if". По умолчанию определены символы: "windows" (для запуска на Windows), "linux" (для запуска на Linux), "x64" (для запуска в 64-битном процессе), "x86" (для запуска в 32-битном процессе). Также символы можно добавлять или удалять через конструкцию ".define" (для удаления в начале символа укажите восклицательный знак).

  18. API: Доступно новое API для web-клиента, максимально приближенное по внешнему виду и функциональности к клиентским расширениям desktop-клиента. В папке WebClient SDK\src\default предоставляются исходные коды для клиентских расширений типового решения, которые можно изучать, а также изменять в рамках проекта. Типовые расширения собираются в единый bundle (файлы .js и .map) вместе с проектными расширениями по аналогии с тем, как если бы сборки desktop-клиента Tessa.Extensions.Client и Tessa.Extensions.Default.Client были объединены. Для этого bundle выполняется оптимизация и минификация JS, после чего он копируется с заменой в папку веб-сервиса wwwroot\extensions. Обратитесь к руководству разработчика web-клиента.

  19. API: Во всех скриптах, используемых в маршрутах и других частях системы, теперь доступна последняя версия языка C# 7.3. Все существующие скрипты продолжат работу, если они используют актуальные методы и свойства API скриптов (все без исключения при обновлении с предыдущей сборки).

  20. API: В API файлов добавлены теги для версий файла IFileVersion.Tags, которые позволяют отметить версию некоторыми признаками, обычно связанными с её содержимым. В настоящий момент системой поддерживается тег FileTag.Large для файлов, содержимое которых отмечено как большой файл. Такие файлы также можно идентифицировать, вызвав метод version.IsLarge() или file.IsLarge() (соответствует признаку для последней версии файла). При добавлении или изменении файла теги создаваемой версии файла можно установить через свойство file.NewVersionTags, после чего вызвать file.Notify(FileNotificationType.NewVersionTagsModified), если файл связан с карточкой. Теги для уже созданных версий не изменяются. Также вы можете использовать собственные произвольные теги (в виде текстовых строк), чтобы отмечать файлы.

  21. API: В клиентском API файлов для элемента управления IFileControl или контейнера файлов IFileContainer можно установить обработчик SetNewPhysicalFileAction, который для каждого файла, добавляемого физически по заданному пути FilePath, может переопределить теги такого файла и любые другие параметры, а также отменить добавление файла. Пример в расширении Tessa.Extensions.Default.Client.UI.CarUIExtension.

  22. API: Опции файла, устанавливаемые расширениями в свойствах IFile.Options и CardFile.Options, теперь сохраняются в базу данных. При изменении опций через IFile укажите file.Notify(FileNotificationType.OptionsModified). При изменении опций через CardFile укажите cardFile.Flags |= CardFileFlags.UpdateOptions. При добавлении версии её опции копируются из опций файла на момент сохранения на сервере.

17.3. Исправления и оптимизации

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

18. Версия 2.7.5 (12.11.2018)

18.1. Переход на новую сборку

  1. Изменены рабочие места: User (укажите строку локализации "$Workplaces_User_Dictionaries_DocumentCategories" в качестве заголовка узла дерева "Категории документов" на верхнем уровне).

  2. Изменены библиотеки локализации.

  3. Обновите хост Chronos.exe. Версия Chronos увеличена до 2.7.5.

  4. Если в проектном решении есть клиентские операции, которые создаются со стороны desktop-клиента через IOperationRepository, то укажите для них доступ, добавив идентификатор типа такой операции в одно из свойств: OperationTypes.UserClientOperations (для любых пользователей) и OperationTypes.AdminClientOperations (только для администраторов). Добавить идентификаторы операций можно в серверном классе Registrator в методе InitializeRegistration.

18.2. Добавление и изменение функциональности

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

  2. API: Доступ на запуск операций через IOperationRepository со стороны клиентских приложений теперь ограничен настройками в свойствах OperationTypes.UserClientOperations и OperationTypes.AdminClientOperations.

  3. API: Обновлены библиотеки: BitMiracle.LibTiff.NET 2.4.626, CsvHelper 9.0.0, Linq2DB 2.5.2, NLog 4.5.11.

18.3. Исправления и оптимизации

  1. Исправлено закрытие вкладки с карточкой в TessaClient, если карточка имеет повреждённую структуру, для которой невозможно определить признак наличия изменений.

  2. Улучшена обработка ошибок при наличии проблем в структуре настроек пользователя в карточке-сателлите сотрудника.

  3. Исправлены ошибки, возникающие в ситуациях, когда завершение задания или нажатие кнопки процесса переводит карточку в другое состояние, в котором у пользователя нет прав на чтение карточки, поэтому пользователь получал ошибку о недостатке прав сразу после сохранения. Ошибка присутствовала раньше, но стала воспроизводиться после исправлений в сборке 2.7.4.

  4. При обновлении схемы данных для SQL Server 2008 R2 исправлена ошибка "Cannot alter a non-unique index with ignore_dup_key index option". Ошибка не возникала на более поздних версиях SQL Server или на Postgres.

  5. При сериализации настроек "Мои настройки" теперь выполняется запись строки JSON без отступов, что приводит к более компактной записи.

  6. Исправлены ошибки при пересчёте и переходе между этапами в маршрутах.

  7. Исправлено значение, возвращаемое методом Validator.End() в последовательности вызовов ValidationSequence.

  8. Исправлена запись текущих даты/времени для некоторых системных и типовых запросов на PostgreSQL. Например, ранее дата записывалась на три часа раньше положенного, если сервер СУБД расположен в часовой зоне UTC+3:00. Исправление неактуально для MS SQL Server.

  9. Исправлены стили текста, используемые в контролах "Ссылка" и "Список", такие как "Полужирный" и "Подчёркнутый".

  10. В окне отображения ошибки при сохранении схемы данных кнопка будет называться "Копировать файлы" только в том случае, если файлы для копирования присутствуют. Если для ошибки доступно только копирование текста, то кнопка теперь называется "Копировать".

  11. В рабочем месте "Пользователь" исправлена локализация узла "Категории документов" при выборе по троеточию в соответствующем поле.

  12. Исправлено автоматическое увеличение версии карточки при смене её состояния в маршруте, если сама карточка при этом не изменялась.

  13. Исправлена проблема, из-за которой вручную добавленные в маршрут этапы нельзя было перемещать, если они вблизи границы группы этапов, в которой также есть скрытый этап.

  14. Улучшено сообщение об ошибке компрессии данных загружаемой карточки, если в одной из коллекционных секций некорректная структура (не хватает некоторых полей в строках).

19. Версия 2.7.4 (02.11.2018)

19.1. Переход на новую сборку

  1. Изменены рабочие места: User (для узла "Мне на ознакомление" указан заголовок $Workplaces_User_MyAcquaintanceHistory; для узлов "Доступные роли" и "Доступные сотрудники" указана настройка "Множественное выделение строк = Как задано в представлении).

  2. Изменены представления: AcquaintanceHistory, AcquaintanceStates, AvailableDeputyRoles, AvailableDeputyUsers, KrTypes, MyAcquaintanceHistory, MyDocuments.

  3. Изменены представления (необязательные изменения): RefDocumentsLookup (изменены роли).

  4. Изменены таблицы: AcquaintanceComments (переименована из MassInformingComments), AcquaintanceRows (переименована из MassInformingRows), KrRegistrationStageSettingsVirtual, KrResolutionSettingsVirtual, KrSecondaryProcessContextRoles, KrSettings, KrTypes, KrUniversalTaskSettingsVirtual, MassInformingComments (удалена), MassInformingRows (удалена), TaskHistory, WebClientRoles (добавлена).

  5. Изменены типы карточек: Dialogs, KrAuthorSettings, KrCard, KrPerformersSettings, KrPermissions, KrRegistrationStageTypeSettings, KrResolutionStageTypeSettings, KrSettings, KrUniversalTaskStageTypeSettings, ServerInstance.

  6. Изменены карточки: Acquaintance, Assigned to me, Assigned to me (Excel), Protocol of the meeting, Protocol of the meeting (Excel).

  7. Изменены карточки (необязательные изменения): Active Directory Sync (settings), PasswordExpires, Server settings (settings), Standard solution (settings).

  8. Изменены библиотеки локализации.

  9. Обновите хост Chronos.exe. Версия Chronos увеличена до 2.7.4.

  10. Если в сборке 2.7.3 вы добавляли контекстные роли в карточки вторичных процессов (например, для кнопок процессов), то перед обновлением на эту сборку удалите все контекстные роли, а после обновления - добавьте снова. Список добавленных контекстных ролей можно определить запросом по таблице KrSecondaryProcessContextRoles.

  11. Проверьте список "Роли, которым доступен web-клиент" в карточке "Настройки сервера". Чтобы разрешить доступ к web-клиенту всем сотрудникам, должна быть указана роль "Все сотрудники". Если список пустой, то доступ к web-клиенту запрещён всем сотрудникам в системе.

  12. Был исправлен скрипт миграции при миграции со сборок перед 2.6 на текущую сборку. Выполняйте сквозную миграцию на текущую сборку, например, с 2.5.3 сразу на 2.7.4, минуя предыдущие сборки.

19.2. Добавление и изменение функциональности

  1. Поля "Исполнители" и "Исполнитель" для типов этапов "Согласование", "Подписание", "Регистрация", "Уведомление", "Ознакомление" теперь называются в соответствии с типом этапа, т.е. "Согласующие", "Подписанты", "Регистратор" и "Получатели".

  2. В маршрутах для этапов "Настраиваемое задание" и "Регистрация" добавлены флажки "Редактировать карточку" и "Редактировать любые файлы", при установке которых сотруднику, взявшему такое задание в работу, выдаются дополнительные права на редактирование полей карточки и редактирование любых приложенных файлов соответственно.

  3. Добавлен список "Роли, которым доступен web-клиент" в карточку "Настройки сервера", по которым можно ограничить доступ к web-клиенту всем сотрудникам (если список пустой) или сотрудникам в определённых ролях. Укажите роль "Все сотрудники" (указана по умолчанию), если доступ к web-клиенту должны иметь все сотрудники в системе.

  4. В таблице TaskHistory отключен внешний ключ для колонки ParentRowID. Это позволяет не зависеть от порядка вставки строк в TaskHistory, когда выполняется вставка или удаление иерархии строк (актуально для расширений).

  5. При скрытии области предпросмотра в TessaClient теперь выводится всплывающее уведомление с подсказкой о том, как её снова отобразить.

  6. Убрана настройка "Разрешить отрицательные сроки" в настройках типового решения. Отрицательные сроки теперь по умолчанию разрешены, чтобы сроки, задаваемые динамически в скриптах, не привели к невозможности выполнить маршрут из-за того, что рассчитанная дата оказалось раньше текущей даты.

  7. В desktop-приложениях TessaClient, TessaAdmin и Tessa Applications в конфигурационном файле *.exe.config добавлена настройка "SoftwareRendering" (по умолчанию false). Если указано "true", то система не использует аппаратное ускорение при выводе на экран, что замедляет работу приложения, но может исправить ошибки совместимости с приложениями, которые организуют терминальные сессии. Используйте настройку с осторожностью, только в ситуации, когда она исправляет существующие ошибки, и предварительно убедившись в её работоспособности на компьютерах пользователей. Если эта настройка включена, то также установите настройку "FadeAllowed" равную "false" в конфигурационном файле.

  8. Срок этапа "Задача" по умолчанию (в момент добавления этапа) теперь равен 1 рабочему дню, как и в других этапах.

  9. Недоступность вкладки "Маршрут" при редактировании карточки в шаблоне теперь явно обозначено подсказкой, а маршрут и другие поля скрыты. Используйте шаблоны этапов для автоматического построения маршрута.

  10. Если при создании карточки по шаблону отсутствуют ошибки и возникают предупреждения о восстановлении структуры карточки (при несоответствии структуры карточки в шаблоне и типа карточки в метаинформации), то такие предупреждения больше не отображаются. Таким образом, при изменении секций типов карточек необязательно выполнять исправление всех карточек шаблонов, если такое изменение совместимо с новыми карточками (например, добавлено новое поле).

  11. В контроле "Список файлов" копирование файлов в буфер обмена теперь возможно по комбинации клавиш Ctrl+Insert, помимо Ctrl+C.

  12. Для диалоговых окон типа MessageBox в TessaClient добавлены сочетания клавиш: Y = Да, N = Нет, O (англ. раскладка) = ОК, C = Отмена.

  13. API: В дескрипторах типов этапов добавлена настройка PerformerCaption, позволяющая переопределять заголовок контрола исполнителей.

  14. API: Все контролы, блоки и формы в карточке теперь получают уведомления при переключении вкладки TabSelected и при исчезновении объекта из активной вкладки TabDeselected. Это позволяет реализовывать логику, основанную на том, виден ли объект пользователю. Например, отложенная загрузка данных при первом переключении на вкладку с контролом.

  15. API: Добавлено свойство ICardModel.Notifications типа INotificationUIManager, позволяющее упростить использование всплывающих уведомлений в расширениях и элементах управления.

  16. API: В методы IKrAcquaintanceManager.Send() добавлен параметр addSuccessMessage, определяющий необходимость добавить сообщение об успешной отправке в ValidationResult. По умолчанию сообщение теперь не добавляется.

  17. API: Добавлен интерфейс ICardServerPermissionsProvider, доступный на сервере. Он позволяет установить полные разрешения для любого из запросов к API карточек с учётом текущей системы прав доступа. При использовании типовых расширений это будет система правил доступа, доступная через интерфейс IKrTokenProvider. Интерфейс ICardServerPermissionsProvider не требует ссылок на расширения типового решения для установки таких прав.

  18. API: В контексте расширений IApplicationExtension добавлены обработчики событий ApplicationClosingBeforeCheck и ApplicationClosingAfterCheck, которые контролируют закрытие окна приложения TessaClient с возможностью добавить проверки или отменить стандартное поведение для закрытия. Устанавливайте обработчики в методе расширения Initialize, например: context.ApplicationClosingBeforeCheck += (s, e) ⇒ e.ForceClosing = true. Расширение зарегистрируйте как .WhenApplications(ApplicationIdentifiers.TessaClient).

  19. API: Добавлен метод IValidationResultBuilder.Add(IValidationResultItem) для добавления отдельных сообщений валидации, а также метод-расширение AddRange для массового добавления сообщений.

  20. API: Добавлено свойство IFormViewModel.FilePreviewIsHidden, которое позволяет в расширениях переопределить видимость области предпросмотра индивидуально для отдельных вкладок карточки.

  21. API: В классах ***StageTypeHandler для типовых этапов маршрута добавлена возможность наследоваться и переопределять методы для своих типов этапов. Их регистрация возможна в своём классе Registrator с указанным [Registrator(Order = 1)], где для IKrProcessContainer в методе FinalizeRegistration выполняется повторная регистрация дескриптора этапа вызовом RegisterHandler (см. код типовой регистрации). Это позволит заменить типовое поведение у этапа регистрации, не создавая тип этапа с собственными клиентскими расширениями, форматтерами и др. Также класс-наследник ***StageTypeHandler должен регистрироваться в контейнере Unity по аналогии с типовым классом.

  22. API: По умолчанию время жизни токена KrToken (при условии неизменности карточки) сокращено с 2 дней до 2 часов. После завершения времени жизни он будет автоматически перерасчитан расширениями. Для изменения этого значения создайте класс, наследуемый от KrTokenProvider, и установите свойство TokenExpirationTimeSpan, после чего зарегистрируйте класс в Unity в серверных расширениях (см. описание класса KrTokenProvider).

  23. API: Для метода CardHelper.CopyFiles добавлен параметр copySignatures, позволяющий копировать файлы вместе с подписями для последней версии.

  24. API: В скриптах маршрутов добавлено свойство WorkflowContext.AffectMainCardVersionWhenStateChanged. Установите его равным false, когда требуется, чтобы при изменении состояния документа не увеличивалась версия карточки.

  25. API: Обновлены библиотеки: BitMiracle.LibTiff.NET 2.4.624, Linq2DB 2.5.0, Quartz 3.0.7.

19.3. Исправления и оптимизации

  1. Исправлена обработка ошибок, возникающих при выполнении вторичных процессов маршрутов, в т.ч. при нажатии кнопок процессов.

  2. Исправлено выполнение вторичных процессов маршрутов (например, кнопок "Зарегистрировать" и "Отменить регистрацию") для типов карточек, у которых отключены типы документов.

  3. В контроле "Строка" с типом "Расширенный (Avalon)" исправлено контекстное меню, отображаемое по правой кнопке мыши.

  4. Исправлена ошибка при сохранении настроек для этапа "Задача" в маршруте.

  5. Для этапа "Задача" исправлено отображение настройки "Вернуть на роль" в таблице маршрута, если указан флажок "Вернуть на роль", но не указана роль, т.е. подразумевается возврат на автора задачи.

  6. Поле "От имени" в этапах маршрута в документе (не в шаблоне) больше нельзя изменить, оно доступно только для чтения. Это предотвращает возможность указать любого сотрудника как автора независимо от настроек текущего сотрудника, редактирующего маршрут.

  7. Для этапа "Создание карточки" исправлено создание по типу документа.

  8. Если в этапе "Доработка" не стоит флажок "Увеличивать цикл", то вариант завершения называется "Продолжить процесс".

  9. Улучшены сообщения об ошибках при чтении схемы данных.

  10. Исправлен возможный запуск процесса сразу с этапа "Доработка", если этот запуск выполнен из процесса по другой карточке (т.е. маршрут в одной карточке запускает процесс в другой карточке).

  11. В таблице KrSecondaryProcessContextRoles (список контекстных ролей в кнопках процессов и др., ранее таблица называлась KrButtonContextRoles) в сборке 2.7.3 у колонки RoleName изменился идентификатор, из-за чего при обновлении с предыдущих версий на 2.7.3 возникала ошибка SQL при наличии контекстных ролей. В этой сборке идентификатор возвращён к старому значению.

  12. В web-клиенте задействована Brotli-компрессия, которая значительно сократила объём трафика, скачиваемого при первичной инициализации web-приложения, когда в кэше браузера отсутствуют данные по предыдущим запускам.

  13. В web-клиенте исправлен экспорт представлений на Mac OS X.

  14. В web-клиенте исправлено отображение информации по service worker.

  15. В web-клиенте исправлено отображение и работоспособность плиток, связанных с массовым ознакомлением. Ошибка появилась в сборке 2.7.

  16. В листе согласования исправлено отображение колонки "До завершения" в таблице с текущими заданиями. Ошибка появилась в сборке 2.6.

  17. Исправлены настройки представлений для множественного выбора при заполнении таблицы в диалоге "Мои замещения". Теперь из представления можно выбрать несколько строк и сразу их добавить.

  18. При отправке ознакомления из маршрута пользователю теперь не отображаются сообщения вида "Отправка успешно завершена".

  19. Исправлен вывод даты/времени завершения задачи в таблице маршрута в колонке "Срок". Строка, выводимая в таблице, обновится только после изменения даты/времени в настройках.

  20. Исправлен пересчет маршрута для шаблонов, у которых изменена группа этапов.

  21. Исправлено добавление этапа маршрута в карточке документа в конец группы, если у следующей группы в начале есть скрытые этапы (например, добавленные в шаблоне автоматически).

  22. Исправлено представление "Типы" в папке "Типовое решение" таким образом, чтобы оно не отображалось при выборе в режиме "только тип карточки" (например, при добавлении строки в карточку настроек "Типовое решение"), и чтобы возвращаемые в колонке "Тип карточки" значения были корректны для выводимых строк с типами документов.

  23. Исправлены возможные проблемы в расширениях на загрузку и сохранение карточек, которые из-за своих ошибок могли предотвращать запуск приложений TessaClient или TessaAdmin в случае, если ошибки возникали при действиях с карточкой-сателлитом сотрудника.

  24. Оптимизирована загрузка карточек-сателлитов, а также карточек, для которых не включена подсистема маршрутов.

  25. Исправлено поведение при сохранении карточки по горячей клавише, когда пользователь выполняет ввод значения в контрол "Ссылка" или "Список" в режиме ручного ввода. Теперь значение автоматически считается подтверждённым.

  26. Инициализация клиентских приложений через API IApplicationInitializer или IClientInitializer теперь выполняется без ошибок в случае, если в контейнере Unity не зарегистрированы все клиентские зависимости, которые требуются платформенным расширениям. Такие расширения при инициализации будут пропущены. Также объект IInitializationContainer будет заполнен при успешной инициализиации для любых приложений. Это полезно при разработке кастомизированных клиентских приложений на API Tessa (например, консольных утилит).

  27. Исправлена визуализация маршрутов для согласования (ошибки появились в сборке 2.6) и подписания.

  28. Исправлена отправка заданий доп. согласования, при которой строка в таблице истории заданий вставлялась сразу с указанием статуса "в работе", хотя задание фактически не было взято в работу. Также у строки в истории был указан неправильный идентификатор типа задания, что приводило к проблемам при визуализации. Исправление работает только для новой отправки на доп. согласование. Ошибка появилась в сборке 2.6.

  29. При делегировании заданий согласования и подписания с указанным комментарием в тексте задания теперь отражается не только комментарий, но и текст с названием этапа и комментарием инициатора.

  30. Представление "Мои документы" теперь корректно подсвечивает документы в состояниях, связанных с подписанием.

  31. Исправлены некоторые сообщения об ошибках при некорректном вводе метаинформации представлений.

  32. Исправлены скрипты миграции с версий 2.5.x и ранее на текущую версию, в которых миграция выполнялась с ошибкой. Ошибка появилась в 2.7.3.

  33. При миграции с версий 2.5.х (и ранее) исправлен перенос этапов согласования, в которых в имени согласующего присутствуют символы кавычек или другие символы, требующие эскейпинг в формате JSON. Ошибка появилась в 2.6.

  34. При миграции с версий 2.5.х (и ранее) исправлен перенос этапов согласования, где у согласования присутствовало задание доп. согласования с ровно одним заданием комментирования. Ошибка появилась в 2.6.

  35. При миграции с версий 2.5.х (и ранее) исправлен перенос этапов согласования, где строка с этапом "Доработка" не скрывалась в маршруте, если задание доработки неактивно (например, при активном согласовании).

  36. Исправлена загрузка карточек с полями типа Date, DateTime и Time на PostgreSQL, если в текущем приложении не зарегистрирована сборка расширений Tessa.Extensions.PostgreSql.Server.dll. Актуально для кастомизированных приложений на API Tessa и для автоматизированных тестов.

  37. Исправлено изменение состояния документа при отказе в согласовании и подписании с последующим переходом на доработку. Теперь состояние документа будет "Не согласовано" или "Отказано" вместо "На доработке". В реестре "Мои документы" такие строки выделяются красным. Ошибка появилась в 2.6.

  38. Исправлена сортировка специальных ролей (таких как "Все роли и заместители") при выборе из представления "Доступные роли" для PostgreSQL.

  39. В этапах маршрутов исправлено указание контекстных ролей в поле "От имени". Если контекстная роль не возвращает сотрудников, то этап пропускается. Если возвращается более одного сотрудника, то используется первый из возвращённых.

  40. Для расширений инициализации ServerInitializationExtension и ClientInitializationExtension исправлена обработка ошибок, возникших в методах BeforeRequest.

  41. Для расширений исправлено асинхронное изменение (не в потоке UI) значений свойств для настроек карточки ICardModelSettings, в т.ч. признак того, что область предварительного просмотра должна быть скрыта или отображена.

  42. Исправлены возможные проблемы при завершении работы desktop-приложений (TessaClient, TessaAdmin, Tessa Applications), при котором не все записи могли быть записаны в клиентский лог, если запись производилась непосредственно перед завершением.

  43. Улучшена обработка критических ошибок в desktop-приложениях (TessaClient, TessaAdmin, Tessa Applications). Предотвращены возможные проблемы с "зацикливанием" окон с ошибками в ситуации, когда возникает критическая ошибка в DirectX или другая ошибка отрисовки.

  44. Шаблоны файлов "Мои задания" и "Протокол совещания" теперь добавляют файл с названием по строке локализации.

  45. Исправлены возможные проблемы с блокировками в БД при пересчёте календаря.

  46. Исправлено сохранение схемы после изменения порядка физических колонок внутри комплексной при отсутствии других изменений.

  47. Исправлена строка локализации, из-за которой флажок "Ручное редактирование номера" в карточке "Правило доступа" не локализовывался в web-клиенте. Также упорядочен список флажков в карточке.

  48. Исправлены права доступа для заданий "Регистрация" и "Настраиваемая задача" в процессе маршрутов.

  49. Исправлен расчёт разрешений при наличии токенов с правами при загрузке и удалении карточки. Если в токене имеются полные права (на ту же версию карточки), то проверок по правилам доступа больше выполняться не будет, что особенно актуально на сервере в бизнес-процессах или в Chronos.

  50. Исправлен расчёт разрешений на файлы при отправке задания "Постановка задачи". Такое задание считается автоматически берущимся в работу, поэтому любые сотрудники, которым доступна "Постановка задачи" как исполнителям, получают права на добавление файлов и редактирование собственных файлов.

  51. Исправлено переименование колонки в MS SQL Server, если в имени колонки присутствуют символы, требующие эскейпинг по правилам этой СУБД, такие как одиночная или двойная кавычка.

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

  53. Для массового ознакомления исправлено именование в различных частях системы. Вместо "MassInforming" теперь везде используется название "Acquaintance". Это не влияет на пользователей системы, т.к. в интерфейсе уже использовалось название "Acquaintance" для английской локализации (в русской локализации по-прежнему используется "Массовое ознакомление").

  54. Исправлено соответствие количества часов, выводимых в представлении, и количества часов, выводимых в заданиях в карточке или во всплывающих уведомлениях. Теперь до 5 рабочих дней включительно отображается одно и то же значение, а начиная с 5.5 дней в карточке начинает указывать срок в неделях (в представлении большие сроки указываются только в днях).

  55. Исправлено расположение дополнительных вариантов завершения в заданиях на этапе "Настраиваемая задача" в маршруте. Теперь такие варианты расположены выше, чем "Отложить" и другие системные пункты меню.

  56. В представлении RefDocumentsLookup, которое используется в контроле "Ссылки" в различных карточках документов, теперь по умолчанию указана роль "Все сотрудники", как это было до её исчезновения в сборке 2.6.

  57. Если в диалоге проверки ЭЦП в TessaClient отсутствуют данные, полученные из базы данных (например, если подпись "фейковая" и данных нет), то теперь вместо падения с ошибкой диалог пропускает проверку таких подписей. Другие подписи будут проверены.

  58. Исправлен порядок сортировки строк для разных языков в библиотеках локализации, теперь порядок сортировки стабильный.

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

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

20. Версия 2.7.3 (05.10.2018)

20.1. Переход на новую сборку

  1. Изменены рабочие места: Administrator.

  2. Изменены представления: Applications, AvailableDeputyRoles, AvailableDeputyUsers, DeputiesManagement, DocumentCategories, DurableRoles, KrActionTypes (добавлено), KrFilteredStageGroups, KrProcessButtons (удалено), KrSecondaryProcesses (добавлено), KrSecondaryProcessModes (добавлено), KrStageGroups, KrStageRows, KrStageTemplates, KrStageTypes, MyTasks, ReportCurrentTasksRules, Roles, Users, WfResolutionAuthors.

  3. Изменены представления (необязательные изменения): AccessLevels, ActionHistoryTypes, ActionTypes, ApplicationNames, Cars, CompletedTasks, CompletionOptions, ContractsDocuments, Currencies, Deleted, Departments, DeviceTypes, DocumentCategories, Documents, DocumentTypes, EmittedTasks, FileCategoriesAll, FileCategoriesFiltered, FileTemplates, FileTemplateTemplateTypes, FileTemplateTypes, IncomingDocuments, KrCreateCardStageTypeModes, KrDocNumberRegistrationAutoAssigment, KrDocNumberRegularAutoAssigment, KrDocStates, KrDocTypes, KrManagerTasks, KrPermissions, KrProcessManagementStageTypeModes, KrStageCommonMethods, KrStageTemplateGroupPosition, KrTypes, KrTypesEffective, KrTypesForPermissionsExtension, Languages, LicenseTypes, LoginTypes, MyCompletedTasks, MyDocuments, Notifications, NotificationTypes, OutgoingDocuments, Partners, PartnersContacts, PartnersTypes, ProtocolCompletedTasks, Protocols, RefDocumentsLookup, ReportCurrentTasksByDepartment, ReportCurrentTasksByDepUnpivoted, ReportCurrentTasksByUser, ReportPastTasksByUser, RoleGenerators, RoleTypes, Sequences, Sessions, SessionServiceTypes, TaskHistory, TaskKinds, TaskTypes, Templates, TileSizes, Types, VatTypes, Views, Workplaces.

  4. Изменены таблицы: AdSyncRoots, DocumentCategories, KrActionTypes (добавлена), KrApprovalCommonInfo, KrApprovalCommonInfoVirtual, KrAuthorSettingsVirtual (добавлена), KrButtonContextRoles (удалена), KrSecondaryProcessContextRoles (переименована из KrButtonContextRoles), KrProcessButtonGroupsVirtual (удалена), KrProcessButtons (удалена), KrResolutionSettingsVirtual, KrSecondaryProcessCommonInfo, KrSecondaryProcessContextRoles, KrSecondaryProcesses (переименована из KrProcessButtons), KrSecondaryProcessGroupsVirtual (добавлена), KrSecondaryProcessModes (добавлена), KrStageGroups, KrStages, KrUniversalTaskSettingsVirtual.

  5. Изменены типы карточек: AdSync, DocumentCategory, KrAuthorSettings (добавлен), KrCard, KrResolutionStageTypeSettings, KrSatellite, KrSecondaryProcess (переименован из KrProcessButton), KrSecondarySatellite, KrStageGroup, KrStageTemplate, KrUniversalTaskStageTypeSettings.

  6. Изменены карточки: ApprovalGroup, CancelButton, CancelGroup, DeregisterButton, DeregisterGroup, FullRecalcRouteButton, RebuildButton, RebuildGroup, RegisterButton, RegisterGroup, RejectButton, RejectGroup, StartProcessButton, StartProcessGroup

  7. Изменены библиотеки локализации.

  8. Сброшены локальные настройки пользователей в приложении TessaClient, которые связаны с выбранной темой и фоном. Пользователи должны установить эти настройки заново.

20.2. Добавление и изменение функциональности

  1. В маршрутах кнопки процессов расширены до карточек вторичных процессов с режимом работы: "Кнопка", "Действие" (вызывается при создании карточек, сохранении карточек или завершении заданий) и "Простой процесс" (запускается из скриптов и расширений). Для режима "Действие" есть опция "Запускать один раз за запрос", которая предотвращает проверку условия и выполнение действия более, чем один раз за запрос на сохранение карточки, это предотвращает рекурсивно вложенные запросы, выполняющие одно и то же действие.

  2. Синхронизация с Active Directory теперь позволяет синхронизовать дерево групп пользователей в виде статических ролей.

  3. В карточке настроек лицензии теперь выводится только количество конкурентных лицензий, которые гарантированно заняты в системе и которые не могут быть автоматически освобождены (а затем возвращены) при переполнении конкурентных лицензий. Это актуально, чтобы не учитывать конкуретные сессии для "повисших" приложений desktop-клиентов, или для сессий web-клиента, которые могут оставаться неактивными длительное время. Т.о. можно получить "мгновенную" загруженность системы по конкуретным сессиям.

  4. Изменён способ сохранения локальных настроек пользователей. Вместо файла app.config теперь используется файл settings.json, расположенный в папке настроек приложения "%appdata%\tessa\settings\сервер\default\tessaclient". Это предотвращает потенциальные проблемы с .NET Framework, связанные с использованием .config-файлов.

  5. Изменён способ сохранения настроек по положению окна. Вместо файла "%localappdata%\syntellect\приложение-версия\user.config" теперь используется файл settings.json, расположенный в папке настроек приложения "%appdata%\tessa\settings\сервер\default\tessaclient". Это предотвращает потенциальные проблемы с .NET Framework, связанные с использованием .config-файлов.

  6. В конфигурационном файле TessaClient.exe.config (и TessaClient32.exe.config) добавлен параметр NewTwainDSM со значениями "true" или "false". Параметр определяет, будет ли использоваться библиотека twaindsm.dll (значение "true"), предоставляющая доступ к новым версиям API TWAIN для работы с современными сканерами, или же используется библиотека twain_32.dll (значение "false"), которая обеспечивает лучшую совместимость со старыми моделями сканеров. Значение по умолчанию "false" также подходит для большинства современных сканеров. Установите значение "true" только в том случае, если наблюдаются проблемы с некоторыми сканерами.

  7. В этапы маршрутов "Доработка", "Задача", "Согласование", "Подписание" и "Регистрация" добавлена настройка "От имени (сотрудник или контекстная роль)", позволяющая определить пользователя, от имени которого будут отправляться задания. В поле можно указать сотрудника (полезно в скриптах) или контекстную роль (например, Руководитель инициатора). Если поле не заполнено, то задание отправляется от имени инициатора. Также доработана отправка от имени автора с указанием контекстной роли для этапов "Задача" и "Настраиваемое задание".

  8. В представлении "Группы этапов" добавлены сабсеты по типу документа и по типу запуска, аналогично представлению "Шаблоны этапов".

  9. В настройках колонки в контроле "Таблица" добавлены опции "В одну строку" (заменяет переводы строк на пробелы) и "Без оконечных пробелов" (удаляет оконечные пробельные символы и переводы строк).

  10. API: Для виртуальных и физических файлов и версий добавлено свойство RequestInfo, которое может содержать любую сериализуемую информацию, передаваемую в request.Info запроса на загрузку контента, списка версий и списка подписей. Свойство добавлено в файлах CardFile, IFile, VirtualFile; и в версиях файлов CardFileVersion, IFileVersion, VirtualFileVersion. Информация, добавленная к файлу или версии на сервере при загрузке карточки или списка версий будет передана в запросы с клиента, выполняемые для этих файлов и версий. Например, одновременно с добавлением виртуального файла "Лист согласования" можно добавить произвольную информацию, которую затем использовать в context.Request.Info в расширениях на загрузку контента файла/версии. В запросах контента версии и списка подписей в request.Info сначала записывается информация из файла, и потом из версии (из последней версии файла, если действие вызвано на файле). Т.о. данные по одному и тому же ключу из версии файла могут перезаписать данные из файла.

  11. API: Добавлено свойство INumberContext.PlaceholderInfo, значения которого используются для заполнения контекста плейсхолдеров IPlaceholderContext.Info при замене плейсхолдеров в формате номера, формате последовательности или в других случаях, когда для API номеров требуется задействовать API плейсхолдеров.

  12. API: Добавлены методы ISerializableObject.IsModified() и SetModified() для отслеживания изменений в любых объектах ISerializableObject, например, в объектах context.Info в контексте расширений. Также добавлено событие Modified, которое определяет момент первого изменения.

  13. API: Необработанные исключения в объекте ValidationResult теперь записываются с ключом ValidationKeys.Exception, для которого в свойстве FieldName записывается полное имя типа исключения: typeof(SomeException).FullName. Это позволяет различать возникшие исключения.

  14. API: В скриптах маршрутов добавлены свойства и методы для доступа к параметрам ProcessInfo для других процессов маршрутов, например, к параметрам основного процесса из скрипта кнопки, или к параметрам процесса из другой карточки. Добавленные свойства и методы: MainProcessInfo, GetMainProcessInfo, GetSecondaryProcessInfo.

  15. API: В скриптах маршрутов добавлено свойство Author: Stage.Author соответствует полю "От имени", а WorkflowProcess.Author соответствует инициатору процесса (заменяет свойства AuthorID и AuthorName).

  16. API: В скриптах маршрутов свойство Stage.TimeLimit теперь может быть равно null, когда значение не задано в этапе или скриптах. Добавлено свойство TimeLimitOrDefault как число double, которое принимает значение по умолчанию, когда TimeLimit равен null.

  17. API: Добавлен интерфейс IExtraViewProvider, который рекомендуется использовать вместо IExtraViewListProvider. Интерфейс IExtraViewProvider можно регистрировать в контейнере Unity несколько раз с разными именами, что позволяет добавлять программные представления в независимых друг от друга модулях (например, в расширении типового решения и в проектных расширениях). Пример в классе Tessa.Extensions.Default.Server.Views.TransientViewExtraProvider и его регистраторе.

  18. API: Обновлены библиотеки: Linq2DB 2.4.0, NLog 4.5.10, Npgsql 4.0.3, NTwain 3.5.3, Pdfium 2018.4.8.256.

20.3. Исправления и оптимизации

  1. Исправлено добавление этапов вручную после выполненного пересчёта, если в маршруте содержатся скрытые этапы.

  2. Исправлено выполнение маршрута с переключением контекста, например, при некоторых сценариях создания карточки по кнопке с её последующей регистрацией.

  3. Улучшен вывод отладочной информации методом Show в скриптах маршрутов.

  4. Улучшено сообщение об ошибке в ситуации, если одно из расширений зарегистрировано без оператора .WithOrder(…​).

  5. Шрифт в SQL-запросах в TessaAdmin теперь действительно моноширинный Consolas.

  6. В некоторых представлениях изменены отступы в соответствии с новым шрифтом Consolas в TessaAdmin.

  7. Исправлен выход из скрипта Migrate.bat при возникновении ошибки в процессе импорта карточек для целевой СУБД.

  8. Исправлены методы IQueryBuilder.Count(…​) для обращения к SQL-функции COUNT(…​) при генерации текста запроса. Теперь и на MSSQL, и на PostgreSQL функция будет генерировать запрос, который возвращает значение типа int. Чтобы получить значение типа bigint, используйте аналогичные методы IQueryBuilder.CountBig(…​).

  9. Исправлена локализация в сообщении об ошибке при исправлении типов по кнопке "Исправить всё" в TessaAdmin.

  10. Актуализирована конфигурация для документации web-клиента в папке "WebClient SDK".

  11. Исправлен пропуск этапа маршрута, который стал видимым при пересчёте, если предыдущий завершённый этап был последним в маршруте до пересчёта.

  12. Исправлена ошибка в схеме данных, где при изменении имени таблицы и одновременном добавлении/удалении колонки не производилось переименование констрейнта.

  13. Исправлена ошибка в схеме данных при попытке указать значение по умолчанию для колонки типа Date (дата без времени).

  14. Исправлено отображение срока типовых задач в визуализаторе. Ошибка появилась в 2.6.

  15. Исправлена отправка типовых задач возврата на роль при наличии подзадач в дереве заданий. Ошибка появилась в 2.6.

  16. Исправлено отображение текущих активных заданий на этапе маршрута, которое могло не показывать задания, недоступные текущему сотруднику. Ошибка появилась в 2.6.

  17. Исправлено сохранение в истории заданий для комментария согласующего или подписанта, если он не является последним на текущем этапе. Исправление также затрагивает лист согласования, визуализатор и представления. Исправление работает только для новых завершённых заданий. Ошибка появилась в 2.6.

  18. Исправлено сохранение в истории заданий для комментария доп. согласующего после того, как он согласовал или не согласовал. Исправление также затрагивает лист согласования, визуализатор и представления. Исправление работает только для новых завершённых заданий. Ошибка появилась в 2.6.

  19. Удалено ошибочное отображение в листе согласования для вопроса, заданного запросом комментария из согласования, доп. согласования или подписания. Ошибка появилась в 2.6.

  20. В листе согласования задания доп. согласования отображаются с пометкой "(Доп. согласование)". Ошибка появилась в 2.6.

  21. В листе согласования строка с запросом доп. согласования больше не отображается. Ошибка появилась в 2.6.

  22. Исправлен визуализатор маршрута для документа, который был сразу зарегистрирован без фактического запуска процесса.

  23. Если шаблон этапа был удалён, то этап на документе отработает, но без скриптов.

  24. Исправлена редкая ошибка "Последовательность не содержит соответствующий элемент" для контролов с работающем маппингом представлений.

  25. Исправлены редкие ошибки вида "Cannot insert duplicate key" при пересчёте метаролей и динамических ролей.

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

  27. Исправлена ошибка в методе IOperationRepository.GetStateAndProgress() при вызове с клиента. Метод всегда возвращал, что операция в состоянии Created.

  28. Исправлена загрузка операций IOperation в IOperationRepository, где свойство Created загружалось как дата/время без указания признака UTC.

  29. Исправлено логирование для количества возвращаемых из отложенного состояния заданий, которое выполняется в логе Chronos для плагина ReturnTasksFromPostponedPlugin.

  30. Исправлен предпросмотр некоторых файлов, расширение которых указано заглавными буквами, например, .XLSX.

  31. В web-клиенте исправлено поведение контрола "Дата и время", который расположен в форме строки таблицы, причём таблица размещена в задании. Также исправление может затрагивать другие контролы в такой ситуации.

  32. В web-клиенте исправлено отображение дат в колонках контрола "Таблица" в карточке, если в настройках колонки указано "Игнорировать часовой пояс".

  33. При работе на SQL Server в представлениях, содержащих агрегацию строк (список ролей, подразделений и др.) через запятую (или другой разделитель) исправлено кодирование символов "& < >" (и др.) в XML-форме. При этом была исправлена конструкция FOR XML PATH (подробнее см. в представлении MyTasks и др.). Это позволяет использовать такие символы как амперсанд & в названиях ролей и в других местах, где строка потом выводится с агрегацией.

  34. Исправлен вызов метода ValidationResult.ToString("format", formatProvider), если formatProvider отличен от CultureInfo.CurrentUICulture.

  35. Если в коде расширений используется асинхронная отмена операций, то исключения OperationCanceledException, возникающие при отмене операций, больше не выводятся методом TessaDialog.ShowNotEmpty независимо от того, в какой части системы они возникли, если кроме таких исключений отсутствуют другие сообщения в объекте ValidationResult.

  36. Сообщения о невозможности удалить временный файл теперь выводятся на уровне логирования WARN (предупреждения) вместо ERROR (ошибка).

  37. Исправлено задание сортировки представлений по умолчанию в ситуации, когда DefaultSortDirection не задан или задан как "asc", при этом сортировка указывается рядом с колонками "DefaultSortColumn: Column1 asc Column2 desc".

  38. Исправлена редкая ошибка "Object reference not set to an instance of an object" при перетаскивании файла в карточке одновременно с закрытием вкладки.

  39. Реализована система предотвращения зацикливаний в маршрутах. Если для маршрутов выполняется более 20 вложенных сохранений карточки, то работа прекращается с ошибкой, описывающей ситуацию.

  40. При невозможности взять блокировку на роли в плагинах Chronos сообщение об ошибке в логе сделано более подробным.

  41. Этапы маршрутов "Регистрация" и "Настраиваемое задание" теперь используют значение "Срок" из настроек этапа.

  42. Задание в этапе маршрута "Регистрация" теперь создаёт запись в истории заданий, которая также доступна в листе согласования.

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

  44. Исправлены категории документов: невозможность указать категории с одинаковым наименованием и разным типом документа; добавлены колонка представления и параметр фильтрации для типов документов; исправлены строки локализации и сообщения об ошибках; Digest карточки категории для истории действий.

  45. Добавлено сообщение об ошибке, когда в этапе, который должен содержать поле "Срок", его значение не указано.

  46. Исправлены редкие ошибки при сериализации поисковых запросов вида "Resolving parameter "dbms" of constructor Tessa.Views.Parser.SyntaxTree.Parameters.ParametersEvaluatingContext". Ошибка появилась в 2.6.

  47. Ошибки при загрузке поисковых запросов пользователя в момент запуска приложения TessaClient или web-клиента теперь выводятся как предупреждения и не предотвращают запуск. Т.е. при наличии ошибок с сохранёнными поисковыми запросами система запустится так, как если бы пользователь не добавил запросов, и покажет окно с ошибкой при запуске.

  48. В конструкторе диаграмм исправлена обработка ошибок, связанных с неизвестными индексами в настройках "Заголовок" и "Формат подписей оси". Также исправлена локализация в формате меток данных для осей.

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

  50. Исправлен алгоритм пересчёта этапов при наличии скрытых этапов (для которых отмечено "Не показывать в маршруте").

  51. Исправлен метод-расширение configurationInfoProvider.CheckStrictSecurity(), который по ошибке выполнял те же действия, что в методе CheckSealed().

  52. Исправлена работа вторичных процессов маршрутов с этапами, которые внутри себя выполняют вложенное сохранение.

  53. Если регистрация была выполнена этапом маршрута "Регистрация", а не соответствующей кнопкой, и карточка была в состоянии "Согласовано", то после отмены регистрации карточка теперь возвращается в состояние "Согласовано", а не в "Проект". Т.о. регистрация по кнопке и через этап теперь приводят к одинаковому поведению при дерегистрации.

  54. При отправке уведомлений в маршруте исправлена замена плейсхолдеров, которые обращались к таким параметрам текущей сессии, как код сервера. Это исправляет генерацию ссылок {cardLink}, {appLink} и др.

  55. Исправлены проблемы пересчёта маршрута при удалении шаблона этапа, который был рассчитан в маршруте.

  56. Добавлены недостающие серверные форматтеры для типов этапов "Ознакомление", "Согласование", "Создание карточки", "Доработка", "Уведомление", "Управление процессом", "Задача", "Подписание".

  57. Сообщение о том, что плагин RemoveCompiledViews поддерживается только на PostgreSQL, теперь выводится на уровне Trace, чтобы по умолчанию не заполнять лог очевидными сообщениями.

  58. В представлении "Шаблоны этапов" исправлена сортировка значений с учётом локализации в сабсетах "По типу" и "По типу запуска".

21. Версия 2.7.2 (04.09.2018)

21.1. Переход на новую сборку

  1. Изменены рабочие места: Administrator.

  2. Изменены представления: ActionHistory, ActionHistoryTypes (добавлено), CompletedTasks, GetFileNameView (добавлено), KrFilteredStageTypes, KrStageRows, KrStageTemplates, KrStageTypes, ReportPastTasksByCompletionOption, ReportPastTasksByDepartment, ReportPastTasksByUser, Sessions, SessionServiceTypes (добавлено), TaskHistory, TaskHistoryGroupTypes (добавлено), ViewFiles, Views, Workplaces.

  3. Изменены таблицы: KrApprovalCommonInfo, KrDocType, KrEditSettingsVirtual, KrHistoryManagementStageSettingsVirtual (добавлена), KrProcessStageTypes, KrSecondaryProcessCommonInfo, KrSettingsCardTypes, KrStageGroups, KrStages, KrStagesVirtual, KrStageTemplates, Sessions, SessionServiceTypes (добавлена), TaskHistory, TaskHistoryGroupTypes, ViewRolesVirtual (добавлена), ViewsVirtual (добавлена), WorkplaceRolesVirtual (добавлена), WorkplacesVirtual (добавлена).

  4. Изменены миграции: Platform.

  5. Изменены типы карточек: AdSync, Calendar, KrCard, KrDocType, KrEditStageTypeSettings, KrHistoryManagement (добавлен), KrPermissions, KrSatellite, KrSecondarySatellite, KrSettings, KrStageGroup, KrStageTemplate, ServerInstance, TaskHistoryGroupType (переименован из TaskHistoryGroup), View (добавлен), Workplace (добавлен).

  6. Изменены карточки: Approval (добавлена), ApprovalCycle (добавлена), EditTemplate, FullRecalcRouteButton (добавлена), NewIterationTemplate (добавлена), RegisterButton, StartProcessButton, StartProcessTemplate, Tasks (добавлена).

  7. Изменены карточки (необязательные изменения): Addendum, ApprovalGroup, CancelGroup, CancelTemplate, Contract, Default access rules, DeregisterGroup, DeregisterTemplate, Directive, Document, Incoming, Official note, Order, Outgoing, RebuildGroup, RebuildTemplate, RegisterGroup, RegisterTemplate, RejectGroup, RejectTemplate, StartProcessGroup, StartProcessTemplate, Standard solution (settings).

  8. Изменены библиотеки локализации.

  9. После обновления схемы выполните скрипт Fixes/Migration-2.7.2.*.sql.

  10. Обновите конфигурационные файлы app.json в папке веб-сервисов.

  11. Приложение Tessa Applications больше не обрабатывает ссылки snlink://, которые использовались в Tessa 1.x и некоторых кастомизированных решениях. Переустановите TessaApplications.msi на компьютере пользователя, чтобы удалить регистрацию ссылок.

  12. Если в представлении с правилами доступа в списке "Разрешения" будут указаны какие-либо из удалённых разрешений, то откройте соответствующую карточку, поставьте/снимите любой флажок (чтобы он не изменился, но в структуре карточки поле было отмечено как изменённое), и сохраните карточку. Это относится к разрешениям: "Запуск процесса", "Возврат на доработку", "Отзыв процесса", "Отмена процесса", "Регистрация документа".

  13. В расширениях на права доступа IKrPermissionsExtension был удалён метод CanDoSomething, поскольку он фактически не вызывается в новой системе маршрутов. Настройки по возможности выполнить запуск процесса, возврат на доработку, регистрацию и др. действия, задаются в карточках кнопок процессов. Удалите метод CanDoSomething из ваших классов, реализующих интерфейс IKrPermissionsExtension.

  14. В методы WorkflowStoreExtension.CanStartProcess и StartProcess добавлен параметр processID. Для классов-наследников WorkflowStoreExtension, добавленных в рамках проекта, измените сигнатуру перегружаемых методов и передайте идентификатор процесса в вызов метода workflowWorker.StartProcess(typeName, newProcessID: processID).

  15. В конструкторы базовых классов WorkflowStoreExtension и KrWorkflowStoreExtension добавлены необязательные параметры ICardTaskHistoryManager и ICardGetStrategy, которые запрашиваются из Unity или передаются как null, если бизнес-процесс не будет создавать группы в истории заданий посредством этого объекта в контексте. Также аналогичное свойство TaskHistoryManager и дополнительное свойство CardGetStrategy добавлены в интерфейс IWorkflowContext, и в наследуемый от него IWorkflowManager. Если ваши классы IWorkflowManager наследуются от базового класса WorkflowManager, то никаких изменений в них вносить не надо.

  16. Наследники класса FileGrouping для группировки файлов должны определить метод GetGroupInfoCore по новой сигнатуре, которая возвращает структуру FileGroupInfo. Аналогично изменилась сигнатура делегата, передаваемого в группировку FileDelegateGrouping.

21.2. Добавление и изменение функциональности

  1. Иерархическая группировка строк в истории заданий теперь выполняется посредством справочника типов групп. Любой бизнес-процесс на сервере помимо создания строки в истории заданий также может создать строку с группой, которая связана с некоторым типом групп, определяющим иерархию и название группы. Такие строки позволяют выполнить группировку независимо от клиентских расширений, например, в SQL-запросе представления. Для всех типовых строк группы создаются в миграции.

  2. Добавлено представление "История заданий", которое отображается по ссылке из карточки на вкладке "История заданий".

  3. В метаинформацию представлений добавлен параметр #view(TreeGroup: …​), указывающий имя столбца, который определяет признак того, что строка является группой в режиме группировки. Это требуется для таких представлений, в которых в группе могут отсутствовать вложенные строки, например, группа "Согласование", в которой нет строк из истории заданий, но есть другие группы, такие как "Цикл согласования".

  4. В редакторе представлений в TessaAdmin шрифт выбран как моноширинный для редактирования метаинформации и SQL-запросов, а также для просмотра запросов в отладке.

  5. В рабочем месте "Администратор" в тестовое представление "Список файлов" добавлен предпросмотр выделенного в представлении файла для демонстрации возможности.

  6. Приложение Tessa Applications больше не обрабатывает ссылки snlink://, которые использовались в Tessa 1.x и некоторых кастомизированных решениях. Это упростило некоторые сценарии по обеспечению обратной совместимости и одновременной работе в новой версии Tessa Applications 2.x и в старой версии Application Manager 1.x на одном компьютере.

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

  8. Добавлена настройка "Скрывать кнопку создания карточки" в настройках типа документа и типа карточки в типовом решении, которая позволяет не отображать плитку создания карточки для таких типов.

  9. В карточке "Группа этапов" добавлен флажок "Игнорировать при пересчёте", при наличии которого группа не будет использоваться при расчёте маршрутов, если она не будет явно включена в маршрут посредством API KrProcessBuilder.

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

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

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

  13. Типовой этап "Доработка" после несогласования/отказа в подписании теперь добавляется в начало цикла согласования, и соответствующим образом группируется в истории заданий. При этом более не добавляется запись "Начало процесса" в начало цикла согласования, если цикл не был создан в результате запуска процесса по кнопке (в т.ч. после его отзыва или отмены).

  14. В маршрутах в каждом типе этапов, который связан с заданиями, добавлена возможность указать группу в истории заданий, в которую будет добавлена запись по заданиям из этого этапа. Если значение не указано, то будет использована группа по умолчанию. Если в пределах маршрута не задана группа по умолчанию, то все задания добавляются в пустую группу.

  15. В маршрутах добавлен тип этапа "Управление историей", позволяющий определять группу в истории заданий по умолчанию, в которую добавляются записи по завершённым заданиям. В конфигурации типового решения добавлен такой этап, указывающий группу с циклами согласования как группу по умолчанию. Это поведение можно изменить настройками маршрутов.

  16. Видимость кнопки "Пересчитать" под таблицей маршрута теперь определяется карточкой кнопки процесса "Кнопка полного пересчёта процесса", что позволяет гибко настраивать её видимость и доступность, не прибегая к написанию расширений.

  17. В представление "История действий" добавлен не планировщике скрытый параметр фильтрации по идентификатору карточки.

  18. Для администраторов добавлена возможность просматривать список представлений и рабочих мест в TessaClient и в web-клиенте, а также изменять список ролей, влияющий на доступ к представлениям и рабочим местам. Списки доступны в рабочем месте "Администратор", папка "Прочее".

  19. В сессии добавлен атрибут "Тип сервиса", который позволяет однозначно различить сессии, открытые для Desktop-клиента, от сессий, открытых для Web-клиента, или открытых без использования веб-сервиса (например, в Chronos). В коде расширений используйте методы session.IsWebClient() и session.IsDesktopClient() для определения того, используется ли Web-клиент или Desktop-клиент. Историческая информация по типу сервиса сохраняется в истории действий для действий типа "Вход в систему".

  20. Если в настройках безопасности сервера указан срок действия пароля пользователя и срок начала отправки уведомлений об истечении пароля, то пользователю помимо уведомления на почту будет отображаться предупреждение при входе в приложение, если срок действия пароля скоро истечёт.

  21. В файле app.json для веб-сервиса добавлена настройка Configuration.Sealed - режим неизменяемой конфигурации. Административный импорт любых объектов конфигурации (в т.ч. карточек) и изменение C# и SQL-скриптов невозможны в таком режиме. Рекомендуется установить для production-конфигурации, в которой необходимо ограничить возможности администраторов системы. В процессе обновления конфигурации необходимо обязательно отключить такую настройку в конфигурационном файле сервере и перезапустить веб-сервисы.

  22. В файле app.json для веб-сервиса добавлена настройка Configuration.StrictSecurity - режим повышенной безопасности, отключающий просмотр структуры и некоторые административные возможности, в т.ч. административный импорт из TessaClient и административное удаление истории действий для карточек. Рекомендуется использовать на production-сервере только при наличии соответствующих требований. Не используйте этот режим для инсталляций, в которых это явно не требуется.

  23. В TessaAdmin в окне "Информация по конфигурации" (вкладка "Информация") выводятся флажки с текущими активными режимами Configuration.Sealed и Configuration.StrictSecurity, которые задаются в конфигурационных файлах.

  24. История действий теперь фиксируется для карточек настроек: "Календарь", "Настройки сервера", "Синхронизация с AD", "Типовое решение".

  25. Добавлена возможность возврата отложенного задания на роль с помощью действия CardTaskAction.Reinstate.

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

  27. Добавлена функция "Заменить файл по шаблону" в контекстном меню на файлах в карточке, для которых доступна замена по правам доступа. Это позволяет вручную "обновить" файл, созданный по шаблону. Помимо содержимого файла он также может быть переименован; это актуально, если в имени файла в шаблоне также используются плейсхолдеры, например, номер документа, который изменяется при регистрации.

  28. Добавлена версия скрипта Fixes\ResetUserSettings.pg.sql, выполняемая для PostgreSQL.

  29. API: Добавлен API для создания процессов маршрутов динамически в коде расширений или скриптов по заданным группам этапов, используя метод KrProcessBuilder.CreateProcess(). Процесс запускается вызовом метода IKrProcessLauncher.Launch(process). Группы этапов, которые предполагается использовать в таких процессах и которые не должны учитываться для обычных процессов, отмечаются как игнорируемые. Пример доступен в руководстве разработчика в разделе "Программный запуск маршрута с фиксированным набором групп".

  30. API: Добавлены расширения IFormUIExtension, позволяющие настроить любые диалоги, отображаемых методом IUIHost.ShowFormDialog без параметра withoutExtensions. При регистрации расширений разрешено выполнять фильтрацию по типу карточки диалога .WhenCardTypes(…​). Проверить алиас формы можно в расширении по свойству context.Form.Name.

  31. API: Добавлено свойство ISelectFromViewContext.ViewContext, предоставляющее доступ к контексту представлений, из которого выполняется выборка по троеточию. Контекст можно использовать для изменения параметров фильтрации и обновления представления. Объект ISelectFromViewContext передаётся параметром в делегат, который указывает разработчик при вызове метода IUIHost.ShowViewsDialog.

  32. API: Добавлена возможность указать идентификатор запускаемого бизнес-процесса, используя метод storeRequest.SetStartingProcessID(id) совместно с вызовом storeRequest.SetStartingProcessName(typeName). Если идентификатор не указать, то он, как и раньше, генерируется системой.

  33. API: Добавлен объект ICardTaskHistoryManager, упрощающий создание или поиск групп в истории заданий, что обычно выполняется при отправке заданий или в специальных типах этапов. Объект доступен по свойству TaskHistoryManager в контекстах Workflow API и в маршрутах.

  34. API: В Workflow API для классов-наследников WorkflowTaskWorker<TManager> добавлен метод ResolveTaskHistoryGroup, который позволяет получить или создать группу из истории заданий по заданному типу группы и прочим параметрам.

  35. API: Группировки файлов FileGrouping, используемые в контроле "Список файлов", теперь для каждого IFileViewModel возвращают объект FileGroupingInfo, который помимо идентификатора и отображаемого названия задаёт строку для сортировки групп между собой Sorting. Это позволяет, например, некоторые специальные группы располагать выше или ниже прочих групп, независимо от их отображаемого названия.

  36. API: Добавлен метод logger.LogException("message", ex, logLevel), выводящий дополнительное сообщение перед текстом исключения. Также logLevel можно не указывать, по умолчанию используется LogLevel.Error.

  37. API: Добавлены перегрузки методов ErrorDetails, WarningDetails и InfoDetails, принимающие Exception, для использования в ValidationSequence.

  38. API: Улучшена цепочка вызываемых методов ValidationSequence.Begin()…​End() для ситуации, когда требуется создать новый объект ValidationResultBuilder и в завершении вызвать на нём метод Build() и получить объект ValidationResult. Пример: ValidationSequence.Begin().ErrorDetails("text", "details").End().Build().

  39. API: Добавлена возможность переопределить поведение при наложении штампов на документы PDF, унаследовав объект от класса PdfStampWriter, в котором можно определить метод DrawCore. Также следует унаследовать объект от класса DefaultPdfGenerator, переопределив метод CreateStampWriter и создав требуемый объект-наследник PdfStampWriter с параметрами, которые можно получить из контекста.

  40. API: Добавлены средства для создания собственных значений в выпадающем списке типов документов PDF/TIFF, генерируемых в диалоге сканирования. При этом возможно использовать стандартный алгоритм генерации PDF, но передать вместе с выпадающим списком дополнительный тип ScanDocumentType (в расширении IScanDialogExtension), в котором создаётся PdfScanDocumentGenerator с параметрами, используемыми из context.GeneratorInfo в расширении IPdfStampExtension. Пример описан в руководстве разработчика.

  41. API: В расширениях ICardStoreExtension при сохранении карточки с файлами на клиенте или на сервере в свойстве context.ContentStorePending можно проверить, ожидается ли сохранение содержимого файлов после основного сохранения карточки. Если это так, то расширение может добавить обработчик события context.ContentStoreCompleted, которое будет вызвано после завершения сохранения для содержимого всех файлов. Такое событие происходит позже, чем завершение методов AfterRequest для всех расширений.

  42. API: Обновлены библиотеки: BarcodeLib 1.3.0, Linq2DB 2.3.0, NLog 4.5.9, QRCoder 1.3.3.

21.3. Исправления и оптимизации

  1. Исправлено отображение этапа регистрации с пустым комментарием в таблице маршрута.

  2. Исправлены отчёты по завершённым заданиям, чтобы в них не попадали строки из истории заданий, которые не соответствуют действительно завершённым заданиям, например, строки с вариантами завершения "Запросить дополнительное согласование", "Отозвать" и др.

  3. Исправлен конструктор рабочих мест в TessaAdmin при выполнении команд по горячим клавишам для выбранного узла дерева и для некоторых команд в контекстном меню дерева.

  4. Записи в истории заданий по заданиям, отправленным типом этапа "Задача", теперь добавляются в соответствующую группу с циклом согласования.

  5. Оптимизирована выборка данных для отчётов по завершённым заданиям.

  6. В web-клиенте исправлено отображение поля "Комментарий" в задании "Запрос комментария", отправленном для согласования, дополнительного согласования или подписания.

  7. В web-клиенте исправлено отображение вариантов завершения заданий, которые отмечены как скрытые для исполнителя.

  8. В web-клиенте исправлены возможные ситуации, когда зарезервированный в карточке номер не освобождался при закрытии вкладки браузера или окна браузера.

  9. В web-клиенте исправлены ошибки с маппингом представлений для контролов в заданиях.

  10. В web-клиенте исправлено отображение заголовка вкладки для карточек-настроек, существующих в единственном экземпляре.

  11. В web-клиенте исправлена проблема с порядком колонок в сабсетах.

  12. В web-клиенте исправлена фильтрация по значениям, проброшенным из сабсетов, для типов значений Int16, Int64, Double, Decimal. Проблема проявляла себя, например, в PostgreSQL при клике по значению сабсета "По состоянию" в представлении "Мои задания".

  13. В web-клиенте исправлена смена языка интерфейса при работающей в браузере функциональности service workers.

  14. В web-клиенте исправлено раскрытие сабсетов, в которых в качестве колонки-идентификатора используется NULL.

  15. В web-клиенте исправлена загрузка карточки при открытии приложения по ссылке, которая могла приводить к фактической загрузке карточки дважды.

  16. Исправлена гонка за ресурсы при одновременном вызове метода IOperationRepository.StartFirst(typeID). Проблема приводила к тому, что одна и та же операция могла начать параллельно обрабатываться разными процессами-обработчиками, например, один и тот же файл может одновременно конвертироваться в PDF разными экземплярами плагина FileConverterPlugin.

  17. Исправлена редкая ошибка "Cannot access a disposed object. Object name: 'LocalFileContent'.", возникающая при предпросмотре в TessaClient только что удалённого файла, или при предпросмотре файла одновременно с обновлением карточки.

  18. Настройка "Скрывать пустые папки" теперь активирована по умолчанию, т.е. после сброса настроек пользователя (из окна "Мои настройки") или для новых пользователей. Видимостью пустых папок (в которых нет представлений по правам доступа) по-прежнему можно управлять через плитку в левой панели.

  19. Минимизировано количество загрузок основной карточки в процессе работы бизнес-процесса маршрутов, что оптимизировало его работу.

  20. Исправлена проблема, из-за которой не отображался текст скриптов и запросов в некоторых сообщениях об ошибках, возникающих в процессе маршрутов.

  21. Исправлена ошибка при замене плейсхолдеров в файловых шаблонах Excel, если в документе присутствуют табличные плейсхолдеры, но на странице нет корректных групп ячеек для формирования таблиц.

  22. Для Tessa Applications в контекстном меню на значке в трее недоступные для запуска приложения теперь отображаются серыми.

  23. В списке рабочих мест в диалоге "Мои настройки" отключён переход по ссылке на несуществующую карточку рабочего места (по двойному клику или по контекстному меню).

  24. В команде tadmin ImportUsers при наличии циклических связей между подразделениями теперь выводится более подробное сообщение об ошибке.

  25. Исправлено копирование файлов с подписями посредством метода CardHelper.CopyFiles(), в т.ч. для типовой функции "создать на основании", вызванной с зажатым Shift. Теперь подписи не копируются, и не возникает связанных с этим ошибок.

  26. Исправлена проблема, из-за которой изменение порядка колонок в индексе схемы данных не считалось изменением таблицы.

  27. Исправлено формирование имени индекса в схеме данных при изменении состава индексируемых колонок.

  28. Исправлена возможная ошибка при удалении колонки из таблицы схемы данных, которая содержит записи.

  29. Историю действий теперь можно фильтровать по любым типам карточек, в которых включено логирование истории действий.

  30. Исправлено изменение порядка колонок (их перетаскивание) для представлений, в которых отключён автовыбор размеров столбцов (автоматически или в соответствии с метаинформацией).

  31. Программный запуск маршрута теперь невозможен, если подсистема маршрутов отключена в настройках типа карточки или типа документа.

  32. Исправлены проблемы при пересчёте этапов маршрута. Например, если в группе присутствовали этапы, и затем все шаблоны этапов удалены из группы и запущен пересчёт.

  33. В SQL-скриптах маршрутов исправлена замена директив (вида #user_id, #card_id и др.), если после директивы отсутствовали пробелы или перевод строки.

  34. Исправлена локализация значений сабсетов и горизонтальных групп в представлениях.

  35. Исправлена отправка на ознакомление в случае, если значение флага excludeDeputies установлено на true.

  36. В карточке правил доступа скрыты флажки, которые относятся к процессу согласования и регистрации, поскольку они не используются в новой системе маршрутов. Настройки на видимость соответствующих действий и возможность выполнить такое действие указываются в карточках кнопок процессов. Например, в карточках кнопок "Регистрация" и "Отмена регистрации" можно определить права доступа, связанные с удалённым флажком "Регистрация", в виде списка ролей, и можно написать скрипты для дополнительных проверок.

  37. Теперь невозможно выполнить вызов веб-сервиса с загрузкой карточки в режиме CardGetTaskMode.All (с загрузкой всех заданий), если в сессии пользователь, не являющийся администратором. При этом возвращается ошибка CardValidationKeys.UserIsNotAdmin. При загрузке карточки на сервере это правило игнорируется. Если же загрузка в режиме CardGetTaskMode.All выполняется вследствие экспорта карточки для создания шаблона или копии карточки, то карточка успешно экспортируется, но для неё удаляются все задания и история заданий, если в сессии пользователь без прав администратора.

  38. Для плейсхолдеров {date} и {passwordExpires} исправлен вывод даты с учётом часовых поясов, если для них указана любая строка форматирования. Например: {date:HH\:mm\:ss}.

  39. Исправлены переходы на несколько групп в пределах одного синхронного выполнения в маршрутах.

  40. Плейсхолдер #top_1 при использовании в контекстных ролях для PostgreSQL теперь в бинарном режиме контекстной роли будет возвращать " LIMIT 1 ", вместо " TOP(1) ". Его следует разместить ниже прочих команд SELECT/WHERE в соответствии с синтаксисом PostgreSQL.

  41. В сообщении об ошибке при невозможности получить экземпляр расширения теперь выводится имя типа расширения, которое некорректно зарегистрировано или для которого отсутствуют зависимости. Например, это ошибка расширения, зарегистрированного как синглтон, если у него отсутствует открытый конструктор без параметров.

  42. При импорте статических ролей и подразделений теперь будет восстанавливаться состав роли без учёта заместителей. Сотрудники, которые отсутствуют в системе на момент импорта, не будут добавлены в состав карточки, созданной при импорте. Исправление будет работать для всех ранее экспортированных карточек.

  43. При блокировке сотрудника все его активные сессии теперь удаляются. Блокировка может быть выполнена администратором в карточке сотрудника, или после неудачных попыток входа на основании правил безопасности (по умолчанию отключено).

  44. Исправлена отправка почтового уведомления для этапа "Доработка" в маршруте.

  45. Улучшено сообщение об ошибке при запросе неизвестного ключа из класса-наследника DictionaryStorage<TKey, TValue>.

  46. Улучшено сообщение об ошибке в методах Get<T> и TryGet<T> при невозможности преобразовать результат к требуемому типу typeof(T).

  47. Исправлены проверки правил доступа при наличии расширения IKrPermissionsExtension. Теперь если в токене безопасности отсутствуют требуемые правила, и метод расширения IsPermissionsRecalcRequired возвращает false, то система не выбрасывает ошибку, а перерасчитывает токен так, как если бы этот токен не был передан с клиента.

  48. В истории заданий при завершении задания "Доработка" выводится введённый комментарий в колонке "Результат".

  49. Исправлены возможные ошибки при десериализации типов карточек.

  50. Для плагина синхронизации с Active Directory улучшены трассировка и выводимые в лог предупреждения.

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

  52. Исправлена визуализация этапов маршрута для параллельных этапов согласования без явно заданных исполнителей.

  53. Исправлена визуализация и отображение настроек в колонке "Настройки" для этапа маршрута "Подписание".

  54. Исправлен доступ автора задания к отправленному им заданию в случае, когда оно было отложено исполнителем.

  55. Исправлена проблема с формированием списка вариантов завершения задания для автора задания, когда задание автоматически берется в работу, автор входит в роль исполнения, но задание взято в работу другим сотрудником.

  56. Кнопка "Пересчитать" под таблицей маршрута теперь не отображается, если в маршруте есть хотя бы один завершённый этап. Это было актуально, например, в ситуации, когда документ согласован или зарегистрирован, но инициатор мог нажать кнопку "Пересчитать", что могло изменить состав маршрута постфактум.

  57. Метод LocalizationManager.Format теперь не выполняет замену строки "\n" на перевод строки. Но этот символ по-прежнему можно использовать во всплывающих подсказках к элементам управления и в других настройках.

  58. Исправлена загрузка подписи файла из списка подписей при просмотре через меню "Показать список электронных подписей".

  59. Исправлено отображение вкладки с рабочим местом в TessaClient при открытии узла дерева по ссылке, если узел дерева расположен в ещё неоткрытом рабочем месте. Ранее такое рабочее место открывалось вместе с узлами, видимыми только в режиме отбора.

  60. Исправлены редкие ошибки вида "Error HRESULT E_FAIL has been returned from a call to a COM component" в приложении TessaClient при переключении вкладок одновременно с их перетаскиванием.

22. Версия 2.7.1 (27.07.2018)

22.1. Переход на новую сборку

  1. Изменены рабочие места: Administrator, User (изменены настройки расширения CreateCardExtension для узла "Контрагенты"; добавлены расширения CreateCardExtension для узлов в папке "Регистратор" и для узла "Мои документы").

  2. Изменены представления: KrCreateCardStageTypeModes, TaskHistory (добавлено).

  3. Изменены таблицы: KrCreateCardStageSettingsVirtual, KrCreateCardStageTypeModes, KrDocState, KrStageBuildOutput, KrStageGroups, KrRegistrationStageSettingsVirtual (добавлена), PersonalRoles, ServerInstances, TaskHistory, TaskHistoryGroups (добавлена), TaskHistoryGroupTypes (добавлена).

  4. Изменены типы карточек: KrCreateCardStageTypeSettings, KrRegistrationStageTypeSettings (добавлен), PersonalRole, ServerInstance, TaskHistoryGroup (добавлена).

  5. Изменены карточки: PasswordExpires (добавлена), Server settings (settings) (необязательное изменение).

  6. Изменены библиотеки локализации.

  7. Обновите хост Chronos.exe. Версия Chronos увеличена до 2.7.1.

  8. В скриптах маршрутов для объекта-исполнителя Performer свойство SQLApprover переименовано в IsSql. В схеме данных сохранено прежнее название для обратной совместимости.

22.2. Добавление и изменение функциональности

  1. На вкладке "Безопасность" в карточке "Настройки сервера" добавлены настройки безопасности, связанные с сессиями и паролями пользователей. Изменяйте эти настройки только в том случае, если это требуется политиками безопасности в вашей организации.

  2. Расширение представлений CreateCardExtension, используемое для создания карточек из реестров, теперь имеет выбор режима работы: по выделенной строке представления (как раньше) или по заданному типу карточки или документа. Режим задаётся в окне настройки расширений (вызывается по кнопке рядом с именем расширения, добавленного в узел рабочего места).

  3. В типовых рабочих местах тип карточки теперь явно указан для кнопки создания контрагентов и объектов маршрутов. Также добавлено расширение на создание документов для реестра "Мои документы" и для реестров в папке "Регистратор".

  4. В маршрутах для типа этапа "Регистрация" добавлена настройка с указанием комментария для задания регистрации.

  5. В маршрутах для типа этапа "Создание карточки" добавлена возможность создать карточку по заданному типу карточки или типу документа, в дополнение к созданию по шаблону.

  6. Добавлены плейсхолдеры для ссылок на приложения (appLink и webAppLink) и для определения срока окончания действия пароля у сотрудника, если отчёт генерируется для карточки сотрудника (passwordExpires).

  7. API: В скриптах маршрутов добавлены вспомогательные свойства и методы: CardTables, CardTask, CardRows().

  8. API: В скриптах маршрутов для объекта-исполнителя Performer свойство SQLApprover переименовано в IsSql. В схеме данных сохранено прежнее название для обратной совместимости.

  9. API: Обновлены библиотеки: Linq2DB 2.2.0, Microsoft.Exchange.WebServices.NETStandard 1.1.3, NLog 4.5.7.

22.3. Исправления и оптимизации

  1. Компиляция объектов маршрутов теперь выполняется один раз, и скомпилированная сборка сохраняется в базе данных. При изменении объектов маршрутов она очищается. Это значительно оптимизировало операции с карточками, включёнными в типовое решение, сразу после перезапуска рабочего процесса в пуле приложений, т.е. при холодном старте или после автоматического перезапуска процесса пула, который настроен в IIS).

  2. Исправлен доступ к текущему контексту UIContext.Current из метода GetData() для клиентского представления, добавленного расширением.

  3. Исправлены запрос комментариев и завершение задания по запросу комментариев у доп. согласования.

  4. Исправлено указание пользователя для запроса комментария в списке участников текущего этапа маршрута (над заданием). До получения ответа теперь пишется сотрудник, задавший вопрос, а после получения - сотрудник, ответивший на него.

  5. Исправлена редкая ошибка при одновременном взятии блокировки на расчёт ролей в плагине пересчёта динамических и метаролей. Ошибка приводила к тому, что расчёт одной динамической роли или генератора метаролей завершался с ошибкой и пропускался до следующего расчёта.

  6. Исправлены редкие ошибки при запуске приложений TessaClient или веб-клиента, которые одновременно подключаются к одному и тому же серверу. Проблемы были с сериализацией рабочих мест перед их отправкой на клиент.

  7. Исправлена проблема, при которой некоторые плитки при уменьшении размера текста из-за нехватки места меняли размер текста и внутренние отступы при каждом открытии.

  8. Исправлена ситуация, когда требовались права на редактирование карточки при наличии в запросе на сохранение пустых секций, т.е. секций, в которых был пустой список полей или строк. Такие секции могут создаваться вызовами card.Sections.GetOrAdd("ИмяСекции") в серверных расширениях на сохранение карточки.

  9. При регистрации расширений с одинаковым Stage и Order порядок их выполнения друг относительно друга теперь стабилен и определяется полным именем типа регистратора (вместе с пространством имён). Это актуально для большинства регистраторов с атрибутом [Registrator] без дополнительных настроек.

  10. Исправлено возможное дублирование строк на вкладке "История заданий" при сворачивании/разворачивании строк на несколько уровней вложенности.

  11. Исправлено сохранение значений по умолчанию для колонок в схеме данных типа Time.

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

  13. Исправлены ошибки в схеме данных, возникающие в некоторых сценариях при изменении типа секции у таблицы.

  14. Исправлено переименование внешних ключей для базы данных PostgreSQL, если переименована таблица, но не имя колонки.

  15. Исправлена невозможность добавить в схему данных колонку в таблицу-перечисление с типом, отличным от String, если в этой таблице уже присутствуют строки.

  16. Исправлено изменение типа колонки в базе данных с NULL на NOT NULL и обратно.

  17. Исправлена ошибка, когда для последнего этапа согласования был снят флаг "Вернуть при несогласовании" и согласующий выбрал "Не согласовать". В таком случае процесс завершался и задание на доработку не отправлялось. Теперь процесс корректно переходит на следующий цикл согласования и отправляет задание инициатору на доработку.

  18. Исправлены ошибки перехода в начало группы для этапов согласования и подписания, когда этап является последним.

  19. Исправлена ошибка в маршруте с несколькими этапами согласования, один из которых имеет настройку "Вернуть при согласовании". Для воспроизведения ошибки требуется согласовать задание на таком этапе, и не согласовать на следующем за ним этапе. В этом случае после возврата на редактирование произойдёт пропуск этапов согласования вплоть до этапа с настройкой "Вернуть при согласовании".

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

  21. Исправлена ошибка "Violation of PRIMARY KEY constraint 'pk_KrStages'", которая могла происходить в некоторых сценариях при ручном добавлении этапа после пересчёта маршрута, и при последующем его повторном пересчёте.

  22. Исправлены опечатки в локализации.

  23. Удалена проверка "Вы не указали роль Вычисляемые согласующие" при настройке этапов маршрутов с указанным SQL-запросом, поскольку в этом случае роль будет автоматически подставлена в конец, и сообщение мешает настройке этапов.

  24. В TessaAdmin в редакторе рабочих мест исправлено контекстное меню для узлов дерева таким образом, чтобы оно выводило действия для узла, по которому кликнули, но не для выделенного узла.

  25. В web-клиенте исправлена невозможность раскрыть узел представления на мобильных устройствах, если он содержит дочерние узлы (например, другие представления).

  26. В web-клиенте исправлено открытие созданной карточки на клиенте для типа этапа "Создание карточки".

  27. В web-клиенте исправлен вывод создателя задания, если он отличается от автора задания (например, при отправке задачи "от имени" руководителя, где руководитель будет автором, а отправивший сотрудник - создателем задания).

  28. Кнопка "Создать карточку", добавляемая на панель представлений расширением CreateCardExtension, теперь корректно создаёт карточки того же типа, что и выбранная строка, если экземпляр карточки имеет тип документа.

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

  30. Исправлено использование нескольких плейсхолдеров {t:Table.Column} в пределах одной строки для одной и той же таблицы и колонки, но с разными дополнительными настройками. Например: <_row>{t:RoleDeputies.MaxDate}, {t:RoleDeputies.MaxDate utc}</_row>

  31. При изменении в метаинформации списка доступных настроек пользователей ("Мои настройки") для уже сохранённых в базе данных настроек в момент загрузки будет проходить исправление их структуры (добавление/удаление полей, секций и др.) для приведения настроек в соответствие с метаинформацией.

  32. Исправлена возможная проблема при запуске клиентских приложений (Tessa Applications и др.), когда Windows не возвращает корректной информации о языке интерфейса для текущей терминальной сессии.

  33. Исправлено логирование необработанных исключений в плагинах Chronos. Ошибка появилась в сборке 2.6.

  34. Исправлено появление сообщения об ошибке в плагинах Active Directory, которые включены для лицензии без соответствующего модуля. Сообщение также расширено.

  35. В логах Chronos с настройками по умолчанию скрыты малозначительные сообщения о планировщике Quartz.

  36. Исправлена ошибка в этапе "Создание карточки" в режимах с автоматическим запуском процесса или в режиме "Сохранить и открыть карточку" с последующим запуском процесса вручную. Ошибка возникала при наличии в карточке заполненного маршрута (до пересчёта при запуске).

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

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

  39. В тексте ошибки об отсутствии этапов в маршруте для таких маршрутов, которые построены для кнопок процессов, теперь выводится информация по этим кнопкам. Т.о. можно отличить ошибку основного маршрута от ошибки в маршруте кнопки.

  40. Библиотеки локализации больше не помечаются как изменённые, если в них не было изменений.

  41. Скрипт обновления Upgrade.bat сначала выполняет все действия с базой данных, и только после этого проверяет соединение с веб-сервисом, открывая там сессию. Это предупреждает проблемы, когда для открытия сессии требуются дополнительные действия.

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

  43. Поле "Порядок" для карточек "Группа этапов" теперь может быть неуникальным числом. В частности, это позволяет выстраивать группы этапов для кнопок процессов независимо от групп этапов основного процесса. Если две группы в пределах процесса имеют один и тот же порядковый номер, то они сортируются друг относительно друга стабильным образом.

23. Версия 2.7 (12.07.2018)

23.1. Переход на новую сборку

  1. Изменены рабочие места: Administrator, User (добавлены представления "Уведомления" и "Типы уведомлений" в папку Справочники в режиме отбора; представление "Рабочие места" на верхнем уровне в режиме отбора).

  2. Изменены представления: Notifications (добавлено), NotificationTypes (добавлено), KrFilteredStageTypes, KrStageRows, Workplaces (добавлено).

  3. Изменены файлы схемы данных .tsd (схема) и .tsp (библиотеки) вследствие изменении версии схемы. Перед объединением схемы данных обновите версию схемы данных, выгруженной в файлы, посредством её открытия в SchemeEditor. Это обновит таблицы в библиотеках схемы, относящихся к проектному решению, после чего их можно перенести в новую схему данных из папки со сборкой.

  4. Изменены таблицы: DefaultWorkplacesVirtual, KrAcquaintanceSettingsVirtual (добавлена), KrEditSettingsVirtual, KrTaskCommentVirtual (добавлена), KrNotificationSettingVirtual (добавлена), KrProcessButtons, KrProcessManagementStageTypeModes, KrProcessStageTypes, KrSecondaryProcessCommonInfo, KrStageGroups, KrUniversalTaskOptions, KrUniversalTaskOptionsSettingsVirtual, Notifications (добавлена), NotificationTypes (добавлена).

  5. Изменены функции: CalendarIsWorkTime.

  6. Изменены типы карточек: GeneralUserSettings, KrAcquaintanceStageTypeSettings (добавлен), KrAdditionalApproval, KrChangeStateStageTypeSettings, KrEdit, KrEditInterject, KrEditStageTypeSettings, KrNotificationStageTypeSettings (добавлен), KrPerformersSettings, KrProcessButton, KrProcessManagementStageTypeSettings, KrRegistration, KrResolutionStageTypeSettings, KrSecondarySatellite, KrStageCommonMethod, KrStageGroup, KrStageTemplate, KrUniversalTask, KrUniversalTaskStageTypeSettings, Notification (добавлен), NotificationType (добавлен).

  7. Изменены карточки: Acquaintance (добавлена), CancelButton, CancelTemplate, DeregisterButton, DeregisterTemplate, EditTemplate, RebuildButton, RebuildTemplate, RegisterButton, RegisterTemplate, RejectButton, RejectTemplate, StartProcessButton, StartProcessGroup (добавлена), StartProcessTemplate (добавлена).

  8. Изменены библиотеки локализации.

  9. Обновление схемы данных необходимо выполнять через SchemeEditor, причём на предложение обновить версию схемы надо согласиться. Не требуется при автоматизированном обновлении через Upgrade.bat.

  10. Изменены возвращаемые значения для хранимой функции CalendarIsWorkTime: теперь возвращает 1/true, если часы рабочие, или 0/false, если нерабочие.

  11. Откройте и тут же сохраните карточки шаблонов этапов, в которых есть этапы типа "Настраиваемое задание". Убедитесь, что варианты завершения в настройках этапа упорядочены корректно.

  12. Обновите хост Chronos.exe. Версия Chronos увеличена до 2.7.

  13. В скриптах этапов для типа этапа "Настраиваемое задание" параметры завершения для каждого исполнителя теперь заполняются в коллекции StageInfo.Tasks в порядке их завершения. Например, если указан единственный исполнитель, то его вариант завершения доступен по StageInfo.Tasks[0].OptionName, а комментарий по StageInfo.Tasks[0].Comment.

23.2. Добавление и изменение функциональности

  1. В TessaClient по умолчанию пользователю теперь показывается только первое рабочее место из доступных. По кнопке слева от списка вкладок пользователь может добавить вкладку с любым рабочим местом из доступных. Также можно открывать несколько вкладок для одного и того же рабочего места и закрывать любую вкладку с рабочим местом.

  2. В диалоге "Мои настройки" пользователь может настроить список "Рабочие места, открываемые при запуске", чтобы при открытии приложения TessaClient открывался заданный список вкладок рабочих мест в указанном порядке вместо единственной вкладки с первым доступным рабочим местом. Если рабочие места в списке перестают быть доступными, то пользователю они не открываются, хотя присутствуют в списке. Каждый пользователь может настроить список, индивидуально для себя.

  3. В TessaClient добавлено контекстное меню по правой кнопке мыши на заголовках вкладок, через которое доступно массовое закрытие вкладок.

  4. В TessaClient доступно перетаскивание открытых вкладок, используя drag&drop.

  5. В TessaAdmin при сохранении библиотек локализаций теперь сохраняются только изменённые библиотеки.

  6. Переход между этапами маршрута теперь возможен на этап из другой группы.

  7. Поле "Условие" в скриптах этапов теперь расширяется по высоте без прокрутки, если скрипт внутри не умещается в 5 строк.

  8. Если при пересчёте маршрута по кнопке не было изменений, то в TessaClient теперь отображается всплывающее уведомление вместо окна с сообщением, если в настройках пользователя разрешены уведомления.

  9. Добавлен тип карточки "Уведомление", в котором можно создавать и настраивать отправляемые системой уведомления. В заголовке и теле письма можно использовать плейсхолдеры.

  10. Добавлен тип этапов "Уведомление" в процессе маршрутов. Этап работает как при синхронной работе процесса, так и при асинхронной. В настройках указывается карточка уведомления, сотрудники, кому должно быть отправлено уведомление и флаг "Не отправлять заместителям".

  11. Добавлен тип этапов "Ознакомление" в процессе маршрутов. Этап работает как при синхронной работе процесса, так и при асинхронной. В настройках указываются сотрудники или роли, кому должно быть отправлено ознакомление, комментарий ознакомления (в комментарии допустимо использование плейсхолдеров), алиасы плейсхолдеров, флаг "Не отправлять заместителям", а также карточка уведомления, уведомление по которой отправляется сотрудникам для ознакомления.

  12. Тип этапа "Редактирование" переименован в "Доработка". Добавлены настройки этапа для указания срока и текста задания, а также настройка "Не пропускать этап". При завершении задания сотрудник может ввести комментарий к циклу маршрута, который будет перенесён в соответствующее поле при завершении задания.

  13. В типе этапа "Настраиваемое задание" теперь можно указать нескольких исполнителей. Задания выбранным исполнителям приходят параллельно, а этап завершается после завершения всех заданий.

  14. В типе этапа "Смена состояния" выбор состояния теперь доступен по троеточию из справочника.

  15. В типе этапа "Настраиваемое задание" порядок вариантов завершения теперь настраивается вручную.

  16. В настройки этапа "Управление процессом" добавлены режимы отзыва и пропуска процесса.

  17. В карточке "Кнопка процесса" добавлены скрипты, позволяющие управлять настройками видимости кнопки в момент открытия карточки и в момент фактического нажатия на кнопку. Также добавлено поле "Сообщение о недоступности кнопки при нажатии".

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

  19. Для приложения Tessa Applications добавлена настройка в конфигурационном файле %appdata%\tessa\settings\application_catalogs.xml: t:AppPath="%appdata%\tessa". В ней можно указать любой путь к папке загруженных приложений (подпапка applications от заданного пути) с учётом переменных окружения (%appdata%, %localappdata% и др.), в т.ч. указать путь, не являющийся частью переносимого профиля %appdata%. Используйте эту настройку только в том случае, если размер переносимого профиля пользователя ограничен, и средствами сторонних приложений выполняется синхронизация этого профиля между рабочими станциями.

  20. В карточке "Кнопка процесса" удалено поле указания сигнала, который отправляется при нажатии на кнопку; чтобы отправить сигнал, используйте этап "Управление процессом". Также кнопка "Запуск процесса" теперь имеет свою группу и шаблон, которые можно дополнять/изменять в рамках проекта.

  21. Добавлен плейсхолдер {cardDigest}, который заменяется на дайджест карточки.

  22. Добавлен форматтер плейсхолдеров #noencode, который предотвращает вызов Encode-методов для плейсхолдера при замене его в документе (актуально, в частности, для HTML документов).

  23. Задания редактирования, регистрации, доп. согласования и настраиваемые задания теперь можно откладывать.

  24. Типы карточек, относящиеся к построению процессов маршрутов (шаблоны этапов KrStageTemplate, группы этапов KrStageGroup, кнопки процессов KrProcessButton и методы расширений KrCommonMethod), теперь доступны для создания из группы "Маршруты" (группа "Routes" в TessaAdmin). Ранее использовалась группа "Настройки".

  25. API: В скриптах маршрутов, запускаемых по кнопке процесса, параметры кнопки теперь доступны в свойстве Button, которое возвращает объект IKrProcessButton. Доступные свойства описаны в объявлении интерфейса в расширениях типового решения.

  26. API: В скриптах маршрутов добавлен метод AddTaskHistoryRecord, упрощающий добавление строк-сообщений в историю заданий, например, сообщение о запуске процесса, о возврате на доработку и др.

  27. API: Добавлен сигнал для процесса маршрутов KrStartProcessUnlessStartedGlobalSingal, запускающий процесс, если процесс ещё не запущен.

  28. API: Метод storage.Get<T>("key") при отсутствии ключа в хранилище теперь выводит подробную информацию по ошибке в исключении KeyNotFoundException.

  29. API: Добавлены методы validationResult.AddError("text"), AddWarning("text") и AddInfo("text"), которые не указывают тип объекта при добавлении сообщения.

  30. API: Для удобства добавления сообщений в скриптах этапов добавлены методы AddError("text"), AddWarning("text") и AddInfo("text").

  31. API: Добавлен объект INotificationManager (доступен только в серверных расширениях), который позволяет отправлять уведомления, настраиваемые в карточках уведомлений. В параметрах можно указать карточку, по которой производится расчет контекстных ролей и плейсхолдеров, роли, сотрудникам которых приходят уведомления, и флаг "Не отправлять заместителям", который определяет, нужно ли отправлять уведомление заместителям переданных ролей.

  32. API: Добавлен метод GetRoleIDList в IRoleRepository для получения списка идентификаторов ролей по списку имен ролей.

  33. API: Добавлен объект IKrAcquaintanceManager (доступен на клиенте и сервере), который позволяет отправлять ознакомления по карточке на список ролей с возможностью указания уведомления из справочника "Уведомления".

  34. API: Добавлены интерфейсы ITabbedFormViewModel для формы карточки со вкладками и свойствами Tabs и SelectedTab, а также IMainFormViewModel для основной формы карточки. Свойство ICardModel.MainForm требуется привести к интерфейсу, используя метод cardModel.TryGetMainForm().

  35. API: Для dynamic-коллекций и хеш-таблиц добавлены методы Add(value), Insert(index, value), Remove(value), RemoveAt(index), Clear(), IndexOf(value) и LastIndexOf(value). Методы Insert(index, value), RemoveAt(index), IndexOf(value) и LastIndexOf(value) доступны только для коллекций. Примеры использования: StageInfo.Tasks.Clear(); StageInfo.Remove("Tasks").

  36. API: Обновлены библиотеки: Linq2DB 2.1.0, Npgsql 4.0.2, Quartz 3.0.6, System.Threading.Tasks.Extensions 4.5.1.

23.3. Исправления и оптимизации

  1. Исправлен тип этапа "Задача" при отзыве процесса и при отправке задачи на новом цикле процесса.

  2. Исправлены возможные ошибки при отзыве процессе для типов этапов "Согласование", "Подписание", "Регистрация" и "Настраиваемая задача".

  3. Исправлена обработка ошибок в типе этапа "Настраиваемое задание".

  4. В настройках этапа, которые используют единственную роль исполнителя, исправлено использование SQL-запроса с вычисляемыми исполнителями. В этом случае используется первая роль исполнителя, возвращаемая SQL-запросом. Если запрос не возвращает строк, то используется роль, указанная в настройках этапа, или отображается сообщение об ошибке, если такая роль не задана. В типовом решении исправление затрагивает тип этапа "Настраиваемое задание".

  5. При отправке типовых задач комментарий теперь может содержать переводы строк, которые отображаются в Digest задания, но не в истории заданий. Это позволяет использовать тип этапа "Задача" в маршруте, в котором приводится подробное описание задачи с разделением на несколько строк.

  6. Исправлен этап создания карточки по шаблону в маршруте. Теперь создание карточки не зависит от прав пользователя, при действии которого был инициирован этап. Также исправлено создание по шаблону, в котором присутствовали файлы.

  7. Исправлено копирование комментария инициатора в строку истории заданий после того, как инициатор завершил задание на доработку. Если инициатор изменил комментарий, то изменение теперь будет отражено в истории.

  8. Исправлены сообщения об ошибках при компиляции скриптов в этапах маршрутов.

  9. Улучшено сообщение об ошибке при перемещении этапа вне границ группы этапов.

  10. При отсутствии выполняемых этапов в маршруте документа теперь выводится сообщение об ошибке. Например, если присутствует единственный этап "Доработка", который будет пропущен при запуске.

  11. Если у пользователя нет прав на редактирование маршрута (в карточках прав доступа), то он больше не может редактировать маршрут.

  12. Исправления при переходах в маршруте на текущую группу этапов.

  13. Исправлено добавление/удаление групп этапов по условиям в скриптах "Выполнение маршрута", если при завершении текущей группы этапов изменились условия включения групп в маршрут (например, изменилось поле в карточке, на основании которого определялось включение группы).

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

  15. В английской локализации типового решения строки "Disapprove" в значении "Не согласовать" везде заменены на "Reject", т.к. это правильный термин в делопроизводстве.

  16. Контролы "Ссылка" и "Список" теперь всегда передают параметры PageLimit/PageOffset, если представление поддерживает постраничное отображение, и не передают их, когда представление его не поддерживает.

  17. Хранимая функция CalendarIsWorkTime теперь возвращает 1/true, если часы рабочие, или 0/false, если нерабочие.

  18. Улучшена обработка ошибки, когда в синхронный процесс, не разрешающий наличие этапов с задачами (т.е. асинхронный этапов), добавлены такие этапы. Например, в группу этапов, связанную с кнопкой процесса.

  19. Исправлена редкая ошибка, при которой порядок библиотек локализации в TessaAdmin мог отличаться от алфавитного.

  20. Исправлена простановка штампа в документах PDF для ещё не сохранённой карточки.

  21. В web-клиенте исправлено открытие карточки замещений, после которого эта же карточка могла непроизвольно открываться при открытии других карточек.

  22. В web-клиенте исправлено дублирование плиток создания по шаблону после выполнения выхода и тут же входа в учётную запись.

  23. В web-клиенте исправлена выгрузка представлений в html/csv, если к представлению была применена сортировка.

  24. В web-клиенте исправлен перенос на несколько строк в дайджесте заданий.

  25. В web-клиенте исправлен переход по back_url в исходную ссылку на карточку или представление после логина, если при изначальном открытии такой ссылки вход в систему не был выполнен.

  26. Исправлен порядок выполнения скриптов в типовом процессе. Сначала всегда выполняются design-time скрипты, а только потом runtime, и первым из скриптов выполняется условие.

  27. Улучшено сообщение об ошибке при невозможности загрузить библиотеку схемы данных из-за её версии.

  28. Исправлено сохранение схемы данных с записями, добавленными в типовую таблицу-перечисление в библиотеку, отличную от типовых, если схема открыта из файловых папок через приложение SchemeEditor.

  29. Исправлено добавление первой записи в таблицу-перечисление.

  30. Исправлен расчёт изменений при сохранении таблицы в схеме данных, в которой была изменена колонка путём переименования, изменения описания или изменения значения по умолчанию. Ранее такие изменения пропускались, поэтому таблица не была отмечена как изменённая.

  31. Исправлена миграция базы данных из базы Postgres в базу Postgres.

  32. Исправлено добавление этапов в карточку шаблона этапов, которая ещё не была сохранена.

  33. Исправлена синхронизация с Active Directory для базы данных Postgres.

  34. Исправлена установка связи между родительскими подразделениями при синхронизации с Active Directory.

  35. В схеме данных исправлено поведение ссылочных колонок внутри комплексных. Такие колонки имеют предопределённое имя, тип и COLLATION (параметры наследуются из колонок, на которые ссылается комплексная колонка), но могут определять любые значения по умолчанию и другие свойства, независимо от связанных колонок. Это исправило проблемы со значениями по умолчанию в ссылочных колонках.

  36. Исправлены почтовые уведомления при отправке задач в этапах "Согласование", "Подписание" и "Настраиваемое задание", а также при запросе комментария и при делегировании. В некоторых случаях уведомления могли не отправляться.

  37. Исправлено отображение колонки "Участники" в таблице с этапами, в которой могли отображаться уже удалённые участники.

  38. Исправлена локализация названия роли "Вычисляемые исполнители" в колонке "Участники" в таблице с этапами и при задании доп. согласующих.

  39. Исправлена локализация в шаблонах этапов для типовых кнопок процесса.

  40. Исправлена видимость таблицы с активными заданиями на этапе маршрута.

  41. В настройках типа этапа "Задача" флажки для массовой отправки и выбора ответственного исполнителя теперь видны всегда, независимо от количества исполнителей.

  42. Улучшен вывод комментария инициатора совместно с комментарием этапа согласования или подписания.

  43. В TessaClient исправлен размер и местоположение окна со строкой в контроле "Таблица" или с другим диалогом, который по высоте превышает размер основного окна, развёрнутого на весь экран.

  44. Исправлено изменение карточки-сателлита в процессе маршрутов одновременно с движением процесса, например, при добавлении этапа одновременно с завершением задания.

  45. В типе этапа "Управление процессом" исправлен поиск этапа для перехода при вводе с клавиатуры, и запрещено редактирование всех настроек этапа в документе.

  46. Задания, отправленные этапом "Настраиваемое задание", теперь группируются в циклы маршрута совместно с другими заданиями.

  47. Исправлена видимость виртуального файла "Лист согласования" для маршрутов, в которых отсутствуют группы согласования и подписания.

  48. Исправлена простановка записей об отмене/отзыве/возврате на доработку в истории заданий для типового процесса маршрутов.

  49. Исправлен отзыв задания "Доработка" при отзыве процесса маршрутов.

  50. Исправлена ошибка возврата языка локализации на текущий после окончания использования LocalizationManager.CreateScope(…​).

  51. Исправлена ошибка в процессе маршрутов, из-за которой пользователю требовались права на редактирование карточки, даже если он не менял карточку, но завершил задание.

  52. Кнопка "Пересчитать" под таблицей с этапами маршрута теперь отображается только для запущенного процесса.

  53. Кнопка "Создать карточку" на панели представления, добавляемая расширением CreateCardExtension, больше не отображается при выборе из представлений по кнопке троеточия.

  54. В типе этапа "Задача" исправлена отправка задачи с явно заданным датой/временем, которые расположены в прошлом на момент выполнения этапа, при этом в настройках типа документа включена проверка на дату/время подзадач. Такая проверка теперь пропускается для задач, отправленных из этапа маршрута.

  55. При закрытии строки с этапом "Задача" теперь сразу выводится предупреждение о том, что срок или длительность не указаны.

  56. При обновлении схемы данных из базы данных удаляются объекты default constraint из метаинформации, которые были по ошибки созданы в предыдущих версиях редактора схемы данных.

  57. Исправлен расчёт SQL-исполнителей в этапах маршрутов. Теперь состав исполнителей рассчитывается непосредственно перед выполнением этапа, а не при пересчёте маршрута.

  58. Исправлена ситуация, когда при пересчёте части маршрута в затронутых этапах могли быть удалены изменения, выполненные вручную в маршруте документа, т.е. отсутствующие в шаблоне.

  59. Оптимизирована компиляция скриптов в маршрутах.

  60. В TessaClient исправлена вставка писем Outlook в файлы карточки из буфера обмена и через drag&drop.

  61. Добавлены проверки обязательности для списка исполнителей в этапах маршрутов.

  62. Исправлен запуск процесса с одновременным удалением этапов.

  63. Исправлена работа этапа "Пересчёт маршрута".

  64. Оптимизирован серверный кэш объектов, используемый в маршрутах. Это также оптимизировало сохранение и импорт карточек, используемых для настройки маршрутов (шаблоны этапов, группы этапов и др.).

  65. Улучшены сообщения об ошибках компиляции. Также такие ошибки теперь всегда записываются в лог.

  66. Исправлены мобильное согласование и автосогласование, в которых не выполнялась компиляция.

  67. Исправлено автосогласование при наличии заданий доп. согласования.

  68. Тип карточки теперь корректно отмечается как изменённый, если в любом контроле по кнопке "Дополнительно" поменять отступ контрола.

  69. Исправлено указание отрицательных сроков в этапах маршрутов, если включена опция "Разрешить отрицательные сроки" в карточке настроек "Типовое решение".

  70. Исправлено "мерцание" при обновлении карточки, в которой есть свёрнутые по умолчанию блоки.

  71. Актуализированы документация и подсказки рядом со сценариями для написания процессов маршрутов.

  72. Исправлено выполнение маршрутов, полученных при копировании карточки с уже построенным маршрутом, некоторые этапы которого изменялись вручную.

24. Версия 2.6.3 (10.06.2018)

24.1. Переход на новую сборку

  1. Изменены рабочие места: Administrator.

  2. Изменены представления: KrProcessButtons, KrTypes.

  3. Изменены файлы схемы данных .tsd (схема) и .tsp (библиотеки) вследствие изменении версии схемы. Перед объединением схемы данных обновите версию схемы данных, выгруженной в файлы, посредством её открытия в SchemeEditor. Это обновит таблицы в библиотеках схемы, относящихся к проектному решению, после чего их можно перенести в новую схему данных из папки со сборкой.

  4. Изменены таблицы: Applications, KrProcessStageTypes, KrUniversalTaskOptions (добавлена), KrUniversalTaskOptionsSettingsVirtual (добавлена), KrUniversalTaskSettingsVirtual (добавлена), ServerInstances.

  5. Изменены типы карточек: KrProcessButton, KrSettings, KrSigning, KrUniversalTaskStageTypeSettings (добавлен), KrUniversalTask (добавлен), ServerInstance.

  6. Изменены карточки: CancelButton, CancelTemplate, DeregisterButton, DeregisterTemplate, EditTemplate, Initiator (переименована из Initiator of approval), RebuildButton, RebuildTemplate, RegisterButton, RegisterTemplate, RejectButton, RejectTemplate, Server settings (settings) (необязательное изменение).

  7. Изменены библиотеки локализации.

  8. Обновление схемы данных необходимо выполнять через SchemeEditor, причём на предложение обновить версию схемы надо согласиться. Не требуется при автоматизированном обновлении через Upgrade.bat.

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

  10. Роль "Инициатор согласования" была переименована в "Инициатор". Это изменение не затрагивает исторические данные, где роль уже была указана.

24.2. Добавление и изменение функциональности

  1. Добавлен тип этапов "Настраиваемое задание" в процессе маршрутов. Такому заданию можно указать исполнителя, автора и список вариантов завершения.

  2. Добавлен тип этапов "Сценарий" в процессе маршрутов. Он позволяет указывать только скрипты C# (без дополнительных настроек).

  3. В редакторе типов карточек в TessaAdmin добавлена кнопка "Исправить всё", которая действует аналогично вызову функции "Исправить" в контекстном меню каждого типа. Использование функции гарантирует, что все контролы, расширения и валидаторы будут связаны с корректными объектами в схеме данных.

  4. Рабочие места, в которых задан непустой список ролей, теперь не видны администраторам, если они не входят в соответствующие роли. Если в рабочем месте не заданы роли, то оно доступно всем администраторам и скрыто от пользователей, не имеющих административных привилегий (например, рабочее место "Администратор").

  5. В карточке "Настройки сервера" появились настройки для кодировки и символа-разделителя при выгрузке представлений в csv.

  6. В настройке OpenOfficePython из app.json в Chronos, которая используется для конвертации офисных файлов, теперь можно указать глобально-доступную команду для python, например, "python". Также разрешено указать дополнительные параметры командной строки после символа "|", которые будут переданы при каждом обращении к скрипту конвертации unoconv, например, "python|-E -O"

  7. Для светлой темы изменён фон, выбираемый по умолчанию при переключении на тему.

  8. API: Добавлены свойства и методы, доступные в скриптах этапов: ProcessID, ProcessTypeName, ContextualSatellite, ProcessHolderSatellite, ForEachStage(), ForEachStageInMainProcess(), IsMainProcess(), IsMainProcessStarted(), SetStageState().

  9. API: Обновлены библиотеки: CsvHelper 7.1.1, Npgsql 4.0.

24.3. Исправления и оптимизации

  1. Кнопки "Зарегистрировать" и "Отменить регистрацию" теперь группируются в "Действия", как и должно было быть изначально.

  2. Исправлен порядок записей в истории заданий и в листе согласования при регистрации, когда есть активные задания в процессе маршрутов.

  3. Оптимизировано сворачивание/разворачивание блоков в карточках, теперь оно не будет "замораживать" интерфейс на несколько секунд при большом объёме сворачиваемого текста.

  4. Исправлено взаимодействие с СУБД PostgreSQL 10.x, который развёрнут на Linux.

  5. Исправлен скрипт на перестроение индексов при установке на СУБД PostgreSQL 9.6.

  6. Исправлен сброс состояний этапов при отзыве и отмене процесса, а также при отмене регистрации.

  7. Оптимизированы зависимости в папке web-клиента в сборке.

  8. Исправлено форматирование справки tadmin при выводе параметров команды: tadmin CommandName /?

  9. Исправлено добавление записей в некоторые таблицы-перечисления через редактор схемы данных. Ошибка появилась в сборке 2.6.

  10. Исправлен импорт библиотек схемы данных. Ошибка появилась в сборке 2.6.

  11. Исправлено создание миграции "Scheme" при обновлении схемы данных в файловой папке.

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

  13. Исправлено сохранение схемы данных с колонкой типа Time, для которой указано значение по умолчанию.

  14. Исправлены ошибки, связанные с изменениями индексов в схеме данных.

  15. Исправлены индексы в таблице Applications. Ошибка появилась в сборке 2.6.

  16. В web-клиенте оптимизирована загрузка фоновых изображений для выбора из правой панели.

  17. В web-клиенте исправлен выбор доп. согласующих в настройках этапа согласования.

  18. В web-клиенте исправлено перемещение строк в контроле "Таблица". Воспроизводилось на таблице маршрутов.

  19. В web-клиенте исправлено завершение задания с одновременным прикладыванием нескольких файлов при отсутствии других прав на прикладывание файлов помимо тех, что предоставляет задание.

  20. В web-клиенте исправлено отображение исполнителя задания "Редактирование" в колонке "Участники" в таблице маршрута.

  21. Исправлено удаление файлов из временной папки для файлов IFile и ITempFile. Особенно актуально для сервера приложений, где не производится автоматическая очистка временной папки. Ошибка появилась в сборке 2.4.8.

  22. Исправлен расчёт прав при отправке типовых задач (WfResolution) из расширений, когда присутствует рассчитанный токен KrToken. Это актуально для типа этапа "Задача" в процессе маршрутов, который ранее требовал, чтобы пользователь, завершивший задание перед тем, как выполнение перешло на этапа "Задача", имел права на постановку задач.

  23. В рабочем месте "Администратор" восстановлено функционирование тестового узла "Генератор" в папке "Тестирование". Ошибка появилась в сборке 2.6.

  24. В представлении "Типы" (KrTypes) исправлена строка локализации для параметра фильтрации "Заголовок или алиас". Ошибка появилась в сборке 2.6.

  25. Исправлено состояние этапа "Редактирование" после отзыва процесса и его повторного запуска.

  26. Исправлено поведение контрола "Список" со включённой настройкой "Перенос строк". Теперь корректно обрабатывается стирание неподтверждённого первого элемента. Также не появляется выделенный пробел в строке после первого введённого символа, если не найдено ни одного варианта подстановки, который бы начинался с введённого символа.

  27. Доработана подсказка при неправильно настроенной связи между контролом "Ссылка" или "Список" и соответствующим представлением.

  28. Этап редактирования теперь корректно работает при наличии этапов, отправляющих задания, перед ним. Например, в группе "Подписание", которая может быть расположена после группы "Согласование", первым этапом также может идти этап редактирования, и он будет пропускаться на втором и последующем цикле согласования после отзыва/отмены процесса, как и требуется в таком случае.

  29. Переход на версию Npgsql 4.0 обеспечил повышение производительности на PostgreSQL и исправление работы с типами данных, содержащих время.

  30. Исправлена видимость таблицы комментариев для типа заданий "Подписание".

  31. Исправлено представление "Кнопки процесса" (KrProcessButtons) на MSSQL Server.

  32. Исправлена выгрузка представлений в формате csv в ситуации, когда символ-разделитель мог заключаться в кавычки в строке с заголовками.

  33. Исправлены сообщения об ошибках в скриптах шаблонов этапов при компиляции.

  34. Исправлено сообщение при отказе в подписании без комментария.

  35. Исправлены строки локализации, в которых типовой процесс назывался согласованием.

  36. В типе карточки "Кнопка процесса" добавлены валидаторы и расширения для полей-списков.

  37. Для кнопок процесса дополнен список состояний, когда они видны и действуют.

25. Версия 2.6.2.1 (01.06.2018)

25.1. Переход на новую сборку

  1. Изменены библиотеки локализации.

  2. Относительно предыдущей сборки были изменены web-клиент и библиотека Tessa.Extensions.Default.Server.dll (как в бинарном виде .dll в Chronos и папки сервисов, так и в виде исходных кодов с расширениями в папке Source), а также библиотеки локализации. Также исправлены зависимости и файлы проектов в папке с расширениями Source.

  3. Для корректной работы web-клиента убедитесь, что на сервере приложений установлена последняя версия .NET Core IIS Hosting Bundle. Перейдите по ссылке https://www.microsoft.com/net/download/all далее выберите последнюю версию .NET Core Runtime 2.1.x (2.1.0 на момент написания инструкции), и нажмите по ссылке Hosting Bundle Installer.

25.2. Добавление и изменение функциональности

  1. Web-клиент теперь использует среду выполнения .NET Core 2.1. Это оптимизирует скорость обработки запросов на сервере.

25.3. Исправления и оптимизации

  1. Исправлен отзыв процесса с активными заданиями согласования, что приводило к тому, что после повторного запуска процесса этап согласования не завершался после завершения всех заданий на этом этапе.

  2. Исправлено создание шаблонов и копирование карточек, которые содержат активный процесс согласования.

  3. Исправлено отображение кнопок процессов, не включённых в группу кнопок, для которых указана опция "Группировать в Действия".

  4. Тип этапа "Задание" переименован в "Задача".

  5. Исправлена сборка проектов расширений в папке Source.

26. Версия 2.6.2 (31.05.2018)

26.1. Переход на новую сборку

  1. Изменены рабочие места: Administrator.

  2. Изменены представления: KrFilteredStageGroups, KrFilteredStageTypes, KrProcessButtons, KrProcessManagementStageTypeModes, KrStageGroups, KrStageRows, KrStageTemplates, MyAcquaintanceHistory.

  3. Изменены файлы схемы данных .tsd (схема) и .tsp (библиотеки) вследствие изменении версии схемы. Перед объединением схемы данных обновите версию схемы данных, выгруженной в файлы, посредством её открытия в SchemeEditor. Это обновит таблицы в библиотеках схемы, относящихся к проектному решению, после чего их можно перенести в новую схему данных из папки со сборкой.

  4. Изменены таблицы (кроме таблиц, которые были изменены при обновлении версии схемы): CompletionOptions, KrApprovalCommonInfo, KrApprovalSettingsVirtual, KrButtonContextRoles, KrDocState, KrProcessButtons, KrProcessManagementStageSettingsVirtual (переименовано из KrTransitionStageSettingsVirtual, перенесено из библиотеки Default в Standard solution), KrProcessManagementStageTypeModes (добавлена), KrProcessStageTypes, KrSecondaryProcessCommonInfo, KrSettingsApprovalCardTypes (удалена), KrSettingsApprovalStageGroups (удалена), KrSettingsApprovalStageRoles (удалена), KrSettingsApprovalStages (удалена), KrSettingsApprovalStageTypes (удалена), KrSettingsRouteDocTypes (добавлена), KrSettingsRoutePermissions (добавлена), KrSettingsRouteRoles (добавлена), KrSettingsRouteStageGroups (добавлена), KrSettingsRouteStageTypes (добавлена), KrSigningStageSettingsVirtual (добавлена), KrStageGroups, KrStageRoles, KrTransitionStageSettingsVirtual (удалена при переименовании), ReportRolesActive, ReportRolesPassive.

  5. Изменены типы карточек: KrAdditionalApproval, KrApprovalStageTypeSettings, KrApprove, KrChangeStateStageTypeSettings, KrCreateCardStageTypeSettings, KrProcessButton, KrProcessManagementStageTypeSettings (добавлен), KrSettings, KrSigning (добавлен), KrSigningStageTypeSettings (добавлен), KrStageTemplate, KrTransitionStageTypeSettings (удалён).

  6. Изменены карточки: CancelGroup (добавлена), CancelButton (добавлена), CancelTemplate (добавлена), Computed performers (необязательное изменение), Default access rules (необязательное изменение), DeregisterButton, RebuildButton (добавлена), RebuildGroup (добавлена), RebuildTemplate (добавлена), RegisterButton, Registrators (необязательное изменение), RejectGroup (добавлена), RejectButton (добавлена), RejectTemplate (добавлена), Standard solution (settings) (необязательное изменение), StartProcessButton.

  7. Изменены библиотеки локализации.

  8. Обновление схемы данных необходимо выполнять через SchemeEditor, причём на предложение обновить версию схемы надо согласиться. Не требуется при автоматизированном обновлении через Upgrade.bat.

  9. После обновления схемы выполните скрипт Fixes/Migration-2.6.2.*.sql.

  10. Был исправлен скрипт миграции при миграции со сборок перед 2.6 на текущую сборку. Выполняйте сквозную миграцию на текущую сборку, например, с 2.5.3 сразу на 2.6.2, минуя 2.6 и 2.6.1.

  11. Обновите хост Chronos.exe. Версия Chronos увеличена до 2.6.2.

  12. Для корректной работы web-клиента убедитесь, что на сервере приложений установлена последняя версия .NET Core IIS Hosting Bundle. Перейдите по ссылке https://www.microsoft.com/net/download/all далее выберите последнюю версию .NET Core Runtime 2.0.x (2.0.7 на момент написания инструкции), и нажмите по ссылке Hosting Bundle Installer.

  13. Команда tadmin MigrateDatabase теперь требует обязательного указания безымянного параметра targetCS (имя строки подключения к целевой базе данных).

26.2. Добавление и изменение функциональности

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

  2. Восстановлены кнопки управления процессом: "Отозвать процесс", "Отменить процесс" и "Вернуть документ на доработку".

  3. Восстановлена регистрация при активном процессе маршрутов (в процессе согласования или подписания).

  4. Добавлен тип этапов "Подписание" в процессе маршрутов.

  5. Тип этапа "Смена этапа" заменён на "Управление процессом", который позволяет более гибко переходить между группами и этапами, а также отправлять сигналы, в т.ч. выполнить это в основном процессе, а не в текущем выполняемом (актуально для кнопок процесса).

  6. В настройках контрола карточки "Таблица" для колонок таблицы добавлено поле "Отображаемая длина", которое определяет максимальную длину текста до того, как текст ограничивается троеточием. Во всплывающей подсказке над ячейкой текст всегда выводится целиком без троеточия.

  7. Если в представлении отключён подсчёт общего количества строк (отсутствует сабсет Count), то количество строк выв