image1

© Syntellect 2019


1. Исправления (13.01.2020)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  12. Для обсуждений в TessaClient исправлен фон вкладки и локализация некоторых сообщений.

  13. Исправлены методы ICardGetStrategy при получении пустого перечисления идентификаторов IEnumerable<Guid> вместо null.

  14. Файл .hgignore в папке сборки Source для создания репозитория теперь не игнорирует папку Bin\packages, при отсутствии которой происходит ошибка в сборке.

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

  16. Исправлена ошибка в представлениях, возникающая при использовании выражений "ParamName.Value", "ParamName.Value1" и "ParamName.Value2" для параметра с типом Int16.

  17. Исправлена ошибка в ICardUIExtension, приводившая к тому, что метод расширения мог быть запущен не из потока UI, например, если одно из расширений в цепочке вызывало асинхронный метод с ConfigureAwait(false).

  18. Исправлено изменение настроек в диалоге "Мои настройки" в TessaClient, которое могло привести к сбросу ряда настроек к поведению по умолчанию до перезапуска приложения.

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

  20. В web-клиенте исправлены ошибки при отображении тегов файлов в файловом контроле.

  21. При синхронизации с Active Directory исправлена ошибка получения PrimaryGroupID для объектов, не являющихся группами.

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

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

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

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

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

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

  28. В представлении "Вторичные процессы" исправлены параметры фильтрации по типу и по состоянию.

  29. В скрипте обновления сборки на Linux upgrade.sh исправлено обновление со сборок, которые в номере версии имеют две цифры между точками, например: 2.7.10.

  30. Исправлен плагин отправки уведомлений на почту о непрочитанных сообщениях по форумам.

  31. Исправлены ошибки при одновременной аутентификации в LDAP, которые появились в сборке 3.4.0.

  32. Исправлена возможная ошибка с отсутствующей кодовой страницей 1251 при выгрузке представлений в CSV, а также с кодировками почты, если веб-сервис или Chronos установлены на Windows. Проблема была в вызове метода Initialize() в TessaPlatform.Dependencies. Ошибка появилась в сборке 3.4.0.

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

2. Версия 3.4 (13.11.2019)

2.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().ConfigureAwait(false).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. В шаблонах этапов маршрутов для тех этапов, в которых был указан вид задания в предыдущих сборках, укажите этот вид в соответствующем поле. Обратите внимание, что если вы не укажете вид задания, то задания будут корректно отправлены с предыдущим указанным видом (несмотря на то, что он не отображается в настройках этапа). Однако, в следующих сборках такая обратная совместимость будет удалена.

2.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 добавлен ключ /language для локализации имён файлов с карточками на указанный язык, если они являются строками локализации (начинаются с символа "$"). Например: /language:en или /language: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 12.2.1, HtmlAgilityPack 1.11.16, ITfoxtec.Identity.Saml2 4.0.2, linq2db 2.9.3, 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.

2.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, если на момент добавления колонки таблица уже существует.

3. Версия 3.3.1 (16.07.2019)

3.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). Теперь все методы сервиса являются асинхронными и поддерживают отмену.

3.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.

3.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. В плагине потокового сканирования улучшена обработка ошибок, связанных с проблемами при обработке файлов.

4. Версия 3.3 (17.05.2019)

4.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.

4.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 в задании - на сервере будет произведена соответствующая коррекция пришедшей даты (будет вычтено соответствующее смещение, или же никаких манипуляций не будет вовсе).

4.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" в конфигурационных файлах. Удалять их необязательно, но они не оказывают влияние на клиентские таймауты.

5. Версия 3.2 (05.02.2019)

5.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 для полного списка изменений.

5.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.

5.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.

6. Версия 3.1.1 (11.12.2018)

6.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

6.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.

6.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" в карточках сотрудника и подразделения.

7. Версия 3.1 (01.12.2018)

7.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-шаблонов. Если вы не используете такие шаблоны, то папку с классами можно не копировать.

7.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.

7.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. В конструкторе бизнес-процессов исправлена обработка ошибок при некорректных привязках контролов-настроек к параметрам (процесса, узла и др.), теперь наличие таких ошибок не приводит к невозможности редактировать другие параметры того же узла (действия и др.).

8. Версия 3.0.1 (17.11.2018)

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

  1. Изменены таблицы: BusinessProcessButtons, KrAcquaintanceAction (добавлена), KrAcquaintanceActionRoles (добавлена), WeConditionAction.

  2. Изменены типы карточек: BusinessProcessTemplate, KrAcquaintanceAction (добавлен), WorkflowConditionAction.

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

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

  5. Обновите файл app.json в папке веб-сервисов.

8.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, с помощью реализации которого можно управлять данными, выводимыми в колонке "Настройки" в таблице с настройками кнопок в карточке шаблона бизнес-процесса.

8.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.

9. Версия 3.0 (12.11.2018)

9.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-редакцию системы, но не включены в обычную редакцию.

9.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. При добавлении версии её опции копируются из опций файла на момент сохранения на сервере.

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

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

10. Версия 2.7.5 (12.11.2018)

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

  1. Изменены рабочие места: User (укажите строку локализации "$Workplaces_User_Dictionaries_DocumentCategories" в качестве заголовка узла дерева "Категории документов" на верхнем уровне).

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

  3. Обновите хост Chronos.exe. Версия Chronos увеличена до 2.7.5.

  4. Если в проектном решении есть клиентские операции, которые создаются со стороны desktop-клиента через IOperationRepository, то укажите для них доступ, добавив идентификатор типа такой операции в одно из свойств: OperationTypes.UserClientOperations (для любых пользователей) и OperationTypes.AdminClientOperations (только для администраторов). Добавить идентификаторы операций можно в серверном классе Registrator в методе InitializeRegistration.

10.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.

10.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. Улучшено сообщение об ошибке компрессии данных загружаемой карточки, если в одной из коллекционных секций некорректная структура (не хватает некоторых полей в строках).

11. Версия 2.7.4 (02.11.2018)

11.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, минуя предыдущие сборки.

11.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.

11.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. Если администратор вручную разблокирует пользователя через карточку сотрудника, то информация по неудачным попыткам входа теперь сбрасывается, что предотвращает повторную блокировку при первом же неудачно введённом пароле после разблокировки.

12. Версия 2.7.3 (05.10.2018)

12.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, которые связаны с выбранной темой и фоном. Пользователи должны установить эти настройки заново.

12.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.

12.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. В представлении "Шаблоны этапов" исправлена сортировка значений с учётом локализации в сабсетах "По типу" и "По типу запуска".

13. Версия 2.7.2 (04.09.2018)

13.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.

13.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.

13.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 при переключении вкладок одновременно с их перетаскиванием.

14. Версия 2.7.1 (27.07.2018)

14.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. В схеме данных сохранено прежнее название для обратной совместимости.

14.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.

14.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. Поле "Порядок" для карточек "Группа этапов" теперь может быть неуникальным числом. В частности, это позволяет выстраивать группы этапов для кнопок процессов независимо от групп этапов основного процесса. Если две группы в пределах процесса имеют один и тот же порядковый номер, то они сортируются друг относительно друга стабильным образом.

15. Версия 2.7 (12.07.2018)

15.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.

15.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.

15.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. Исправлено выполнение маршрутов, полученных при копировании карточки с уже построенным маршрутом, некоторые этапы которого изменялись вручную.

16. Версия 2.6.3 (10.06.2018)

16.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. Роль "Инициатор согласования" была переименована в "Инициатор". Это изменение не затрагивает исторические данные, где роль уже была указана.

16.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.

16.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. Для кнопок процесса дополнен список состояний, когда они видны и действуют.

17. Версия 2.6.2.1 (01.06.2018)

17.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.

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

  1. Web-клиент теперь использует среду выполнения .NET Core 2.1. Это оптимизирует скорость обработки запросов на сервере.

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

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

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

  3. Исправлено отображение кнопок процессов, не включённых в группу кнопок, для которых указана опция "Группировать в Действия".

  4. Тип этапа "Задание" переименован в "Задача".

  5. Исправлена сборка проектов расширений в папке Source.

18. Версия 2.6.2 (31.05.2018)

18.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 (имя строки подключения к целевой базе данных).

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

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

  2. Восстановлены кнопки управления процессом: "Отозвать процесс", "Отменить процесс" и "Вернуть документ на доработку".

  3. Восстановлена регистрация при активном процессе маршрутов (в процессе согласования или подписания).

  4. Добавлен тип этапов "Подписание" в процессе маршрутов.

  5. Тип этапа "Смена этапа" заменён на "Управление процессом", который позволяет более гибко переходить между группами и этапами, а также отправлять сигналы, в т.ч. выполнить это в основном процессе, а не в текущем выполняемом (актуально для кнопок процесса).

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

  7. Если в представлении отключён подсчёт общего количества строк (отсутствует сабсет Count), то количество строк выводится под таблицей как "строк на странице".

  8. При использовании плейсхолдеров {…​} оконечные пробелы внутри фигурных скобок теперь игнорируются.

  9. API: В скриптах, связанных с этапами, теперь проще писать запросы к БД (например: Db.SetCommand("select 1").ExecuteScalar<int>()), а также можно обращаться к типам карточек, вариантов завершения и др. (например: DefaultCardTypes.StageTemplateTypeID).

  10. API: Добавлен базовый класс расширений CardNewGetExtension, позволяющий создавать универсальные расширения для создания ICardNewExtension и загрузки ICardGetExtension карточки. Расширение по-прежнему необходимо отдельно регистрировать по двум интерфейсам.

  11. API: Изменено поведение объектов dynamic, используемых в платформе, например, card.DynamicInfo, или свойство Card в скриптах шаблонов маршрутов. Несуществующее поле теперь можно сравнить с null, когда оно отсутствует в структуре: Card.UnknownSection.UnknownField == null. Значение теперь можно присвоить в несуществующую хеш-таблицу, которая создаётся автоматически: card.DynamicInfo.UnknownGroupName.UnknownValue = 42.

  12. API: В интерфейс IValidationResultBuilder добавлены методы форматирования в строки ToString(). Также сокращено количество мест, в которых требовалось вызвать метод Build() перед использованием объекта.

  13. API: Настройка количества плиток, группируемых в "Действия", перенесена из статического свойства ActionsGroupingTileExtension.MinGroupingCount в свойство настроек ISettings.MinActionsGroupingCount, которое устанавливается посредством расширений ISettingsExtension. Также настройку можно указать для индивидуальной вкладки, задав свойство "MinActionsGroupingCount" (тип int) в плитке TileNames.ActionsGrouping на левой боковой панели (плитка присутствует только при наличии других группируемых плиток), например: context.Workspace.LeftPanel.Tiles.TryGet(TileNames.ActionsGrouping)?.Info["MinActionsGroupingCount"] = 5.

  14. API: Добавлено свойство IWorkflowManager.ProcessesAwaitingRemoval, в котором можно указать список процессов, фактически удаляемых после выполнения всей обработки в текущем запросе. Это позволяет выполнить отложенное удаление подпроцесса, которое предотвращает ошибки при завершении нескольких заданий, каждое из которых удаляет подпроцесс.

  15. API: Обновлены библиотеки: Linq2DB 2.0.0, NetOffice 1.7.4.3, NLog 4.5.6, NTwain 3.5.2, PdfSharp-wpf 1.50.4845-RC2a, Quartz 3.0.5.

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

  1. Исправления и оптимизации, связанные с настройкой и выполнением процессов маршрутов.

  2. Исправления, связанные с сервисом схемы данных.

  3. В API карточек исправлена установка разрешений Card.Permissions на поля коллекционной секции, в которой отсутствуют строки.

  4. Исправлена ошибка при импорте карточки настроек "Типовое решение" в процессе установки системы на новую базу данных.

  5. Исправлены предупреждения в процессе установки системы на новую базу данных.

  6. Оптимизировано завершение заданий, назначенных на контекстные и временные роли, при большом количестве ролей в системе. Оптимизации эффективны для сборок 2.6.x.

  7. Скрипт Migrate.bat теперь будет выводить подробные сообщения в процессе миграции таблиц с данными.

  8. В web-клиенте исправлено выравнивание некоторых плиток и строк представления.

  9. В web-клиенте исправлена загрузка файлов с символом "/" в названии.

  10. В web-клиенте исправлен выбор в параметре фильтрации значений с несколькими ключевыми колонками (например, ID и ExternalID).

  11. В web-клиенте исправлено использование параметров представлений, значение которых равны null.

  12. В web-клиенте исправлен быстрый поиск в представлениях.

  13. В web-клиенте исправлены сабсеты, ключом которых является логическое значение (bool).

  14. В web-клиенте исправлена сериализация поля карточки типа decimal, которое было доступно в расширениях на сервере как double. Например, поле DocumentCommonInfo.Amount.

  15. Ошибка "Cannot handle iref streams" при работе с PDF-файлами больше не будет повторяться ввиду обновления на новую версию библиотеки PdfSharp-wpf.

  16. Исправлено автодополнение и подсказки в редакторе представлений в TessaAdmin.

  17. Исправления, связанные со сравнением и объединением файлов .docx в Word.

  18. Исправлены контролы "Ссылка" и "Список", использующие маппинг при запуске на базе данных MSSQL Server.

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

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

  21. В представлении "Мне на ознакомление" исправлен символ неделимого пробела, который приводил к ошибке при запуске не SQL Server 2008 R2.

  22. Исправлено скачивание обновлений приложений в Tessa Applications при изменении регистра символов в имени файла.

  23. Исправлено форматирование справки tadmin при запуске без параметров.

  24. Дерегистрация согласованного документа теперь переводит его в состояние "Согласован".

19. Версия 2.6.1 (10.05.2018)

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

  1. Изменены рабочие места: Administrator, User (добавлено представление "Документы" в папку "Отчёты"; включён режим множественного выделения для представления "Состояния"; множественный выбор строк в узел "Типы").

  2. Изменены представления: DocumentCategories (добавлено), KrFilteredStageGroups (добавлено), KrFilteredStageTypes (добавлено), KrProcessStageTypes (удалено), KrStageGroups, KrStageRows, KrStageTypes (добавлено), ProtocolTypes (удалено).

  3. Изменены таблицы: DocumentCategories (добавлена), DocumentCommonInfo, KrProcessButtons, KrSettingsApprovalCardTypes, KrSettingsApprovalStageGroups, KrSettingsApprovalStageRoles, KrSettingsApprovalStages, KrSettingsApprovalStageTypes, AcquaintanceRows, Partners, ProtocolTypes (удалена).

  4. Изменены типы карточек: Document, DocumentCategory, KrCard, KrProcessButton, KrSettings, KrTransitionStageTypeSettings, Protocol, ProtocolType (удалён).

  5. Изменены карточки: DeregisterButton, DeregisterTemplate, EditTemplate, RegisterButton, RegisterTemplate (переименована из RegistrationTemplate), Standard solution (settings), StartProcessButton.

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

  7. Перед обновлением схемы выполните скрипт Fixes/Migration-2.6.1-pre.*.sql.

  8. После обновления схемы выполните скрипт Fixes/Migration-2.6.1.*.sql.

  9. В тему Cold.json добавлены цвета CardSelector***.

  10. Если у вас использовался форматтер плейсхолдеров #wrap, то поменяйте параметр с направлением выравнивания текста: #wrap(left=10) для выравнивания по левому краю, и #wrap(right=10) для выравнивания по правому краю.

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

  12. Был исправлен скрипт миграции при миграции со сборок перед 2.6 на текущую сборку. Выполняйте сквозную миграцию на текущую сборку, например, с 2.5.3 сразу на 2.6.1, минуя 2.6.

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

  1. Добавлен отчёт "Документы" в папку "Отчёты" рабочего места "Пользователь". В отчёте отображается количество документов по их видам.

  2. Улучшен диалог выбора группы и типа этапа при добавлении этапа в маршрут. Улучшения коснулись и TessaClient, и web-клиента.

  3. Добавлена возможность запрашивать подтверждение у пользователя при нажатии на кнопку процесса.

  4. Добавлено ограничение по выбору групп и типов этапов в зависимости от таблицы на вкладке "Настройки этапов маршрута" в карточке настроек "Типовое решение". Администраторам доступен выбор любых групп и этапов независимо от настроек.

  5. В представления внутри папки "Маршруты" рабочего места "Администратор" добавлено расширение CreateCardExtension с кнопкой, которая создаёт карточку в соответствующем справочнике.

  6. Справочник "Типы протоколов" заменён на справочник "Категории документов", который помимо протоколов теперь применяется в типе Document. Например, это позволяет указать категорию служебной записки.

  7. API: Обновлены библиотеки: Linq2DB 2.0-beta5, NLog 4.5.4.

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

  1. Исправления, связанные с настройкой и выполнением процессов маршрутов.

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

  3. Локализация типовых шаблонов этапов.

  4. Скрипт Upgrade.bat больше не выполняет отключение внешних ключей перед импортом схемы и включение ключей после импорта. Это могло приводить к некорректному состоянию базы данных при наличии ошибок в схеме (например, после некорректного слияния изменений).

  5. Скрипт Migrate.bat теперь будет ждать соединения с веб-сервисом в течение двух минут, а не 10 секунд, как раньше.

  6. Исправлена видимость клиентских программных представлений в TessaClient.

  7. Исправлены проблемы при импорте/экспорте представлений, содержащих экранируемые символы в метаинформации или в тексте запроса.

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

  9. В web-клиенте исправлена загрузка темы и фона при первом входе или при входе из окна логина.

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

  11. В web-клиенте исправлен запуск синхронизации с Active Directory по кнопкам из карточки настроек.

  12. В форматтере плейсхолдеров #wrap инвертировано направление, с которого добавляются пробелы. Теперь #wrap(left=10) выравнивает текст по левому краю, а #wrap(right=10) выравнивает текст по правому краю.

  13. Исправлено удаление истории массового ознакомления при удалении карточки из корзины или при удалении, минуя корзину. При удалении в корзину строки в истории ознакомлений по-прежнему присутствуют до момента удаления из неё.

  14. Восстановлены подтверждения при нажатии на кнопки, связанные с процессом согласования и регистрации.

  15. Уменьшена длина колонки Partners.FullName, чтобы соответствовать максимальному ограничению по длине ключевой колонки в индексе в MS SQL Server.

  16. Исправлено автодополнение и подсказки в редакторе представлений в TessaAdmin.

  17. Исправлено пробрасывание Digest в дочерний запрос на сохранение карточки в Workflow API, в т.ч. в типовом процессе.

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

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

  20. Исправлена редкая ошибка при взятии блокировки на запись карточки в PostgreSQL.

