image1

© Syntellect 2020


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  72. В web-клиенте оптимизирован размер передаваемого токена сессии. Это также исправило проблему с превышением ограничений на размер cookies при слишком длинной строке в кратком имени сотрудника.

  73. В web-клиенте исправлено отображение всплывающей подсказки для элементов управления "Флажок".

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

  75. В web-клиенте исправлено редактирование этапа "Диалог" в шаблоне этапа или вторичном процессе, если указан шаблон карточки, а не тип карточки или документа.

  76. В web-клиенте исправлен предпросмотр виртуальных файлов из справочника "Виртуальные файлы", которые при предпросмотре должны конвертироваться в Pdf.

  77. В web-клиенте исправлено отображение длинных названий вкладок с пробелами в названии, таких как "История заданий", если отображается прокрутка вкладок.

  78. В web-клиенте для обсуждений исправлено отображение описания в окне топика.

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

  80. В web-клиенте decimal тип сериализуется как строка. Была исправлена ошибка, из-за которой, при сохранении карточки, нельзя было провалидировать KrToken. Это было связано с сериализацией/десериализацей decimal полей в структуре картчоки - из-за особенностей работы js, на клиенте при десериализации decimal поля могли обрезаться.

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

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

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

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

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

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

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

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

  89. Оптимизировано распознавание штрих-кода в модуле потокового ввода документов.

  90. Исправлена редкая ошибка обработки больших файлов в модуле потокового ввода документов.

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

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

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

  94. При вызове методов IBusinessCalendarService в клиентских расширениях desktop-клиента при возникновении ошибок на сервере, они теперь передаются на клиент в форме ValidationException. Исключением является метод ValidateCalendarAsync, который возвращает ошибки в объекте ValidationResult.

  95. Исправлено асинхронное выполнение в цепочке расширений ICardUIExtension.Finalizing и в событиях IWorkspaceModel.Closing (в т.ч. для ICardEditorModel.Closing).

  96. Исправлен вызов ICardEditorModel.CloseAsync с указанием параметра force=false. Пользователю выводился диалог-подтверждение для сохранения, но сохранение не выполнялось, даже если пользователь нажал "Да" в диалоге.

  97. Изменено получение руководителя подразделения: теперь он определяется по атрибуту manager у сотрудников подразделения, вместо атрибута managedBy у подразделения.

  98. Исправлен расчет плейсхолдеров fv в дайджесте карточек, если использовалось форматирование with param.

  99. При обращении к веб-сервису по адресу, который не привязывается к контроллеру, теперь возвращается код ошибки 404 "Not Found" вместо 200 "OK".

  100. Оптимизирован расчет дайджеста, в случае если он уже был расчитан другим расширением.

  101. Исправлена редкая ошибка при кэшировании запроса на создание карточки, выполняемого в рамках платформенной обработки метода ICardRepository.NewAsync. Проблема могла проявляться в виде ошибки "An item with the same key has already been added. Key: SectionRows" в представлении рабочего места руководителя, или при других параллельных запросах на создание карточки, файла или задания, выполняемых впервые или сразу после сброса кэша в рабочем процессе веб-сервиса.

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

  103. Исправлена ошибка при синхронизации исключительно статических ролей в модуле синхронизации с AD / LDAP.

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

  105. В TessaClient и TessaAdmin исправлен выбор значения сабсета NULL, если сабсет возвращает значения логического типа Boolean Null и при этом присутствует отображаемый параметр фильтрации, связанный с сабсетом.

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

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

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

  109. Исправлена ошибка, когда после неудачного сохранения карточки флаг ClosePending ICardEditorModel не сбрасывался на false.

  110. Исправлен скрипт условия в карточке типа условия "По маршруту".

  111. В приложении Tessa Applications исправлено потребление памяти при частом обновлении списка приложений вручную.

  112. В приложении Tessa Applications оптимизировано скачивание приложений, когда часть файлов уже скачена в других папках или поставлялась вместе с msi-инсталлятором.

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

  114. Исправлена некорректная работа расширенных настроек правил доступа, когда кнопки "Добавить" и "Удалить" элемента управления "Таблица" при определенных настройках доступа были доступны, когда фактически доступа к ним не было, и были недоступны, когда доступ фактически должен был быть.

  115. При штатной отмене посредством cancellationToken выполнения SQL-запроса и для ряда других операций текст запроса с исключением OperationCanceledException теперь заносится в лог на уровне логирования Trace. Ранее сообщение вида "A task was canceled" могло быть залогировано в веб-сервисе как предупреждение или ошибка, хотя в действительности, его логирование не требуется.

  116. Если на сервер выполняется обращение по просроченной сессии, то сообщение теперь выводится на уровне логирования Info, и полный текст исключения выводится на уровне логирования Debug. Это предотвращает большое количество текста в файле лога на уровне логирования Error при штатных ситуациях, например, когда через web-клиент выполняется обращение по сессии, открытой более недели назад.

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

  118. Исправлена ситуация, когда при штатной отмене посредством cancellationToken метода operationRepository.ExecuteInLockAsync (и его производных - например, ExecuteInRolesLockAsync) операция с блокировкой могла быть не удалена. Например, при длительном ожидании завершения плагина Chronos платформой может быть инициирована отмена плагина через cancellationToken, которая в свою очередь имеет шанс на то, что блокировка на пересчёт ролей или на отправку почтовых уведомлений по обсуждениям не будет снята, и при следующем запуске Chronos соответствующие плагины выведут ошибку таймаута на ожидание блокировки.

  119. Исправлено освобождение ресурсов, зарегистрированных в объекте IUnityDisposableContainer в случае, если некоторые из регистраций в методах Dispose или DisposeAsync выбрасывают исключение (хотя это противоречит паттерну Dispose). Теперь такое исключение логируется, но не прерывает выполнение очистки для других ресурсов.

  120. Исправлены логируемые на сервере ошибки NullReferenceException at Tessa.Views.Parser.SyntaxTree.Parameters.ValueSyntaxNode.ConvertValue, если в поисковом запросе был параметр представления, который затем был удалён. Ошибки не влияли на выполнение поискового запроса, но зря добавлялись в лог веб-сервиса.

  121. Исправлено возникновение исключения ObjectDisposedOperation при выполнении операции, такой, как сохранение карточки, для объекта ICardEditorModel в коде расширений, если этот объект (вкладка с карточкой или диалог) уже был закрыт вызовом метода CloseAsync.

  122. Исправлено возможное дублирование узлов с представлениями и поисковыми запросами при выборе в ссылочных элементах управления в режиме отбора в desktop-клиенте.

  123. Исправлена ситуация, когда утилита tadmin PackageApp использовалась для публикации приложения, не являющегося сборкой .NET. Теперь такая публикация выполняется успешно.

  124. При расчёте метаролей и динамических ролей теперь удаляются дубликаты записей пользователя по UserID, которые мог возвращать неправильно составленный SQL-запрос, что приводило к невозможности вставки строки из-за внешнего ключа.

  125. Исправлено скрытие удаленных объектов в плагине синхронизации с AD / LDAP.

  126. Исправлена редкая ошибка при поиске объектов, принадлежащих referral серверам, в модуле синхронизации с AD / LDAP.

  127. Исправлено получение краткого имени пользователя в плагине синхронизации с AD / LDAP.

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

  129. Оптимизирована синхронизация с AD / LDAP в случае, если для синхронизируемого объекта (пользователя, подразделения или группы) отсутствуют изменения в домене в синхронизируемых полях. Ранее синхронизация выполнялась при изменении любых полей в домене.

  130. В представлении "Состояния документа" исправлено отображение колонки "Библиотека схемы", где вместо библиотеки "Standard solution" могла отображаться библиотека "Default".

  131. Исправлен расчёт замещений при добавлении/удалении сотрудников в статические роли и подразделения через списки ролей в карточке сотрудника.

  132. Исправлена локализация вида заданий при визуализации в типовом процессе отправки задач (плитка "Поставить задачу" или этап маршрута "Задача").

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

  134. Исправлена редкая проблема с выделением одинаковых номеров разными пользователями из одной и той же последовательности. Проблема появилась в сборках 2.7.9 и 3.2.0.

  135. Исправлено получение прав доступа на чтение карточки для пользователя, которому было отправлено ознакомление. Исправление реализовано через новое правило доступа "Default acquaintance access rule" и контекстную роль "Ознакомление" ("Acquaintance"). Ошибка появилась в сборке 3.4.0.

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

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

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

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

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

  141. В desktop-клиентах TessaClient/TessaAdmin исправлено возможное размытие при отображении обводящей рамки для элементов управления "Текст", "Метка", "Строка" (в режиме "Avalon").

  142. Исправлено дублирование строк результата в представлении "Правила доступа", когда добавляются несколько значений для параметра "Тип карточки", "Состояние" или "Роль".

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

  144. Исправлено выполнение асинхронного кода в обработчике события GridViewModel.RowValidating для элемента управления "Таблица" в карточках.

  145. Исправлена публикация приложений в тихом режиме с параметром /q.

  146. Исправлена обработка имени набора параметров "По умолчанию" для представления, добавленного в рабочее место. Ошибка приводила к невозможности удаления поискового запроса из-за ошибки "Parameters SetName is empty".

  147. Исправлена ошибка при обработке NTLM токена при аутентификации Kerberos.

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

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

  150. Исправлена проверка доступа к файлу по категории в расширенных настройках правил доступа.

  151. Исправлена ошибка NRE в расширении KrVirtualFileGetContentExtension при загрузке виртуального файла с неизвестным идентификатором.

  152. Исправлены возможные проблемы при сбросе кэша метаинформации представлений для СУБД PostgreSQL, когда параллельно изменению метаинформации происходят запросы на выполнение представлений к другим рабочим процессам веб-сервиса или нодам кластера. При этом могла быть повторно создана хранимая процедура для выполнения представления по старой метаинформации.

  153. В схеме данных, которая поставляется со сборкой в папке Configuration\Scheme, удалены неиспользуемые файлы миграций и хранимых процедур. Файлы присутствовали в папке, но не использовались редактором схемы данных.

  154. Исправлен метод ValidationResultBuilder.Add(IValidationResultItem), который мог приводить к неправильному вычислению значения для метода IsSuccessful().

  155. Исправлена ошибка поиска сотрудника по логину для СУБД PostgreSQL в модуле синхронизации с AD / LDAP.

  156. Исправлена ошибка поиска штрих-кода для СУБД PostgreSQL в модуле потокового ввода документов.

  157. При запуске Chronos на ОС Linux теперь выполняется очистка файлов, используемых для синхронизации между процессами, которые могли остаться после предыдущего запуска Chronos, если его процесс был принудительно завершён. Такие файлы по умолчанию расположены в подпапке ~/.config/tessa/sync для учётной записи, от имени которой запущен сервис Chronos.

  158. Исправлена ошибка "Can’t acquire or create Linux event, error code is -28" в Chronos на ОС Linux. Ошибка появлялась в случае крайне продолжительной работы Chronos без перезапуска сервера.

  159. Исправлена команда tadmin MigrateFiles, которая не запускалась в сборке 3.4.0.

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

  161. Исправлен предпросмотр типа карточки "Сотрудник" с расширениями. Ошибка появилась в сборке 3.4.0.

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

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

  164. Оптимизирован расчёт замещений.

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

  166. Исправлены возможные ошибки "Could not load file or assembly" для библиотек System.**.dll, возникающие при использовании API системы, таких как методы интерфейса IEDSManager.

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

  168. Исправлена ошибка с текстом "Column count mismatch" при отладке представления с выводом текста запроса для СУБД PostgreSQL, когда основной СУБД является MSSQL.

  169. При создании новой процедуры в схеме данных её название по умолчанию теперь указано как "Procedure" (ранее было название "Function").

  170. В представлении "Задания от меня" удалён оператор "не равен" для параметра "Исполнитель", поскольку он не работал.

  171. При сборке проектов расширений исправлено копирование в папку Bin\extensions файлов Tessa.Extensions.Server.dll и Tessa.Extensions.Shared.dll (и их отладочных символов pdb).

  172. Параметры DateTime, передаваемые в IBusinessCalendarService, теперь всегда используют указанное время без перевода его в UTC. Временная зона, для которой указано это время, задаётся отдельным параметром. Исправление актуально для сборки 3.4.0, в которой появилась поддержка нескольких временных зон, и указание DateTimeKind.Local или Unspecified могло исказить время без учёта временной зоны.

  173. Исправлена обработка ошибок в TessaAdmin, возникших в процессе импорта или экспорта представлений и рабочих мест.

  174. В представлении "Правило доступа" поиск в параметре "Разрешение" сделан регистронезависимым, ранее он был регистрозависимым. Проблема появилась в сборке 3.4.0.

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

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

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

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

  179. Исправлен сброс кэша для карточки настроек, в которой были изменения, не связанные с увеличением версии карточки. Обычно это добавление файлов.

  180. Исправлена ошибка "The semaphore has been disposed", которая могла записываться в логе в процессе остановки сервиса Chronos или в других ситуациях.

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

  182. Исправлено получение результата операции по конвертации файлов IFileConverter, если она была вызвана с флагом FileConverterRequestFlags.DoNotCacheResult, но без флага WithoutResponse.

  183. Исправлена конвертация файлов средствами IFileConverter, если расширение файла набрано не в нижнем регистре (в т.ч. для предпросмотра в web-клиенте).

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

  185. Исправлена загрузка сборок на сервере и на клиенте по путям ProbingPath и по путям, в которых загружены расширения с модулями (из отдельных подпапок).

  186. Улучшено логирование ошибок веб-сервиса, связанных с запуском приложения и с ошибками запросов ASP.NET Core в части, не связанной с ошибками в Tessa. Например, это вывод ошибки конфигурации Swagger.

  187. Исправлены проблемы с ожиданием сброса глобального кэша, если cancellationToken, переданный в момент подписки на событие, был отменён после того, как ожидание было запущено (например, метод SubscribeAsync вернул управление). Описанная ситуация могла приводить к тому, что кэш не функционировал и одновременно с этим аномально повышалась загруженность процессора.

  188. Исправлена обработка ошибок, возникающих при установке прогресса операции по сохранению карточки с файлами.

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

  190. Исправлены ошибки при указании одной и той же сборки с расширениями в extensions.xml или одной и той же сборки с плагинами Chronos в plugins.xml. Теперь такие сборки игнорируются.

  191. Исправлен автоматический поиск сервера Exchange для отправки и получения почты, если в app.json веб-сервиса в поле "NoticeMailer.ExchangeServer" или "MobileApproval.ExchangeServer" указана пустая строка.

  192. Исправлены настройки автоматической Windows-аутентификации на сервер Exchange для получения почты, если в поле "MobileApproval.ExchangeUser" указана пустая строка. Ранее в этом случае использовались настройки Exchange для отправки почты.

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

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

  195. В клиентских расширениях TessaClient исправлены возможные ошибки при обращении к свойствам карточки IInitializationContainer.PersonalRoleSatellite параллельно из нескольких потоков.

  196. Исправлена установка замещений для статических ролей, подразделений, контекстных ролей и динамических ролей после импорта карточки и после восстановления удалённой карточки. Такие замещения задаются в диалоге "Мои замещения" при выборе "Все роли и подразделения", "Все статические роли" и "Все подразделения" в списке ролей для замещений.

  197. Исправлена ошибка при сохранении карточки, если для нее был добавлен валидатор уникальности, настроенный на виртуальную секцию.

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

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

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

  201. В контроле файлов исправлено поведение настройки группировки "Группы свёрнуты", если не указывался алиас группировки внутри параметра "Группировка".

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

  203. В уведомлении "Задание отправлено" исправлена ошибка, приводившая к дублированию сообщения.

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

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

  206. В контроле "Таблица" в карточках исправлено удаление строк по горячей клавише Delete. Ошибка появилась в сборке 3.3.0.

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

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

  209. Исправлена работа типа условия "По состоянию" в бизнес-процессах Workflow Engine, если состояние было изменено в том же запросе, что и проверка условия.

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

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

  212. При выгрузке в файлы для библиотек локализации, библиотек карточек и объектов схемы исправлены возможные появления символа &#xD; - это CR в переводе строки CR LF.

  213. При выгрузке в файлы для библиотек локализации пустой комментарий и комментарий, состоящий из пробелов, всегда выгружается без пустого тега <Comment>.

  214. Исправлена команда tadmin ExportLocalization, которая не выгружала комментарии для строк локализации.

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

  216. Исправлен экспорт типов карточек, файлов и заданий в файлы .jtype таким образом, чтобы обеспечить стабильный порядок в коллекциях и чтобы файл с типом карточки не изменялся при экспорте различными способами (TessaAdmin, tadmin).

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

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

  1. Изменены рабочие места: Administrator, User (переименовано представление по типам условий, добавлены узлы "Мои обсуждения" и "Последние обсуждения").

  2. Изменены представления: KrPermissionsExtensionView (удалено), ConditionTypes (переименовано из NotificationConditionTypes), ConditionUsePlaces (добавлено), FileTemplates, FunctionRoleCards (добавлено), KrDialogButtonTypes (добавлено), KrDialogCardAutoOpenModes (добавлено), KrDialogCardStoreModes (добавлено), KrPermissionFlags, KrPermissionRoles (добавлено), KrPermissionRuleAccessSettings (добавлено), KrPermissions, KrPermissionsControlTypes (добавлено), KrPermissionsExtendedCards (добавлено), KrPermissionsExtendedMandatory (добавлено), KrPermissionsExtendedTasks (добавлено), KrPermissionsExtendedVisibility (добавлено), KrPermissionsFileAccessSettings (добавлено), KrPermissionsMandatoryValidationTypes (добавлено), KrPermissionStates (добавлено), KrPermissionTypes (добавлено), KrStageTemplates, KrTypesForDialogs (добавлено), KrVirtualFiles (добавлено), LastTopics (добавлено), LinkedDocuments, MyTopics (добавлено), TaskKinds, TopicParticipants (добавлено).

  3. Изменены таблицы: AutoApproveHistory, ConditionsVirtual (переименована из PersonalRoleNotificationConditionsVirtual), ConditionTypes (переименована из NotificationConditionTypes), ConditionTypesBuildOutput (переименована из NotificationConditionTypesBuildOutput), ConditionTypeUsePlaces (добавлена), ConditionUsePlaces (добавлена), FileTemplates, FmAddTopicInfoVirtual (добавлена), FmAttachmentTypes (добавлена), FmAttachments (добавлена), FmForumSatellite (добавлена), FmMessages (добавлена), FmMessagesPluginTable (добавлена), FmMessagesTypes (добавлена), FmNotifications (добавлена), FmParticipantTypes (добавлена), FmTopicParticipantRoles (добавлена), FmTopicParticipantRolesUnsubscribed (добавлена), FmTopicParticipants (добавлена), FmTopicParticipantsInfoVirtual (добавлена), FmTopicParticipantsVirtual (добавлена), FmTopicRoleParticipantsInfoVirtual (добавлена), FmTopicTypes (добавлена), FmTopics (добавлена), FmUserSettingsVirtual (добавлена), FmUserStat (добавлена), FunctionRoles (добавлена), FunctionRolesVirtual (добавлена), KrAdditionalApprovalInfo, KrApprovalHistory, KrApprovalHistoryVirtual, KrApprovalSettingsVirtual, KrDialogButtonSettingsVirtual (добавлена), KrDialogButtonTypes (добавлена), KrDialogCardAutoOpenModes (добавлена), KrDialogCardStoreModes (добавлена), KrDialogSatellite (добавлена), KrDialogStageTypeSettingsVirtual (добавлена), KrDocType, KrPermissionExtendedCardRuleFields (добавлена), KrPermissionExtendedCardRules (добавлена), KrPermissionExtendedFileRuleCategories (добавлена), KrPermissionExtendedFileRules (добавлена), KrPermissionExtendedMandatoryRuleFields (добавлена), KrPermissionExtendedMandatoryRuleOptions (добавлена), KrPermissionExtendedMandatoryRules (добавлена), KrPermissionExtendedMandatoryRuleTypes (добавлена), KrPermissionExtendedTaskRuleFields (добавлена), KrPermissionExtendedTaskRules (добавлена), KrPermissionExtendedTaskRuleTypes (добавлена), KrPermissionExtendedVisibilityRules (добавлена), KrPermissionFlags (удалена), KrPermissionRoles, KrPermissionRuleAccessSettings (добавлена), KrPermissions, KrPermissionsControlTypes (добавлена), KrPermissionsFileAccessSettings (добавлена), KrPermissionsMandatoryValidationTypes (добавлена), KrPermissionsSystem (добавлена), KrProcessStageTypes, KrSecondaryProcesses, KrSettings, KrSettingsCardTypes, KrStages, KrStagesVirtual, KrRouteSettings (добавлена), KrRouteModes (добавлена), KrTaskKindSettingsVirtual (добавлена), KrTaskTypeCondition (добавлена), KrTaskTypeConditionSettings (добавлена), KrTypedTaskStageTypeSettings, KrVirtualFileCardTypes (добавлена), KrVirtualFileRoles (добавлена), KrVirtualFiles (добавлена), KrVirtualFileStates (добавлена), KrVirtualFileVersions (добавлена), LocalizationEntries, LocalizationStrings, OperationTypes, PersonalRoleSatellite, PlaceholderCompilationCache (добавлена), RoleDeputies, ServerInstances, UserSettingsFunctionRolesVirtual (добавлена), UserSettingsVirtual, WeConditionAction.

  4. Изменены миграции: KrPermissions (добавлена).

  5. Изменены процедуры: KrPermissionsObtainReadersLock (добавлена), KrPermissionsObtainWritersLock (добавлена).

  6. Изменены функции: CalendarAddWorkQuants, CalendarGetLastQuantStart.

  7. Изменены типы карточек: AuthorCondition, ConditionsBase (добавлен), ConditionType (переименован из NotificationConditionType), Currency, DepartmentCondition, DocStateCondition, DocTypeCondition, DocumentCategory, EmptyCondition (добавлен), FileCategory, FileTemplate, ForumSatellite (добавлен), FunctionRole (добавлен), InitiatorCondition, KrApprovalStageTypeSettings, KrApprove, KrCard, KrDeregistrationAction (добавлен), KrDialogStageTypeSettings (добавлен), KrDocType, KrEdit, KrEditInterject, KrExampleDialogSatellite (добавлен), KrPermissions, KrRegistration, KrRegistrationAction (добавлен), KrSatellite, KrSecondaryProcess, KrSettings, KrShowDialog (добавлен), KrSigning, KrTemplateCard, KrUniversalTaskStageTypeSettings, KrUnversalTask, KrVirtualFile (добавлен), Notification, NotificationType, NotificationUserSettings, PartnerCondition, PersonalizationUserSettings (добавлен), PersonalRoleSatellite, ReportPermissions, ServerInstance, TaskHistoryGroupType, TaskKind, TaskTypeCondition (добавлен), TopicTabs (добавлен), WorkflowConditionAction, RouteCondition (добавлен), KrSecondarySatellite.

  8. Изменены карточки: AdvisoryTaskKind (добавлен), ApprovalHistoryCondition, Assigned to me, AuthorCondition, DepartmentCondition, DocStateCondition, DocTypeCondition, File templates\ApprovalHistory, File templates\PrintableApprovalHistory, ForumNewMessagesNotification (добавлена), ForumNewMessagesNotificationType(добавлена), FullRecalcRouteButton (удалена), InitiatorCondition (добавлена), KrDocType, KrPermissions, KrSettings, PartnerCondition (добавлена), PersonalRoleSatellite, TasksNotification (добавлена), VirtualFiles\ApprovalHistory (добавлена), ReturnForAmendingTemplate (добавлена), RouteCondition (добавлена).

  9. Изменены карточки (необязательные изменения): Addendum, ApprovalGroup, Assigned to me (Excel), CancelButton, Contract, Default access rules, DeregisterButton, Directive, Document, EditTemplate, Incoming, NewIterationTemplate, Official note, Order, Outgoing, ProtocolBranchPure, RebuildButton, RegisterButton, RejectButton, SendProtocolTasksButton, Server settings (settings), Standard solution (settings), StartProcessButton, Protocol of the meeting, Protocol of the meeting (Excel).

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

  11. Обновите файл app.json для веб-сервиса web в соответствии с тем, что поставляется со сборкой.

  12. Изменены файлы тем интерфейса в подпапке themes для приложения TessaClient. Начиная с этой сборки, файлы тем также используются в веб-сервисе (папка wwwroot\themes).

  13. У следующих приложений настройки из конфигурационного файла .config (например, TessaClient.exe.config) были перенесены в файл app.json: Publisher, SchemeEditor, TessaAdmin, TessaAppManager, TessaClient, TokenEditor, утилита tadmin. Убедитесь, что конфигурационные файлы обновлены из соответствующей папки в сборки и их содержимое актуально для вашей инсталляции. В ряде случаев файлы .config были удалены, т.к. все настройки перемещены в app.json.

  14. Настройки подключения к прокси-серверу для приложения TessaClient теперь указываются в файле app.json, значения ProxyUri и ProxyClass. В предыдущих версиях эти настройки задавались в DefaultProxy и system.net/defaultproxy/module соответственно.

  15. При обновлении сервиса Chronos, установленного как сервис Windows, при переходе на эту сборку требуется сначала удалить предыдущий установленный сервис, используя InstallUtil.exe, затем заменить файлы в папке, и затем установить сервис посредством команды sc.exe. Обратитесь к руководству по установке за обновлённой инструкцией по установке сервиса Windows. При инсталляции на Linux изменений нет.

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

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

  18. При развёртывании сервера приложений на Windows с использованием IIS для работы Windows-аутентификации в web-клиенте обратитесь к руководству по установке, чтобы указать параметры пула приложений для веб-приложения tw_winauth.

  19. При развёртывании сервера приложений на Windows теперь используется InProcess-хостинг процесса веб-сервиса внутри IIS. Это не позволяет настроить в IIS несколько раздельных веб-приложений для одного и того же пула приложений (например, приложение tw_winauth для Windows-аутентификации в web-клиенте, или веб-сервисы, разработанные в рамках проекта в отдельном веб-приложении, отличном от веб-сервиса "web"). Создайте отдельные пулы приложений для каждого веб-приложения в IIS. Пример настройки есть в руководстве по установке в разделе по настройке Windows аутентификации в web-клиенте. Также вы можете отключить InProcess-хостинг, отредактировав файл web.config в папке веб-сервиса "web" и укажите в параметре hostingModel="OutOfProcess" (это приведёт к снижению производительности при работе в высоконагруженной среде).

  20. Сервер приложений теперь работает с использованием платформы .NET Core. Версия .NET Framework, установленная на сервере приложений при развёртывании на Windows, не является важной. Серверные расширения Tessa.Extensions.Server, Tessa.Extensions.Shared (и библиотеки модулей, если используются) должны таргетироваться на платформу netstandard2.0 (если для проекта это указано по умолчанию в сборке) или на платформу netcoreapp3.0 (для использования функций API .NET Core, недоступных в .NET Standard). Если вы изменили платформу на net472 или другую версию .NET Framework, то необходимо изменить платформу обратно на netstandard2.0, а функциональность, связанную с .NET Framework (обычно это сторонние библиотеки или WPF) необходимо вынести в отдельное веб-приложение. Пример создания такого веб-приложения приведён в "Создание веб-сервиса WCF, который вызывает веб-сервис платформы" (аналогичное приложение может быть разработано как REST с использованием ASP.NET Core 2.x). Перечисленные изменения не затрагивают библиотеки клиентских расширений desktop-клиента, которые по-прежнему таргетируются на платформу .NET Framework.

  21. Swagger, встроенный в веб-приложение web (по пути /swagger от адреса веб-приложения), теперь генерирует json-файл для описания REST API платформы по спецификации OpenApi v3 (в предыдущих версиях использовалась версия спецификации v2). Если вы используете файл swagger.json для генерации клиентов к сервисам REST API, то убедитесь, что используемый для генерации инструментарий поддерживает спецификацию OpenApi v3.

  22. Утилита tadmin для Windows (папка Tools) теперь использует платформу .NET Core вместо .NET Framework. Начиная с этой сборки запуск утилиты на 32-битных версиях Windows невозможен.

  23. Веб-сервис (папки Services/web, linux/web), сервис Chronos (папки Chronos, linux/chronos) и утилита tadmin (папки Tools, linux/tools) публикуются в режиме ReadyToRun для ускорения запуска на 64-битных платформах Windows и Linux. Некоторые файлы .dll в этой папке (такие как Tessa.dll) больше по размеру и их нельзя копировать с заменой в другие папки, где выполнение возможно на других платформах. Обратное копирование возможно, например, если выйдет патч для библиотеки Tessa.dll, её можно в одинаковом виде скопировать в эту и другие папки сборки, где это требуется согласно инструкции к патчу.

  24. Веб-сервис (папки Services/web, linux/web) теперь ссылается на расширения в подпапке extensions. Убедитесь, что ваш файл app.json в настройке "ProbingPath" содержит относительный путь до этой папки (по умолчанию в сборке это так).

  25. Обновите файл решения Tessa.Extensions.sln. Он содержит ссылки на два новых проекта расширений, которые также требуется скопировать из сборки в ваш репозиторий: Tessa.Extensions.Default.Console и Tessa.Extensions.Console. Первый проект содержит исходные коды всех консольных команд утилиты tadmin, а второй позволяет аналогичным образом добавлять консольные команды в рамках проекта. Такие команды можно будет штатно вызывать при помощи утилиты tadmin (на Windows или Linux). Примеры доступны в руководстве разработчика.

  26. Обновите файл проекта Tessa.Extensions.Server.Web.csproj, используемого для разработки REST-контроллеров в рамках проекта, из аналогичного файла в сборке в папке Source\Extensions\Tessa.Extensions.Server.Web.

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

  28. В сборках расширений Tessa.Extensions.*** (Client, Server, Shared) обновлён пример тестового веб-сервиса для интеграции. Если вы не используете тестовый веб-сервис, то код в проектах можно не обновлять.

  29. В файлах проектов .csproj для сборок расширений Tessa.Extensions.*** (Chronos, Server, Server.Web, Shared) и Tessa.Module.Sample.*** (Server, Shared) обновлён блок со скриптами таким образом, чтобы сборку проектов можно было выполнить из ОС Linux, используя .NET Core SDK. Вы можете не изменять файлы проектов, если выполнять сборку из ОС Linux не требуется.

  30. Если вы используете модули расширений (такие как Tessa.Module.Sample.***), то обновите файл .csproj для серверной сборки (Tessa.Module.Sample.Server), указав <TargetFramework>netcoreapp3.0</TargetFramework> вместо netstandard2.0.

  31. Сборка содержит большое количество изменений API в части асинхронности. Прочтите рекомендации в ReleaseNotes к сборке 3.3.1 в части асинхронности, и примените их к текущей сборке. Также в ваших проектах расширений замените соответствующие сигнатуры методов расширений из "override void BeforeRequest" в "override async Task BeforeRequest" (где вместо "BeforeRequest" последовательно указывайте разные методы расширений, т.е. AfterRequest и др.).

  32. Если обработчики событий в ваших расширениях (такие как Evaluating) также содержат асинхронные вызовы, то убедитесь, что аргументы событий в параметре "e" содержат метод Defer, тогда вызовите метод, обернув в него весь асинхронный код в вашем обработчике (или весь код обработчика целиком): "using (e.Defer()) { …​ /* код с await-ами */ }". В сигнатуре вашего обработчика укажите "async void" или просто "async", если это лямбда-выражение: async (s, e) ⇒ …​ Если метод e.Defer() отсутствует, то вызовите асинхронные методы синхронным образом: MethodAsync().GetAwaiter().GetResult().

  33. Удалены синхронные методы из интерфейса ICardRepository, используйте асинхронные методы и, при необходимости, укажите .GetAwaiter().GetResult() для синхронного вызова.

  34. В коде расширений для объекта DbManager используйте метод Execute<T> вместо ExecuteScalar<T>, и метод ExecuteList<T> вместо ExecuteScalarList<T>.

  35. Подсистема типов условий была вынесена из подсистемы уведомлений как подсистема платформы. Все объекты с именами *NotificationCondition* переименованы в *Condition* и перенесены из Tessa.Notices в Tessa.Platform.Conditions, а namespace Tessa.Compilation.Notifications переименован в Tessa.Compilation.Conditions.

  36. Лист согласования типового решения перенесен в карточку виртуального файла "Лист согласования" и шаблоны файлов "Лист согласования" и "Печатный лист согласования". Все старые расширения на лист согласования больше не поддерживаются по умолчанию, доработку листа согласования можно проводить непосредственно в карточках шаблонов листа согласования. Если необходимо включить старый лист согласования типового решения для поддержки старых расширений, то нужно скопировать файл Fixes\KrApprovalList\KrApprovalList.cs в серверные расширения, где реализованы старые расширения на лист согласования.

  37. Плагин TasksNotificationPlugin теперь работает через подсистему уведомлений. Формируемое уведомление расположено в карточке уведомления "Рассылка о заданиях", а логика загрузки данных письма осталась в коде плагина.

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

  39. Для получения настроек расширений KrSettings укажите в конструкторе расширения объект KrSettingsLazy, на котором в месте использования вызовите метод GetValueAsync. Функция Func<KrSettings> больше не зарегистрирована в Unity.

  40. Подсистема расширений правил доступа была обновлена и теперь методы для проверки правил доступа находятся в IKrPermissionsManager, а не KrPermissionsHelper. Список флагов KrPermissionFlags был перенесен в KrPermissionFlagDescriptors (имена флагов остались прежними). В объекте KrToken свойство Permission теперь представляет из себя не значение типа Enum, а перечисление значений типа KrPermissionFlagDescriptor.

  41. Расширения правил доступа ITaskPermissionsExtension и IKrPermissionsExtension были обновлены на новую подсистему прав доступа и теперь разделены на ITaskPermissionsExtension, ICardPermissionsExtension и IKrPermissionsRuleExtension. Теперь данные расширения регистрируются как обычные расширения через IExtensionContainer.

  42. В расширениях используйте пространство имён Tessa.Themes вместо Tessa.UI.Themes для взаимодействия с темами оформления. Некоторые методы перенесены из ThemeHelper в UIHelper, а метод-расширения для класса Theme из пространства имён Tessa.UI.Themes в Tessa.UI.

  43. При запуске процесса Workflow Engine через IWorkflowEngineProcessor.StartNewProcessAsync теперь передается объект сигнала IWorkflowEngineSignal вместо типа сигнала.

  44. В конструкторе бизнес-процессов в действиях "Задание" и "Группа заданий" изменен порядок обработки события "Выполнить" и обработки таблицы "Варианты завершения" при завершении задания. Теперь сначала выполняются события "Выполнить" из таблицы "Обрабатываемые события", а затем обрабатывается таблица "Варианты завершения".

  45. Консольная команда tadmin SetToken теперь всегда требует путь к папке с файлами app.json в качестве параметра без имени. Ранее использовался или опциональный параметр /folder, или значение из конфигурационного файла, которое удалено в текущей версии.

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

  47. Приложение Docker теперь использует версию PostgreSQL 12 в файле сборки Docker\tessa\docker-compose.yml. Если вы использовали Docker с предыдущими сборками, то в рамках работ по обновлению на новую версию платформы либо отредактируйте файл docker-compose.yml, заменив строку "postgres:12-alpine" на "postgres:11-alpine", чтобы в вашей инсталляции использовалась версия PostgreSQL 11. Либо выполните работу по обновлению файлов базы данных на диске "db" в Docker с версии PostgreSQL 11 на PostgreSQL 12, для этого обратитесь к документации PostgreSQL.

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

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

  1. В типовую поставку добавлен модуль "Форумы и обсуждения". Модуль должен быть указан в лицензии; лицензии Enterprise-редакции включают модуль автоматически, перевыписывать такие лицензии не требуется. Типы документов и карточек, для которых должны быть доступны обсуждения, следует включить в типовое решение, также для них должен стоять соответствующий флажок для работы обсуждений в строке таблицы в карточке настроек "Типовое решение" или в карточке "Тип документа".

  2. В карточках добавлен элемент управления "Представление". Он позволяет вывести любые представления внутри карточки, передав в них параметры через настраиваемый маппинг. Также возможно организовать связанные представления master-detail. Элемент управления не поддерживается в web-клиенте, поддержка будет добавлена в следующих версиях.

  3. В карточках добавлен элемент управления "Выбор цвета" для выбора или отображения цвета в формате ARGB. Элемент управления связывается с полем в карточке типа целое число Int32.

  4. В карточках заголовки блоков и элементов управления теперь могут указываться с форматированием строк локализации "…​ {$Alias} …​".

  5. В "Мои настройки" добавлена вкладка "Персонализация", на которой можно настроить цвет фона для заданий в различных функциональных ролях (автор или исполнитель) и цвет фона сообщений для форумов, все настройки индивидуальны для пользователя. Если какой-либо из цветов не указан (как задано по умолчанию), то используется соответствующий цвет из текущей выбранной темы. Функциональные роли заданий "Автор" и "Исполнитель" указаны в таблице-перечислении FunctionRoles, которая настраивается в справочнике: Администратор - Прочее - Функциональные роли. Для каждой функциональной роли автоматически формируются настройки цветов в диалоге "Мои настройки". В текущем релизе используются только две функциональные роли "Автор" и "Исполнитель", но дополнительные роли можно применять в расширениях, пример доступен в руководстве разработчика.

  6. В теме интерфейса добавлены цвета фона заданий отдельно для авторов и исполнителей с учётом того, видит ли пользователь задание как заместитель. В файле темы .json это ключи: TaskPerformerBackground, TaskPerformerDeputyBackground, TaskAuthorBackground, TaskAuthorDeputyBackground. Таким образом, для каждой темы можно настроить окрашивание заданий авторов и исполнителей в разные цвета без написания расширений. По умолчанию все эти цвета указаны такие же, как и цвета заданий по умолчанию (жёлтые задания).

  7. В подсистему плейсхолдеров добавлена возможность шаблонизировать текст с помощью скриптов. Для этого можно использовать конструкции вида <# …​ #>, <#= …​ #>, в которые можно встроить код. Данная возможность поддерживается в типе карточки Уведомление, в тексте шаблонов файлов текстового типа (.txt, .html) и в настройках действий Задание, Группа заданий, Уведомление в конструкторе бизнес-процессов.

  8. В шаблонах файлов .html и .txt добавлена возможность использовать тег <_table>…​<_/table>, чтобы исключить из документа всю таблицу вместе с заголовками колонок, когда нет ни одной строки внутри таблицы.

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

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

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

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

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

  14. В шаблонах файлов добавлена возможность использования комплексных строк локализаций, внутри которых локализуется текст вида "…​ {$nested_string} …​".

  15. В шаблон файла "Мои задания" добавлена подсветка ячейки со сроком завершения задания при просрочке, аналогично представлению "Мои задания".

  16. Добавление подписок на уведомления в карточке через плитку "Настройки уведомлений по карточке" теперь возможно и без нажатия плитки "Редактировать", если есть доступ на возможность подписываться на уведомление по данной карточке.

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

  18. В тип карточки "Тип условия" добавлено поле "Места использования условия". Данное поле отвечает за то, где данный тип условия доступен для выбора.

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

  20. Лист согласования типового решения перенесен в карточку виртуального файла "Лист согласования" и шаблоны файлов "Лист согласования" и "Печатный лист согласования". Также был добавлен тип условия "Видимость листа согласования".

  21. В конструкторе бизнес-процессов добавлены новые действия "Регистрация" и "Отмена регистрации". Данные действия идентичны этапам "Регистрация" и "Отмена регистрации" из маршрутов в режиме "Без отправки задания".

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

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

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

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

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

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

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

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

  30. В web-клиенте добавлена светлая тема, которая ранее была только в desktop-клиенте.

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

  32. В web-клиенте для каждой темы в соответствие задаются типовые фоны и фон по умолчанию, устанавливаемый при переходе на эту тему с другой темы, где также используется типовой фон. Файлы типовых фонов указываются в .json файле темы, это позволяет добавлять, удалять или заменять любые типовые фоны. Поведение аналогично desktop-клиенту.

  33. В web-клиенте добавлена возможность устанавливать корпоративные фоны по умолчанию для всех пользователей web-клиента. Настройка расположена в карточке "Настройки сервера". Для desktop-клиента по-прежнему используется фон, опубликованный в конфигурационном файле app.json для приложения TessaClient (настройка DefaultWallpaper).

  34. В web-клиенте при настроенной Windows-аутентификации выполняется автоматической вход для доменной учётной записи. Если компьютер не входит в домен, то браузер отображает окно ввода доменных логина/пароля. Если автоматический вход необходимо отключить, то для настройки "WinAutoLogin" укажите значение false в файле app.json веб-сервиса.

  35. В web-клиенте добавлен манифест PWA-приложения (Progressive Web App), расположенный по пути wwwroot/tessa.webmanifest. Это позволяет браузерам на мобильных устройствах устанавливать на рабочий стол ярлык для запуска сайта как отдельного от браузера приложения. PWA-приложение использует Service Worker для оффлайн-кэширования при наличии валидного сертификата HTTPS. При необходимости вы можете изменить свойства манифеста в этом файле, а также установить start_url и scope как путь от имени сервера, например "/tessa/web" (по умолчанию не установлены, поскольку путь может отличаться). Подробное описание формата манифеста доступно на сайте W3C: https://w3c.github.io/manifest

  36. В контрол "Ссылка" для представлений добавлен вызов выпадающего списка кнопками стрелок (вверх и вниз).

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

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

  39. Доступные для выбора языки локализации теперь определяются строками в системной таблице-перечислении Languages. Для добавления языка достаточно отредактировать таблицу в схеме данных (указав отдельную библиотеку схемы). Также добавьте строку локализации вида "LanguageTemplate_код-языка".

  40. Изменено кодирование в теле сообщений почтовых уведомлений с Base64 на EightBit.

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

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

  43. Добавлена аутентификация Kerberos для серверов приложений на Linux и на сервере приложений Windows, который не входит в домен, и поэтому аутентификация Windows для него не работает. Также появилась возможность выполнять вход LDAP для пользователей с типом входа "Пользователь Windows".

  44. Добавлены настройки для аутентификации и синхронизации c AD / LDAP: количество попыток подключения к реферальным серверам и задержка перед повторным подключением. Также добавлена возможность отключать ненужные реферальные сервера и игнорировать системные разделы, такие как: ForestDnsZones, DomainDnsZones, Configuration.

  45. В файле app.json для TessaClient добавлены настройки подключения к прокси-серверу ProxyUri и ProxyClass, они по умолчанию закомментированы символами "//", которые надо удалить для того, чтобы соответствующая настройка работала. ProxyUri указывает адрес и порт для прокси-сервера (например, для Fiddler укажите http://127.0.0.1:8888), когда настройка указана, то весь трафик будет проходить через прокси. При этом и базовый адрес, и адрес прокси должны быть указаны как IP-адрес или имя сервера, но не как localhost (loopback-интерфейс игнорирует прокси). Если помимо ProxyUri задать настройку ProxyClass, то вместо стандартного прокси-объекта System.Net.IWebProxy будет использоваться класс с указанным именем типа. Этот класс должен иметь конструктор с единственным параметром типа Uri - это адрес из настройки ProxyUri. Укажите "Tessa.UI.WebProxy, Tessa.UI", чтобы использовать прокси с аутентификацией, при этом будет отображаться окно с логином-паролем.

  46. В сборке в папку с проектами расширений "Source" добавлен файл Export.bat, который позволяет выполнить полный экспорт конфигурации с карточками из веб-сервиса (т.е. из базы данных) по аналогии с тем, как устроена папка "Configuration" в сборке. Аналогично добавлен файл export.sh для запуска под Linux, не забудьте указать ему права перед запуском: sudo chmod 755 export.sh. Описание доступно в руководстве администратора в разделе "Экспорт конфигурации веб-сервиса".

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

  48. Утилита tadmin: реализовано API для расширения набора консольных команд. Исходный код всех типовых консольных команд доступен для модификации в проектных расширениях Tessa.Extensions.Default.Console. В проекте Tessa.Extensions.Console рекомендуется добавлять новые консольные команды при необходимости. Примеры доступны в руководстве разработчика. Скомпилированные расширения с консольными командами подключаются таким же образом, как и другие расширения, - посредством файлов extensions.xml. В сборке по умолчанию расширения утилиты tadmin содержатся в папке Tools/extensions и linux/tools/extensions.

  49. Утилита tadmin: команды DeleteCards, ImportCards, ImportLocalization теперь сразу выводят сообщения о произведённых действиях в лог и по умолчанию в окно консоли после того, как действие производится (например, сразу после удаления или импорта карточки). Если какое-то из действий выполняется долго или приводит к зависанию, то теперь это заметно в логе и в окне консоли.

  50. Утилита tadmin: для команды ExportCards добавлен ключ /localize для локализации имён файлов с карточками на указанный язык, если они являются строками локализации (начинаются с символа "$"). Например: /localize:en или /localize:ru.

  51. Утилита tadmin: добавлена команда ExportScheme для экспорта схемы данных, полученной от веб-сервиса, в структуру папок схемы (файл *.tsd для описание базы данных и вложенные подпапки).

  52. Утилита tadmin: добавлена команда ExportSchemeSql для экспорта схемы данных, полученной из базы данных по прямому SQL-соединению, в структуру папок схемы (файл *.tsd для описания базы данных и вложенные подпапки).

  53. Утилита tadmin: добавлена команда ExportLocalization для экспорта библиотек локализации, полученных от веб-сервиса, в файлы *.tll.

  54. Утилита tadmin: добавлена команда ExportTypes для экспорта типов карточек, файлов и заданий, полученных от веб-сервиса, в файлы *.jtype.

  55. Утилита tadmin: добавлена команда ExportViews для экспорта представлений, полученных от веб-сервиса, в файлы *.view.

  56. Утилита tadmin: добавлена команда ExportWorkplaces для экспорта рабочих мест, полученных от веб-сервиса, в файлы *.workplace.

  57. API: Все расширения и большинство API в платформе сделаны асинхронными, это относится и к серверным API (веб-сервисы, Chronos), и к клиентским. В расширениях токен отмены операции передаётся в свойстве context.CancellationToken. На текущий момент синхронными остаются части API, связанные с маршрутами, Workflow Engine, и некоторыми API из типового решения Kr***. Скрипты в различных карточках настроек также синхронные, в т.ч. в карточках маршрутов, действий в Workflow Engine, в правилах доступа, шаблонах файлов и др.

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

  59. API: Добавлен новый вид серверных расширений IPlaceholderReplaceExtension, позволяющий модифицировать результат замены плейсхолдеров или сам формируемый документ при замене плейсхолдеров. Задействуется при обработке шаблонов файлов любых типов.

  60. API: В объект IPlaceholderManager в метод ReplaceText добавлен параметр withScripts, который включает возможность использования шаблонизации с помощью скриптов <#…​#> при замене переданного текста.

  61. API: В контекст обработки типов условий добавлено свойство CardID, которое возвращает идентификатор карточки.

  62. API: При выполнения проверки условия подсистемы типов условий в конструкторе бизнес-процессов добавлена возможность получить текущий контекст обработки процесса из Info контекста. Это можно сделать, добавив using Tessa.Workflow.Helpful, с помощью метода context.GetWorkflowContext(). Если проверка условия производится не в рамках обработки процесса из конструктора бизнес-процессов, данный метод вернёт null.

  63. API: Методы интерфейса IAdvancedCardDialogManager теперь возвращают объект IUIContext для диалога, который был открыт. Это позволяет в вызывающем такой метод коде получить данные, заполненные в диалоге IUIContext.CardEditor.CardModel.Card.

  64. API: В ICardUIExtensionContext добавлено свойство StoreRequest, позволяющее получить доступ к реквесту на сохранение в Saving расширении.

  65. API: В CardTask добавлено поле Settings, являющееся словарем, и позволяющее хранить произвольные данные для задания в рамках жизни задания. Данные хранятся в таблице Tasks столбец Settings.

  66. API: В API конвертации файлов IFileConverter для запроса IFileConverterRequest добавлены свойства CardTypeID, CardTypeName, FileTypeID, FileTypeName и FileRequestInfo, которые будут использованы в запросе на загрузку контента файла для конвертации в плагине Chronos (значения из FileRequestInfo переносятся в request.Info запроса GetFileContent). Задействуйте новые свойства для написания расширений на конвертируемые файлы в виде CardGetFileContentExtension, в т.ч. для конвертации виртуальных файлов. Эти свойства также используются при вычислении хеш-кода RequestHash, который влияет на возможность параллельно выполнять конвертацию одного и того же файла.

  67. API: В API синхронизации с AD / LDAP добавлена возможность изменять состав статической роли или подразделения во время синхронизации.

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

  69. API: В этапы маршрутов "Согласование", "Подписание", "Редактирование", "Регистрация" добавлен список завершённых заданий в Stage.Info по ключу "Tasks". Значение доступно в скриптах постобработки.

  70. API: Добавлен метод IFileConverter.DeleteFileAsync, позволяющий удалить сконвертированный файл из кэша, если он там присутствует. Для таких сценариев, как конвертация, инициируемая с веб-сервиса, но фактически выполняемая в плагине Chronos, где кэш файлов требуется как способ передачи содержимого файла после конвертации. Если известно, что операция по конвертации уникальна и результат конвертации не будет нужен, то посредством метода DeleteFileAsync можно удалить содержимое файла из карточки "Кэш файлов".

  71. API: Добавлен флаг FileConverterRequestFlags.AllowConcurrentIdenticOperations, позволяющий выполнять параллельную конвертацию файлов с идентичными параметрами конвертации IFileConverterRequest, определяемыми хеш-значением RequestHash.

  72. API: В модели представления контролов "Целое число", "Вещественное число" и "Десятичное число" добавлена возможность изменять свойства MinValue и MaxValue, ограничивающие соответственно минимально и максимально допустимые значения, вводимые пользователем.

  73. API: В расширениях на метаинформацию ICardMetadataExtension в методе ModifyTypesAsync теперь можно отложить проверку валидности схемы данных для типа карточки, добавив его идентификатор в коллекцию context.DelayedSchemeCheckCardTypeIDSet, если некоторые из секций или колонок cardType.SchemeItems отсутствуют в схеме данных (в т.ч. как виртуальные), но будут добавлены как объекты CardMetadataSection и CardMetadataColumn позже в методе расширения ModifyMetadataAsync. Если по завершении этого метода в типе карточки cardType.SchemeItems присутствуют ссылки на секции или колонки, отсутствующие в секциях cardMetadata.GetSectionsAsync(), то тип считается повреждённым, и добавляется такое же сообщение об ошибке, как если бы проверка типа не была отложена.

  74. API: Обновлена подсистема правил доступа. Теперь проверка настроек доступа через подсистему правил доступа выполняется через IKrPermissionsManager.

  75. API: Любые классы расширений (наследники IExtension, которые регистрируются как RegisterExtension) могут реализовать интерфейс IAsyncInitializable для асинхронной инициализации, которая выполняется после вызова конструктора.

  76. API: Классы для взаимодействия с темами интерфейса в большинстве своём перенесены в пространство имён Tessa.Themes в сборке Tessa.dll, при этом объекты отвязаны от зависимостей WPF. Т.о. информацию по темам интерфейса можно анализировать на сервере, в т.ч. выполнять парсинг .json файлов темы, и получать значения цветов и кистей в виде Storage-объектов. Это используется для поддержки тем в web-клиенте.

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

  78. API: При отправке писем можно указать новое свойство MailInfo.Format с указанием формата отправляемого сообщения. По умолчанию это Html (как и было ранее), но также можно указать PlainText для отправки в формате "простой текст".

  79. API: Добавлен интерфейс IBarcodeConverter (Tessa.Extensions.Platform.Server.DocLoad), используя который можно изменить типы штрих-кодов для их поиска и обработки в соответствии с используемой библиотекой, если в расширении IDocLoadExtension вместо библиотеки ZXing была использована другая библиотека. Реализация по умолчанию доступна в классе Tessa.Extensions.Default.Server.DocLoad.BarcodeConverter с открытым кодом.

  80. API: Обновлены библиотеки: .NET Core 3.0.0, AvalonEdit 6.0.0, BarcodeLib 2.2.3, CsvHelper 13.0.0, HtmlAgilityPack 1.11.16, ITfoxtec.Identity.Saml2 4.0.2, NLog 4.6.8, Npgsql 4.1.1, Linq2DB 2.9.3, Microsoft.CodeAnalysis.CSharp 3.2.1, Swashbuckle.AspNetCore 5.0.0-rc4, UAParser 3.1.43, ZXing.Net 0.16.5.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

19.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. Дерегистрация согласованного документа теперь переводит его в состояние "Согласован".

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

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

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

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

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

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

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

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

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

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

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

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

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

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

21.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. Исправлен экспорт карточек шаблонов этапов.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

23.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().

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

25.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().

25.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, при этом версии самих библиотек не изменились.

25.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. Если при импорте представлений с заменой прав доступа указаны роли, которые отсутствуют в системе, то в сообщении об ошибке теперь выводятся алиас представления и идентификатор роли.