20. Версия 2.6 (29.04.2018)

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

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

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

  3. Изменены типы карточек: AdSync (добавлен), Contract (строка локализации "Тип документа", поле "Контрагент"), Currency (поле "Код валюты"), DepartmentRole, Document (строка локализации "Тип документа"), DynamicRole (добавлено поле "Последний успешный расчёт"), Incoming (строка локализации "Тип документа", поле "Контрагент"), KrApprovalStageTypeSettings (добавлен), KrCard, KrChangeStateStageTypeSettings (добавлен), KrCreateCardStageTypeSettings (добавлен), KrEditStageTypeSettings (добавлен), KrPerformersSettings (добавлен), KrProcessButton (добавлен), KrResolutionStageTypeSettings (добавлен), KrSatellite, KrSecondarySatellite (добавлен), KrRebuild (удалён), KrReject (удалён), KrRegistration (добавлен), KrSettings, KrStageGroup (добавлен), KrStageTemplate, KrTransitionStageTypeSettings (добавлен), Outgoing (строка локализации "Тип документа", поле "Контрагент"), PersonalRole, RoleGenerator (добавлено поле "Последний успешный расчёт"), StaticRole, WfTaskCard (строка локализации "Тип документа").

  4. Изменены карточки: Active Directory Sync (settings) (добавлена), Aggregate roles, All employees, ApprovalGroup (добавлена), Author of document, Creator of card, Default access rules (замените, только если вы используете права по умолчанию, обычно на тестовых серверах), DeregisterButton (добавлена), DeregisterGroup (добавлена), DeregisterTemplate (добавлена), EditTemplate (добавлена), EUR, Initiator of approval, RegisterButton (добавлена), RegisterGroup (добавлена), RegistrationTemplate (добавлена), Registrator of document, RUB, Standard solution (settings) (необязательное изменение), StartProcessButton (добавлена), USD.

  5. Изменения во множестве объектов схемы данных. Если схема проектного решения была в отдельных библиотеках и не затрагивала файлы типовой схемы, то достаточно скопировать папки с библиотеками в Partitions (как обычно). Если же были изменения в типовых объектах, то рекомендуется выполнить слияние средствами репозитория. При этом таблицы (и другие объекты) основной схемы и библиотеки Standard solution взять из сборки, и затем вручную выполнить изменения, связанные с проектным решением. Список изменений проще получить, показав в репозитории разницу между объектами схемы из предыдущей типовой сборки (из которой выполняется миграция, например, 2.5.3) и теми объектами, которые содержатся в проектном решении (и уже есть в репозитории). Получив список изменений, их можно вручную внести в xml-файлы из новой сборки. Следует учитывать изменившийся формат именования xml-элементов (см. ниже).

  6. Изменён формат хранения объектов схемы. Префиксы Tessa*** в именах xml-элементов заменены на Scheme***. Объекты с запросами (функции, процедуры, миграции) хранятся в нескольких файлах вместо одного. Все объекты схемы всегда хранятся в виде файлов и не достраиваются при открытии (актуально для системных таблиц).

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

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

  9. В текущей версии платформы отключена функциональность отзыва процесса, отмены процесса, возврата на доработку (инициатору), а также регистрации документа при активном процессе. Функциональность будет восстановлена в следующих сборках и начнёт работать как для процессов, запущенных в 2.6, так и для процессов, которые были мигрированы в 2.6.

  10. Обновите хост Chronos.exe. Версия Chronos увеличена до 2.6.0.

  11. Обновите конфигурационные файлы app.json в папке веб-сервисов и в папке Chronos. В файле app.json из Chronos теперь по умолчанию указан путь к LibreOffice 6. Если у вас LibreOffice 5 или другой версии, то измените путь в app.json.

  12. Если в типах карточек вы использовали стандартную строку локализации "Тип документа" ("$CardTypes_Controls_Document type"), то замените её на строку без пробела: "$CardTypes_Controls_DocumentType".

  13. В проекте расширений Tessa.Extensions.Chronos обновите файл extensions.xml.

  14. Убедитесь, что в ваших скриптах, использующих tadmin.exe, команда CheckDatabase выполняется без аргумента /db. Если аргумент присутствует, то удалите его.

  15. Скрипты из папки Fixes, имеющие суффикс ".ms", должны запускаться только на Microsoft SQL Server. Скрипты с суффиксом ".pg" запускаются только на PostgreSQL.

  16. Перед обновлением схемы выполните скрипт Fixes/Migration-2.6-pre.ms.sql.

  17. После обновления схемы выполните скрипт Fixes/Migration-2.6.ms.sql.

  18. Переход на сборку 2.6 поддерживается, начиная со сборки 1.21.1. Если у вас более ранняя сборка, то сначала необходимо перейти на одну из предыдущих сборок 1.21.1 или 2.x, и затем уже на 2.6. Из папки Fixes были удалены скрипты и миграции, актуальные для перехода с ранних сборок на сборку 1.21.1.

  19. Если в проектных расширениях вы используете процессы Workflow API, которые получают и обрабатывают сигналы IWorkflowSignal, то определите метод CanHandleQueueItem в вашем расширении-наследнике WorkflowStoreExtension, который возвращает true для сигналов с типами подпроцессов, которые допустимы для ваших процессов. Пример см. в расширении TestWorkflowStoreExtension. Также при отправке сигнала свойство ProcessTypeName теперь является обязательным, даже если сигнал отправляется на экземпляр подпроцесса с заданным идентификатором.

  20. В проектных расширениях, использующих диалоги с кнопками UIButton, в конструкторе кнопки теперь указывается делегат Action<UIButton>, в параметр которого передаётся этот же объект кнопки. Для закрытия диалога вместо возвращаемого значения true используйте вызов метода button.Close() (где button - параметр делегата). Делегат может быть асинхронным с конструкциями async/await.

  21. В проектных расширениях рекомендуется заменить совместные вызовы методов unityContainer.IsRegistered<T>() + unityContainer.Resolve<T> на один вызов unityContainer.TryResolve<T>(), который возвращает null (default(T)), если зависимость не была зарегистрирована. Вызов метода TryResolve<T>() значительно более производительный. В параметр метода опционально передаётся строковое имя зависимости.

  22. По умолчанию утилита tadmin.exe для большинства команд выполняет подробный вывод всех сообщений на консоль, в т.ч. не являющихся ошибками. Чтобы включить прежнее поведение по умолчанию - "тихий режим", при котором на консоль выводятся только ошибки, используйте ключ /q.

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

  1. Добавлена поддержка PostgreSQL в качестве СУБД. Информация по настройке новой инсталляции и по миграции существующей БД доступна в руководстве по установке и в руководстве администратора.

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

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

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

  5. В приложении TessaClient добавлена система расширений для тем интерфейса, позволяющая как изменять доступные по умолчанию темы, так и создавать собственные темы или добавлять ресурсы в темы, которые задействуются в клиентских расширениях UI. В подпапке "themes" могут содержаться темы в файлах *.json (путь к одной или нескольким папкам указан в файле TessaClient.exe.config, папки разделяются точкой с запятой), а также описание дополнительных ресурсов тем в файлах props*.json.

  6. Блоки карточки теперь можно свернуть/развернуть при клике по заголовку. В настройки блока добавлены настройки "Свёрнут по умолчанию" и "Не сворачивать с верхним блоком". В контекстном меню, открываемом по правой кнопке в карточках, добавлены функции "Свернуть все блоки" и "Развернуть все блоки".

  7. В web-клиенте добавлены: отображение горячих клавиш при наведении мыши на плитку, с которой связана горячая клавиша; плитка "Сохранить, закрыть и создать" на левой панели для созданных карточек; плитка "Создать" на правой панели для создания карточки таким же образом; удаление карточек из представлений; закрытие сессий из представления "Активные сессии"; открытие карточек и удаление действий в представлении "История действий"; восстановление и удаление карточек из представления "Удалённые карточки".

  8. Добавлены шаблоны текстовых файлов .txt. Они аналогичны шаблонам .html, за исключением того, что не выполняется кодирование вставляемого текста. Изображения вставляются как массив байт, закодированный в форме строки Base64.

  9. Добавлен форматтер плейсхолдеров #align, позволяющий выполнять выравнивание строки, которая дополняется пробелами. Доступно выравнивание по левому краю #align(left=15), по правому краю #align(right=20) и по центру #align(center=30). Также добавлен форматтер #wrap, аналогичный #align, но способный разбивать на несколько строк текст, выводимый в ячейке таблицы для текстовых шаблонов .txt. Посредством этого форматтера выводятся таблицы в текстовых печатных формах, где ширина каждой колонки ограничена, а содержимое внутри ячеек не ограничено по размеру.

  10. В редакторе представлений в TessaAdmin улучшен ввод с автодополнением и всплывающие подсказки.

  11. При переключении между представлениями в TessaAdmin теперь сохраняется активная вкладка "Метаданные", "Запрос" или "Описание".

  12. В метаинформации представления добавлены параметры #view(ConnectionAlias: alias, TreatAsSingleQuery: false), позволяющие выполнить представление на другой базе данных по алиасу строки подключения app.json, указанной в конфигурационном файле. Описание параметров доступно в руководстве администратора.

  13. В редактор типов карточек TessaAdmin добавлены расширения типов: автоматическая очистка связанных полей и запрет редактирования колонки после первого сохранения.

  14. Добавлена поддержка индексов с фильтрацией, в т.ч. индексов, не включающих значения NULL. Информация по настройке в руководстве администратора.

  15. В типовом решении в карточках "Входящий", "Исходящий" и "Договор" добавлена поддержка ручного ввода в поле "Контрагент". Также в карточке настроек "Типовое решение" появилась настройка "Разрешить ручной ввод и автоматическое создание контрагентов", которая позволяет включать и отключать новый функционал. Введённые вручную контрагенты будут автоматически созданы при сохранении документа, если отсутствует контрагент с тем же именем без учёта регистра.

  16. В типовом решении добавлено расширение рабочего места ManagerWorkplaceExtension и представление KrManagerTasks, которые могут использоваться для настройки рабочего места руководителя в виде "Список плиток + дочернее представление". Представление KrManagerTasks используется как пример представления для отображения "Моих заданий", разделённых по настроенным типам и видам задач. Описание настройки см. в руководстве администратора.

  17. Для административного представления "Подразделения" добавлено detail-представление со списком сотрудников в этом подразделении.

  18. Авторизация в федеративном домене ADFS теперь связывает сотрудников Tessa и ADFS по логину из ADFS (настройка "LoginClaimType" в app.json), а не по email. Это позволяет сотруднику продолжить работать в системе под своей учётной записью, если у него поменялся email в домене. При этом для совместимости оставлено соответствие с email при входе сотрудников, уже созданных в системе. Также добавлена настройка "UpdateEmailLoginUsers", для которой можно указать true, чтобы по мере входа существующих сотрудников, связанных с ADFS по email, для них устанавливалась бы связь по login.

  19. Добавлен командный файл Migrate.bat для миграции базы данных, в т.ч. для миграции с СУБД Microsoft SQL Server на PostgreSQL. Инструкция по миграции доступна в руководстве администратора.

  20. Добавлены скрипты Fixes/LocalizeEnglish.sql и Fixes/LocalizeRussian.sql, которые могут использоваться для локализации объектов установленного типового решения на английский и русский языки соответственно. Это актуально для тех объектов, которые не локализуются автоматически, например, для ролей "Все сотрудники" и др. Сразу после установки объекты уже локализованы на русском, поэтому для русского языка выполнять локализацию не требуется. Скрипт может выполняться на любой поддерживаемой СУБД.

  21. Хост-процесс Chronos, запущенный в консоли, теперь корректно останавливается при нажатии Ctrl+C (вместо ввода "stop").

  22. Если для плагина Chronos отсутствует хотя бы один из конфигурационных файлов, на которые он ссылается, то хост-процесс не прекратит работу и запустит все остальные плагины, кроме плагина с отсутствующим конфигурационным файлом, информация по которому будет добавлена в лог process.txt. Это позволяет отключить некоторые плагины, удалив или переименовав их конфигурационные файлы в подпапке "configuration".

  23. Улучшено логирование событий диспетчеризации в Chronos за счёт перехода на новую версию библиотеки Quartz.NET 3.0.4.

  24. Плагины Chronos, отключённые через конфигурационные файлы (атрибут disabled="true"), теперь указываются в логе process.txt как отключённые в процессе поиска плагинов.

  25. В сборку платформы интегрирован плагин синхронизации с Active Directory и каталогами LDAP. Плагин выключен по умолчанию и требует приобретённого модуля лицензии. Настройки синхронизации, а также функция синхронизации вручную доступны в карточке настроек "Синхронизация с AD". Описание настроек доступно в руководстве администратора.

  26. В карточку "Валюта" добавлено поле "Код валюты". В карточках валют, поставляемых с типовым решением, в этом поле указаны трёхзначные числовые коды валют по стандарту ISO 4217.

  27. Информация о массовом ознакомлении с документом теперь также удаляется при удалении карточки.

  28. Ошибки расчёта динамических ролей и метаролей теперь записываются в реестр ошибок. Также в генераторах метаролей и динамических ролях добавлено поле с датой последнего успешного расчёта.

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

  30. Сообщения об ошибках теперь также отображают текстовые сообщения по вложенным исключениям, если они присутствуют.

  31. Утилита tadmin.exe: добавлена команда MigrateDatabase для переноса одной базы данных в другую пустую базу данных, в т.ч. между СУБД Microsoft SQL Server и PostgreSQL. После переноса из одной СУБД в другую требуется импортировать карточки динамических и контекстных ролей из Configuration\Cards. Пример такого импорта доступен в скрипте Migrate.bat.

  32. Утилита tadmin.exe: добавлена команда MigrateFiles для переноса содержимого файлов с одного местоположения в другое, в т.ч. между базами данных и файловыми папками.

  33. Утилита tadmin.exe: добавлена команда ImportUsers для импорта сотрудников из файлов xlsx или csv. Команда может выполняться периодически для добавления, изменения или удаления сотрудников, уже импортированных в систему. Формат содержимого файлов приведён в руководстве администратора.

  34. Утилита tadmin.exe: в команду CheckDatabase добавлен параметр /dbms, выводящий имя СУБД, к которой выполняется подключение: "ms" (для MSSQL), "pg" (для PostgreSQL) или пустая строка (СУБД неизвестна). Пример использования есть в скриптах Setup.bat, Update.bat и Migrate.bat.

  35. Утилита tadmin.exe: команда CheckDatabase теперь всегда проверяет соединение к серверу СУБД, без учёта прав доступа на конкретную базу данных, при этом параметр /db удалён для этой команды. Для MSSQL выполняется подключение к БД "master", а для Posgre - к БД "postgre".

  36. Утилита tadmin.exe: в команду CheckDatabase добавлен параметр /c, который выводит проверяемую строку подключения в окно консоли. Параметр учитывается при наличии ключа /q, т.к. при его отсутствии строка подключения всегда выводится. Строка подключения выводится в лог независимо от этой настройки.

  37. Утилита tadmin.exe: команда Select теперь выполняет скрипт со всеми запросами, разделённым строкой с ключевым словом GO, и возвращает результат последнего запроса.

  38. Утилита tadmin.exe: команды Sql и Select, для которых указано несколько выполняемых запросов (разделённых строкой GO), при выполнении каждого запроса "пробрасывают" результат этого запроса как параметр @Result в следующий запрос (если результата нет как Result Set, то пробрасывается количество изменённых строк или 0). Также при наличии в последующих командах спец. строки "@Result@" (без кавычек), она будет заменена на @Result предыдущего запроса (при замене отсутствует защита от SQL-инъекций). Если запрос начинается со строки "--NORESULT" (без кавычек), то параметр не пробрасывается, это актуально для запросов, создающих хранимые процедуры и функции, или имеющих внутри себя параметр с именем @Result.

  39. Утилита tadmin.exe: на консоль по умолчанию теперь выводятся все сообщения, в том числе не являющиеся ошибками. Используйте ключ /q, доступный для большинства команд, чтобы ограничить вывод только сообщениями об ошибках. Это не касается команд BuildVersion и GetToken.

  40. API: Добавлены асинхронные плагины, наследуемые от базового класса PluginAsync или реализующие интерфейс IPluginAsync. В таких плагинах разрешено использовать конструкцию async/await для асинхронного выполнения задач.

  41. API: Добавлены асинхронные методы RuntimeHelper.InvokeAsync() и InvokeAsync<T>(), выполняющие делегат на пуле потоков аналогично Task.Run(), но с пробрасыванием контекста текущего потока (с локализацией, сессией и другими параметрами, задействованными системой). Методы рекомендуется использовать в серверных расширениях, в плагинах Chronos и в консольных утилитах. В клиентских расширения для тех же задач есть аналогичные методы UIHelper.InvokeAsync<T>().

  42. API: Объект UIButton теперь принимает Action<UIButton> для выполнения действия по кнопке. В параметр делегата передаётся этот же объект кнопки. Если Action не задан, то окно будет закрыто после нажатия на кнопку, в противном случае окно закрывается только при вызове метода button.Close() для переданного параметра-кнопки (в то время как раньше требовалось вернуть return true). В заданном выражении Action<UIButton> можно выполнять асинхронные вызовы async/await, по завершении которых окно будет закрыто вызовом button.Close().

  43. API: Добавлены асинхронные методы ***Async для взаимодействия с операциями IOperationRepository. Используйте их на клиенте для неблокирующего вызова сервера из потока UI, например, await operationRepository.IsAliveAsync(operationID).

  44. API: Добавлены методы-расширения IUnityContainer.TryResolve<T>(). С точки зрения производительности рекомендуется использовать их вместо связки вызовов IsRegistered<T>() + Resolve<T>().

  45. API: В таблицах Files и FileVersions добавлены ссылка на внешний идентификатор LinkID и колонка Options с некоторыми сериализованными настройками. Их можно задействовать в расширениях, в т.ч. посредством объектов CardFile и CardFileVersion, или IFile и IFileVersion.

  46. API: Добавлена возможность настраивать пункты контекстного меню при клике правой кнопкой мыши на формах карточки (вкладки, диалоги, задания и др.). Для этого в расширении ICardUIExtension.Initialized добавьте в коллекцию IFormViewModel.ContextMenuGenerators делегат, который добавляет пункты контекстного меню context.MenuActions по аналогии с контекстным меню в истории заданий или в контроле "Таблица". Если в коллекцию MenuActions не был добавлен ни один видимый пункт меню (IsCollapsed = false), то меню не будет отображено (клик правой кнопкой будет игнорироваться).

  47. API: Добавлено свойство UIContext.Tiles, которое заполняется после открытия вкладки, и предоставляет доступ к плиткам, инициализированным для вкладки (после выполнения расширений TileExtension.InitializingLocal). Для вкладок карточки это свойство не заполнено на момент выполнения расширений CardUIExtension.Initialized, но заполнено в расширениях CardUIExtension.ContextInitialized (см. ниже), на момент повторного открытия вкладки (CardUIExtension.Reopened) или в момент выполнения событий у контролов и секций (FieldChanged, RowInvoked).

  48. API: Добавлен метод расширения ICardUIExtension.ContextInitialized, выполняемый после инициализации плиток в свойстве context.UIContext.Tiles, что актуально при открытии вкладки и при повторном открытии карточки в пределах вкладки. В отличие от метода Initialized, этот метод не вызывается для карточек, которые не открываются во вкладке (например, в кастомизированных диалогах или при редактировании карточек в шаблоне). В остальном метод идентичен методу ICardUIExtension.Initialized, который по-прежнему рекомендуется использовать, если не требуется доступ к свойству UIContext.Tiles.

  49. API: Добавлена фильтрация сигналов для процессов Workflow API в методе WorkflowStoreExtension.CanHandleQueueItem. По умолчанию процесс не принимает сигналов, т.е. метод возвращает false. Метод требуется определить для любых процессов, использующих обработку сигналов.

  50. API: В контроле "Таблица" добавлено событие GridViewModel.RowEditorClosed, вызываемое после закрытия строки таблицы независимо от того, были ли изменения в такой строке сохранены пользователем. Событие рекомендуется использовать для выполнения очистки подписок и ресурсов, добавленных в событии GridViewModel.RowInitializing.

  51. API: Добавлен метод storeRequest.SetStartingProcessNextTask(CardTask), позволяющий указать при постановке задачи объект CardTask с секциями, которые будут использоваться для завершения постановки задачи в пределах той же транзакции на сервере. Используйте совместно с методом storeRequest.SetStartingProcessName(WfHelper.ResolutionProcessName). В объекте CardTask достаточно указать только поля секций, которые изменяются относительно полей по умолчанию. Задача завершается с вариантом "Отправить", другой вариант можно указать в свойстве CardTask.OptionID.

  52. API: Улучшен вывод сообщений об ошибках, возникших в транзакции на загрузку или сохранение карточки. Теперь выводится полный стек-трейс для методов, в результате которых был вызван CardTransactionStrategy. Например, это позволяет узнать, из какого расширения AfterBeginTransaction или BeforeCommitTransaction было выполнено вложенное сохранение карточки или другой вызов CardTransactionStrategy, который привёл к ошибке.

  53. API: Обновлены библиотеки: BitMiracle.LibTiff.NET до 2.4.560.0, DocumentFormat.OpenXml 2.8.1, Linq2DB 2.0-beta4, Microsoft.Exchange.WebServices.NETStandard 1.1.2, Newtonsoft.Json 11.0.2 (встроен в Tessa.dll), NLog 4.5.3, Quartz.NET 3.0.4.

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

  1. В web-клиенте исправлено административное удаление зарезервированных номеров из карточки последовательности. Теперь такие удалённые номера возвращаются в диапазон доступных номеров.

  2. В web-клиенте исправлено добавление файла в карточку задания после того, как один из файлов был подписан ЭЦП.

  3. В web-клиенте настройки фильтрации теперь закрываются по Enter.

  4. В web-клиенте исправлен размер таблицы в карточке, в которую ещё не были добавлены строки.

  5. В web-клиенте исправлена простановка Digest для истории действий, связанной с карточкой задания.

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

  7. Исправлено асинхронное выполнение для некоторых из действий в TessaClient, чтобы не блокировался пользовательский интерфейс.

  8. Оптимизирован расчёт состава динамический ролей и метаролей, если в системе большое количество сотрудников (десятки тысяч).

  9. Исправлен двойной клик в представлении "Шаблоны" в TessaClient, когда соответствующая карточка шаблона уже открыта.

  10. При обновлении со сборки 2.2 или более ранней теперь не требуется использовать SchemeEditor от сборки 2.3 для обновления версии схемы данных в БД до актуального состояния. SchemeEditor 2.6 поддерживает обновление версии схемы данных в БД, начиная со сборки 1.21.1. Это не затрагивает автоматизированную миграцию скриптом Upgrade.bat, которая по-прежнему может выполняться со сборки 2.4 и более поздней. Также для требуется выполнить все соответствующие скрипты миграции до и после обновления схемы.

  11. Исправлено логирование сообщений об ошибках при взятии блокировки для расчёта динамических ролей и метаролей.

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

  13. Исправлена строка локализации в контроле "Тип документа" для типов карточек Contract, Document, Incoming, Outgoing. Теперь в алиасе строки отсутствует пробел.

  14. Исправлено открытие карточек, в которых настройки маппинга для контролов "Список файлов", "Список" и "Ссылка" были изменены в версии сборки раньше 2.5. Для этого была изменена валидация маппинга, которая не проверяет наличие некоторых ключей в настройках.

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

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

  17. Оптимизировано распределение потоков в процессах Chronos.

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

  19. Исправлен метод API Card.EnsureCacheResolved() для карточек, содержащих файлы и задания.

  20. Исправлено отображение сохранённых представлений в TessaAdmin в случае, если одно из представлений не удалось сохранить из-за ошибки.

  21. В контроле "Нумератор" исправлено копирование номера через контекстное меню в ситуации, когда выбран заданный вручную номер.

  22. В параметрах фильтрации представлений исправлена вставка по Ctrl+V или Shift+Insert для значений ссылочного типа.

  23. В приложении Tessa Applications исправлена обработка невозможности прочитать зашифрованные логин или пароль из папки профиля пользователя. Приложение отобразит сообщение об ошибке и предложит ввести логин/пароль вручную.

  24. Исправлена редкая ошибка при переключении выбранной строки или ячейки в master-detail представлениях.

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

  26. Конструктор ErrorFile с указанием контента как строки теперь использует кодировку Encoding.Default по умолчанию вместо UTF-8. В этом случае файлы корректно отображаются в предпросмотре файлов.

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

  28. Плагин FileConverterPlugin теперь допускает отсутствие настройки "OpenOfficePython" в конфигурационном файле app.json, при этом конвертация файлов, не связанных с LibreOffice/OpenOffice, будет успешно выполняться.

  29. Исправлено скрытие вкладки "Процесс согласование" через UI-расширение путём удаления из списка вкладок. Ошибка появилась в сборке 2.4.

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

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

  32. Исправлена подсветка некоторых лексем в метаинформации представления.

  33. Исправлено экранирование символов при экспорте/импорте представлений и рабочих мест.

  34. Исправлено копирование содержимого файлов на сервере, если файлы расположены в базе данных и в строке подключения не включён MARS. Актуально для создания карточек с файлами по шаблону и для копирования карточек с файлами.

  35. Исправлена работа метода card.RemoveChanges() для коллекционных секций в API карточек.

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

  37. В файл лога Chronos теперь выводятся ошибки при невозможности выполнить задание Quartz Job, которое запускает процесс плагина на выполнение.

  38. Исправлены проблемы при запуске Chronos из сетевой папки.

  39. Логирование в консольной утилите tadmin.exe теперь выполняется асинхронно.

  40. Исправлена ошибка формирования шаблонов документов Word/Excel при наличии во вставляемом тексте служебных нечитаемых символов, недопустимых в XML. Ошибка не относится к экранируемым символами &<> и др., вставка которых корректно выполнялась.

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

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

  43. Исправлена редкая ошибка "Элемент с тем же ключом уже был добавлен" при обращении к свойству response.SectionRows при одновременных создании или загрузке карточки из множества потоков.

  44. Исправлены ошибки обработки сигналов Workflow API при наличии нескольких различных процессов Workflow API, обрабатываемых разными расширениями WorkflowStoreExtension.

  45. Исправлена возможность дважды выполнить действие плитки при двойной клике по плитке.

  46. Исправлена ошибка в контроле "Ссылка", которая при вызове метода block.RearrangeSelf() на блоке, содержащем этот контрол, приводила к лишним обработкам события при последующем нажатии по кнопке выпадающего списка.

  47. Исправлены редкие ошибки при инициализации кэшей локализации и схемы данных.

  48. Приложение TessaAdmin теперь корректно обрабатывает невозможность загрузить схему данных, например, из-за ошибки в схеме данных на сервере. Такая ошибка теперь выводится на экран.

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

  50. Исправлены методы API: IFileCollection.Remove(Guid) и RemoveAll(Guid).

  51. Исправлен алгоритм автоподстановки переводов строк в названиях плиток. Теперь перевод строки всегда вставляется ближе к середине строки.

  52. Исправлен плагин конвертации файлов т.о., что при необработанной ошибке в момент поиска запросов на конвертацию (когда, например, было прервано соединение с БД) работа плагина больше не завершается, и попытка поиска повторяется через некоторое время.

  53. Исправлена непреднамеренная очистка колонок в настройках контрола "Таблица", если после добавления колонок открывается окно выбора секции таблицы и закрывается без смены секции, причём в качестве первой колонки таблицы выбрана комплексная колонка.

  54. Исправлено вырезание значения по Ctrl+X в контролах "Список" и "Ссылка" в тех случаях, когда указано значение не из справочника, которое считается некорректным.

  55. Исправлен экспорт карточек шаблонов этапов.

21. Версия 2.5.3 (05.02.2018)

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

  1. Изменены представления: CompletedTasks.

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

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

  4. Замените файл app.json в папке с веб-сервисами.

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

  1. Текст в Digest заданий, отображаемых в TessaClient, теперь можно выделить и скопировать в буфер обмена.

  2. В почтовых уведомлениях теперь отдельно выводится ссылка на открытие карточки в desktop-приложении рядом с ссылкой для открытия в web-клиенте. Открытие в desktop-приложении по той же ссылке по-прежнему возможно при клике по названию карточки.

  3. Сессии, используемые для уведомлений по задачам в TessaClient, теперь выводятся с указанием отдельного типа приложения "TessaClient - уведомления".

  4. В web-клиенте добавлена горячая клавиша Alt+E для плитки "Редактировать" на левой панели.

  5. В web-клиенте в app.json добавлена настройка SAML.ExpireTimeSpan, позволяющая задать таймаут сессии авторизации в федеративном домене ADFS.

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

  1. Исправлена замена плейсхолдеров в шаблонах файлов Word.

  2. Отправка на массовое ознакомление теперь выполняется асинхронно.

  3. Исправлена локализация ошибки при импорте представлений.

  4. Исправлено изменение размеров картинок, вставляемых в документы Word, через форматтеры в плейсхолдерах.

  5. Исправлено изменение объекта ValidationResultBuilder посредством методов Clear() и RemoveXXX().

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

  7. Для сканирования исправлены обработка ошибок, логирование и доступность сканеров с драйверами, использующими устаревшее API TWAIN, и с драйверами, поддерживающими WIA в режиме совместимости.

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

  9. Исправлена настройка "Знаков после запятой" в контроле "Десятичное число", которая не позволяла задать ноль знаков, чтобы вывести целое число.

  10. Исправлена ошибка при установке свойства CardMetadataSection.IsVirtual в API карточек.

  11. Исправлена ошибка при проверке ЭЦП из TessaClient в случае, если открыть окно с подписями без проверки, а затем нажать кнопку "Проверить" при условии, что подписи ещё не были загружены. Ошибка появилась в 2.5.2.

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

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

  14. В отчёте по завершённым заданиям для нижней таблицы исправлено отображение заданий для карточек, которые не содержат секцию DocumentCommonInfo.

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

  16. При отправке на массовое ознакомление запись об отправке теперь также добавляется в ситуации, когда на карточку документа у этого же сотрудника уже есть запрос на ознакомление, по которому сотрудник ещё не ознакомился с документом. Например, сотруднику можно дважды отправить ознакомление с разными комментариями, и в момент открытия карточки ему будут выведены оба комментария, также в представлении "Мне на ознакомление" оба комментария будут доступны.

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

  18. Исправлен экспорт библиотеки схемы с непустым описанием в файловую конфигурацию.

  19. Исправлена доступность панели быстрого поиска при открытии представления в новой вкладке (Ctrl+клик по узлу дерева).

  20. Оптимизировано потребление памяти.

  21. Оптимизированы асинхронные операции, в т.ч. плагин конвертации файлов.

  22. В web-клиенте исправлено отображение кнопки меню в контроле "Список файлов" для браузера Google Chrome версии 63 и позже.

  23. В web-клиенте исправлено отображение типовых задач с указанным видом задачи ("На рассмотрение", "На исполнение" и др.).

  24. В web-клиенте исправлено изменение текущей темы при работающей функциональности Service Worker.

  25. В web-клиенте исправлен учёт порядка клиентских расширений order. Это также исправило отображение плитки "Зарегистрировать" в некоторых случаях.

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

  27. В web-клиенте исправлено прикладывание файлов с расширениями, mime-тип которых неизвестен (например, файлы .dwg).

22. Версия 2.5.2 (12.12.2017)

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

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

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

  3. Изменены типы карточек: GeneralUserSettings, Protocol.

  4. Изменены карточки: Protocol of the meeting, Protocol of the meeting (Excel).

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

  6. Перед обновлением схемы выполните скрипт Fixes/Migration-2.5.2-pre.sql, а после обновления скрипт Fixes/Migration-2.5.2.sql.

  7. Обновите конфигурационный файл app.json в папке с веб-сервисами.

  8. Для созданных в рамках проекта плейсхолдеров можно включить поддержку форматтеров, доработав ваш метод Replace(context, placeholder), который должен возвращать не new PlaceholderValue(…​), а результат вызова метода context.FormatText(…​) или context.FormatField(…​).

  9. Для работы исправления, позволяющего запустить Tessa Applications при наличии недоступного для загрузки обновления, требуется переустановить Tessa Applications через msi-файл. Этот шаг можно пропустить, если это исправление не является важным для вашей инсталляции.

  10. Методы IUIHost.CreateCard(…​) и OpenCard(…​) были заменены на аналогичные методы CreateCardAsync(…​) и OpenCardAsync(…​), которые возвращают асинхронную задачу. Во всех местах использований этих методов, где необходимо дождаться результата вызова, достаточно добавить конструкцию "await", а ваш метод отметить ключевым словом "async". Также рекомендуется выполнять вызов в блоке TessaSplash.Create(…​), чтобы индицировать для пользователя, что сейчас выполняется операция.

  11. Убедитесь, что ваши расширения CardUIExtension учитывают, что в платформе открытие и создание карточек теперь выполняется асинхронно. Всё взаимодействие с UI напрямую (не через ViewModel) к средствам WPF (например, отображение кастомных диалоговых окон) должно выполняться внутри блока DispatcherHelper.InvokeInUI(() ⇒ { /* здесь ваш код*/ }).

  12. В связи с обновлённым API номеров класс DocumentNumberDirector был доработан. В его типовом варианте есть ряд изменений, без которых система номеров и контрол "Нумератор" не будут работать корректно. Пожалуйста, убедитесь, что при изменении класса DocumentNumberDirector в проектном решении или при создании его наследника все изменения из обновлённого DocumentNumberDirector были учтены. Это касается его методов GetCoreForKrState, IsAvailableCore, OnReservingNumberFromControl, OnReleasingNumberFromControl.

  13. Метод ICardStreamServerRepository.GetFileContent() теперь возвращает объект ICardFileContentResult, содержащий как ответ на запрос Response, так и содержимое файла GetStreamOrThrow().

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

  1. Приложения TessaClient и TessaAdmin теперь запускаются как 64-битные на 64-битных ОС и при необходимости могут задействовать всю доступную память (без ограничений, связанных с 32-битными процессами), например, при создании документов PDF. Разрядность текущего процесса можно узнать в окне "О программе" для TessaClient или на вкладке "Информация" в Tessa Applications и TessaAdmin: "ИмяПриложения x64" для 64-битного или "ИмяПриложения" для 32-битного.

  2. Приложение TessaClient доступно в виде TessaClient32.exe (в той же папке), которое будет 32-битным даже на 64-битных ОС. Это актуально только для экономии потребляемой памяти, например, когда есть терминальный сервер, на котором запускается множество приложений от разных пользователей. Пример публикации TessaClient в режиме "всегда 32-разрядный" доступен в сборке в скрипте publish_client_32bit_only_demo.bat. В большинстве случаев, когда у вас нет 64-битных ОС или же нет необходимости запускать TessaClient как 32-битный на 64-битных ОС, не используйте этот командный файл и выполняйте публикацию, как раньше, файлом publish_client_demo.bat.

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

  4. В web-клиенте добавлены: создание шаблонов карточек; функции контрола "Нумератор" в выпадающем меню; переход в карточку роли, на которую отправлено задание; редактирование административных настроек через плитку "Настройки" в правой панели; восстановление удалённых карточек; удаление операций в представлении "Активные операции"; вывод версии платформы в окне "О программе".

  5. В web-клиенте сброс клиентского кэша при использовании Service Worker теперь выполняется не только при выходе из системы logout, но и при изменении версии конфигурации на сервере. Версия изменяется автоматически при любых настройках в TessaAdmin, в карточках настроек с флажком "загружать при инициализации", и в карточках типов документов (для типового решения). Следует учитывать, что при изменении настроек через приложения TessaClient и TessaAdmin может потребоваться перезапустить пул приложений веб-клиента (с которым эти настройки не синхронизируются автоматически). Также при изменении настроек файловых хранилищ не забудьте перезапустить Chronos.

  6. Добавлены плейсхолдеры: {webCardLink}, предоставляющий ссылку на текущую карточку в web-клиенте, и {webAddress}, предоставляющий базовый адрес web-клиента из настроек (заканчивающийся на / ). Для успешной работы этих плейсхолдеров адрес web-клиента должен быть заполнен в карточке "Настройки сервера".

  7. Для шаблонов файлов в плейсхолдерах добавлены специальные функции - форматтеры, позволяющие модифицировать текст или вместо текста вывести изображение, в т.ч. штрих-код или QR-код. Они работают для форматирования всех стандартных плейсхолдеров. Описание форматтеров доступно в руководстве администратора. По умолчанию доступны форматтеры #cardLink, #webCardLink, #format, #file, #text, #image, #barcode, #qrcode.

  8. Для шаблонов файлов Excel теперь заменяются плейсхолдеры в объектах "Надпись".

  9. Для шаблонов файлов добавлена возможность указывать плейсхолдеры прямо в имени файла внутри карточки шаблона. Например: "Договор-{f:DocumentCommonInfo.FullNumber}.docx" или "{*alias}.xlsx".

  10. Для карточки "Протокол" в файловые шаблоны в таблицу с докладами добавлена колонка с фотографией сотрудника, если она присутствует. Фотография должна быть прикреплена к карточке сотрудника, где имя файла начинается с "photo". Например, "photo1.png". Имя файла настраивается в представлении ProtocolReportsWithPhoto.

  11. В приложении Tessa Applications в списке приложений добавлен пункт контекстного меню для сворачивания/разворачивания групп приложений. Также список серверов теперь представлен в виде вертикального списка, что удобно при большом количестве серверов.

  12. По умолчанию предпросмотр через внешнюю программу (Word, Excel и др.) будет разрешён одновременно только для одной вкладки карточки, т.к. предпросмотр нескольких файлов через внешние приложения может привести к ошибкам. Предпросмотр для другой вкладки будет автоматически сброшен при активации предпросмотра на новой вкладке, если для обеих вкладок выполняется предпросмотр через внешнее приложение. Это не затрагивает встроенный предпросмотр (в т.ч. для файлов PDF), а также предпросмотр через веб-браузер. В диалоге "Мои настройки" добавлена настройка "Разрешить предпросмотр через несколько внешних программ", чтобы восстановить прежнее поведение для текущего пользователя.

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

  14. В файле app.json добавлены настройки SAML.EmailClaimType или SAML.NameClaimType для того, чтобы указать поля "email" и "имя сотрудника", получаемые при логине в web-клиент посредством ADFS. Имя будет использоваться при автоматическом создании сотрудника, который отсутствовал в Tessa на момент входа.

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

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

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

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

  19. API: В объект ListStorage<T> добавлены методы AddValue и InsertValue, полезные при наполнении списка скалярными значениями, например, для ListStorage<Guid>.

  20. API: В Workflow API добавлены перегружаемые методы WorkflowManager.CreateProcessInfoCore, WorkflowManager.CreateTaskInfoCore и DefaultWorkflowQueueProcessor.CreateSignalInfoCore, которые позволяют переопределить создание экземпляров для реализаций интерфейсов IWorkflowProcessInfo, IWorkflowTaskInfo и IWorkflowSignalInfo.

  21. API: В контролах "Ссылка" и "Список" добавлено событие ValueDeleted, которое срабатывает при удалении каждой ссылки (при удалении двух ссылок событие будет вызвано дважды для каждой из них).

  22. API: При отправке писем в объекте MailInfo помимо прикрепляемых файлов теперь можно указать дополнительных получателей письма в основном списке, а также получателей CC и BCC. Для этого используйте метод MailInfo.AddRecipient() и коллекцию Recipients. Также для основного получателя письма помимо email (из таблицы Outbox) можно указать отображаемое имя в поле MainRecipientDisplayName. Пример указания MailInfo для уведомлений есть в классе TaskNotificationSender (Tessa.Extensions.Default.Server.Notices).

  23. API: Объект Validator для удобства использования теперь реализует интерфейс IDisposable, где метод Dispose() вызывает End(). Это позволяет выстраивать цепочки валидации так: using (var validator = context.ValidationResult.BeginSequence()) { validator.ErrorDetails("text", "details"); }

  24. API: Добавлены статические методы ValidationResult.Aggregate(), а также возможность объединять результаты ValidationResult оператором "+".

  25. API: Для отображения всплывающих уведомлений добавлен параметр "textAlignment" в метод-расширение INotificationUIManager.ShowText().

  26. API: Для временных файлов ITempFile добавлен метод Rename(), который позволяет переименовать файл в пределах той же папки.

  27. API: Добавлен объект IFilePreviewManager, позволяющий управлять доступностью предпросмотра для каждого файла. По умолчанию доступность определяется в карточке "Настройки сервера" в поле со списком расширений файлов, предпросмотр которых запрещён. В Unity можно зарегистрировать класс-наследник FilePreviewManager по интерфейсу IFilePreviewManager, указав любую логику запретов и разрешений в методе PreviewIsEnabledCore (при этом доступен контекст карточки UIContext.Current).

  28. API: В API номеров события ReservingNumberFromControl и ReleasingNumberFromControl теперь выполняются как на клиенте, так и на сервере, причём клиентская реализация вызывает серверную. Бизнес-логика, связанная с созданием номера, с необходимостью его зарезервировать и со способом его освобождения, теперь указывается на сервере. Серверные расширения будут выполняться и для desktop-клиента, и для web-клиента. Это также позволяет использовать сложные плейсхолдеры для формата номера и формата последовательности, для которых гарантирован прямой доступ к базе данных (для выполнения сложных выборок или представлений).

  29. API: Добавлены методы IUIHost.OpenCardAsync и CreateCardAsync, позволяющие открывать и создавать карточки асинхронно, не блокируя UI. Их удобно вызывать с ключевым словом await, например: using (TessaSplash.Create(TessaSplashMessage.OpeningCard)) { await uiHost.OpenCardAsync(cardID); }.

  30. API: Добавлены методы-расширения IFileManager.EnsureContentDownloadedAsync(), EnsureContentDownloadedInUIAsync(), EnsureSignaturesLoadedAsync(), позволяющие выполнять загрузку файлов и версий файлов асинхронно. Рекомендуется вызывать их из потока UI, используя конструкцию await.

  31. API: Для интерфейсов работы с карточками ICardRepository, ICardFileManager, ICardEditorModel и др. добавлены методы-расширения для асинхронности. Например, асинхронно загрузить карточку из UI можно таким образом: var response = await cardRepository.GetAsync(request). Аналогичным образом можно ожидать данных от представления: await view.GetDataAsync(request).

  32. API: Многие коллекции и хэш-таблицы в API платформы теперь реализуют интерфейсы IReadOnlyCollection<T>, IReadOnlyList<T> и IReadOnlyDictionary<TKey,TValue>.

  33. API: Обновлены библиотеки: Linq2DB 1.10.1, Microsoft.Exchange.WebServices.NETStandard 1.1.1.

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

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

  2. Оптимизирована загрузка виртуальной задачи с информацией для инициатора по типовому процессу согласования.

  3. Исправлено возможное зависание TessaClient при одиночном клике по файлу для его открытия на предпросмотр, если файл в настоящий момент находится в процессе загрузки (например, после двойного клика по файлу или после его перетаскивания drag&drop).

  4. В web-клиенте исправлено множество ошибок, в т.ч. некоторые из них: проверка ЭЦП для непоследних версий файлов; название по умолчанию для вкладки с карточкой, у которой пустой Digest (например, не задан номер); отображение кнопки переключения вкладок; отображение выпадающего календаря в контроле с датой после увеличения размера шрифта; отображение кнопки выбора сабсетов при некоторых размерах окна; два запроса вместо одного на сохранение карточки при закрытии вкладки для Firefox; видимость пункта "использовать как текущую" в контекстном меню на версии виртуального файла; ошибка при попытке перетащить папку вместо файлов как drag&drop в карточку; корректное сообщение об ошибке при добавлении файлов в карточку размером больше 2 Гб; локализован ряд сообщений, в т.ч. сразу после смены языка интерфейса; дублирование списка фонов после выхода и повторного входа в систему.

  5. В файловых шаблонах Word исправлено использование объектов "Надпись" внутри таблиц, содержащих плейсхолдеры.

  6. Исправлен запуск типового процесса согласования. Теперь инициатор согласования корректно заполняется или остаётся без изменений.

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

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

  9. В настройках контролов "Ссылка", "Список" и "Список файлов" исправлена отмена при сохранении маппинга. Также закрытие окна маппинга средней кнопкой теперь подтверждает настройки как при нажатии "ОК".

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

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

  12. Исправлена замена плейсхолдеров в документе Excel, в котором нет ни одной строки, вписанной в ячейки (например, есть только объекты "Надпись").

  13. Исправлено отображение ошибок в контролах "Ссылка" и "Список" в таких ситуациях, как некорректно настроенное представление.

  14. Исправлена вставка пользователей в роли для настройки SAML.AddNewUserToRoles.

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

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

  17. Если область предпросмотра скрыта, то при выборе файла его предпросмотр не загружается и не занимает ресурсы.

  18. Исправлены таймауты SQL-команды на ожидание взятия и снятия блокировок для карточек. Ранее были указаны слишком большие таймауты. Это относится именно к таймаутам SQL (когда SQL Server не отвечает), а не к таймаутам на ожидание других пользователей, читающих или изменяющих карточку.

  19. Исправлено копирование файлов с заданным ExternalSource на сервере, что также исправило создание шаблонов из карточек посредством ICardStreamServerRepository (вместо ICardRepository).

  20. Исправлен предпросмотр текстовых файлов Unicode с заданным BOM. При наличии в файле байтового маркера BOM его содержимое отображается в соответствующей кодировке Unicode, в противном случае действует прежнее поведение с текущей кодовой страницей, указанной в учётной записи Windows. Это исправление затрагивает как desktop-клиент, так и web-клиент.

  21. Исправлена одновременная отправка множества почтовых сообщений через Microsoft Exchange. Ошибка появилась в 2.5.0.

  22. Исправлена сортировка по номеру в представлении "Мне на ознакомление". Ошибка появилась в 2.5.0.

  23. В файловых шаблонах исправлено корректирование значений, полученных из базы данных или представления, для некоторых из плейсхолдеров. Это относится к загрузке значений DBNull как null, и к DateTime, у которого должен быть тип UTC.

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

  25. Восстановлена возможность указывать символ "дефис" в качестве алиаса сервера в Tessa Applications.

  26. Приложения TokenEditor и tadmin.exe в режиме замены токена больше не выводят сообщения о невозможности заменить токен в файлах app.json, в которых отсутствует токен, но присутствует ".include".

  27. Если на сервере возникла ошибка в процессе скачивания обновлений для приложения Tessa Applications, то на клиенте ошибка теперь корректно обрабатывается. При невозможности скачать обновление будет запущена предыдущая версия Tessa Applications. Для загрузки других приложений по-прежнему гарантируется, что будет запущена их обновлённая версия, или же приложение не будет запущено вовсе. Для работы этого исправления требуется переустановить Tessa Applications через msi-файл.

  28. Оптимизировано представление ActionHistory.

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

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

  31. Оптимизирована загрузка карточек с заданиями и работа представления "Мои задания" при наличии большого количества замещений в системе. Для этого добавлен индекс на RoleDeputies (ID, DeputyID, DeputizedID, IsActive).

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

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

  34. Исправлено отображение сообщений об ошибках загрузки содержимого файла или версии файла при открытии по ссылке tessa://, а также при загрузке подписей для версии файла в процессе их отображения или проверки.

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

  36. Исправлено пробрасывание текущего контекста UIContext.Current для некоторых специализированных сценариев открытия карточек, например, для открытия ролей из информации по заданию, для "Моих замещений", для карточек шаблонов и др.

  37. Исправлено сохранение проектного номера для карточки, которая была создана как копия или по шаблону из документа в состоянии "Зарегистрирован". Это приводило к очистке номера карточки, если её сначала зарегистрировать, а потом отменить регистрацию.

23. Версия 2.5.1 (10.11.2017)

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

  1. В контекстном меню контрола "Список файлов" группировка "По типу" теперь скрыта по умолчанию. Вместо типов следует всегда использовать категории. Вернуть пункт меню с группировкой можно, написав расширение FileControlExtension.Initializing (регистрация AfterPlatform).

  2. В контроле "Строка" доступно увеличение/уменьшение размера шрифта, используя Ctrl+колесо мыши.

  3. API: Обновлены библиотеки: PdfiumViewer 2.13.

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

  1. Исправлено отображение иконки Tessa Applications в трее при отключённых визуальных стилях Aero (например, при запуске на сервере).

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

  3. Исправлено взятие блокировки на чтение карточки, в процессе которого для последующих запросов в пределах того же SQL-соединения мог начать действовать таймаут на ожидание блокировок SQL, равный 5 секундам.

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

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

  6. В web-клиенте исправлены: изменение заголовков контролов через метод updateCardData; выравнивание дерева во вкладках рабочих мест на браузере Mozilla Firefox с размером шрифта, отличным от 100% (во вкладке или в настройках системы); доступность группировки по категориям файлов, когда в настройках контрола категории отключены; удалена группировка по типам файлов; добавлено использование настроек KrSettings.СreateBasedOnTypes для доступности карточек в плитках "Создать на основании".

  7. Исправлен учёт типов карточек, у которых стоит флажок "Скрытый" в настройках типа, при отображении в плитке "Создать на основании". Также исправлена группировка при наличии таких типов в плитках "Создать карточку" и в "Создать на основании".

  8. Плитка "Создать на основании" больше не отображается, когда нет ни одного доступного типа карточек/документов для создания.

24. Версия 2.5 (03.11.2017)

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

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

  2. Изменены представления: AcquaintanceHistory, KrStageCommonMethods (добавлено), KrStageTemplateGroupPosition (добавлено), KrStageTemplates (добавлено), MyAcquaintanceHistory.

  3. Изменены таблицы: Configuration (добавлена, при её отсутствии схема данных не будет корректно работать!), KrAdditionalApprovalUsersCard, KrAdditionalApprovalUsersCardVirtual, KrApprovers, KrApproversVirtual, KrStageBuildOutput (добавлена), KrStageBuildOutputVirtual (добавлена), KrStageCommonMethods (добавлена), KrStages, KrStagesVirtual, KrStageTemplates (добавлена), KrStageTemplateGroupPosition (добавлена), KrStageTemplateRoles (добавлена), KrStageTemplateTypes (добавлена), AcquaintanceComments (добавлена), AcquaintanceRows (перенос в библиотеку Standard solution и др. изменения), PersonalRoles, TaskHistory, WfTaskCards (добавлена), WfTaskCardsVirtual (добавлена).

  4. Изменены типы карточек: Dialogs, KrCard, KrSatellite, KrStageCommonMethod (добавлен), KrStageTemplate (добавлен), PersonalRole (добавлен флажок "Игнорировать часовой пояс" для контрола "Дата рождения"), WfTaskCard (добавлен).

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

  6. Изменены карточки: Computed performers (добавлена).

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

  8. Перед обновлением схемы данных выполните скрипт Fixes/Migration-2.5-pre.sql. Не требуется при автоматизированном обновлении через Upgrade.bat.

  9. Обновление схемы данных необходимо выполнять через SchemeEditor, причём на предложение обновить версию схемы надо согласиться. Не требуется при автоматизированном обновлении через Upgrade.bat.

  10. Обновите хост Chronos.exe. Версия Chronos увеличена до 2.5.0.

  11. Обновите конфигурационный файл app.json в папке с веб-сервисами.

  12. Обновите конфигурационные файлы web.config внутри папок с веб-сервисами, а также файлы *.exe.config для всех приложений и консольных утилит.

  13. Теперь и клиент, и сервер требуют установленного .NET Framework 4.6.2 или более нового. Поддерживаются ОС, начиная с Windows 7 SP1 и Windows Server 2008 R2 SP1.

  14. Все проекты для библиотек расширений надо явно таргетировать на .NET Framework 4.6.2, т.е. перейти в свойства каждого из проектов в вашем решении, и установить Target framework. В проектах по умолчанию, доступных в сборке, это уже отражено.

  15. Библиотека BLToolkit заменена на Linq2DB. Был добавлен класс DbManager в пространстве имён Tessa.Platform.Data, обеспечивающий доступ к основным методам нового API в формате предыдущего API BLToolkit без необходимости переписывать код. Для доступа к возможностям Linq2DB используйте свойство db.DataConnection. Основное отличие заключается в том, что вместо параметров типа IDbDataParameter в методы задания команд db.SetCommand(…​) передаются параметры типа LinqToDB.Data.DataParameter, но создаются они такими же вызовами методов db.Parameter(…​). Также при маппинге объектов для выборок db.ExecuteObject<T> или db.ExecuteList<T> учитывайте, что регистр букв в SQL-запросе и в имени свойства класса теперь должен полностью совпадать (или для свойства должен быть задан атрибут [Column("Name")] с указанием точного имени колонки).

  16. Библиотека Microsoft.Unity была встроена в Tessa.dll. Пространство имён Microsoft.Practices.Unity перенесено в Tessa.Unity. Весь написанный код должен быть совместим с перенесённым пространством имён.

  17. Библиотека Microsoft.Exchange.WebServices заменена на Microsoft.Exchange.WebServices.NETStandard 1.0.12.

  18. Во всех проектах расширений и плагинов требуется удалить ссылки на библиотеки BLToolkit.4 и Microsoft.Practices.Unity, и добавить ссылку на библиотеку Linq2DB из той же папки Bin\Tessa в вашем репозитории. Также в исходных кодах проекта с расширениями замените строку "using BLToolkit.Data;" на "using Tessa.Platform.Data;". Затем замените строку "using Microsoft.Practices.Unity;" на "using Tessa.Unity;". Для потоковой загрузки varbinary-данных вместо db.ExecuteScalar<Stream>() используйте db.ExecuteStream().

  19. В плагины Chronos требуется перекомпилировать с новыми зависимостями, причём проекты для плагина (Tessa.Extensions.Chronos) также надо таргетировать на .NET Framework 4.6.2.

  20. Из всех проектов удалите ссылку на сборку System.ComponentModel.Composition.

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

  22. Приложение tadmin.exe теперь расположено в папке "Tools" сборки, ранее оно было в папке "Applications\Tools".

  23. Замена подписи для токена безопасности SignatureKey теперь выполняется только для файлов app.json для веб-сервисов и Chronos, т.к. в файлах app.config и web.config подпись более не указывается.

  24. В Workflow API в конструкторы классов WorkflowStoreExtension, KrWorkflowStoreExtension и WorkflowManager добавлен необязательный параметр IWorkflowQueueProcessor. Если он не указан, то используется реализация по умолчанию, которой достаточно для функционирования платформы и типового решения. Но рекомендуется изменить регистрацию ваших классов ***WorkflowStoreExtension так, чтобы получать IWorkflowQueueProcessor из Unity через конструктор, это позволит расширить его в случае необходимости. Примеры изменённых конструкторов доступны в классах WfWorkflowWorker и TestWorkflowWorker.

  25. Были внесены изменения в схему данных для типового процесса согласования, поэтому для всех шаблонов документов с типовым процессом, доступных в системе (в т.ч. созданных пользователями) рекомендуется выполнить исправление структуры (нажать плитку "Исправить" в левой боковой панели). Это можно сделать от администратора (которому всегда доступны шаблоны), выбрав все шаблоны в соответствующем представлении (при этом можно отключить постраничное отображение, чтобы выбрать всё сразу). Если структура не будет исправлена, то процесс исправления будет выполняться каждый раз при создании по шаблону, т.е. пользователям будет отображаться множество лишних предупреждений (при этом создание всё равно будет корректным).

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

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

  1. Типовой процесс согласования был расширен настройками шаблонов этапов (Создать карточку → Настройки → Шаблон этапов). В шаблоне можно указать несколько этапов с произвольными настройками, согласующими и доп. согласующими. В шаблоне можно указать типы документов, роли и скрипты, в соответствии с которыми этапы автоматически добавляются в процесс согласования документа. В скриптах также можно модифицировать этап, используя объектную модель на языке C#. Пересчёт этапов выполняется при запуске согласования, при начале нового цикла согласования и при нажатии кнопки "Пересчитать" вручную (рядом с кнопкой "Визуализировать"). В скриптах можно использовать как любые методы, добавляемые в расширениях, так и методы, добавляемые через карточки базовых методов, это позволяет выделить повторно используемую логику в нескольких шаблонах этапов. Также для конкретного этапа в шаблоне можно указать специальную роль "Вычисляемые исполнители" и SQL-запрос для определения списка подставляемых ролей прямо в этапе.

  2. К задачам типового процесса исполнения теперь можно прикрепить файлы. Для этого в задании по кнопке с иконкой скрепки можно перейти в карточку задания, в которой можно просмотреть или прикрепить файлы, а затем по ссылке или по той же кнопке можно вернуться в основную карточку. Если к заданию прикреплены файлы, то в области с заданием видна ссылка с указанием количества файлов, по которой также осуществляется переход в карточку задания. Кроме того, для всех заданий, к которым были прикреплены файлы, в истории заданий отображается иконка скрепки, по которой можно открыть и просмотреть файлы.

  3. В web-клиенте добавлены функции, аналогичные функционалу desktop-клиента: создание копии карточки; создание карточки на основании другой карточки, в т.ч. с копированием файлов из исходной карточки; создание файлов по шаблонам для карточек и представлений; выгрузка представлений в html и csv; отправка на ознакомление; рассылка задач по решениям в протоколе; проверка и подписание документов ЭЦП посредством установленного плагина КриптоПро. По способу использования обратитесь к документации.

  4. Значительное ускорение повторного запуска web-клиента за счёт использования механизма Service Worker API для кэширования конфигурации со стороны клиента. Для домена должен быть установлен валидный сертификат SSL, для которого браузер указывает, что "соединение защищено". Также веб-браузер должен поддерживать этот механизм. Например, последние версии Google Chrome и Mozilla Firefox его поддерживают, а Microsoft Edge не поддерживает. Информация по тому, когда выполнялось кэширование и выполнялось ли оно вообще, доступно в плитке "О программе" (на правой боковой панели внутри плитки с именем сотрудника). Локальный кэш с конфигурацией сбрасывается при выходе из системы (logout).

  5. В приложении Tessa Applications реализовано асинхронное подключение при работе с несколькими серверами. Приложения можно использовать с момента, когда был выполнен вход на сервер приложения, в то время как раньше требовалось дождаться подключения ко всем серверам. Это актуально для работы со множеством серверов на слабых каналах связи. Также любые возникшие ошибки асинхронно отображаются во всплывающих уведомлениях и при нажатии по кнопке "Показать ошибки".

  6. В приложении Tessa Applications изменена настройка "Таймаут открытия соединения" на "Таймаут подключения", теперь этот таймаут накладывается на всё взаимодействие с сервером, т.к. часто соединение выполняется почти мгновенно, в то время как все остальные операции могут работать существенно более медленно при загруженности сервера.

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

  8. Добавлены фоновые изображения для TessaClient, теперь для каждой темы доступно по 6 фонов на выбор. Изменено изображение, устанавливаемое по умолчанию для новых пользователей. Из доступных фонов для "холодной" темы были удалены 2 фона, для сотрудников, выбравших эти фоны, автоматически заменится фон на один из новых. Предыдущие фоны, а также дополнительные фоны, не вошедшие в стандартную поставку, можно загрузить с сайта.

  9. Появилась возможность добавлять фоновые изображения, отображаемые пользователю для выбора помимо стандартных изображений, в подпапку "wallpapers" в папке TessaClient. Папки, изображения из которых добавляются (в алфавитном порядке, без учёта вложенных подпапок) можно указать в настройке "WallpaperFolder" (TessaClient.exe.config), несколько папок разделяются точкой с запятой.

  10. Добавлена функция установки фонового изображения по умолчанию для всех сотрудников. Это можно сделать в настройке "DefaultWallpaper" (TessaClient.exe.config), где можно прописать путь к файлу до фонового изображения, например, "wallpapers/01.jpg". При запуске TessaClient для пользователя будет установлено это фоновое изображение, после чего пользователь сможет его изменить и далее использовать своё изображение (или это же, если оно доступно для выбора в папке wallpapers). При изменении настройки "DefaultWallpaper" новое изображение опять будет установлено для пользователя при запуске TessaClient, после чего пользователь сможет также его изменить.

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

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

  13. Реализована поддержка длинных путей к файлам и папкам на диске во всех клиентских и серверных компонентах платформы, которые запущены на Windows 10 или Windows Server 2016. Требования к версии Windows обусловлено тем, что соответствующая поддержка длинных путей также должна быть реализована в Win32 API. Ранее платформа не могла взаимодействовать с файловой системой по путям длиннее 260 символов. Для более ранних версий Windows действует прежнее ограничение (как и в проводнике Windows, и в других компонентах ОС).

  14. Добавлена поддержка версионности конфигурации: при изменении конфигурации через TessaAdmin или SchemeEditor теперь обновляется информация в таблице Configuration. Также по данным в этой таблице можно получить актуальную версию сборки платформы в поле BuildVersion. Если клиентское приложение поддерживает локальное кэширование конфигурации, то при запуске данные по инициализации могут не запрашиваться, если версия конфигурации не изменялась. В API информация по конфигурации доступна через интерфейс IConfigurationInfoProvider.

  15. В контроле "Список" доработана навигация клавиатурой и выбор элементов через использование сочетания клавиш Shift+стрелки.

  16. В настройках маппинга представления для контролов "Список файлов", "Список" и "Ссылка" добавлена поддержка константных значений, указанных непосредственно в настройках (а не связанных с полем карточки).

  17. Утилита tadmin.exe: для поддержки версионности конфигурации добавлены команды IncrementVersion и BuildVersion, а также скрипты Fixes\GetBuildVersion.sql, Fixes\SetBuildVersion.sql и Fixes\SetConfigDescription.sql. Описание и примеры использования доступны в руководстве администратора, а также во встроенной в утилиту справке.

  18. Утилита tadmin.exe: в утилиту интегрированы все функции из приложений ted.exe и cest.exe, которые были удалены за ненадобностью. Справку по перенесённым командам можно получить, вызвав tadmin.exe без параметров. Также команды описаны в руководстве администратора.

  19. API: В Workflow API добавлены сигналы, обрабатываемые в методе IWorkflowWorker.ProcessSignal. Сигналы позволяют обработать внешнее воздействие на подпроцесс Workflow API, например, отзыв процесса или обработка по таймеру из плагина Chronos. Из обработчика сигнала можно выполнять те же действия, как и из других методов IWorkflowWorker, в т.ч. выполнять переходы, стартовать или завершать подпроцессы, создавать или изменять счётчики и др. Пример отправки сигнала доступен в тестовом расширении TestProcessTileExtension, пример обработки - в тестовом бизнес-процессе TestWorkflowWorker.

  20. API: Добавлено событие RowAdding для GridViewModel, позволяющее задавать позицию в таблице для вставки новой строки.

  21. API: Добавлена возможность указать дополнительный контент снизу от формы задания через свойство TaskWorkspaceViewModel.AdditionalContent в расширении CardUIExtension, в т.ч. в виде ссылки, при нажатии на которой выполняется произвольное действие - это метод TaskWorkspaceViewModel.SetLink(). Заданный контент может отображаться в т.ч. на форме задания, которое ещё не взято в работу. Пример есть в руководстве разработчика. Метод SetLink() использован для формирования ссылки на файлы задания, это метод WfCardUIExtension.ModifyResolutionTask().

  22. API: Добавлена возможность указать иконку-тег для заданий в карточке через метод TaskWorkspaceViewModel.SetTag() в расширении CardUIExtension. Пример есть в руководстве разработчика. Метод SetTag() использован для формирования ссылки на файлы задания, это метод WfCardUIExtension.ModifyResolutionTask().

  23. API: Изменён механизм поиска и загрузки сборок расширений Tessa и плагинов Chronos. Ранее использовалась библиотека MEF, теперь используется собственная реализация Tessa.Platform.Composition (Chronos.Platform.Composition для Chronos).

  24. API: Возможность редактирования и замены номера, определяемая настройками типового решения и правилами доступа, теперь вычисляется на сервере и доступно вызовами card.TileIsVisible(ButtonNames.ReplaceNumber) и аналогично ButtonNames.EditNumber.

  25. API: Обновлены библиотеки: Cmd.Net 1.4.1 (встроен в Tessa.dll), Linq2DB 1.9.0, Microsoft Unity 4.0.1 (встроен в Tessa.dll), Newtonsoft.Json 10.0.3 (встроен в Tessa.dll), OpenPop.NET 2.0.6.1120 (встроен в Tessa.dll), Syncfusion.SfChart.WPF 15.3460.0.26. Также были обновлены другие библиотеки до актуальной версии .NET Framework, при этом версии самих библиотек не изменились.

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

  1. Оптимизация работы приложений, связанная с обновлённой архитектурой платформы. В частности, TessaClient, TessaAdmin и Chronos теперь быстрее запускаются.

  2. Оптимизировано чтение содержимого больших файлов из базы данных.

  3. Chronos теперь может загружать сборки с плагинами, у которых одинаковые имена, но которые располагаются в разных папках. Например, сборка из проекта Tessa.Extensions.Chronos может быть загружена из разных папок, где в одной сборке будут плагины проекта, а в другой - плагины некоторого переносимого модуля.

  4. Исправлены ошибки в диаграммах.

  5. Колонка "Дата рождения" в таблице с сотрудниками PersonalRoles теперь имеет тип Date вместо DateTime.

  6. В Tessa Applications исправлена возможность запустить приложение через функцию "Запустить ещё один экземпляр", пока выполняется скачивание приложения.

  7. Исправлен импорт представлений с разными алиасами, но одинаковым ID. Такая ситуация может возникнуть в случае некорректного слияния файла .view в репозитории. Теперь представления импортируются по алиасу, а идентификатор остаётся неизменным в базе данных.

  8. Оптимизированы представления, связанные с массовым ознакомлением.

  9. В конструкторе схемы данных при сохранении через горячую клавишу Ctrl+S теперь всегда применяются изменения в значениях по умолчанию, даже если не было потери фокуса в поле для ввода значения.

  10. Если при импорте представлений с заменой прав доступа указаны роли, которые отсутствуют в системе, то в сообщении об ошибке теперь выводятся алиас представления и идентификатор роли.

25. Версия 2.4.10 (03.11.2017)

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

  1. Изменены рабочие места: Administrator (для узла "Ошибки" указана настройка "Множественное выделение строк" = "Как задано в представлении").

  2. Изменены представления: Errors, KrPermissions, ProtocolCompletedTasks.

  3. Изменены типы карточек: KrPermissions, ReportPermissions.

  4. Изменены таблицы: Errors, KrAdditionalApprovalTaskInfo, KrAdditionalApprovalUsers, KrPermissionRoles, KrTask, Tasks, WfResolutionPerformers, WfResolutions, WfSatelliteTaskHistory.

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

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

  1. Улучшен предпросмотр текстовых файлов .txt в карточках, в т.ч. для очень больших файлов.

  2. В контроле "Ссылка" при наличии кнопки выпадающего списка добавлена возможность открывать этот список по кнопкам "Стрелка вниз" и "Стрелка вверх".

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

  4. Для типов карточек "Правило доступа" и "Права на отчёты" включена запись в историю действий и удаление в корзину.

  5. В командных файлах Setup.bat и Upgrade.bat реализован режим инсталляции без замены базы данных из строки соединения в файле app.json. При инсталляции в таком режиме через Setup.bat не будет создаваться база данных, что позволяет заранее создать и настроить права на базу данных.

  6. Утилита tadmin.exe: добавлен ключ /r для команды ImportCards, чтобы не отображать предупреждения о несовпадении структуры импортируемых карточек.

  7. Утилита tadmin.exe: сообщения результата валидации при логировании теперь выводятся в лог индивидуально, т.е. каждое сообщение ValidationResultItem записывается как отдельное сообщение в логе со своим уровнем логирования (ошибка, предупреждение или информационное сообщение). Причём при импорте карточки все сообщения, возникшие по одной и той же карточке, записываются как единственное сообщение. Это позволяет отфильтровать выводимые сообщения по уровню логирования в настройках файла NLog.config, и при этом не потерять сообщения для карточек, импорт которых завершился ошибкой.

  8. Утилита tadmin.exe: улучшен вывод сообщений в лог при импорте большого количества карточек.

  9. API: Обновлены библиотеки: ICSharpCode.AvalonEdit 5.0.4.

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

  1. Для контролов "Ссылка" и "Список" исправлено отображение пустых папок в диалоге выбора ссылки по троеточию, если на все представления внутри папки нет прав.

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

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

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

  5. В схеме данных исправлена ошибка при изменении таблицы, на которую ссылается комплексная колонка, когда имя референсной колонки на момент выбора было указано размером меньше значения по умолчанию (обычно это "Column" длиной в 6 символов).

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

  7. В контроле "Ссылка" исправлена ошибка, из-за которой выпадающий список переставал двигаться вслед за вводимым текстом после клика по кнопке выпадающего списка.

  8. Исправлено указание уровней логирования для сообщений при импорте карточек: имя импортируемой карточки теперь выводится на том же уровне, что и самое критичное сообщение в результате. Например, при наличии в результате информационных сообщений и предупреждений, в результате импорта будет добавлено предупреждение "При импорте карточки с именем …​ возникли предупреждения", тогда как раньше это было информационным сообщением.

  9. Исправлен параметр поиска "Сотрудник" в представлении "Правила доступа".

  10. При выгрузке представлений в html и csv для колонок, у которых отсутствует заголовок Caption, теперь выводится алиас Alias.

  11. При выгрузке представлений в csv исправлено экранирование заголовков колонок.

  12. Исправлена локализация в представлении ProtocolCompletedTasks.

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

  14. Исправлена запись в историю действий при возникновении ошибки асинхронной конвертации файла или при использовании API IErrorManager. Ошибка появилась в сборке 2.4.5.

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

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

  17. Исправлены выводимые ошибки в случае, если при публикации посредством приложения Publisher отсутствует алиас приложения.

  18. Исправлена структура папки приложения Publisher (после сборки 2.4.9), чтобы при публикации игнорировались файлы в IgnoredFiles.txt.

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

  20. Исправлен расчёт прав на задания при возврате из состояния "Отложено".

  21. Исправлено создание SQL-транзакции при отправке ошибки посредством в объекта IErrorManager.

26. Версия 2.4.9 (20.10.2017)

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

  1. Изменены рабочие места: Administrator (добавлено detail-представление для узла "Роли").

  2. Изменены типы карточек: DynamicRole, MetaRole.

  3. Изменены таблицы: ApplicationNames, Errors.

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

  5. Обновите конфигурационный файл app.json в папке с веб-сервисами.

  6. Обновите хост Chronos.exe. Версия Chronos увеличена до 2.4.9.

  7. При наличии в проектном решении расширений ICardMetadataExtension и ICardRepairExtension рекомендуется вынести эти расширения и их клиентские зависимости в отдельные классы Registrator, при этом расширения переносятся из клиентских сборок ***.Client в сборки ***.Shared. Это позволит выполнять такие расширения в утилите tadmin.exe при импорте карточек. Примеры в классах ClientMetadataRegistrator и RepairRegistrator из Tessa.Extensions.Default.Shared.Workflow.KrProcess. Для расширений типового решения уже проведена такая настройка. Сборки с актуальными Shared-расширениями из Tessa.Extensions.Shared.dll и Tessa.Extensions.Default.Shared.dll требуется копировать в подпапку extensions внутри папки с утилитой tadmin.exe, но только если вы вносили изменения в расширения ICardMetadataExtension и ICardRepairExtension.

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

  1. При выводе окна загрузки теперь версия платформы выводится целиком. Т.е. "2.4.9" вместо "2.4".

  2. Для динамических ролей и метаролей теперь выводятся только первые 200 сотрудников (значение можно переопределить в расширении по настройке ISettings.UserLimitToShowForDynamicAndMetaRoles, в т.ч. убрать ограничение). Полный список сотрудников с постраничным отображением и поиском доступен в представлении "Роли" в рабочем месте "Администратор".

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

  4. Приложение Publisher теперь по умолчанию настроено таким образом, чтобы публиковать другое приложение из подпапки "app" с алиасом, указанным в атрибуте [Application].

  5. При входе в web-клиент через логин в федеративном домене ADFS для автоматически создаваемого сотрудника добавлена возможность указать список ролей, в которые создаваемый сотрудник будет сразу же добавлен до открытия рабочего места (в т.ч. не дожидаясь расчёта ролей и замещений в Chronos). В группе настроек SAML добавлена настройка "AddNewUserToRoles", содержащая массив идентификаторов ролей. По умолчанию уже указан идентификатор роли "Все сотрудники", в которую добавляются такие сотрудники. Также есть возможность динамически определить и указать список ролей в расширениях, пример в руководстве web-разработчика.

  6. Для типовых задач процессов согласования и исполнения после завершения задачи у неё теперь очищаются поля, связанные с параметрами завершения. Например, очищается введённый комментарий при создании подзадачи, задачи доп. согласования или при запросе комментария.

  7. Утилита tadmin.exe: добавлены команды CheckDatabase и CheckService для проверки корректности соединений к базе данных и к веб-сервису, которые указаны в конфигурационных файлах.

  8. Утилита tadmin.exe: добавлена возможность указывать параметры выполняемых SQL-запросов, например: tadmin.exe Sql UpdateName.sql "/p:FirstParam=1" "/p:SecondParam=2" "/p:NullParam" "/p:EmptyParam="

  9. Утилита tadmin.exe: добавлена команда для получения результата первой колонки у первой строки SQL-запроса, например: tadmin.exe Select SelectName.sql "/p:FirstParam=1" "/p:SecondParam=2"

  10. Утилита tadmin.exe: добавлена поддержка клиентских расширений, не связанных с UI. Для этого добавлен тег регистратора RegistratorTag.ConsoleClient, который можно указать в сборках ***.Shared, располагаемых в подпапке extensions в папке tadmin.exe. Если у вас нет таких расширений, то не имеет смысл заменять библиотеки в папке extensions на актуальные в проектном решении.

  11. Утилита tadmin.exe: улучшено логирование. На уровне логирования Trace выводятся параметры запуска. В сообщениях об ошибках выводится относительный путь к файлу карточки, а не имя файла без расширения.

  12. API: Взаимодействие с библиотекой, обеспечивающей сканирование в PDF/TIFF, перенесено в типовое решение с открытым кодом (сборка Tessa.Extensions.Default.Client/Scanning). По умолчанию по-прежнему используется библиотека NTwain. В проектных расширениях может быть задействована другая библиотека, для этого достаточно зарегистрировать реализацию интерфейса IScanProvider (пример в классе Tessa.Extensions.Default.Client.Scanning.Registrator).

  13. API: В клиентских расширениях на инициализацию теперь разрешается добавлять более одного обработчика context.Handlers.AddHandler(…​) для одного и того же типа инициализации. Выполняются все зарегистрированные обработчики в порядке их регистрации.

  14. API: При создании сотрудника в запросе можно указать список идентификаторов ролей, в которых сотрудник должен автоматически включаться: request.SetAddToRolesIDList(new Guid[]{ …​ }).

  15. API: Обновлены библиотеки: BitMiracle.LibTiff.NET до 2.4.584.1, DocumentFormat.OpenXml 2.7.2, Hardcodet.Wpf.TaskbarNotification 1.0.8, NLog 4.4.12, NTwain 3.5.1, Quartz.NET до 2.6.1. Chronos пересобран с новыми зависимостями, версия увеличена до 2.4.9.

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

  1. Утилита tadmin.exe: исправлен импорт карточек, добавленных в типовое решение или опирающихся на какие-либо расширения на метаинформацию (например, карточки правил доступа с указанным типом, расширяющим правило доступа).

  2. Утилита tadmin.exe: исправлено подключение к веб-сервису с явным указанием некорректных логина/пароля в параметрах /u /p.

  3. Исправлена работа настройки "Скрыть комментарий для варианта завершения Согласовать". Если настройка активна, то при завершении задания комментарий всегда не учитывается. Это позволяет избежать такой ситуации: пользователь в поле комментарий для "Не согласовать" ввёл комментарий, потом переключился на "Согласовать" и завершил задание, в результате задание было завершено с комментарием.

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

  5. Исправлено логирование запросов при сохранении контента файлов в базу данных. Ранее при уровне логирования Trace выполнялось сохранение всего бинарного контента файлов в лог запросов, что могло приводить к быстрому увеличению размеров лога. Теперь логирование для запросов, содержащих контент файлов, отключено.

  6. В таблице Errors исправлен размер колонки Text для соответствия максимальному размеру ключа в 900 байт для индекса ndx_Errors_ModifiedText. В противном случае при вставке карточки Error с длинным текстом будет ошибка SQL.

  7. Исправлена генерация запросов для логирования в queries.txt, если параметр запроса указан без символа "@" или равен null.

  8. Исправлена утечка памяти при закрытии окна "Справка".

  9. Исправлена потенциальная ошибка при инициализации представлений, связанная с выполнением методов-расширений, таких как request.SortedBy(…​).

  10. Исправлен импорт представлений, в теле запроса у которых содержится символ '\'.

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

  12. Исправления в web-клиенте: исправлено фоновое изображение при логине и при загрузке веб-приложения; предпросмотр файлов мог не работать с файлами, у которых невалидные символы в имени; исправлено обновление карточки в случае ошибки для операции типового процесса согласования, такой как "Зарегистрировать" или "Отменить регистрацию"; исправлена ошибка в числовых контролах карточки, в которых число "0" могло сбрасываться в "не заполнено" при нескольких переходах фокуса.

  13. Исправлено определение языка интерфейса при запуске Tessa Applications.

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

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

  16. Исправлена редкая ошибка "Object reference not set to an instance of an object" при изменении схемы данных.

27. Версия 2.4.8 (06.10.2017)

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

  1. Изменены представления: ContractsDocuments (метаинформация для параметра DocType), Documents (метаинформация для параметра DocType), Errors, IncomingDocuments (метаинформация для параметра DocType), OutgoingDocuments (метаинформация для параметра DocType), PermittedDocuments (удалено).

  2. Изменены карточки: Assigned to me, Assigned to me (Excel).

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

  4. Обновите конфигурационный файл app.json в папке с веб-сервисами.

  5. Вызовы методов Path.GetExtension(), Path.GetFileName() и Path.GetFileNameWithoutExtension() для имён файлов IFile.Name и версий IFileVersion.Name надо заменить на вызовы одноимённых методов из класса FileHelper, которые учитывают наличие некорректных символов в имени файла.

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

  1. Для имени файла разрешено наличие некорректных символов (таких как символы '\', '?', '"' и др.). Пользователь может переименовать файл, указав для него некорректные для файловой системы символы. Контент этого файла теперь можно корректно получить, как в приложении TessaClient (открыв файл любым образом), так и через API файлов, получив контент из IFileCache. Во временной папке такие символы заменяются на подчёркивание '_'.

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

  3. Добавлена функция автоматического создания сотрудника Tessa при логине в web-клиент через ADFS. В этом случае в качестве логина сотрудника будет указан email, а войти в систему можно будет также только посредством ADFS. Для включения функции в конфигурационном файле app.json для веб-сервисов укажите "SAML"."CreateUserAfterAuthenticationIfNotExists": true.

  4. В web-клиенте добавлена поддержка ручного ввода для контрола "Ссылка". Также добавлено новое изображение для окна логина в web-клиенте. Заменить его можно в папке веб-сервиса web\wwwroot\images\login.jpg.

  5. Улучшено отображение окна "О программе" в приложении Tessa Applications.

  6. Добавлен режим "тихой" публикации приложений, в котором на экран не выводится сообщений, и у пользователя не запрашивается логин/пароль в случае некорректной авторизации; поддерживается только вывод в лог. Для его использования укажите ключ /q в командной строке рядом с ключом /publish. Также были скорректированы коды возвратов из приложения при публикации, теперь при успешной публикации всегда возвращается errorlevel = 0. Для того, чтобы опубликовать приложение без графического интерфейса, а затем проверить код его возврата, используйте команду вида: start /wait TessaClient.exe /publish /q

  7. Для автоматизации импорта карточек ImportCards посредством приложения tadmin.exe добавлен ключ /e для игнорирования существующих карточек. При его использовании для карточек, существующих в момент импорта, не будет записано сообщений об ошибках, т.е. такие карточки будут считаться успешно импортированными. Игнорируется при использовании совместно с ключом /c. Пример использования: tadmin ImportCards /e Tessa.cardlib

  8. API: интерфейс IValidationResultBuilder был расширен, добавлены возможности получать и удалять сообщения валидации. Это позволяет в расширениях, например, удалять такие сообщения валидации, которые добавлены в предыдущих выполненных расширениях (в т.ч. в платформенных).

  9. API карточек: в расширениях на вычисление Digest теперь можно определить тип события, для которого запущено вычисление, обратившись к методу context.Request.TryGetDigestEventName(). Константы со всеми стандартными событиями доступны в классе CardDigestEventNames (Tessa.Cards). Это позволяет вычислять разные Digest карточки для разных способов использования: в почтовых уведомлениях, в заголовке вкладки, при сохранении в истории действий и др.

  10. API карточек: с файлом IFile и версией IFileVersion теперь можно связывать произвольную информацию в Info для использования в расширениях. Для файла IFile.Info заполняется по информации, полученной для файла CardFile.Info, поэтому информацию можно передавать с сервера.

  11. API карточек: для файлов, созданных по шаблону или через диалог сканирования, теперь можно определить способ создания: через диалог сканирования, при создании по шаблону, или любой другой способ; file.GetActionName() == FileMenuActionNames.Scan или FileMenuActionNames.AddFromTemplate (using Tessa.Files). Проверку можно выполнить, например, перед добавлением файла в событии ContainerFileAdding, чтобы отменить добавление файла (e.Cancel = true).

  12. API карточек: добавлена поддержка для загрузки подписей виртуальных файлов, существующих в других карточках, идентификаторы которых требуется добавить вызовом метода context.AddCardIDToLoadSignatures(cardID). Метод вызывается в расширениях CardGetExtension.AfterRequest, зарегистрированных на этапе ExtensionStage.BeforePlatform, или в любых расширениях CardGetExtension.BeforeRequest.

  13. API карточек: добавлен маппинг контента виртуальных файлов при сохранении посредством добавления объекта в список CardStoreRequest.FileMapping для каждого файла с маппингом. Это позволяет сохранять виртуальные файлы с контентом.

  14. API карточек: добавлена возможность удалять карточки с возможностью не удалять контент файлов сразу (request.KeepFileContent), но удалить его позже самостоятельно (response.ContentsToDelete). Функционал нельзя использовать при запросе с клиента (он игнорируется).

  15. API карточек: добавлена поддержка для создания карточек-сателлитов для задач, у которых могут быть файлы, в виде базовых классов для расширений Tessa.Cards.Extensions.Templates и Tessa.UI.Cards.Extensions.Templates. Фактическая поддержка будет реализована в следующих версиях.

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

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

  1. Исправления в web-клиенте: исправлена работа контролов "Ссылка" и "Список" с указанным маппингом; пробрасывание CardAutoCompleteInfo при открытии карточек из контролов "Ссылка" и "Список"; отображение рабочих мест без доступных представлений; и др.

  2. Исправлена локализация вкладки "История действий" с т.зр. узла в дереве и имени представления, отображаемого при выгрузке в HTML. Также исправление затрагивает любые вкладки, открываемые методом IUIHost.ShowView().

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

  4. При отмене добавления файла через событие FileContainerAdding для диалога сканирования, файл более не считается добавленным и диалог сканирования восстанавливает своё состояние.

  5. Исправлена редкая ошибка при сохранении документа PDF/TIFF из диалога.

  6. Исправлена загрузка подписей для виртуальных версий файлов с заданным ExternalSource. Теперь подписи загружаются для исходных версий, заданных в ExternalSource, при условии совпадения идентификаторов для версий, не являющихся последними (для последних версий идентификатор будет получен из ExternalSource). Также подписи загружаются в AfterRequest на этапе Platform, поэтому в расширении AfterRequest.BeforePlatform можно добавить виртуальные файлы.

  7. Исправлена загрузка контента и копирование ссылки для виртуальной версии файла с ExternalSource, если версия не является последней.

  8. При вставке папки в контрол "Список файлов" теперь вставляются все файлы внутри папки с учётом вложенности. Ранее выводилось сообщение об ошибке.

  9. Исправлена ошибка при вызове метода card.Sections.GetOrAddEntry("SectionName").

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

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

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

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

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

  15. Оптимизирована перерисовка карточки, что должно незначительно ускорить обновление карточки.

  16. Исправлена ошибка при вставке подряд нескольких запятых в процессе редактирования метаинформации в представлениях.

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

  18. Исправлен импорт отдельных карточек *.card через консольное приложение tadmin.exe.

  19. В процессе импорта карточек через консольное приложение tadmin.exe при возникновении необработанной ошибки теперь корректно выводится информация в лог и на консоль о том, для какой именно карточки возникла такая ошибка (например, предоставленный файл не является экспортированной карточкой).

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

  21. Исправлена локализация параметров в представлении "Ошибки" (Errors).

  22. Исправлена ошибка в скрытом параметре "Тип документа" для представлений документов, договоров, входящих и исходящих.

  23. Удалено ставшее неактуальным представление PermittedDocuments.

  24. Локализованы шаблоны файлов "Мои задания" и "Мои задания (Excel)".

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

  26. Исправлено усечение по троеточию для имён файлов, в которые карточки экспортируются из представления.

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

  28. Контрол "Флажок" при наличии в секции значения null теперь не падает с ошибкой, а воспринимает его как false.

  29. Исправлено логирование в приложении tadmin.exe для сообщений, содержащих фигурные скобки.

28. Версия 2.4.7 (12.09.2017)

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

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

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

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

  1. Добавлена возможность вручную восстановить UI-состояние загружаемой карточки, указав свойство context.Model.StateIsInitialized = true в расширении CardUIExtension.Initialized.

  2. Добавлен метод-расширение ICardModel.SetTaskHistoryVisible() для скрытия/отображения вкладки с историей заданий в карточке (в методе CardUIExtension.Initialized).

  3. В API карточек для объекта ICardEditorModel посредством нового свойства LastData теперь доступны различные последние Request и Response для каждой из выполненных с объектом операций. Таким образом, можно, например, выполнить сохранение карточки как editor.SaveCard(…​), а затем по свойству editor.LastData.StoreResponse?.Info получить информацию по данным, которые были возвращены из расширений на сохранение CardStoreExtension.

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

  1. Исправлена проблема в представлении AvailableApplications, которая могла приводить к блокировкам SQL при интенсивном использовании.

  2. Метод IOperationRepository.Complete() теперь устанавливает колонку Progress = 100 (прогресс в процентах).

  3. Увеличен отступ от иконки-тега в истории заданий до текста с типом задания.

  4. Всплывающая подсказка для контрола "Гиперссылка" в карточке (HyperlinkViewModel) теперь отображается быстрее.

  5. Исправлено множественное выделение строк при включённом режиме группировки в представлениях.

  6. Исправлено повторное открытие карточки в типовом решении (при обновлении или после сохранения), которое приводило к увеличению числа подписчиков на событие CardEditorModel.CardModelInitialized. Сама по себе проблема себя не проявляла, но могла приводить к побочным эффектам при использовании совместно с другими расширениями CardUIExtension, изменяющими контекст карточки. Например, когда после загрузки карточки из типового решения требуется открыть карточку другого типа в той же вкладке.

  7. В контролах "Ссылка" и "Список" исправлена подстановка локализованных значений по многоточию.

  8. Исправления в web-клиенте: исправления в работе контрола "Дата и время"; указание названия карточки в некоторых действиях в истории действий, для которых оно не указывалось; форматирование значений в контролах "Ссылка" и "Список"; и др.

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

  10. Исправлен выбор ссылок по троеточию в случае, если первым узлом при выборе является папка. Теперь вместо самой папки выбирается представление внутри папки.

29. Версия 2.4.6 (04.09.2017)

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

  1. Изменены представления: AvailableApplications, ReportCurrentTasksByDepartment, ReportCurrentTasksByDepUnpivoted, ReportCurrentTasksByUser, ReportPastTasksByDepartment, ReportPastTasksByUser.

  2. Изменены типы карточек: Contract (Order для валидатора OutgoingRefDocs), Document (Order для валидатора OutgoingRefDocs), Incoming (Order для валидатора OutgoingRefDocs), Outgoing (Order для валидатора OutgoingRefDocs), Protocol (Order для валидатора OutgoingRefDocs).

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

  4. Для валидаторов уникальности, удаляющих строки-дубликаты, которые привязаны к коллекционной секции, упорядоченной по полю Order, требуется установить ссылку на колонку Order в настройках валидатора для того, чтобы при удалении дубликатов не возникало "дырок" в нумерации строк в этом поле Order.

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

  1. Добавлены методы-расширения для упрощённого получения ссылок на файлы и их версии: IFile.GetLink() и IFileVersion.GetLink().

  2. Добавлен метод IWorkflowManager.UpdateTaskParameters для обновления параметров заданий в Workflow API.

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

  4. Добавлены методы UIHelper.InvokeAsync для асинхронной обработки с возвратом результата Task<T>.

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

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

  1. Оптимизирован типовой процесс согласования.

  2. Параметры фильтрации представлений теперь по умолчанию определяются как Not Null-типы, что соответственно меняет их использование в #if(ParamAlias.Value1) и #eval(ParamAlias) так, как это было до выпуска сборки 2.4. Например, параметр типа Date теперь определяется в выражениях C# как тип данных DateTime, а не Nullable<DateTime>.

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

  4. Исправлено указание дайджеста публикуемого приложения в истории действий.

  5. Исправлено сохранение размера окна для приложений Tessa Applications, TessaAdmin и SchemeEditor.

  6. Серверный кэш по умолчанию теперь держится 24 часа, а не сбрасывается каждый час.

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

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

  9. Исправлено отображение необработанной ошибки, которая возникла в команде плитки.

  10. Исправлено отображение плитки "Показать / скрыть недоступные элементы".

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

  12. В отчётах по заданиям исправлено определение того, является ли задание просроченным.

  13. Исправлена визуализация процесса согласования при наличии типовых задач с активными "действиями автора".

  14. Исправлен сброс состояния карточки из "Проект" в <пустая строка>, если при сохранении выполнялось создание карточки-сателлита с последующим откатом сохранения основной карточки из-за любой ошибки.

  15. В контроле "Ссылка" исправлена ошибка выбора и подстановки элемента по кнопке из выпадающего списка.

  16. В контролах "Ссылка" и "Список" исправлена обработка Ctrl+X и удаление нескольких выделенных элементов.

  17. Оптимизировано изменение размеров окна при активном предпросмотре в карточке.

  18. Улучшено логирование ошибок, происходящий при отправке почты в Chronos.

  19. Настройка представления ExportDataPageLimit теперь по умолчанию имеет значение 10000, а не 1000. Это ускоряет выгрузку представлений, например, в файлы html или csv.

  20. Исправлена связь между представлениями master-detail через параметр типа "date", который связывается с другим параметром типа "date".

  21. В контроле "Список" исправлен алгоритм работы с сохранением порядка.

  22. Исправлена ситуация, когда валидатор уникальности, удаляющий дубликаты, мог приводить к "дыркам" в нумерации строк по полю Order.

  23. В контролах "Ссылка" и "Список" исправлена навигация клавишами Home, End, Up и Down.

30. Версия 2.4.5 (25.08.2017)

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

  1. Изменены рабочие места: Administrator (добавлено detail-представление для узла "Активные сессии").

  2. Изменены представления: ActionHistory, MyTasks, ReportCurrentTasksByDepartment, ReportCurrentTasksByDepUnpivoted, ReportCurrentTasksByUser, ReportCurrentTasksRules, ReportPastTasksByCompletionOption, ReportPastTasksByDepartment, ReportPastTasksByUser.

  3. Изменены таблицы: ActionHistory, ActionHistoryVirtual, TaskHistory.

  4. Изменены типы карточек: ActionHistoryRecord.

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

  6. Обновите хост Chronos.exe. Версия Chronos увеличена до 2.4.5.

  7. Обновите файл app.json в папке Chronos.

  8. Настройки, специфичные для ежедневных плагинов, вынесены в app.json в ключи "Maintenance.***". Также были удалены конфигурационные файлы плагинов (плагины заменены на расширения): KrAutoApprovePlugin, MobileApprovalPlugin, NoticeMailerPlugin, RemoveActionHistory, RemoveDeletedCards, RemoveErrorCards, RemoveOperations, ReturnTasksFromPostponedPlugin.

  9. Плагины пересчёта динамических и метаролей объединены в плагин RoleScheduler. Настройка по пересчёту расписаний "RoleScheduler.RescheduleSeconds" перенесена в app.json. При этом были удалены плагины: DynamicRoleRecalcPlugin, MetaRoleGenerationPlugin.

  10. Не забудьте обновить файлы в расширениях: Tessa.Extensions.Default.Chronos\extensions.xml и Tessa.Extensions.Chronos\extensions.xml

  11. Изменилась сигнатура метода IActionHistoryStrategy.Insert(), который добавляет запись в историю действий. Теперь рекомендуется делегировать этому методу создание уникального идентификатора записи, значение которого возвращается методом.

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

  1. В web-клиенте добавлена функция изменения своего пароля через диалог "Мои настройки". Кнопка "Изменить пароль" отображается только для сотрудника с типом входа в систему "Пользователь Tessa", т.е. кнопка не отображается для сотрудников с учётными записями Windows.

  2. При создании файла по шаблону в свойство INewFileContext.Content для выражения внутри метода container.SetNewFileAction() теперь передаётся идентификатор карточки-шаблона, по которому создаётся файл.

  3. Добавлена система расширений плагинов IPluginExtension, позволяющая объединить несколько плагинов в один для упрощения настройки и снижения нагрузки. Например, плагины, связанные с ежедневным обслуживанием системы, были объединены в плагин DailySchedulingPlugin, который по умолчанию выполняется каждый день в 12 часов ночи, а также первый раз при запуске сервиса Chronos.

  4. В API расширений добавлена возможность обрабатывать необработанные исключения, выполнив регистрацию объекта IExtensionTraceListener посредством extensionContainer.RegisterTraceListener<TExtension>(listener) и переопределив его метод IExtensionTraceListener.NotifyException().

  5. Если карточка была создана при открытом представлении, то это представление будет автоматически обновлено после закрытия созданной карточки (так же, как это работает для открываемых карточек, которые были изменены). Аналогичное поведение используется для кнопки создания на панели пейджинга.

  6. Добавлены методы TryGetIgnoreCase, TryGetFieldIgnoreCase и TrySetFieldIgnoreCase, позволяющие получить и задать поля и секции карточки без учёта регистра. Это полезно в ситуации, когда имена секций и полей доступны из внешней системы, которая не является регистрозависимой (например, веб-сервис возвращает имена всегда в верхнем регистре).

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

  8. Действия в истории действий теперь соотносятся с сессией текущего сотрудника, от имени которого они выполнялись. В представлении с активными сессиями администратор может просмотреть все действия сотрудника, а также в представлении с историей действий администратор может отфильтровать историю по сессии.

  9. В информационном сообщении для консольных утилит выводим номер сборки и версию.

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

  1. В редакторе типов карточек в TessaAdmin исправлена валидация настроек контролов в окне по кнопке "Дополнительно".

  2. В контроле "Таблица" карточки исправлено отображение кнопок, добавляемых расширениями в область под таблицей.

  3. Окна приложений, размеры и положение которых сохранялись, больше не восстанавливают своё местоположение (TessaAdmin, TessaAppManager, SchemeEditor). Теперь окна всегда выводятся по центру экрана (кроме окна TessaClient). Это исправило такую проблему, как размещение окна на втором мониторе, после чего монитор отключался, при этом окно продолжало выводиться на другом экране.

  4. Клиентские расширения GetFileContent для создания файла по шаблону теперь всегда выполняются внутри контекста UIContext той карточки или представления, для которых создаётся файл.

  5. Исправлена толщина иконок-тегов по умолчанию в API карточек и файлов.

  6. Исправлены состояния заданий "в работе" и "отложено" при восстановлении удалённой карточки или при импорте.

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

  8. В Chronos оптимизировано завершение хоста при graceful-остановке плагинов, а также исправлена редкая ошибка в процессе graceful-остановки.

  9. Оптимизирована фоновая нагрузка в плагинах Chronos, поставляемых с платформой и типовым решением.

  10. Реализована вежливая остановка для всех плагинов платформы и типового решения, для которых мгновенная остановка могла привести к ошибкам.

  11. Исправлена опечатка в имени настройки RolesLockTimeoutSeconds в конфигурационном файле Chronos\app.json.

  12. Исправлена локализация сообщений автосогласования.

  13. В таблице TaskHistory удалён внешний ключ для колонки CompletedBy, т.к. это препятствует удалению сотрудников, которые завершили хотя бы одно задание за всё время работы в системе.

  14. Исправлен метод CancelOpening() для расширений на создание карточек CardNewExtension.

  15. Удалена библиотека twaindsm.dll, предоставляемая с приложением TessaClient. В некоторых случаях использование её вместо библиотеки, установленной в Windows, приводило к тому, что часть устройств сканирования была недоступна. Проблема появилась в сборке 2.4.

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

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

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

  19. Исправлены действия с карточкой документа, которая содержит поля с номерами из DocumentCommonInfo, но тип карточки не включён в типовое решение.

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

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

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

  23. В редакторе схемы данных для полей "Описание" кнопка Tab теперь переводит фокус на следующее поле, а не вводит символ табуляции.

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

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

  26. Исправлена ошибка при обновлении зависимого представления, если в master-представлении отсутствуют строки.

  27. Просмотр экспортированной в файл карточки перенесён на горячую клавишу Shift+Alt+R, т.к. клавиша Alt+R уже используется для постановки задачи.

  28. Исправлено блокирование для записи файла с фоновым изображением на время работы TessaClient.

  29. Исправлено свойство IFileConverterContext.RequestIsSuccessful в расширениях на конвертацию файлов.

  30. Исправлена обработка ошибок в клиентских и серверных расширениях на инициализацию IClientInitializationExtension и IServerInitializationExtension.

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

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

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

  34. В скрипте Upgrade.bat схема данных теперь обновляется через прямое подключение к базе данных (вместо подключения через веб-сервис), т.к. при обновлении может потребоваться сначала обновить версию сервиса схемы, или же сервис от новой версии может быть неработоспособен на предыдущей версии схемы.

  35. Исправлено удаление пробела перед элементом в контроле "Список".

  36. Исправлено закрытие сессий при использовании приложения tadmin.exe.

31. Версия 2.4.4 (08.08.2017)

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

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

  2. Изменены представления: DeputiesManagement, Roles.

  3. Изменены таблицы: KrApprovalCommonInfo, KrStages, MetaRoles, UserSettingsVirtual.

  4. Изменены типы карточек: KrAdditionalApproval, KrApprove, WebClientUserSettings (добавлен).

  5. Изменены карточки: Aggregate roles (необязательное изменение), All employees (необязательное изменение).

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

  7. Обновите файл app.json в папке с веб-сервисами.

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

  1. При просмотре генераторов метаролей в рабочем месте Администратора под каждым генератором теперь выводится список метаролей, которые им были сгенерированы.

  2. Агрегатные метароли теперь по умолчанию пересчитываются раз в 2 часа, а динамическая роль "все сотрудники" считается раз в полчаса. Уменьшение интервала пересчёта может привести к возросшей нагрузке на СУБД, и как следствие, к деградации производительности для системы с несколькими тысячами сотрудников в справочнике. Для системы с небольшим количеством пользователей интервалы можно уменьшить.

  3. Для web-клиента добавлены настройки по открытию боковых панелей только по клику (вместо наведения мыши или жеста "свайп"). Также web-клиент теперь позволяет редактировать "Мои настройки" сотрудников, в т.ч. добавленные серверными расширениями в рамках проекта.

  4. Конфигурационный файл app.json теперь можно задать как имя запускаемого приложения с расширением .json. Например: tadmin.exe.json. Если такой файл присутствует, то будет использоваться он, иначе будет использоваться app.json. Это позволяет в одной папке располагать несколько приложений с различными конфигурационными файлами .json.

  5. Добавлен тип клиентских расширений IMySettingsExtension для диалога "Мои настройки" на клиенте. Расширения разрабатываются и регистрируются по тому же принципу, что и прочие расширения в системе.

  6. Web-клиент теперь поддерживает авторизацию внутри ADFS (Active Directory Federation Services). Настройки описаны внутри группы настроек "SAML" в конфигурационном файле app.json в папке с веб-сервисами.

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

  1. Исправления и оптимизации в web-клиенте.

  2. Исправлено отображение серверных сообщений об ошибках при изменении представлений в TessaAdmin.

  3. Исправлен счётчик строк, отображаемых в представлении "Мои замещения" в случае, когда задано несколько сотрудников в поле "Кто может редактировать" для замещений этого сотрудника.

  4. Исправлены ошибки с определением порядка элементов в контроле "Список".

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

  6. Исправлено отображение имени файла в окне проверки подписей, если файл был переименован.

  7. Генератор метароли теперь может быть удалён без удаления всех метаролей, относящихся к этому генератору.

  8. В контролах "Список" и "Ссылка" исправлен механизм вставки из буфера обмена.

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

  10. Исправлено отображение области фильтрации представления при сжатии окна по ширине.

  11. В логи плагина NoticeMailer, выполняющего отправку сообщений, на уровне Trace теперь записывается адрес e-mail и тема отправляемого письма subject. По умолчанию логи на уровне Trace отключаются.

  12. Исправлена ошибка в алгоритме сортировки иерархических секций (таких как TaskHistory), которая в редком случае могла приводить к некорректного порядку вставки или удаления строки, и как следствие, к ошибке foreign key.

  13. Исправлено отображаемое сообщение об ошибке в типовом процессе согласования.

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

  15. Для окна с управлением поисковыми запросами теперь доступно изменение размеров и разворачивание на весь экран.

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

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

32. Версия 2.4.3 (27.07.2017)

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

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

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

  1. Множество исправлений в web-клиенте.

  2. Исправлена отправка писем, если в таблице Outbox появилась строка с почтой Email, указанной как NULL. Ошибка могла появиться для кастомных уведомлений, которые были реализованы некорректно и добавляли информацию по отправке письма, даже когда у сотрудника не был задан Email.

  3. Улучшена выводимая ошибка при выборе некорректного файла в качестве фонового изображения в приложении TessaClient.

  4. Исправлена ошибка при удалении за одно сохранение строки с замещением из "Моих замещений" и роли/сотрудника в одной из строк "Моих замещений".

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

  6. Исправлена ошибка при редактировании рядов в диаграммах в TessaAdmin.

  7. Исправлено указание автора задачи типового процесса исполнения при отправке с указанием "Отдельная задача каждому исполнителю", когда одновременно указывается пользователь в "От имени".

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

  9. Исправлено задание ссылочных параметров для связанных представлений в рабочем месте в TessaAdmin.

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

  11. При загрузке писем мобильного согласования по протоколу POP3 теперь учитывается, что почтовый сервер может вернуть письмо в формате html и не вернуть plain text.

  12. Исправлена инициализация метаинформации ICardMetadata, если одновременно с загрузкой карточки кэш метаинформации был сброшен, либо методы API ICardGetStrategy были использованы в серверном плагине до того, как метаинформация была инициализирована впервые.

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

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

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

  16. Исправлено сообщение об ошибке при попытке приложить файл размером более 2 ГБ (сейчас это технологически невозможно).

33. Версия 2.4.2 (18.07.2017)

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

  1. Изменены представления: MyTasks.

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

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

  4. Обновите файл app.json в папке Chronos.

  5. Относительно сборки 2.4.1 отсутствуют изменения в расширениях типового решения.

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

  1. Для приложения Tessa Applications при настройке каждого сервера теперь можно указать таймаут соединения именно с этим сервером.

  2. При пересчёте метаролей, динамических ролей и замещений в представлении "Активные операции" теперь выводится название выполняемой операции. При этом невозможно выполнение двух операций по пересчёту одновременно. Таймаут на ожидание блокировки в секундах указывается в настройке "RolesLockTimeoutSeconds" в файле app.json в папке Chronos.

  3. Добавлены сообщения в логе трассировки для плагинов пересчёта метаролей, динамических ролей и замещений. Сообщения видны только при указании name="*" minlevel="Trace" в файле NLog.config.

  4. Добавлен метод-расширение operationRepository.ExecuteInRolesLock("…​", () ⇒ { …​ }), позволяющий выполнять действие по вычислению состава ролей и замещений внутри эксклюзивной блокировки.

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

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

  2. Исправлена ошибка при запуске TessaClient на Windows XP (ошибка появилась в сборке 2.4.1), а также другие ошибки, связанные с асинхронностью (присутствовали в предыдущих сборках).

  3. Исправлено переименование библиотеки локализации с учётом наличия оконечных пробелов.

  4. В представлении "Мои задания" для подмножества "По роли" исправлена группировка заданий, отправленных на временные роли. Теперь все такие задания выводятся в узле "Исполнители задания".

  5. Исправлена анимация при закрытии AutoClose-уведомлений (таких как "Скрыть всё"), когда все прочие уведомления (например, по заданиям) уже закрыты.

  6. Исправлено сообщение об ошибке, если представление недоступно.

34. Версия 2.4.1 (13.07.2017)

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

  1. Изменены рабочие места: Administrator, User (удалён узел "Замещения" сверху, где в режиме отбора).

  2. Изменены представления: AcquaintanceHistory, CompletedTasks, EmittedTasks, MyAcquaintanceHistory, MyTasks, Operations, ReportCurrentTasksByDepartment.

  3. Изменены таблицы: DocumentCommonInfo (добавлен индекс ndx_DocumentCommonInfo_ID), Files.

  4. Изменены типы карточек: KrCard.

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

  6. Обновите хост Chronos.exe. Версия Chronos увеличена до 2.4.1.

  7. Обновите файл web.config веб-сервиса "tessa".

  8. Обновите утилиты Source\ExtensionsVersion.exe и Source\ModuleVersion.exe в вашем репозитории.

  9. В файле Chronos\Plugins\Tessa\app.config явно укажите версию "Exchange2013", если вы подключаетесь к Exchange 2013 или более новой версии. Не изменяйте версию, если у вас установлена версия Exchange 2010 или вы не уверены, к какой версии Exchange будет подключение.

  10. Все консольные утилиты теперь размещаются в папке сборки Applications\Tools.

  11. Некоторые вспомогательные методы, связанные с инициализацией локализации, перенесены из ApplicationHelper и LocalizationSettingsHelper в LocalizationManager (Tessa.Localization), что позволяет их использовать из консольных утилит без доступа к Tessa.UI.dll.

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

  1. Усовершенствован алгоритм обновления узлов в представлении. Теперь при обновлении все раскрытые узлы и "сверху", и "сбоку", и "снизу" от выбранного автоматически обновляются. Например, если выбран узел "В работе" у сабсета "По состоянию" в представлении "Мои задания", то при нажатии F5 будут обновлены и количество заданий "В работе", и количество заданий "Новое", и все сабсеты во всех смежных ветках. Также данные представлений для сабсетов теперь загружаются асинхронно, поэтому даже при большом количестве открытых подмножеств интерфейс остаётся отзывчивым.

  2. Для узлов рабочего места добавлено расширение AutomaticNodeRefreshExtension, которое позволяет задать период автоматического обновления узла.

  3. Если плитка "Создать карточку" создаёт её по шаблону, как копию или на основании другой карточки, то способ создания теперь отображается в тексте плитки.

  4. В контроле "Строка" добавлена всплывающая кнопка, позволяющая редактировать текст в отдельном окне с настраиваемыми размерами; аналогичная функция также отображается в контекстном меню. Это полезно в таких сценариях, как заполнение длинных многострочных комментариев при отправке заданий. По умолчанию кнопка отображается для всех существующих контролов, но её можно скрыть, убрав флажок "Кнопка разворачивания" в настройках контрола или задав свойство TextBoxViewModelBase.ShowExpandButton = false, получив контрол по алиасу в расширении.

  5. В режиме чтения для контролов "Список" и "Ссылка" добавлена всплывающая подсказка с содержимым текстового поля.

  6. В представлении "Активные операции" добавлена функция удаления операций, доступная через плитку на левой панели. Это позволяет удалить "зависшие" операции, возникшие из-за ошибок, до того, как это сделает система.

  7. В папку Applications\Tools в сборке добавлена консольная утилита tadmin.exe. Утилита позволяет автоматизировать первую установку или обновление системы. Список доступных команд можно получить, вызвав tadmin.exe в окне консоли, а справку по каждой из команд, вызвав: tadmin.exe ИмяКоманды /?

  8. В корневую папку сборки добавлены командные файлы Setup.bat для установки новой сборки и Upgrade.bat для обновления сборки с предыдущей версии типового решения. При запуске командных файлов на экран выводится инструкция, прочтите её перед запуском инсталляции. Всегда выполняйте бэкап при обновлении сборки.

  9. В окне "О программе" (Tessa Client) и на вкладке "Информация" (Tessa Admin, Tessa Applications) добавлена функция "Очистить незанятую память", которая немедленно выполняет дефрагментацию и очистку памяти, чтобы снизить её потребление до минимума. Очистка обычно и так выполняется автоматически, поэтому не рекомендуется вызывать функцию вручную, кроме тех случаев, когда требуется узнать достоверный размер потребляемой памяти в окне диспетчера задач.

  10. В API всплывающих уведомлений для INotificationViewModel добавлены свойства Margin, HorizontalAlignment, VerticalAlignment, AutoClose.

  11. Добавлен метод ISessionService.CloseSessionWithToken("token"), который позволяет закрыть сессию по токену, передаваемому как строковый параметр. Это полезно при подключении к Tessa через сервисы WSDL.

  12. Добавлено событие GridViewModel.RowInitializing, вызываемое перед отображением окна на экране. В этом событии можно видоизменить окно, а также добавить горячие клавиши, которые будут отрабатывать только внутри окна.

  13. Добавлено свойство ICardStoreTaskExtensionContext.StoreContext, позволяющее получить контекст сохранения карточки из расширения на сохранение/завершение задания ICardStoreTaskExtension.

  14. Добавлен метод-расширение ICardStoreExtensionContext.SetTaskAccessCheckIsIgnored() (using Tessa.Cards), который позволяет на сервере указать, что для задания не следует выполнять проверку на то, может ли текущий пользователь завершить задание как автор или как исполнитель. Это позволяет, например, отзывать дочерние задания от имени пользователя, у которого нет прав на отзыв таких заданий.

  15. Добавлена возможность в расширениях изменять команды пунктов контекстного меню через объект IMenuAction.CommandClosure, у которого можно переопределить свойства Execute и CanExecute.

  16. Изменено API коллекции ListStorage<T>. В аргументах события ListStorage<T>.ItemChanged теперь указывается e.StorageItem, соответствующий хранилищу объекта. Например, для ListStorage<CardRow> в e.StorageItem указывается Dictionary<string, object>. Свойство e.StorageItem доступно для удаляемых элементов, у которых e.HasItem = false. Таким образом, например, можно в обработчике вручную создать объект CardRow для удаляемого элемента как new CardRow(e.StorageItem).

  17. Добавлены методы-расширения file.ReadAllBytes() и file.ReadAllText() (using Tessa.Files), позволяющие эффективным образом (по потреблению памяти) загрузить контент файла в виде массива байт.

  18. Обновлены версии библиотек BLToolkit до 4.3.9, NLog до 4.4.11.

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

  1. Множество исправлений в web-клиенте.

  2. Исправления в локализации.

  3. Исправлена ошибка при клике по пустому месту внутри контрола "Ссылка", когда выполняется ввод значения и отсутствуют дополненные справа данные. Ошибка появилась в 2.4.

  4. Для валидатора "Уникальное поле" исправлена работа настройки "Родительское поле, ограничивающее уникальность" для использования с валидаторами на коллекционные секции.

  5. Улучшен внешний вид всплывающих уведомлений по заданиям.

  6. Изменение формата документа PDF/TIFF, в т.ч. чтобы поставить/убрать штамп, теперь помечает документ как изменённый, и его можно сохранить.

  7. Исправлена подстановка элемента по клику в любом месте в контролах "Список" и "Ссылка".

  8. Исправлена ошибка, из-за которой web-клиент не получал метаинформацию по типам параметров фильтрации в представлении.

  9. В представлениях "Мне на ознакомление" и "История ознакомления" исправлены доступные критерии для параметров фильтрации.

  10. Исправлено сообщение, которое логируется при очистке кэша файлов в Chronos.

  11. Исправлено поведение флага CardNewResponse.CancelOpening, посредством которого теперь можно отменить создание по шаблону. Причём для отмены на этапе BeforeRequest рекомендуется использовать метод context.CancelOpening().

  12. Исправлен механизм запуска дочерних процессов, который в очень редких случаях мог падать при запуске с ошибкой: InvalidOperationException: No process is associated with this object. Изменение затрагивает дочерние процессы для предпросмотра на клиенте, для конвертации файлов на сервере (предпросмотр файлов в web-клиенте) и для запуска процессов в Chronos.

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

  14. Ограничено изменение размера дерева в рабочем месте таким образом, чтобы дерево было не больше размера окна, а также не меньше минимально возможного размера.

  15. В типовом процеcсе исправлен вывод списка согласовавших и отказавших в согласовании для параллельного этапа.

  16. Список карточек или других объектов для выполнения массовой операции из представления теперь корректно локализует имена объектов в подтверждении.

  17. Исправлен порядок записей в истории заданий для типового процесса согласования.

  18. Все методы-расширения для логирования перенесены с класса Logger на интерфейс ILogger. Также класс LoggerMessageProvider теперь может принимать ILogger.

  19. Сортировка файлов, выполняемая не по имени, теперь дополнительно выполняется по имени, если по основным свойствам сортировка вернула "значения равны". Например, если выполняется сортировка по размеру файла и два файла имеют одинаковый размер, то они упорядочиваются друг относительно друга по отображаемому имени (IFileViewModel.Caption).

  20. Исправлено логирование ошибок, происходящих при загрузке расширений (на desktop-клиенте или на сервере).

  21. В контролах "Ссылка" и "Список" исправлено удаление элемента, введённого не до конца.

  22. Исправлена проблема при запуске TessaClient или TessaAdmin из сетевой папки при отсутствии разрешений для сборок расширений.

  23. В параметры методов ILoginService теперь можно передавать объект SessionClientParameters как null, чтобы использовались текущие параметры сервера (например, часовой пояс, установленный на сервере). Также в свойства CultureLCID и UICultureLCID можно указать 0, чтобы использовались настройки сервера. Это полезно при подключении к Tessa через сервисы WSDL.

  24. Исправлена ошибка в утилитах ExtensionsVersion/ModuleVersion, синхронно заменяющих версию в проектах-расширениях.

  25. Исправлена ошибка при отзыве процесса согласования при наличии доп. согласования.

  26. Бизнес-процессы Workflow API теперь не выполняют никакой обработки, если в context.ValidationResult присутствовали ошибки.

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

  28. В типовом процессе согласования для поля "Название этапа" введено ограничение в 128 символов, в соответствии с размерностью строковой колонки в схеме.

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

  30. В контроле "Список" исправлена ошибка с добавлением элементов между другими. Также исправлена ошибка с удалением только что введённого элемента.

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

  32. Исправлен вывод некоторых необработанных ошибок на консоль и в лог для cest.exe - консольного приложения SchemeEditor.

  33. В контроле "Список" исправлен ввод первого элемента по многоточию для тех случаев, когда указан формат.

  34. Исправлены ошибки, связанные с некоторыми операциями при многопоточной инициализации приложений и веб-сервисов.

  35. В контролах "Список" и "Ссылка" установлен запрет на ввод символа ";" с клавиатуры.

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

  37. При обновлении приложения Tessa Applications теперь учитывается, что антивирусы и другое ПО может ещё некоторое время после закрытия приложения блокировать папку приложения, из-за чего не получалось её переименовать сразу же после закрытия процесса TessaAppManager.exe. Поэтому теперь будет выполняться несколько попыток переименовать папку с интервалом в секунду.

  38. Исправлено подключение Tessa Applications к серверам Tessa 2.3 и более ранним 2.х.

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

  40. Исправлена обработка строк в контроле "Список", в тех случаях, когда к его секции привязан контрол "Таблица".

  41. Если мобильное согласование настроено для Exchange 2013 или для более поздней версии, то письмо будет запрошено в формате plain text даже в том случае, если Exchange настроен на выдачу писем в формате html. Версия Exchange указывается в app.config папки с платформенными плагинами Chronos\Plugins\Tessa\app.config (подробнее в руководстве по установке).

  42. Если мобильное согласование настроено для Exchange 2010 и письмо было получено в формате HTML, то плагин попытается извлечь текст письма своими силами, при этом есть вероятность, что текст будет извлечён некорректно. При простом форматировании (одна или несколько строк текста, разделённых переводами строк) текст всегда извлекается верно.

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

  44. Уведомления с количеством заданий и "скрыть всё" автоматически закрываются, когда пользователь закрыл все другие уведомления (связанные с заданиями).

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

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

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

  48. Если экспорт карточки выполнен неудачно, то созданный файл карточки удаляется. Ранее он мог остаться пустым.

  49. Исправлен маппинг поля карточки с типом Boolean на параметр представления.

  50. Исправлена сериализация некоторых из объектов метаинформации в XML так, чтобы в результате сериализации всегда была кодировка UTF-8. При сериализации типа карточки для записи в базу данных теперь не указывается заголовок <?xml …​?>.

  51. Старые сессии веб-клиента, которые были неактивны больше недели, теперь автоматически удаляются при открытии новой сессии веб-клиента.

  52. Исправлена проверка прав по заданному токену KrToken при создании карточки (CardStoreMode.Insert). Это используется, например, при создании карточек из плагина Chronos.

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

  54. Исправлена локализация контекстного меню в контролах карточки и в редакторе типов карточек.

  55. Оптимизировано потребление памяти.

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

  57. Исправлен порядок заданий в визуализации типового процесса согласования.

  58. В типовом процессе согласования при делегировании задания больше не выводится информация о комментарии, если он не был указан.

  59. Для контрола "Вкладки" исправлено размещение некоторых контролов на его вкладках.

  60. Исправлена вертикальная прокрутка для некоторых окон редактирования настроек, специфичных для контролов в типах карточек.

  61. Исправлена "пустая" всплывающая подсказка для контролов "Ссылка" и "Список", если контрол доступен только для чтения и в нём нет введённого значения.

  62. Для некоторых ошибок в схеме данных, связанных с некорректно выполненным вручную merge, теперь выводится более подробная информация по объекту, из-за которого возникла ошибка.

  63. Добавлено понятное сообщение об ошибке, когда срок завершения задания в типовом процессе согласования выходит за пределы рассчитанного календаря.

  64. Исправлено отображение символа подчёркивания в названиях приложений и групп приложений в контекстном меню на иконке Tessa Applications.

  65. Исправлена локализация заголовка при выгрузке данных представления в HTML.

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

  67. Добавлены ограничения на максимальное количество введённых символов в окне редактирования настроек сервера в Tessa Applications.

  68. Увеличены размеры квот для чтения различных запросов, поступающих к веб-сервису "tessa". Это позволяет, например, сохранять карточки с очень большими данными в одном из полей (например, текстовое поле длиной более 10 МБ).

  69. В рабочем месте "Пользователь" удалён узел "Замещения" в режиме отбора, т.к. вместо выбора из узла выполняется открытие настроек "Мои замещения".

  70. Встроенный предпросмотр изображений .gif заменён на предпросмотр через веб-браузер (в той же области предпросмотра). Это связано с тем, что встроенный предпросмотр может потреблять очень много памяти в процессе просмотра (сотни мегабайт), и память не всегда можно корректно освободить, пока вкладка с карточкой не закрыта.

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

  72. Исправлена работа поисковых запросов, содержащих параметры с датой и/или временем. Проблема связана с сериализацией типов-значений для параметров представлений. Ошибка появилась в сборке 2.4.

  73. Исправлены проблемы при добавлении объектов в ListStorage<T> через интерфейсы коллекций IList<T>, ICollection<T>, IList, для ситуации, когда тип typeof(T) реализует интерфейс IStorageProvider. Например, для коллекции строк ListStorage<CardRow>, которую можно преобразовать к IList<CardRow> и затем вызвать метод list.Add() или list.Insert().

  74. Исправлены ошибки при перемещении строк в контроле "Таблица", когда с этой же секцией связан контрол "Список".

  75. Исправлена окно отображения и проверки ЭЦП для файлов в карточке. Ошибка появилась в 2.4.

  76. Оптимизировано потребление памяти при подписании и проверке ЭЦП для файлов в карточке.

  77. Исправлено взаимодействие контролов "Список" и "Таблица", связанных с одной и той же секцией и упорядоченных по Order.

  78. Исправлена ситуация, когда права доступа, выдаваемые заданиями, могли не вернуться на клиент при открытии карточки без нажатия плитки "Редактировать". Это воспроизводилось в случае, если задание не выдавало прав на чтение карточки (вместо этого чтение регулировалось правилами доступа и расширениями на права).

  79. Исправлена работа горячей клавиши Delete в списке представлений в TessaAdmin.

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

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

  82. Оптимизирована фильтрация по типу документа в представлениях "Мои задания", "Задания от меня" и "Завершённые задания".

  83. Оптимизирован отчёт по текущим заданиям.

  84. В API карточек исправлена работа методов row.Set() и section.Set(), если им передать текущий объект строки или секции. Теперь в этом случае метод не выполняет действий.

  85. Исправлено добавление сотрудника в состав роли, в которой уже есть этот сотрудник как заместитель.

35. Версия 2.4 (07.06.2017)

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

  1. Изменены рабочие места: Administrator, User (необязательное изменение).

  2. Изменены представления: ActionHistory, Applications, AvailableApplications, DeputiesManagement, DeviceTypes (добавлено), EmmitedTasks, Errors (добавлено), IncomingDocuments, MyCompletedTasks, MyTasks, PartnersContacts, ReportCurrentTasksByDepartment, ReportCurrentTasksByUser, ReportPastTasksByDepartment, ReportPastTasksByUser, Sessions, Templates.

  3. Изменены таблицы: ActionHistoryVirtual, ActionTypes, Applications, CompletionOptions, DeviceTypes (добавлена), Errors (добавлена), FileConverterCache (добавлена), KrAdditionalApproval (добавлена), KrAdditionalApprovalInfo (добавлена), KrAdditionalApprovalInfoUsersCardVirtual (добавлена), KrAdditionalApprovalInfoVirtual (добавлена), KrAdditionalApprovalTaskInfo (добавлена), KrAdditionalApprovalUsers (добавлена), KrAdditionalApprovalUsersCard (добавлена), KrAdditionalApprovalUsersCardVirtual (добавлена), KrStagesVirtual, KrUserSettingsVirtual (добавлена), Operations, OperationTypes, PersonalRoles, PersonalRoleSatellite, PersonalRolesVirtual, Scheme (добавлена), ServerInstances, Sessions, Tasks, TaskHistory, UserSettingsVirtual (добавлена).

  4. Изменены процедуры: CalendarGetDefaultPeriodInfo, CalendarGetExclusionPeriodInfo, CalendarGetPeriodInfo, CalendarGetQuantType, CalendarPrepareQuants.

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

  6. Изменены типы карточек: AccountUserSettings (добавлен), ActionHistoryRecord, Application, Error (добавлен), FileConverterCache (добавлен), GeneralUserSettings (добавлен), KrAdditionalApproval (добавлен), KrApprove, KrCard, KrPermissions, KrSatellite, KrUserSettings (добавлен), Partner (необязательное изменение), PersonalRole, PersonalRoleSatellite, ReportPermissions, ServerInstance, TileUserSettings (добавлен), Outgoing, UserSettingsSystemType (добавлен).

  7. Изменены карточки: Calendar (settings) (необязательное изменение), File cache (settings) (добавлена), Server settings (settings) (необязательное изменение).

  8. Изменены библиотеки схемы данных и библиотеки локализации.

  9. Обновление схемы данных необходимо выполнять через SchemeEditor, причём на предложение обновить версию схемы надо согласиться.

  10. После обновления схемы данных выполните скрипт Fixes/Migration-2.4.sql.

  11. Обновите хост Chronos.exe. Версия Chronos увеличена до 2.4.0.

  12. Обновите файл app.json для веб-сервисов и для Chronos.

  13. Обновите файлы extensions.xml для веб-сервисов, приложений и плагинов Chronos.

  14. Файл app.json и файл лицензии .tlic теперь могут располагаться на уровень выше по иерархии папок и для сервиса "tessa", и для сервиса "web". Файл лицензии обычно размещается рядом с app.json, подробнее см. структуру папки "Services" в сборке.

  15. Импортируйте карточку "File cache (settings)", которая доступна в библиотеке карточек Configuration/Cards/Tessa.cardlib.

  16. Если было решено рабочее место пользователя не импортировать, то найдите в своём рабочем месте узел "Шаблоны" и удалите из него расширение CreateFromTemplateOnDoubleClickExtension (список расширений в правом нижнем углу). Также найдите узел "Замещения" (в режиме отображения, а не в режиме отбора, обычно рядом с узлом "Шаблоны") и удалите из него расширение OpenFromDeputiesManagementOnDoubleClickExtension.

  17. В представлении MyTasks были добавлены скрытые колонки Created, CreatedByID, CreatedByName, RoleTypeID из одноимённых колонок таблицы Tasks. Других изменений в представлении нет.

  18. В интерфейс расширений на правила доступа IKrPermissionsExtension добавлен метод CanReadFile, его необходимо реализовать во всех расширениях. Также в методе IsPermissionsRecalcRequired параметр context теперь указывается как ICardExtensionContext, его надо преобразовать к ICardStoreExtensionContext. Пример в Tessa.Extensions.Default.Server.Workflow.KrPermissions.KrPermissionTestExtension.

  19. В расширениях на права доступа ITaskPermissionsExtension, связанных с заданиями, появилось событие EventType.LoadingFile (возникает при запросе контента файла или списка его версий), его требуется учесть в коде расширений. Обработка событий LoadingFile и Store обычно не будет отличаться, т.к. в обоих случаях карточка не загружена.

  20. Любые задания, отсутствующие в типовом решении, теперь по умолчанию не выдают прав доступа на чтение карточки и подписание файла. Чтобы задание выдавало такие права, необходимо написать и зарегистрировать расширение ITaskPermissionsExtension, и выдать права в зависимости от taskTypeID следующим образом: descriptor.Set(KrPermissionFlags.ReadCard | KrPermissionFlags.SignFiles, true). Примеры таких расширений присутствуют в сборках типового решения.

  21. Карточки файловых шаблонов (из папки Configuration/Cards/File templates) вынесены в отдельную библиотеку карточек "Configuration/Cards/File templates.cardlib". Импортируйте её после того, как файловые хранилища были настроены в карточке "Настройки сервера". Это актуально только для новых инсталляций. При обновлении с предыдущих версий действий не требуется.

  22. Метод-расширение .ShowErrorOnFaulted() перенесён из пространства имён Tessa.UI.Cards в Tessa.UI.

  23. Для асинхронных действий в клиентских расширениях рекомендуется использовать методы UIHelper.InvokeAsync(…​) (Tessa.UI) вместо Task.Scheduler.StartInContext(…​) всегда, когда функциональности этих методов достаточно.

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

  25. Для того, чтобы активировать функцию предпросмотра PDF и файлов офисных форматов в web-клиенте, требуется в app.json от web-клиента указать настройку "PreviewPdfEnabled" как true. Также для предпросмотра офисных форматов на сервере, на котором запущен сервис Chronos, должен быть установлен LibreOffice или OpenOffice, а в файле app.json в папке Chronos должен быть задан корректный путь OpenOfficePython к файлу python.exe в папке установки LibreOffice или OpenOffice.

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

  27. Настройка "Затемнять неактивное окно" переименована в "Отключить затемнение для неактивного окна", соответственно её значение было инвертировано.

  28. Настройки расширений PlatformExtensionSettings, в которых указывается количество предельное плиток при группировке, перенесены в объект ISettings. Изменение их значений требуется перенести в расширения ISettingsExtension. Пример расширения в KrSettingsExtension.

  29. Настройки расширений WfSettings переименованы в KrSettings (Tessa.Extensions.Default.Shared.Settings) и теперь также регистрируются в объекте ISettings и доступны для изменения через ISettingsExtension: context.Settings.Get<KrSettings>().Property = value. Настройки доступны из Unity по Func<KrSettings>, при этом выполнять функцию и получать экземпляр KrSettings рекомендуется в месте использования (но не в конструкторе расширения).

  30. Список типов карточек, для которых отображается "Создать на основании", перенесён из статического свойства KrTypesAndCreateBasedOnTileExtension.AvailableTypes в настройки KrSettings.CreateBasedOnTypes. Устанавливать настройки требуется через расширение ISettingsExtension.

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

  1. В типовом процессе согласования появилась возможность добавлять и запрашивать дополнительное согласование.

  2. В web-клиенте теперь доступен выбор из справочников по кнопке троеточия.

  3. Добавлена область предпросмотра файлов в web-клиенте. Предпросмотр файлов Office в web-клиенте доступен при установке сервиса конвертации файлов (требует установленного на сервере LibreOffice или OpenOffice).

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

  5. Добавлены всплывающие уведомления по новым заданиям, отображаемые при запущенном TessaClient. Отключить уведомления можно через "Мои настройки". Для создания произвольных всплывающих уведомлений добавлено API INotificationUIManager. Изменить некоторые настройки по уведомлениям, связанные с типовым решением, можно расширением, способ написания такого расширения указан в remarks в коде класса KrSettings.

  6. Tessa Applications теперь позволяет запускать несколько копий приложения, это доступно в контекстном меню на иконке с приложением, или по Ctrl+клику по приложению.

  7. Группировка приложений в Tessa Applications теперь может выполняться по произвольной локализуемой строке, которая задаётся вручную в карточке приложения. Приложения с разных серверов можно объединять в одну группу, а приложения с одного сервера разделять на несколько групп. Группировка по серверу по-прежнему доступна через выпадающий список. Локализация группы выполняется на том сервере, на котором опубликовано приложение.

  8. При публикации приложений в командной строке /publish добавлены необязательные параметры "/n:Имя приложения" и "/g:Имя группы".

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

  10. Предпросмотр файлов теперь выполняется в отдельном процессе. Это предотвращает закрытие TessaClient из-за критических ошибок, возникающих в сторонних COM-компонентах предпросмотра файлов.

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

  12. Сессия теперь содержит информацию по устройству пользователя (session.Token.DeviceType: ПК, планшет, смартфон и пр.), по используемой ОС (session.Token.OSName) и по строке UserAgent браузера для web-клиента (session.Token.UserAgent).

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

  14. В представлении "Шаблоны", "Мои замещения" и "История действий" расширения на узлы дерева были добавлены по умолчанию в метаинформацию представления и удалены из узла дерева. Т.о. любые поисковые запросы к этим представлениям унаследуют соответствующие поведения.

  15. Добавлено API IErrorManager, позволяющее отправлять и получать информацию по ошибкам, причём отправка ошибок доступна как на сервере, так и на клиенте. В представлении "Ошибки" доступен список всех ошибок, отправленных с деталями (рабочее место "Администратор", папка "Прочее"). Добавлен платформенный плагин RemoveErrorCards для удаления карточек с информацией по ошибкам, которые старше 180 дней (интервал настраивается).

  16. Добавлено API для создания виртуальных файлов на сервере. Теперь это рекомендуемый способ создавать виртуальные файлы, т.к. такие файлы будут работать также в web-клиенте. Пример в расширении KrAddApprovalListGetExtension.

  17. Для формы карточки с заданиями DefaultFormWithTasksViewModel добавлен метод CreateTaskViewModel, который может использоваться для добавления в карточку виртуальных заданий, отсутствующих в карточке.

  18. В методы IUIHost, связанные с созданием и открытием карточек, добавлен параметр alwaysNewTab, при указании которого карточка принудительно откроется в новой вкладке (в противном случае уже открытая вкладка будет выбрана).

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

  20. Улучшено качество предпросмотра PDF и плавность перехода между страницами для PDF и TIFF.

  21. В карточку "Запись в истории" добавлено больше информации: ссылка на карточку, а также дата и сотрудник, имеющие отношение к действию в истории.

  22. Добавлен метод управления правами на загрузку контента файла и списка его версий в расширении на правила доступа IKrPermissionsExtension.

  23. Добавлен метод IFileBuilder.SetContentText(text, encoding) (using Tessa.Files) для установки контента файла в виде текста в определённой кодировке.

  24. В приложении SchemeEditor добавлена функция обновления открытой схемы.

  25. Обновлены версии библиотек BitMiracle.LibTiff.NET до 2.4.583, BLToolkit до 4.3.8, NLog до 4.4.10, NTwain до 3.4.2, PdfiumViewer до 2.12, Quartz.NET до 2.5.

  26. Chronos на 64-битных ОС теперь запускается как 64-битный процесс, использует серверную сборку мусора и явно таргетируется на .NET 4.5.2. Версия Chronos увеличена до 2.4.0.

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

  28. В TessaAdmin добавлена возможность создавать копии представлений и их групп, а также переименовывать или экспортировать группу представлений, и удалять все представления в группе. В контекстном меню доступна функция сворачивания/разворачивания всех групп представлений. Для рабочих мест также доступно создание копий.

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

  30. Добавлены статические методы TessaDatabase.FromXml(…​), позволяющие из xml десериализовать объект схемы данных ISchemeService, который в дальнейшем можно использовать, например, для создания виртуальных карточек без привязки к реальной схеме данных.

  31. Метод ApplicationHelper.SetEnglishLocalization перенесён в класс LocalizationManager. Некоторые другие методы перенесены из ApplicationHelper в класс RuntimeHelper. Это позволяет использовать все эти методы на сервере и в консольных приложениях.

  32. При обновлении схемы данных в TessaAdmin теперь учитывается, что схема может быть параллельно изменена через SchemeEditor, при этом автоматически сбрасывается серверный кэш с метаинформацией по схеме данных.

  33. Добавлена возможность получить родительский контекст UIContext.Parent, т.е. контекст, который был текущим на момент создания нового контекста. Это может понадобиться, например, если представление открывается по троеточию из контрола "Ссылка" в карточке, и требуется получить контекст карточки, в то время как текущим является контекст представления.

  34. Добавлен API IProcessManager, который можно получить из Unity для запуска дочерних приложений в отдельных процессах. Такие процессы будут гарантированно завершены при завершении основного приложения.

  35. Для запуска консольных приложений без открытия окна консоли с перенаправлением вывода можно указать startInfo.SetSilentExecution().SetCommandLine(…​) (using Tessa.Platform.Runtime).

  36. Добавлены методы CardHelper.CreateDeletedAfterBeginTransaction и CardHelper.CreateDeletedAfterRequest для реализации сценария по удалению полностью виртуальной карточки в корзину.

  37. Добавлен метод-расширение IUIHost.CreateFromTemplate (using Tessa.UI) для упрощённого создания карточки по шаблону с возможной модификацией этого шаблона.

  38. Добавлены методы UIHelper.InvokeAsync, позволяющие упростить асинхронные действия в системе. Рекомендуется использовать их вместо Task.Scheduler.StartNewInContext(…​) всегда, когда функциональности методов достаточно.

  39. Для расширений на контекстное меню файлов и версий добавлены свойства context.Files и context.Versions соответственно, которые содержат все файлы или версии, для которых надо показать действия в контекстном меню. Также в расширения для версий файлов добавлено свойство context.Dialog, которое содержит модель представления для диалога со списком версий (или null).

  40. Для стилей ячеек и строк в представлении #appearance добавлены свойства для выравнивания: HorizontalAlignment, VerticalAlignment, TextAlignment. Подробности указаны в руководстве разработчика.

  41. Расширены возможности аннотаций к диаграммам, добавлены настройки "Выравнивание", "Выравнивание текста" и "Отображение метки на оси".

  42. В консольной утилите cest.exe добавлена команда rename, позволяющая сгенерировать скрипт для обновления ссылочных строковых полей, таких как UserName. Синтаксис указан во встроенной справке: cest.exe rename /?

  43. Добавлена настройка EnableInterprocessCacheWeb, управляющая автоматическим сбросом кэша для нескольких серверов для web-клиента. Не рекомендуется включать настройки EnableInterprocessCache и EnableInterprocessCacheWeb для сервисов tessa и web, расположенных на одном сервере.

  44. В конфигурации расширений extensions.xml добавлены настройки <reference />, аналогичные по синтаксису <include />, которые не сканируются на расширения и загружаются перед загрузкой сборок с расширениями.

  45. В API добавлена папка FileSpecialFolder.Data, которую удобно использовать для создания файлов, прикладываемых к письму перед отправкой на сервер. Получить такой файл можно, используя вызов TempFile.Acquire("filename.txt", FileSpecialFolder.Data). Также добавлена папка FileSpecialFolder.TempBase, в которой можно создать подпапку для хранения временных файлов для плагинов и специальных утилит, таких как плагин конвертации файлов.

  46. Добавлены методы MailFileFactory.Create(), позволяющие создать файлы для прикрепления к письму без использования временных файлов. Рекомендуется использовать только для небольших файлов (желательно не более 100 Кб).

  47. Добавлен метод-расширение notificationResolver.SendNotifications(…​) (using Tessa.Extensions.Default.Shared.Notices), который упрощает отправку уведомлений INotification без загрузки или сохранения карточки (например, в плагине Chronos). Метод можно использовать как на сервере, так и на клиенте.

  48. Добавлен файл реестра "Fixes/Tessa Trusted Protocols.reg", который устанавливает протоколы tessa:// и snlink:// как доверенные для текущего пользователя в приложениях Microsoft Office. При установке Tessa Applications аналогичные ключи реестра вносятся для пользователя, от имени которого запускалась установка. Импортируйте этот файл реестра только в том случае, если при открытии ссылок на объекты Tessa из приложений Word, Outlook и др. каждый раз возникает предупреждение для недоверенного протокола.

  49. Добавлен метод ValidationResult.ToString(ValidationLevel.Detailed) для упрощения вывода всех сообщений валидации с деталями (для исключений со стек-трейсами).

  50. В API плейсхолдеров добавлены методы context.Resolve<T>() и context.TryResolve<T>() (using Tessa.Platform.Placeholders) для получения произвольных сервисов из UnityContainer, если контейнер был передан в операцию по замене плейсхолдеров (это так для всех операций, сделанных в платформе и в типовом решении).

  51. В API плейсхолдеров добавлены методы placeholderManager.ReplaceText() (using Tessa.Platform.Placeholders) для упрощённой замены плейсхолдеров в строке текста. Например, такой метод используется для замены плейсхолдеров в формате Digest, который задаётся в типе карточки.

  52. В карточке контрагента в таблице "Контактные лица" добавлена автоматическая сортировка по ФИО контактного лица (выполняется в момент открытия карточки).

  53. В модели представления контрола "Таблица" (GridViewModel) сделано разделение видимости для кнопок "Добавить" (AddButtonVisibility) и "Удалить" (DeleteButtonVisibility). Это позволит в расширениях скрыть/показать одну из этих кнопок независимо от настроек контрола.

  54. Доступ к настройкам приложения возможен не только через статический ConfigurationManager, но и получив из Unity объект IConfigurationManager.

  55. Добавлен скрипт Fixes/ResetUserSettings.sql для сброса личных настроек пользователя, когда сбросить их через интерфейс нельзя (или когда надо сбросить настройки массово для всех пользователей).

  56. В методы Session.CreateSystemToken() и Session.CreateSystemSession() добавлена возможность указать настройки сервера ITessaServerSettings, из которых устанавливается код сервера.

  57. Добавлены методы-расширения GenerateFileFromTemplate() для ICardStreamClientRepository и ICardStreamServerRepository, чтобы упростить создание файлов по файловым шаблонам.

  58. Улучшены сообщения об ошибках при загрузке файлов к