Перейти к содержанию

Версия 3.6 (06.06.2021)

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

  1. Изменены рабочие места: Administrator (добавлен узел “Приложения”), User (настройки папки “Диаграммы” и её узлов).
  2. Изменены представления: ActionHistory, ActiveWorkflows, Applications, AvailableApplications, AvailableDeputyRoles, AvailableDeputyUsers, BusinessProcessTemplates, DeputiesManagement, DurableRoles, EdsManagers (добавлено), ErrorWorkflows, KrFilteredStageGroups, KrFilteredStageTypes, KrPermissionsExtendedCards, KrPermissionsExtendedFiles, KrPermissionsExtendedMandatory, KrPermissionsExtendedTasks, KrPermissionsReport, KrSecondaryProcesses, KrStageGroups, KrStageRows, KrStageTemplates, KrTypesForDialogs, LastTopics, Languages, LoginTypes, MyTasks, MyTopics, ReportCurrentTasksRules, Roles, SignatureDigestAlgos, TaskHistory, TopicParticipants, Users, WfResolutionAuthors, WorkflowNodeInstanceSubprocesses.
  3. Изменены таблицы: ActionHistory, ActionHistoryTypes, ActionHistoryVirtual, ActionTypes, AutoApproveHistory, BackgroundColors (добавлена), BlockColors (добавлена), BusinessProcessButtons, BusinessProcessVersions, ConditionUsePlaces, CustomBackgroundColorsVirtual (добавлена), CustomBlockColorsVirtual (добавлена), CustomForegroundColorsVirtual (добавлена), Deleted, Dialogs, DocumentCommonInfo, DocumentTypes, Errors, FileConverterCache, Files, FileTemplates, FileTemplateTypes, FileVersions, FmMessages, FmTopicParticipantRolesUnsubscribed, FmUserStat, ForegroundColors (добавлена), InstanceTypes (добавлена), KrAdditionalApproval, KrAdditionalApprovalTaskInfo, KrApprovalCommonInfo, KrApprovalCommonInfoVirtual, KrCommentsInfo, KrCommentsInfoVirtual, KrDocType, KrPermissionExtendedCardRuleFields, KrPermissionExtendedFileRuleCategories, KrPermissionExtendedMandatoryRuleFields, KrPermissionExtendedMandatoryRuleOptions, KrPermissionExtendedMandatoryRuleTypes, KrPermissionExtendedTaskRuleFields, KrPermissionExtendedTaskRuleTypes, KrPermissions, KrRequestComment, KrRouteInitializationActionVirtual, KrSecondaryProcessCommonInfo, KrSecondaryProcesses, KrSettingsCardTypes, KrSigningActionVirtual, KrSigningStageSettingsVirtual, KrSigningTaskOptions, KrStages, KrTask, KrTypesForPermissionsExtension, KrUniversalTaskActionButtonsVirtual, KrUniversalTaskOptionsSettingsVirtual, KrVirtualFiles, KrVirtualFileVersions, NotificationTypes, OnlyOfficeFileCache (добавлена), OnlyOfficeSettings (добавлена), Operations, OperationsVirtual, Outbox, Partners, PartnersContacts, PersonalRoles, PersonalRoleSatellite, ProtocolCompletedTasks, ProtocolResponsibles, RoleDeputies, RoleDeputiesManagementRoles, RoleGenerators, Roles, SearchQueries, ServerInstances, SignatureEncryptDigestSettings, SignatureManagerVirtual (добавлена), SignatureSettings, TaskHistory, TaskHistoryGroups, Tasks, TaskTypes, Templates, TEST_CarMainInfo, TEST_CarSales, Types, Views, WfResolutionsVirtual, WfSatellite, WorkflowCounters, WorkflowEngineErrors, WorkflowEngineLogs, WorkflowEngineNodes, WorkflowEngineProcesses, WorkflowEngineSatellite (удалена), WorkflowProcesses, WorkflowTasks, Workplaces.
  4. Изменены процедуры: CalendarPrepareQuants, ObtainReaderLock, ObtainWriterLock, ObtainWriterLock2 (добавлена).
  5. Изменены функции: CalendarAddWorkingDaysToDateExact, FormatAmount, GetFileExt (удалена), GetString, Localization, Localize.
  6. Изменены миграции: Platform.
  7. Изменены библиотеки схемы: FullTextSearch (добавлена).
  8. Изменены типы: ActionHistoryRecord, AdSync, Application, AutoCompleteDialogs (добавлен), AuthorCondition, BusinessProcessTemplate, Car, ContextRole, Deleted, DepartmentRole, Dialogs, DocTypeCondition, DynamicRole, Error, FileConverterCache, KrAdditionalApproval, KrApprove, KrCard, KrDialogStageTypeSettings, KrDocType, KrPermissions, KrRouteInitializationAction, KrSatellite, KrSecondaryProcess, KrSecondarySatellite, KrSettings, KrSigning, KrSigningAction, KrSigningStageTypeSettings, KrUniversalTaskAction, KrUniversalTaskStageTypeSettings, MetadataEditor (добавлен), Metarole, OnlyOfficeSettings (добавлен), Partner, PartnerCondition, PersonalizationUserSettings, PersonalRole, Protocol, RoleGenerator, RouteCondition, ServerInstance, ShowDialog, SignatureSettings, StaticRole, TaskRole, Template, ViewExtensions (добавлен), VirtualScheme (добавлен), WfResolution, WfSatellite, WorkflowProcess.
  9. Изменены карточки: ApprovalHistory, Calendar (settings) (необязательное изменение), Default access rules (необязательное изменение), Default acquaintance access rule (необязательное изменение), DepartmentCondition, OnlyOffice (settings) (добавлена), PrintableApprovalHistory, SendProtocolTasksButton, Server settings (settings) (поле HelpUrl), Signature settings (settings) (изменения описаны ниже, укажите в поле “Алгоритм хеширования TSP” значение “SHA256”), StartProcessButton, TasksNotification, TaskTypeCondition, WorkflowCheckContextRoleTileExtension (переименован в WorkflowCheckRolesForExecutionTileExtension).
  10. Изменены библиотеки локализации.
  11. Перед обновлением схемы выполните скрипт Fixes/Migration-3.6-pre.**.sql. Далее скопируйте и выполните все команды ConvertBson из Upgrade.bat/upgrade.sh, где есть вывод на консоль и в скобках указано “3.6”. Затем обновите схему данных. После обновления скопируйте и запустите команды ConvertTypes, ConvertSearchQueries, ConvertWorkplaces и ConvertWorkplaceSettings из Upgrade.bat/upgrade.sh, где есть вывод на консоль и в скобках указано “3.6”. После выполните скрипт Fixes/Migration-3.6.**.sql (версия скрипта “ms” или “pg” для соответствующей СУБД). Мы рекомендуем выполнить автоматизированное обновление Upgrade.bat/upgrade.sh, где не потребуется выполнять вызовы команд вручную.
  12. Изменена версия схемы. При открытии схемы данных система обновит схему на новую версию. При переходе на новую версию схемы во все таблицы, имеющие тип секции “Иерархическая”, будет добавлен новый индекс на системную колонку “ParentRowID”.
  13. Обновите файл app.json для сервисов web и chronos.
  14. Класс Tessa.UI.WebProxy, используемый в desktop-приложениях для подключения к прокси серверу с аутентификацией, переименован в Tessa.UI.LoginDialogProxy. Обновите файлы app.json в desktop-приложениях, если вы их изменяли относительно типовой поставки.
  15. В Chronos все настройки из файла Chronos.dll.config перенесены в файл app.json в группу настроек “Settings”. Также подключение зависимостей Chronos для Linux добавлено в настройку “ChronosDependencies”, которая указывает класс из библиотеки Chronos.Platform.Linux при запуске на ОС Linux. Проверьте актуальность ваших настроек в файле app.json для Chronos.
  16. Для кнопки маршрутов “Запустить процесс” указана строка в таблице со списком условий, скрывающая кнопку для типов “Протокол”. Если в проектном решении требуется использовать вкладку “Маршруты” и запуск основного процесса маршрута, то удалите это строку.
  17. Изменены файлы тем интерфейса в подпапке themes для приложения TessaClient и в веб-сервисе (папка wwwroot\themes).
  18. В карточке настроек ЭП для всех алгоритмов подписи “ГОСТ” укажите менеджер подписи “ServiceEDSManagerForCAdES”, а для алгоритмов “Другие” укажите “DefaultEDSManager”.
  19. Эта версия платформы поддерживает обновление с версии 3.0.0 или старше. При необходимости выполнить обновление с более ранних версий, выполните переход на одну из предыдущих сборок (например, 3.4.0 или 3.5.0). Запуск скриптов обновления с более ранних сборок 2.x приведёт базу данных в нерабочее состояние.
  20. С этой версии платформы изменились требования к версиям дистрибутивов ОС Linux. Добавлена поддержка дистрибутивов РЕДОС 7.3 МУРОМ, ALT Linux 9.1, Astra Linux Common Edition 2.12.40, Debian 10, Ubuntu 21.04. Прекращена поддержка Red Hat Enterprise Linux (RHEL) 7, Oracle Linux и Ubuntu 17.10 (.NET 5.0 не поддерживает эти дистрибутивы, также их поддержка прекращена у вендора). Полный список поддерживаемых дистрибутивов (с которыми тестировалась платформа) доступен в документе “Руководство по установке на Linux”.
  21. Протокол TLS 1.0 теперь всегда явно запрещён к использованию со стороны клиентских приложений и сервера. Все поддерживаемые платформой версии ОС и браузеров имеют возможность использовать протокол TLS 1.1 или старше.
  22. Tessa Applications 3.5.0 в исходной сборке (без патчей), или с установленными патчами 1 или 2, несовместим с сервером платформы TESSA 3.6 или старше. Менеджер приложений этих версий не сможет подключиться к серверу приложений, и поэтому не сможет обновить себя с этого сервера. Это не затрагивает Tessa Applications с установленным третьим патчем (версия 3.5.0.3) или старше, а также Tessa Applications 3.4.0. Для пользователей с несовместимой версией вы можете установить Tessa Applications из msi-пакета, при этом можно использовать настройку “Сохранить существующие параметры подключения”.
  23. Библиотеки локализации, рабочие места и представления преобразованы в новый формат (папки Configuration/Localization, Configuration/Views, Configuration/Workplaces). Перед объединением проектной конфигурации с этой сборкой выполните команду tadmin ConvertConfiguration “Путь_к_вашей_папке_Configuration” - это преобразует файлы в ней к новому текстовому формату, который можно будет объединить средствами репозитория с конфигурацией из этой сборки. Мы рекомендуем в дальнейшем использовать новый формат библиотек локализации .jlocalization, рабочих мест .jworkplace и представлений .jview.
  24. Приложение-помощник web-клиента Deski обновлено до версии 2.1. Для того, чтобы использовать новую функциональность, добавленную в этой сборке, которая задействует Deski, пользователям необходимо будет обновить Deski. Об этом пользователю сообщит web-клиент, когда он выберет новые функции, такие как объединение и сравнение файлов в Word. Deski версии 2.1 является обратносовместимым, т.е. его также можно использовать для взаимодействия с web-клиентом платформы 3.5.0. На компьютере пользователя может быть установлена только одна версия Deski, предыдущая версия будет удалена при установке новой.
  25. В desktop-клиенте добавлена новая группа для тайлов “TileGroups.Workflow”, в которую добавляются тайлы, созданные вторичными процессами маршрутов и кнопками шаблонов бизнес-процессов. Данная группа располагается между группами “TileGroups.Cards” и “TileGroups.Settings”.
  26. В web-клиенте группы тайлов “tileGroups.KrButtons” и “tileGroups.WorkflowButtons” объединены в одну группу “tileGroups.Workflow”. Данная группа располагается между группами “tileGroups.Cards” и “tileGroups.Settings”.
  27. Удалены метод расширения unityContainer.RegisterHelpAction() и делегат SetupHelpDialogAction для кастомизации окна “Справка” в desktop-клиенте, поскольку окно “Справка” более не поддерживается.
  28. Экспорт файлов ЭП в TessaClient теперь выполняется с расширением .sig, при этом содержимое файла не было изменено (ранее использовалось расширение .sgn). Импорт ЭП возможен для файлов с любым расширением. Для того, чтобы определить расширение .sgn как в предыдущих сборках, реализуйте объект с интерфейсом IFileSignatureExporter (пример есть в ReleaseNotes).
  29. Если для сборки проектов расширений вы используете IDE Visual Studio 2019, то теперь требуется версия 16.8 или старше. Также, независимо от выбранной IDE, требуется установленный пакет .NET SDK версии 5.0.100 или старше (устанавливается вместе с Visual Studio). Ссылка для скачивания последней версии доступна по адресу https://dotnet.microsoft.com/download/dotnet/5.0.
  30. Обновите файлы проектов csproj для поддержки платформы .NET 5.0 и новой версии языка C# 9, и для копирования расширений в папку Bin\Tessa.Extensions.Console.
  31. В папки проектных расширений добавлены файлы .editorconfig с рекомендуемыми настройками анализаторов C#, которые выполняются при сборке. Мы рекомендуем скопировать их в существующие папки проектных расширений, после чего при сборке могут возникнуть предупреждения, которые рекомендуется исправить.
  32. В проектных расширениях для получения пустого массива используйте стандартный метод Array.Empty<T>() из пространства имён System вместо EmptyHolder<T>.Array.
  33. В проектных расширениях замените вызов RuntimeHelper.IsWindows на OperationSystem.IsWindows(), а вызов RuntimeHelper.IsLinux на OperationSystem.IsLinux().
  34. Удалены типы, свойства и методы, связанные с потоковой инициализацией посредством обработчиков IInitializationHandler в desktop-клиентах. Требуемые данные передавайте посредством ключей в context.Response.Info. Если в проектном решении присутствуют расширения на инициализацию, выполняющие метод context.AddHandler() для указания способа обработки части бинарного потока, то замените их на использование context.Response.Info, пример в расширениях типового решения KrServerInitializationExtension и KrClientAndConsoleInitializationExtension.
  35. Вместо библиотеки System.Data.SqlClient для взаимодействия с СУБД MSSQL Server теперь используется библиотека Microsoft.Data.SqlClient. Если в коде ваших расширений присутствовали ссылки на пространство имён System.Data.SqlClient, то замените их на Microsoft.Data.SqlClient. За подробной информацией по миграции кода обратитесь на страницу https://github.com/dotnet/SqlClient/blob/master/porting-cheat-sheet.md
  36. В проектных расширениях на импорт карточек ICardStoreExtension, зарегистрированных как WhenMethod(CardStoreMethod.Import) или WhenAnyStoreMethod(), теперь необходимо учитывать, выполняется ли импорт новой карточки, или это импорт с объединением для уже существующей карточки. Для этого достаточно проверить свойство context.Request.Card.StoreMethod (Insert - новая карточка, Update - импорт с объединением).
  37. Из команды tadmin ImportCards удалён ключ /c, который определял, что карточки должны удаляться перед импортом, если они существуют в БД. Теперь импорт выполняется в режиме обновления (слияния) существующих в БД карточек с импортируемыми. Если необходимо импортировать карточку с удалением существующей, то предварительно требуется вызвать команду DeleteCards (подробности по использованию команды в руководстве администратора).
  38. Веб-сервис web для json-сериализации использует Newtonsoft.Json вместо System.Text.Json. Это соответствует поведению в сборках 3.0.0-3.3.1 и влияет на контроллеры в проектных решениях, которые используют такую сериализацию.
  39. В карточке “Настройки сервера” интервал, по которому TessaClient опрашивает сервер на наличие новых сообщений для форумов и обсуждений, был увеличен с 60 секунд до 5 минут. Вы можете импортировать карточку “Server settings (settings)” или изменить значение вручную.
  40. При добавлении типа карточки “Сотрудник” в типовое решение для того, чтобы пользователь мог изменять поля “Подразделения” и “Статические роли”, типы карточек “Подразделение” и “Статическая роль” должны быть также добавлены в типовое решение, пользователь должен иметь права на редактирование данных типов карточек, а в расширенных настройках прав доступа для типа карточки “Сотрудник” должны быть выданы права на редактирование секций “PersonalRoleDepartmentsVirtual” и “PersonalRoleStaticRolesVirtual” соответственно.
  41. В представлениях, используемых в проектном решении, замените устаревшие языковые конструкции следующим образом: columns - if(Normal); if_def(Symbol)/if_def_else(Symbol) - if(Symbol); if_not_def(Symbol)/if_not_def_else(Symbol) - if(!Symbol); param_expr(P) - param(P). Удалите конструкцию if_def_any, оставив её содержимое, т.к. содержимое всегда включалось в результирующий запрос, поскольку в представление всегда передаются системные параметры CurrentUserID и др.
  42. В коде расширений некоторые синхронные API переделаны на аналогичные асинхронные, например, вместо свойства view.Metadata используйте метод view.GetMetadataAsync(ct). Следуйте инструкциям из предыдущих сборок, связанных с асинхронностью, если ваш код не компилируется при обновлении.
  43. В расширениях для классов и методов платформы вместо перечисления System.Data.DbType для обозначения типа колонки теперь используется перечисление Tessa.Platform.Data.SchemeDbType. Вам может потребоваться переименовать название типа в коде расширений проектного решения, при этом названия для значений перечислений не изменились.
  44. В коде проектных расширений, где выполняется обращение к кэшу карточек настроек ICardCache.Cards.GetAsync(“cardTypeName”), вместо объекта карточки Card теперь возвращается объект CardCacheValue<Card>. Вызовите на возвращённом значении метод GetValue(), чтобы получить объект карточки или выбросить исключение, если возникла ошибка при получении карточки. Перед вызовом метода GetValue() вы можете проверить ошибку, используя свойства объекта Result и ValidationResult.
  45. В коде проектных расширений, где выполняется обращение к реестру типов действий IWorkflowAction, необходимо получить объект по интерфейсу IWorkflowActionRegistry из Unity-контейнера.
  46. В коде проектных расширений, где выполняется обращение к реестру расширений прав доступа к тайлам WorkflowEngine, необходимо получить объект по интерфейсу IWorkflowEngineTileManagerExtensionRegistry из Unity-контейнера.
  47. При использовании метода IStorageListProvider.GetStorage (например, для объектов ListStorage<T>) возвращаемое значение теперь имеет тип IList вместо IList<object>. Измените этот тип при возникновении ошибок компиляции в проектных расширениях.
  48. Добавлена асинхронность ValueTask в методы интерфейса IEDSManager. Реализации этого интерфейса, в т.ч. классы-наследники EDSManager, должны обновить сигнатуры методов.
  49. Используйте пространство имён Newtonsoft.Json вместо Tessa.Json при необходимости указать атрибуты для свойств и полей сериализуемого в текст объекта, такие как [JsonIgnore] или [JsonProperty].
  50. Для бинарной сериализации в формате bson используйте вызов TessaBsonSerializer.Instance вместо TessaSerializer.Instance. При этом бинарная сериализация не поддерживает интерфейс IJsonSerializable, который теперь задействован только для текстовой сериализации в json или typed json. Интерфейсы IBsonSerializable и IBinarySerializable по-прежнему можно использовать для бинарной сериализации.
  51. Атрибуты [SessionMethod] и [SessionToken], используемые при написании контроллеров веб-сервиса, перенесены из пространства имён Tessa.Platform.Runtime в Tessa.Web.
  52. Класс TessaControllerBase удалён, вместо него используйте стандартный класс Controller или ControllerBase. Константы TessaBson и TessaBsonDeflate можно получить как MediaTypes.TessaBsonName и MediaTypes.TessaBsonDeflate. Методы BinaryStream и Bson доступны как методы-расширения класса Controller, их можно вызвать как this.BinaryStream() и this.Bson(), подключив пространство имён Tessa.Web. Мы не рекомендуем использовать бинарную сериализацию Bson, кроме как для обратной совместимости.
  53. Если вы используете интерфейсы IRegistryItem и IRegistry<T>, то замените их на IRegistryItem<Guid> и IRegistry<Guid, T>, поскольку в интерфейсы добавлен параметр-тип с идентификатором элемента в реестре. В предыдущих сборках было возможно использовать идентификатор Guid, тогда как начиная с этой сборки можно использовать int и другие типы в качестве идентификатора.
  54. Перечисление ActionType заменено на одноимённый класс. Используйте ActionTypes.XXX вместо ActionType.XXX для указания типа действия в истории. Например, вместо ActionType.Import укажите ActionTypes.Import.
  55. Методы добавления этапа в маршрут IKrScript.AddStage и IKrScript.GetOrAddStage заменены на асинхронные IKrScript.AddStageAsync и IKrScript.GetOrAddStageAsync, соответственно.
  56. Удалены свойства объекта DbManager, которые напрямую возвращают свойства объекта DataConnection. Явно обратитесь к свойству DataConnection, чтобы получить его значение. Например, вместо вызова db.Transaction укажите db.DataConnection.Transaction.
  57. Свойство IFile.Options (и CardFile.Options) теперь сериализуется и десериализуется как типизированный json (ранее использовался нетипизированный json). Метод DeserializeOptions теперь возвращает Dictionary<string, object> (ранее использовался ISerializableObject).
  58. Изменены вызовы методов API, требуемые для корректного создания веб-приложения ASP.NET Core, использующего API TESSA. Обратитесь к руководству разработчика.
  59. При установке патчей в папку веб-сервиса “web” копируйте с заменой файлы patch*.json в папку с файлом app.json.
  60. Изменён формат данных взаимодействия между web-клиентом и сервером. Web-клиент взаимодействует с сервером при помощи формата TypedJson.
  61. При установке на Linux без использования Unix-сокетов убедитесь, что в файле сервиса /etc/systemd/system/tessa.service в строке “ExecStart=/home/tessa/tessa/web/Tessa.Web.Server” указан номер порта 5000, т.е. следующим образом (без кавычек): “ExecStart=/home/tessa/tessa/web/Tessa.Web.Server 5000”. По умолчанию помимо прослушивания http для порта 5000 также выполняется прослушивание https для порта 5001. Чтобы использовать только http и 5000, их надо указать явно.
  62. В руководстве по установке обновлён раздел “Локальная установка без настройки IIS”. Обратитесь к обновлённому разделу для корректной установки системы без использования IIS.
  63. Изменён формат документации, теперь все руководства доступны в едином сайте со сквозным поиском. Запустите Docs\DocServe.exe из архива со сборкой, чтобы открыть документацию в браузере. Значок DocServe отображается в трее, в контекстном меню его можно закрыть.
  64. Для определения версий во всех проектах расширений и модулей используйте файлы: Tessa.Extensions.targets вместо ExtensionsVersion.exe и Tessa.Module.targets вместо ModuleVersion.exe. Они расположены в папке с файлом решения Tessa.Extensions.sln. Также в файлах Tessa.targets и Tessa.Version.targets содержится информация, разделяемая между проектами типового решения, их рекомендуется обновлять вместе с переходом на новую сборку или патч платформы.

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

  1. В web-клиенте добавлено отображение многострочного текста в файлах карточки для группировок по копиям и по циклам согласования, которые теперь выглядят идентично desktop-клиенту. Также такая возможность добавлена в API.
  2. В web-клиенте в файловом контроле добавлена возможность совершать операции сразу над несколькими файлами.
  3. В web-клиенте добавлены тултипы для кнопок в области предпросмотра.
  4. В web-клиенте добавлен тултип для кнопки множественного выбора строк в представлениях.
  5. В web-клиенте добавлен вывод данных имени пользователя в заголовок вкладки браузера.
  6. В web-клиенте ссылки на файлы могут быть созданы без указания идентификатора версии. В этом случае будет использоваться последняя версия файла.
  7. В web-клиенте добавлена поддержка редактирования в элементе управления “Текст с форматированием”.
  8. В web-клиенте расширены возможности редактирования сообщений в обсуждениях (форумах).
  9. В web-клиенте добавлена кнопка переключения режима растягивания по ширине для обсуждений.
  10. В web-клиенте в разделе “Участники” в обсуждениях добавлено контекстное меню для изменения и удаления участников.
  11. В настройки колонки таблицы добавлен флаг “Применять формат колонки для пустых значений”. Он позволяет определить, должен ли применяться заданный в настройках колонки “Формат колонки”, если значение пустое. Также изменено поведение по умолчанию. Раньше система всегда выводила формат колонки, даже если значение было не задано. Теперь она выводит формат колонки для пустого значения только при наличии данного флага.
  12. В маршрутах в этап “Диалог” добавлен индикатор (“*“) наличия текста сценариев: валидации и сохранения.
  13. Всю информацию, включая версию приложения, версию ОС и адрес сервера, теперь можно выделить и скопировать в буфер обмена в окнах “О программе” (TessaClient, TessaAppManager) и на вкладке “Информация” (TessaAdmin).
  14. Добавлены типы колонок Json и BinaryJson, которые можно добавлять в карточки, при этом колонка будет использоваться так же, как и обычные строки. Для базы данных MS SQL Server используется тип данных nvarchar(max), для PostgreSQL типы json и jsonb соответственно. Используйте тип Json, если необходимо сохранить отступы и форматирование исходной строки, или используйте тип BinaryJson для более эффективного хранения и быстрого поиска в PostgreSQL (в обоих случаях запрос SELECT возвращает строковое представление).
  15. В тех таблицах платформы и типового решения, где содержался json в виде текста, теперь задействован тип данных BinaryJson, что в MSSQL не имеет изменений, а в PostgreSQL использует тип jsonb вместо text.
  16. Добавлено сообщение для неподдерживаемых версий браузеров.
  17. В представление TaskHistory добавлены колонки с информацией, которая требуется для отображения истории заданий в контроле “Представление” с тем же набором функций, как в стандартной вкладке “История заданий”, включая подсказку, диалоговое окно, тэги с приложенными файлами.
  18. В таблице Outbox содержимое бинарной колонки InfoLegacy перенесено в json-колонку Info в скриптах миграции. Не требуется выполнять дополнительных действий.
  19. В тех таблицах платформы и типового решения, где содержался бинарный json как колонка типа Binary(Max), теперь задействован тип данных BinaryJson, что в MSSQL использует тип nvarchar(max), а в PostgreSQL использует тип jsonb. Это позволяет выводить данные в текстовом виде, изменять их, использовать функции по работе с JSON, строить индексы и добавлять вычисляемые колонки. Например, это таблица истории действий ActionHistory, таблица шаблонов карточек Templates, таблица активных операций Operations и др.
  20. Улучшен экспорт карточек “Ошибка” в JSON, чтобы упростить чтение текстового файла человеком.
  21. Добавлена возможность указывать алиас параметра, содержащего токен безопасности, в расширения типа “Представление истории заданий”. Подробное описание доступно в руководстве Администратора.
  22. Добавлена возможность использовать фильтрацию как в контроле “Список файлов” в расширении типа “Список файлов в представлении”.
  23. При нажатии кнопки “Ответить” для сообщения форума в области заданий в открываемом диалоге курсор сразу перемещается на поле ввода текста.
  24. В папке веб-сервиса теперь копируется файл Views\Shared\index.cshtml, который можно изменить в рамках проекта для расширения возможностей по интеграции web-клиента.
  25. В маршрутах добавлено сохранение карточки после выполнения этапа, если в ней были изменения.
  26. В контрол “Текст с форматированием” добавлена красная рамка, если есть валидатор “Непустое поле”, и при этом значение в контроле отсутствует.
  27. Добавлено расширение типа “Таблица в представлении”. Расширение типа позволяет использовать контрол “Представление” для отображения данных коллекционной секции. Подробное описание доступно в руководстве администратора и руководстве разработчика.
  28. При наведении на счетчик количества страниц в представлении курсор автоматически устанавливается в конец текста.
  29. Изменено поведение для файлов, присутствующих в потоке при сохранении карточки с файлами, но отсутствующих в запросе с карточкой. Такие файлы теперь пропускаются без создания ошибок. Информация о них выводится в лог на уровне Trace.
  30. Обновлены иконки в тулбаре элементов управления: “Текст с форматированием” и “Обсуждение”. Добавлено отображение текущего цвета под кнопками “Цвет текста” и “Цвет выделения текста”.
  31. Добавлена кнопка “Сбросить выделение” в диалоговом окне “Выбор цвета”.
  32. Веб-приложение TESSA (сервис web) теперь может использоваться как edge-сервер (без задействования IIS, Nginx или Apache) для целей тестирования, разработки и демонстраций, а также для установки на production-серверах до 50 одновременных пользователей (поскольку в этом случае система ограничивается одним рабочим процессом). Добавлена поддержка протокола HTTPS с сертификатом, который загружается из файла или из хранилища сертификатов. Добавлена поддержка автоматического redirect с протокола HTTP на HTTPS, в т.ч. с поддержкой стандарта HSTS. Добавлена возможность запретить использование протоколов TLS 1.0 и TLS 1.1 для соединений с клиентами (для этого все клиентские ОС должны поддерживать TLS 1.2 или 1.3). Добавлена возможность запретить протокол HTTP/2 для загрузки веб-содержимого (используется браузерами), в этом случае будет использоваться только протокол HTTP 1.1. Настройки указаны в группе “WebServer” в файле app.json, они описаны в руководстве по установке. Перечисленные настройки не функционируют при разворачивании веб-приложения TESSA совместно с IIS, если в файле web.config указан атрибут hostingModel=”InProcess” (в этом случае используются настройки IIS).
  33. При запуске исполняемого файла Tessa.Web.Server из папки сервиса web теперь помимо прослушивания http://localhost:5000 дополнительно выполняется прослушивание https://localhost:5001.
  34. В файлах app.json при включении отдельно расположенных конфигурационных файлов в списке по ключу “.include” теперь можно указывать имена с масками, например: “../patch*.json”.
  35. Список установленных патчей выводится на странице веб-сервиса /check, в TessaClient по ссылке “Загруженные патчи и расширения” в окне “О программе” и в TessaAdmin на вкладке “Информация” по аналогичной ссылке.
  36. Веб-сервис web для json-сериализации использует Newtonsoft.Json вместо System.Text.Json. Это соответствует поведению в сборках 3.0.0-3.3.1 и влияет на контроллеры в проектных решениях, которые используют такую сериализацию.
  37. В части полей с комментариями в заданиях, с Digest-ом заданий, с описаниями ролей и ряда других полей было удалено ограничение на максимальную длину в 4000 символов.
  38. Для контрола “Таблица” добавлена настройка “Всегда показывать поиск и мультивыбор”. Если она выбрана, то поле поиска (во всех клиентах) и кнопка мультивыбора (в web-клиенте) всегда будут отображаться под таблицей, даже если все другие кнопки скрыты. Настройка используется для таблицы с заместителями в карточках контекстной, динамической, временной роли и метароли.
  39. Типизированный сериализатор json всегда сериализует суффикс ::dbl для ключей хеш-таблиц, у которых значение указано с типом double.
  40. В конструкторе бизнес-процессов в действии “Диалог” добавлена возможность изменять отправляемое задание в cценарии инициализации диалога.
  41. В карточке настроек ЭП для каждого алгоритма подписи в таблице “Настройки алгоритмов подписи и хеширования” добавлено указание на используемый менеджер подписи, который задействуется в desktop-клиенте. Их описание приведено в руководстве администратора.
  42. В модуле потокового ввода документов добавлена возможность обрабатывать документы из вложенных папок. Для этого укажите в app.json настройку “DocLoad.IncludeSubFolders”: true.
  43. В web-клиент добавлена поддержка элемента управления “Представление” и всех его расширений, в т.ч. для отображения файлов, истории заданий, таблицы (коллекционной секции карточки).
  44. Chronos выводит предупреждение в текстовый лог log.txt, если .dll файл с плагинами, указанный в plugins.xml, не был найден.
  45. Сериализатор Typed Json теперь поддерживает тип данных TimeSpan с суффиксом “::tim” и тип данных DateTimeOffset с суффиксом “::dto”.
  46. В элементе управления “Представление” добавлена настройка, позволяющая сворачивать группы после обновления.
  47. В карточку “Настройки сервера” добавлена вкладка “Цвета палитры”, в которой настраиваются цвета, отображаемые в цветовой палитре в контроле “Текст с форматированием” и в поле ввода в обсуждениях в desktop-клиенте и в web-клиенте.
  48. На странице /check теперь выводится информация по текущей лицензии и её модулям.
  49. В области обсуждений переработан дизайн панели управления. Добавлена возможность просмотра полного описания топика в web-клиенте и просмотр полного описания в отдельном popup-окне в desktop-клиенте. Также выполнен редизайн списка топиков, добавлены сокращенные версии для описания топика и сообщений в предпросмотре в списке топиков.
  50. Размер блока ввода сообщений в контроле “Обсуждения”, который выбрал пользователь, теперь автоматически сохраняется индивидуально для этого пользователя.
  51. Протокол TLS 1.0 теперь всегда явно запрещён к использованию со стороны клиентских приложений и сервера. Все поддерживаемые платформой версии ОС и браузеров имеют возможность использовать протокол TLS 1.1 или старше.
  52. При передаче запросов между desktop-клиентом и сервером используется текстовая сериализация Typed Json вместо бинарной сериализации Bson.
  53. Для каждого запроса к веб-сервису и каждой операции обработки в фоновых сервисах Chronos для СУБД MS SQL теперь добавляется параметр @__RequestID с уникальным идентификатором этого запроса. Это упрощает определение того, что SQL-запросы относятся к одной операции при трассировке всех SQL-запросов на уровне СУБД.
  54. В web-клиенте в контроле таблицы добавлен хоткей на клавишу Enter для закрытия диалога редактирования строки.
  55. В проектных расширениях скрипт PostBuildEvent теперь копирует библиотеки расширений в папку Bin\Tessa.Extensions.Console для расширения консольной утилиты tadmin.
  56. Для трассировки клиентских и серверных расширений ExtensionTracingMode для значения Profile теперь можно явно указать минимальное количество миллисекунд, начиная с которого отображается сообщение трассировки. Это позволяет выявить длительно выполняющиеся расширения, игнорируя все остальные. Например, укажите “Profile:500”, чтобы отобразить только расширения, выполняемые полсекунды или более длительное время.
  57. В представлении “История действий” добавлена колонка “Приложение”, в ней отображается тип приложения, который открывает сессию или в сессии которого выполняется действие. Например, “Tessa Client” или “tadmin”. Для поиска по приложению доступен одноимённый параметр фильтрации. Значение в столбце отображается для записей в истории, добавляемых начиная со сборки TESSA 3.6. Записи, добавленные до обновления на эту сборку или старше, остаются без указанного приложения.
  58. В web-клиенте для сообщений в обсуждениях добавлена поддержка действий: ответить, редактировать, копировать сообщение и копировать ссылку на сообщение.
  59. В web-клиенте добавлена возможность развернуть элемент управления “Текст с форматированием”.
  60. В web-клиенте изменено поведение контрола “Представление” при обновлении данных - теперь контрол сохраняет свою высоту при обновлении.
  61. В редакторе схемы данных в объекты “Миграция”, “Функция” и “Процедура” добавлены настройки “Выполнять до модификации таблиц” и “Порядок выполнения”, который определяет порядок сохранения и выполнения заданных объектов в схеме данных.
  62. В редакторе схемы данных в объект “Миграция” добавлена настройка “Выполнять без транзакции”, при включении которой скрипт миграции выполняется вне SQL-транзакции.
  63. Диаграммы теперь возможно отображать в web-клиенте, при этом используется новый конструктор с упрощённым набором настроек. Для отображения представления в виде диаграммы добавьте к узлу рабочего места тип расширения WebChartWorkplaceExtension. По нажатию на кнопку настройки рядом с именем расширения выводится диалог с конструктором диаграмм. Расширение игнорируется в desktop-клиенте, поэтому для того, чтобы один и тот же узел был представлен как диаграммы и в desktop-клиенте, и в web-клиенте, необходимо добавить и настроить оба расширения ChartViewExtension и WebChartWorkplaceExtension. В типовом решении в рабочем месте “Пользователь” для узлов в папке “Диаграммы” настроено их отображение в web-клиенте.
  64. В карточке “Настройки сервера” добавлена возможность отключить автоматические обновления индикатора сообщений. По умолчанию период обновления индикатора установлен 300 сек (5 мин).
  65. В обсуждениях добавлен поиск по сообщениям.
  66. Плагин синхронизации заместителей теперь не загружает всю информацию о заместителях одномоментно, а рассчитывает заместителей, загружая некоторое количество записей замещения в память и синхронизируя заместителей в несколько итераций. Это оптимизирует потребление памяти при работе с базой данных, в которых большое количество записей о замещении в таблице RoleDeputies.
  67. Изменена логика работы клиентского поиска в представлении в расширении типа “Представление истории заданий”. Теперь фильтрация применяется не по нажатию на клавишу Enter, а автоматически с небольшой задержкой.
  68. В web-клиенте добавлена возможность создать веб-версию ссылки на сообщение в обсуждениях.
  69. В расширении “Список файлов в представлении” добавлена возможность настроить маппинг представления категорий.
  70. Экспорт файлов ЭП в TessaClient теперь выполняется с расширением .sig, при этом содержимое файла не было изменено (ранее использовалось расширение .sgn). Импорт ЭП возможен для файлов с любым расширением. Для того, чтобы определить расширение .sgn как в предыдущих сборках, реализуйте объект с интерфейсом IFileSignatureExporter (пример есть в ReleaseNotes).
  71. В web-клиенте в обсуждениях добавлен поиск по сообщениям.
  72. В карточку настроек “Синхронизация AD / LDAP” добавлена подсказка по настройкам в таблице “Корневые элементы синхронизации (OU)”.
  73. Добавлен тип действия “Резервирование выделенного номера” в истории действий. Оно используется системой при восстановлении зарезервированного номера после возникновения ошибок сохранения.
  74. В TessaAdmin представления без группы теперь располагаются выше представлений из других групп. Ранее они были расположены в середине между другими группами, что усложняло их поиск.
  75. В конструкторе бизнес-процессов в настройки кнопок процесса добавлено поле “Сообщение при недоступности для выполнения”, в котором указывается сообщение, когда пользователь нажимает кнопку процесса, но доступа на выполнение действия нет.
  76. В конструкторе бизнес-процессов расширение “Проверка контекстных ролей” переделано на расширение “Проверка ролей на выполнение”. В настройках данного расширения теперь можно указывать не только контекстные, но и статические роли.
  77. Перед импортом карточек, которые уже существуют в базе данных, они теперь не удаляются. Вместо этого выполняется импорт с объединением, при этом используется API SmartMerge для объединения импортируемой и существующей карточек. При объединении изменённых файлов их идентификаторы сохраняются, все существующие версии удаляются, и добавляется версия файла с импортируемым содержимым.
  78. В диалоге импорта карточек, доступном администраторам в TessaClient и TessaAdmin, добавлена возможность указать файл с опциями слияния для каждой из импортируемых карточек (снизу от поля с описанием карточки). Опции позволяют определить, какие секции следует игнорировать при объединении, какие поля использовать в качестве уникальных ключей для коллекционных секций и др. Подробнее формат файла описан в руководстве администратора. При сохранении настроек в файл библиотеки карточки .cardlib информация по выбранным опциям слияния также сохраняется.
  79. Добавлен тип диалога - это специальная разновидность виртуальной карточки, формы (вкладки) которой удобно использовать для создания интерфейса диалоговых окон в клиентских расширениях. Тип диалога содержит в себе виртуальную схему данных, таблицы из которой являются секциями данного типа. Подробнее тип диалога с примерами использования в расширениях описан в руководстве разработчика.
  80. В элементы управления “Ссылка” и “Список” добавлена настройка “Отключить локализацию”, позволяющая не локализовывать отображаемые значения, чтобы можно было выводить строки, начинающиеся с символа “$”.
  81. Разработан новый JSON-формат для файлов библиотек локализации .jlocalization. Возможны импорт и экспорт как в новом, так и в старом формате .tll, при этом по умолчанию предпочтение отдаётся новому формату. Для преобразования файлов в проектном репозитории в новый формат используйте команду tadmin ConvertConfiguration.
  82. Разработан новый JSON-формат хранения метаданных для представлений, рабочих мест и поисковых запросов. Метаданные представлений могут храниться как в прежнем (exchange), так и в новом (JSON) форматах, при этом возможность редактирования в формате exchange заблокирована. В TessaAdmin добавлена кнопка для конвертации метаданных представления в JSON-формат.
  83. В TessaAdmin разработан визуальный конструктор представлений, позволяющий просматривать и редактировать метаинформацию, хранимую в новом JSON-формате. Кнопкой “JSON” (под алиасом представления) можно переключиться в режим отображения и редактирования JSON в текстовом виде. Для существующих представлений в БД, описанных в прежнем формате exchange, доступен просмотр только для чтения, конвертация в новый формат выполняется по кнопке над текстом метаинформации. Описание конструктора доступно в руководстве администратора.
  84. В маршрутах изменено отображение окна выбора типа добавляемого этапа. Если доступна одна группа и один тип этапа, то окно выбора этапа не отображается.
  85. В web-клиенте для списка топиков в обсуждениях добавлена подсветка новых сообщений.
  86. В редактор схемы добавлена возможность управлять флагом “С внешним ключом” в системной комплексной колонке “Parent” в иерархической секции. При наличии данного флага теперь в таблицу автоматически добавляется индекс по данной колонке.
  87. В параметрах фильтрации представлений изменён порядок операторов сравнения для типа “дата со временем”: по умолчанию выбран оператор “меньше или равно”.
  88. В метаинформации представлений вместо ConvertToLocal для колонок теперь используется настройка TreatValueAsUtc, противоположная по смыслу. Вместо ConvertToUtc для параметров теперь используется настройка TreatValueAsUtc, противоположная по смыслу. Детальное описание представлено в Руководстве администратора.
  89. Добавлены методы расширений AfterRequestFinally, InitializedFinally, ContextInitializedFinally. Используйте их для выполнения гарантированных действий по финализации (снятию блокировок, освобождение занятых номеров и т.п.), если действия невозможно выполнить в транзакции. В противном случае для методов AfterRequest (и подобных) возможно прерывание выполнения из-за отмены запроса context.CancellationToken или из-за исключения в других расширениях. Методы выполняются всегда после соответствующих методов без слова “Finally”, независимо от возникших в них ошибок. Также исключение в одном расширении, выброшенное в таком методе, не прерывает цепочку расширений, т.е. для последующих расширений также будет выполнен метод xxxFinally, а исключение от предыдущего метода записано в context.ValidationResult. Следует учитывать, что context.RequestIsSuccessful возвращает true, когда платформенная реализация выполняется без ошибок, но при этом в расширениях AfterRequest (и аналогичных) могла возникнуть ошибка, которая доступна в context.ValidationResult.
  90. Настройка “Отключить встроенный предпросмотр PDF” переименована в “Использовать предпросмотр PDF средствами Windows”. Функциональность опции не изменилась.
  91. Удалена поддержка устаревших языковых конструкций в SQL-запросах представлений: columns, if_def, if_def_else, if_not_def, if_not_def_else, if_def_any, param_expr.
  92. В файле app.json веб-сервиса добавлена настройка “WebRazorReferences”. В ней перечисляется список библиотек или папок с библиотеками, которые добавляются в компилируемые страницы .cshtml. Укажите папку “extensions”, чтобы добавлять ссылки на расширения в таких страницах. Папки или файлы перечисляются в кавычках через запятую. Путь рассчитывается относительно папки с веб-сервисом (аналогично настройке “WebControllers”), и также может быть указан полный путь.
  93. В маршрутах в этап “Подписание” добавлена возможность выполнения запроса дополнительного согласования.
  94. В конструкторе бизнес-процессов в действие “Подписание” добавлена возможность выполнения запроса дополнительного согласования.
  95. В web-клиенте добавлены тайлы “Удалить участника” и “Изменить участника” для представления “Участники” в обсуждениях.
  96. В файлы app.json для веб-сервиса и Chronos добавлена настройка RoleTimeoutTimeSpan, определяющая таймаут длительных SQL-запросов, связанных с ролями, таких как пересчёт замещений, динамических ролей и метаролей. По умолчанию указано 30 минут. В предыдущих версиях системы этот таймаут не настраивался и был равен 10 минутам, что могло приводить к проблемам для крупных проектов.
  97. Добавлена поддержка импорта подписей в pem-формате.
  98. В web-клиенте добавлены функции “Объединить с текущим в Word” и “Сравнить в Word” для файлов с расширением .docx. Для этого необходимо перейти в режим выбора нескольких файлов, выбрать требуемые файлы с расширением .docx и в контекстном меню выбрать функцию. Для использования требуется Deski версии 2.1, который должен быть опубликован на сервере (публикация выполняется в скриптах установки/обновления).
  99. В web-клиенте добавлены функции “Вставить из буфера обмена” (в меню файлового контрола) и “Копировать в буфер обмена” (в контекстном меню на одном или нескольких выбранных файлах, а также в меню со списком версий файла). Вставка из буфера, как и для desktop-клиента, возможна для выбранных в проводнике файлов, для изображений в буфере обмена (например, снимок экрана), для писем в Outlook и для файлов, приложенных к письмам Outlook. Для использования требуется Deski версии 2.1, который должен быть опубликован на сервере (публикация выполняется в скриптах установки/обновления).
  100. В Chronos все настройки из файла Chronos.dll.config перенесены в файл app.json в группу настроек “Settings”. Также подключение зависимостей Chronos для Linux добавлено в настройку “ChronosDependencies”, которая указывает класс из библиотеки Chronos.Platform.Linux при запуске на ОС Linux. Проверьте актуальность ваших настроек в файле app.json для Chronos.
  101. В web-клиенте добавлена возможность открывать новые ссылки в уже открытой вкладке, при включённой поддержке Service Worker в браузере для сайта web-клиента. В том числе это ссылки из почтовых уведомлений. При открытии ссылки будет открыта вкладка браузера, в которой пользователю предложено закрыть вкладку и переключиться на приложение web-клиента, причём в нём уже выполнено действие, связанное с открываемой ссылкой (например, открыта карточка или выделен узел рабочего места).
  102. В web-клиенте добавлена возможность писать программные расширения для формы логина с помощью LoginExtension.
  103. Добавлена возможность использовать контрол “Представление” в формах заданий.
  104. Расширение типа “Список файлов в представлении” теперь доступно для использования в типах заданий.
  105. В файле app.json веб-сервиса добавлена настройка “Kerberos.DisableRealmCheck”. Она позволяет отключить проверку соответствия имен домена при Kerberos аутентификации.
  106. В карточку настроек сервера добавлена возможность включать и отключать полнотекстовый поиск по сообщениям в обсуждениях.
  107. В запрос на загрузку карточки CardGetRequest, выполняемый в перехватчике представления TaskHistory для проверки прав доступа на карточку, теперь добавляется флаг Info[“TaskHistoryInterceptor”] = true, чтобы в расширениях на загрузку можно было отличить этот запрос от стандартной загрузки карточки.
  108. В карточке “Настройки сервера” во вкладку “Безопасность” добавлен флаг “Выполнять блокировку сотрудников с типом входа Windows или LDAP”, посредством которого можно управлять блокировкой таких пользователей при серии неудачных попыток ввести пароль аналогично типу входа “Пользователь TESSA”. Настройки блокировки не учитываются при автоматической аутентификации посредством Kerberos/NTLM.
  109. При отображении вариантов завершения в типах заданий в TessaAdmin для вариантов с одинаковыми названиями в скобках теперь выводится уникальное имя варианта. Например, выводится “Согласовать (Approve)”, если есть два варианта с названием “Согласовать”.
  110. Метаинформация по типам в базе данных (таблица Types) теперь сериализована в формате типизированного json в колонке Metadata. Колонка Definition с метаинформацией, сериализованной в устаревшем формате xml, была удалена. Также добавлены колонки Group, InstanceTypeID и Flags, в которых доступны соответствующие свойства типа для использования из представлений. Для обновления существующих в БД типов используйте команду tadmin Script ConvertTypes.
  111. В карточку “Настройки электронной подписи” добавлена опция “Алгоритм хеширования TSP”, посредством которой доступен выбор алгоритма дайджеста для сервиса меток времени. По умолчанию используется алгоритм SHA256.
  112. В расширении типа карточки “Представление истории заданий” даты во всплывающем окне и окне с подробностями форматируется без указания секунд.
  113. При экспорте карточек “Правило доступа”, “Вторичный процесс”, “Шаблон этапов” не выгружаются вычисляемые поля, которые будут повторно пересчитаны при импорте. Это сокращает количество изменений в репозитории при изменении карточки.
  114. При экспорте карточек файлы и некоторые многострочные поля, такие как C# и SQL скрипты, выгружаются в подпапку с именем карточки, что позволяет их просматривать и изменять прямо из папки, и упрощает сопровождение таких карточек в репозитории.
  115. В типизированный json добавлены суффиксы trf и brf. Значением поля с таким суффиксом является ссылка на внешний файл с контентом данного поля. Суффикс trf означает, что контент является строкой, а brf - что контент является массивом байт.
  116. В карточки вторичных процессов, работающих в режиме “Кнопка”, добавлена поддержка типов условий.
  117. По умолчанию при экспорте теперь не будут изменяться поля, связанные с датой/временем создания и изменения карточки и файлов, версией карточки, и некоторыми другими полями, что позволяет сократить изменения в репозитории при импорте/экспорте одной и той же карточки в разные моменты времени или из разных инсталляций системы при параллельной разработке.
  118. Добавлена поддержка конвертации в pdf и предпросмотра в web-клиенте для формата файла .xlsm (Книга Excel с макросами).
  119. Подпись токена прав доступа типового решения теперь рассчитывается по данным токена, сериализованным в Json, а не в Bson.
  120. При генерации Swagger добавлена поддержка атрибутов Newtonsoft Json.
  121. При генерации Swagger enum-значения теперь дополнительно описываются строкой со значением перечисления в C#.
  122. Доработано отображение замаскированных данных. Теперь при использовании маскировки данных указанная в настройках замена отображается также в контролах “Целое число”, “Вещественное число”, “Десятичное число”, “Нумератор” и в web-клиенте “Текст с форматированием”. Для контрола “Текст с форматированием” в desktop-клиенте маскировка уже работала ранее.
  123. В расширенных настройках правила доступа при маскировке всей коллекционной секции с указанием значения в поле “Заменить данные на” в контроле “Список” отображается одно значение с указанной заменой, а в контроле “Таблица” отображается одна строка с замененными значениями.
  124. Класс Tessa.UI.WebProxy, используемый в desktop-приложениях для подключения к прокси серверу с аутентификацией, переименован в Tessa.UI.LoginDialogProxy. Обновите файлы app.json в desktop-приложениях, если вы их изменяли относительно типовой поставки.
  125. При выборке данных для представления в SQL-запрос помещается комментарий с информацией о пользовательском запросе и представлении.
  126. Изменён формат документации, теперь все руководства доступны в едином сайте со сквозным поиском. Запустите Docs\DocServe.exe из архива со сборкой, чтобы открыть документацию в браузере. Значок DocServe отображается в трее, в контекстном меню его можно закрыть.
  127. Добавлены настройки имени и почтового адреса отправителя для Exchange по аналогии с SMTP. В файле app.json Chronos это NoticeMailer.ExchangeFrom и NoticeMailer.ExchangeFromDisplayName. Настройки описаны в руководстве по установке.
  128. Если настройка NoticeMailer.SmtpFrom в файле app.json Chronos указана как пустая строка, то теперь используется значение из настройки NoticeMailer.SmtpUserName.
  129. В редактор схемы данных в таблицы с записями добавлена возможность сортировки строк по колонкам.
  130. Для Deski добавлена переменная окружения DESKI_DB_LOADING_MODE_FILEIO. Если установить непустое значение, например, DESKI_DB_LOADING_MODE_FILEIO=1, то используется обычный файловый ввод/вывод. Для файла vlog в этом случае на Windows отображается актуальный занимаемый размер - несколько килобайт, тогда как в противном случае занимаемое место отображается как 2 Гб, поскольку используется технология memory mapped file (фактически занятое место при этом не изменяется). Использование Deski совместно с DESKI_DB_LOADING_MODE_FILEIO менее производительно, но может быть важно для некоторых пользователей.
  131. В маршрутах в этапе “Настраиваемое задание” разрешено изменять идентификатор варианта завершения настраиваемого задания.
  132. В конструкторе бизнес-процессов в действии “Настраиваемое задание” разрешено изменять идентификатор варианта завершения настраиваемого задания.
  133. В настройки вторичных процессов в режиме “Кнопка” и в кнопки в шаблонах бизнес-процессов добавлен параметр “Порядок”, который определяет порядок расположения тайлов процессов между собой.
  134. Тайл “Справка” в правой панели вместо открытия окна “Справка” теперь открывает ссылку, указанную в поле “Ссылка на веб-страницу с документацией по системе” в карточке “Настройки сервера”. Если в этом поле не задана ссылка, то тайл не отображается. Также тайл теперь выводится в web-клиенте. Окно “Справка” в desktop-клиенте более не поддерживается.
  135. В web-клиенте добавлена поддержка интеграции с офисным пакетом Р7 Офис/OnlyOffice. Обратитесь к руководству по установке и укажите параметры в карточке настроек “Р7-Офис/OnlyOffice”.
  136. Утилита tadmin: для команд PackageApp и PackageWebApp добавлен параметр /b, позволяющий генерировать карточку приложения в бинарном формате .card.
  137. Утилита tadmin: добавлена команда Script для выполнения скриптов и миграций из библиотек расширений Tessa.Extensions.***. Скрипт выполняется по имени, задаваемому в атрибуте [ConsoleScript(“…”)], который указывается для класса-скрипта. Вызовите команду tadmin Script без аргументов, чтобы отобразить список всех доступных скриптов, и далее для каждого скрипта можно вывести справку, например: tadmin Script ConvertBson –help. Команда и её аргументы описаны в руководстве администратора. Примеры создания скриптов доступны в руководстве разработчика.
  138. Утилита tadmin: добавлен скрипт tadmin Script ConvertBson, обеспечивающий конвертацию бинарной колонки в базе данных, содержащий данные в формате TESSA Binary Json, в текстовую колонку, содержащую Typed Json. В качестве целевой колонки также можно указывать колонку с типом Json или BinaryJson. Справка по использованию команды доступна при вызове tadmin Script ConvertBson –help, а пример использования есть в скриптах обновления Upgrade.bat/upgrade.sh.
  139. Утилита tadmin: добавлен скрипт tadmin Script CheckFullTextSearchSupport, проверяющий наличие компонента полнотекстового поиска для базы данных. Скрипт описан в руководстве администратора, также справка по нему выводится по параметру –help.
  140. Утилита tadmin: добавлен скрипт tadmin Script FillPlainText, который позволяет заполнить колонку PlainText простым текстом, извлечённым из колонки Body с html-телом сообщения в форумах. Указанная для скрипта таблица должна по структуре быть аналогичной таблице FmMessages. Скрипт описан в руководстве администратора, также справка по нему выводится по параметру –help.
  141. Утилита tadmin: добавлены скрипты tadmin Script ConvertTypes, ConvertSearchQueries, ConvertWorkplaces и ConvertWorkplaceSettings, выполняющие преобразования сериализованных данных для типов (карточек, файлов, заданий), поисковых запросов, рабочих мест и их настроек соответственно, где формат xml или exchange преобразуется в формат типизированного json. Скрипты описаны в руководстве администратора, также справка по ним выводится по параметру –help. Конвертация метаданных представлений не выполняется автоматически на уровне БД, поскольку возможна потеря полезной информации (текста комментариев в метаинформации). Для массовой конвертации возможно выполнить команду tadmin ConvertConfiguration для папки в репозитории, после чего импортировать обновлённые представления. Описание параметров скриптов содержатся в руководстве администратора.
  142. Утилита tadmin: доработана команда ConvertConfiguration для конвертации файлов библиотек локализации, рабочих мест, поисковых запросов и представлений в новый формат JSON. При преобразовании представлений будут утеряны комментарии вида “## текст комментария”. Обратные преобразования с ключом -downgrade невозможны для форматов рабочих мест, поисковых запросов и представлений, но возможны для библиотек локализации.
  143. Утилита tadmin: в команду ManageRoles добавлен параметр “/bulk:bulkSize”, который определяет количество записей замещения, загружаемых при каждой итерации синхронизации заместителей.
  144. Утилита tadmin: из команды ImportCards удалён ключ /c, который определял, что карточки должны удаляться перед импортом, если они существуют в БД. Теперь импорт выполняется в режиме обновления (слияния) существующих в БД карточек с импортируемыми. Если необходимо импортировать карточку с удалением существующей, то предварительно требуется вызвать команду DeleteCards (подробности по использованию команды в руководстве администратора).
  145. Утилита tadmin: в команду ImportCards добавлен параметр “/options:mergeOptionsPath”, который позволяет указать местонахождение файла с опциями слияния, которые используются при импорте карточек, уже существующих в базе данных. Если файл не указан, то по умолчанию используется файл merge-options.json, если он существует в подпапке с именем файла (без расширения) для импортируемой карточки.
  146. Утилита tadmin: в команды ImportLocalization, ImportWorkplaces и ImportViews добавлена поддержка метаданных в формате JSON. При этом используются расширения файлов *.jlocalization, *.jworkplace и *.jview соответственно.
  147. Утилита tadmin: добавлена команда SchemeUpdateSql, которая выполняется обновление схемы в базе данных до текущей версии в рамках релиза утилиты tadmin. Команда использует подключение к базе данных.
  148. Утилита tadmin: в команду ExportCards добавлен параметр “/overwrite”. Данный флаг, в случае, когда экспорт перезаписывает уже существующую карточку на диске, определяет, перезаписать ли некоторые значения или сохранить такими, как в существующем файле. Указание данного флага аналогично параметру overwriteModifiedValues в методе экспорта ICardManager.
  149. Утилита tadmin: в команду ExportCards добавлен параметр “/mapping”. С помощью данного параметра можно указать путь к файлу, содержащему маппинги путей внутри карточек для выгрузки контента, находящегося по этим путям, во внешние файлы. Структура файла и другие подробности в руководстве администратора.
  150. Утилита tadmin: в команду ImportCards добавлен параметр “/ignored”. С помощью данного параметра можно указать путь до файла со списком паттернов имен файлов. Данные файлы будут проигнорированы при проверке поддиректории с внешним контентом на лишние файлы в процессе импорта карточки. Описание структуры файла в руководстве администратора.
  151. Утилита tadmin: команда ImportCards теперь может принимать список источников импорта вместо одного.
  152. Утилита tadmin: текст выполняемой команды с параметрами теперь выводится в лог на уровне логирования Info вместо Trace. Это позволяет получить более консистентные логи, из которых понятен порядок вызываемых команд, при логировании по умолчанию с уровнем Info.
  153. Утилита tadmin: в команды SchemeCompact, SchemeDiff, SchemeScript, SchemeRename, SchemeUpdate, ImportScheme и ImportSchemeSql добавлены параметры /include и /exclude. Параметр /include позволяет подключить библиотеки в дополнение к библиотекам в структуре папок Scheme\Partitions. Параметр /exclude исключает библиотеки из структуры папок Scheme\Partitions или из списка подключённых библиотек.
  154. Утилита tadmin: добавлены команды ExportSearchQueries и ImportSearchQueries для импорта и экспорта поисковых запросов.
  155. API: В web-клиенте упрощена работа с API бизнес-календаря. Весь предоставляемый API доступен в классе BusinessCalendarService.
  156. API: В web-клиенте добавлена возможность получать отредактированный контент файлов через API файлов (File.ensureContentModified, File.invalidateContent).
  157. API: В web-клиенте добавлена возможность управлять тегами в объекте карточки файлов.
  158. API: В TypedJsonConverter добавлена поддержка сериализации человекочитаемого многострочного текста. Для этого должен быть создан контекст ITessaJsonSerializationContext, в который будут записаны или из которого будут прочитаны специальные объекты JsonTextPart. При сериализации конвертер добавит в контекст все найденные JsonTextPart, записав Alias каждого из них в хранилище (и JSON) по ключу со специальным токеном (::txt). При десериализации конвертер возьмет из контекста JsonTextPart с нужными Alias и подставит вместо них их Content, т.е. JsonTextPart будет прозрачно десериализован в строку.
  159. API: Добавлены классы для работы с JsonTextPart - TextPartWriter и TextPartReader. После сериализации необходимо вызвать метод TextPartWriter.WriteAsync, который после самого JSON последовательно допишет в поток поля Content каждого из JsonTextPart в формате [TEXTPART Alias] Content. Перед десериализацей необходимо вызвать метод TextPartReader.ReadAsync, который прочитает содержимое потока, разделит его на основной JSON и блоки [TEXTPART] и добавит эти блоки в контекст по нужным для дальнейшей работы конвертера Alias.
  160. API: Добавлен контекст сериализации/десериализации ITessaJsonSerializationContext, наличие которого необходимо для использования в TypedJsonConverter объектов JsonTextPart.
  161. API: Метод ICardCache.Cards.GetAsync(“cardTypeName”), получающий карточку настроек из кэша, вместо объекта карточки Card теперь возвращает объект CardCacheValue<Card>, который содержит информацию об ошибках в свойствах Result и ValidationResult. Используйте метод GetValue(), чтобы получить объект карточки или выбросить исключение, причём исключения тех же типов и с такими же сообщениями, которые были ранее при вызове метода GetAsync. Таким образом, вы можете проверить и обработать коды ошибок, такие как SingletonNotFound, без выбрасывания исключений, что оптимизирует скорость проверки.
  162. API: ReadOnlyCollectionWrapper<T> теперь реализует интерфейс INotifyCollectionChanged для предотвращения возможных утечек памяти в Binding из контрола WPF.
  163. API: Изменен интерфейс IViewInterceptor. Добавлен базовый класс перехватчика ViewInterceptorBase. Добавлена возможность формировать список перехватываемых IViewInterceptor-ом представлений на основе списка всех представлений. Добавлена возможность задавать порядок выполнения перехватчиков представлений. Подробное описание и примеры использования доступны в руководстве разработчика.
  164. API: Реализация интерфейса ICAdESManager доступна на клиенте и на сервере. Имена регистраций интерфейса для реализации по умолчанию Default и для реализации CryptoPro доступны в классе CAdESManagerNames. Классы CAdESManager, DefaultEDSManager и AggregateEDSManager перенесены из сборки Tessa.Extensions.Default.Client в Tessa.Extensions.Default.Shared, чтобы их можно было использовать на сервере в расширениях и бизнес-процессах.
  165. API: В качестве родительского контекста IUIContext.Parent теперь не указываются уже закрытые вкладка или диалог с карточкой. Для определения того, что контекст закрыт, добавлен метод IUIContext.IsClosed(). Таким образом, если родительским контекстом выбирается диалог, который был закрыт на предыдущем этапе маршрута или в действии бизнес-процесса, то вместо контекста уже закрытого диалога в качестве Parent выбирается его первый незакрытый родитель по цепочке свойств Parent.
  166. API: Добавлен список функций ICardModel.ControlCreationOverrides, позволяющий подменить модели представлений для элементов управления при их создании.
  167. API: Добавлены методы DbManager.ExecuteStringAsync и DbManager.ExecuteBytesAsync для чтения больших строк и массивов байт размером в десятки мегабайт и с возможностью асинхронной отмены в процессе чтения поля. Методы аналогичны по функциональности вызовам DbManager.ExecuteAsync<string> и DbManager.ExecuteAsync<byte[]>, которые не рекомендуется использовать при чтении полей размером более 5 Мб.
  168. API: Добавлены методы-расширения для DbDataReader: GetSequentialStringAsync, GetSequentialNullableStringAsync, GetSequentialBytesAsync, GetSequentialNullableBytesAsync. Методы могут использоваться для оптимального чтения строк и массивов байт больших размеров (рекомендуется для полей размером более 5 Мб, хотя может использоваться для любых полей). Для использования этих методов объект для чтения создайте следующим образом: DbManager.ExecuteReaderAsync(CommandBehavior.SequentialAccess).
  169. API: При текстовой сериализации в json теперь используется сериализатор из NuGet-пакета Newtonsoft.Json вместо встроенного Tessa.Json, который теперь актуален только для бинарной сериализации bson, выполняемой специфичным для TESSA образом. Поэтому при необходимости указать атрибуты для свойств и полей сериализуемого в текст объекта, такие как [JsonIgnore] или [JsonProperty], используйте пространство имён Newtonsoft.Json вместо Tessa.Json. Сериализацией в текст считается использование TessaSerializer.Instance.Serialize(), TessaSerializer.Json или TessaSerializer.TypedJson. Для бинарной сериализации используйте вызов TessaBsonSerializer.Instance вместо TessaSerializer.Instance.
  170. API: Для бинарной сериализации в формате bson используйте вызов TessaBsonSerializer.Instance вместо TessaSerializer.Instance. При этом бинарная сериализация не поддерживает интерфейс IJsonSerializable, который теперь задействован только для текстовой сериализации в json или typed json. Интерфейсы IBsonSerializable и IBinarySerializable по-прежнему можно использовать для бинарной сериализации.
  171. API: Объект WebProxy теперь десериализует ответ на запрос с типом application/json как типизированный json-объект (TessaSerializer.TypedJson), а также объект может сериализовать первый параметр как стандартный json (с указанием RequestFlags.Json) или типизированный json (с указанием RequestFlags.TypedJson). Для типизированного json будут сохранены типы объектов при сериализации из клиента .NET на сервер .NET и обратно.
  172. API: Удалено статическое поле WorkflowActionRegistry.Instance. Для обращения к реестру типов действий необходимо получить объект по интерфейсу IWorkflowActionRegistry из Unity-контейнера.
  173. API: В метод IHostLauncher.RunHostAsync добавлен параметр overrideExePath, переопределяющий путь до исполняемого файла хоста (по умолчанию это TessaHost.exe). Это позволяет добавлять новые действия, запускаемые в процессе .NET Framework, в рамках проектного решения.
  174. API: Удалено статическое поле WorkflowEngineTileManagerExtensionRegistry.Instance. Для обращения к реестру расширений прав доступа к тайлам WorkflowEngine необходимо получить объект по интерфейсу IWorkflowEngineTileManagerExtensionRegistry из Unity-контейнера.
  175. API: Добавлена асинхронность ValueTask в методы интерфейса IEDSManager.
  176. API: Объект ListStorage<T> и интерфейс IStorageListProvider теперь опираются на хранилище типа IList вместо IList<object>. Благодаря этому объект можно использовать для generic-списков, таких как List<Dictionary<string, object>>, получаемых в т.ч. при десериализации типизированного json.
  177. API: В контекст расширений для модуля потокового ввода документов в свойстве InputFilePath теперь передаётся путь к исходному файлу.
  178. API: Модифицировано API создания контроллеров веб-сервиса: вместо базового класса TessaControllerBase используйте стандартный Controller или ControllerBase, а атрибут [SessionMethod] действует независимо от контроллера, как фильтр действий. Для создания REST API также укажите атрибут [ApiController] на классе контроллера, и воспользуйтесь рекомендациями из MSDN: https://docs.microsoft.com/en-us/aspnet/core/web-api/?view=aspnetcore-5.0.
  179. API: Классы контроллеров веб-сервиса по умолчанию теперь получают зависимости из контейнера Unity, если они там есть, или из сервисов DI-контейнера ASP.NET Core, если зависимостей в Unity нет. Для зависимостей, которые ранее требовалось получать через scope.UnityContainer.Resolve<T>(), теперь достаточно указать их в конструкторе, для резолва по имени допускается атрибут [Dependency(“Name”)]. Восстановить предыдущее поведение можно, указав на классе контроллера атрибут [TessaController(ActivationMode = ControllerActivationMode.AspNetCore)].
  180. API: После успешного логина на клиент возвращается заголовок “Tessa-Version”, содержащий строку с номером версии платформы на сервере, например, “3.6”. В desktop-клиенте можно получить эту версию из объекта ISessionVersionHolder в Unity, свойство PlatformVersion. Если оно равно null, то либо логин не выполнялся, либо сервер не предоставил информацию, поскольку версия сервера не поддерживает отправку этого заголовка; получить максимальную версию такого сервера можно из свойства RuntimeHelper.UnknownServerPlatformVersion.
  181. API: Добавлены проекты, предоставляющие средства для создания автоматических тестов на платформе NUnit, которые тестируют функциональность, доступную на сервере и на desktop-клиентах (tadmin, TessaClient, TessaAdmin): Tessa.Test.Default.(Server|Client|Shared) и Tessa.Test.(Server|Client|Shared). За подробной информацией обратитесь к разделу “Автоматические тесты NUnit” в руководстве разработчика.
  182. API: Расширен набор средств по работе с клиентскими прокси-объектами. Добавлен абстрактный класс WebProxyFactoryBase, наследник которого может определить способ инициализации адреса веб-сервиса и других параметров объекта IWebProxy в методе InitializeProxyParametersAsync. Также метод IWebProxyFactory.UseProxyAsync принимает опциональную функцию modifyProxyFuncAsync, в которой также могут изменены параметры создаваемого объекта IWebProxy.
  183. API: Разработано универсальное REST API, которое покрывает основные сценарии использования системы, включая логин, работу с карточками и выполнение представлений. Описание API доступно в Swagger по адресам /api/v1/… (страница Swagger доступна по адресу /swagger, обычно это https://server_name/tessa/web/swagger в IIS или https://server_name/swagger для других серверов). API используется в desktop-клиенте. В следующих версиях API будет доработано, и оно будет использоваться также в web-клиенте, где некоторые из текущих методов контроллера web-клиента Client с дублирующей функциональностью будут удалены.
  184. API: Значения перечислений CardServiceType.NetClient и WebClient объединены в значение Client. Используйте это значение в запросах к сервису карточек request.ServiceType для проверки того, что код был вызван со стороны клиентского приложения. Если требуется отличить вызов web-клиента от вызова desktop-клиента, то используйте методы-расширения для объекта сессии: session.IsWebClient(), session.IsDesktopClient(), session.IsNotWebOrDesktopClient().
  185. API: Объект WebProxy теперь десериализует ответ на запрос с типом application/json как типизированный json-объект (TessaSerializer.TypedJson), а также объект может сериализовать первый параметр как стандартный json (с указанием RequestFlags.Json) или типизированный json (с указанием RequestFlags.TypedJson). Для типизированного json будут сохранены типы объектов при сериализации из клиента .NET на сервер .NET и обратно. Укажите флаг RequestFlags.PlainJsonResponse для использования нетипизированной сериализации.
  186. API: Доработано API контроллеров для использование типизированной или нетипизированной сериализации для объектов StorageObject и других объектов IStorageProvider/IStorageSerializable. Укажите атрибут для метода контроллера [TypedJsonBody], чтобы параметр был десериализован из тела метода как типизированный Json, в противном случае десериализуется нетипизированный Json. Укажите возвращаемое значение как ActionResult<T> или IActionResult, и выполните возврат this.TypedJson(obj) для возврата типизированного Json, в противном случае возвращается нетипизированный Json. При этом в качестве получаемого или возвращаемого MIME типа указывается стандартный application/json.
  187. API: Удалены свойства объекта DbManager, которые напрямую возвращают свойства объекта DataConnection. Явно обратитесь к свойству DataConnection, чтобы получить его значение. Например, вместо вызова db.Transaction укажите db.DataConnection.Transaction.
  188. API: В объектную модель процесса маршрутов (класс WorkflowProcess) добавлены свойства AuthorCurrentProcess и ProcessOwnerCurrentProcess - автор и владелец текущего процесса.
  189. API: В web-клиенте для file и fileVersion метод ensureContentLoaded переименован в ensureContentDownloaded, метод ensureSignsLoaded переименован в ensureSignaturesLoaded.
  190. API: Добавлен базовый абстрактный класс расширения на сериализацию параметров этапов ExtraSourcesStageRowExtensionBase, предоставляющий методы для получения и сохранения информации о дополнительных методах этапов. Подробное описание доступно в руководстве разработчика в разделе Маршруты в п. “Создание дополнительного сценария этапа”.
  191. API: Перечисление ActionType преобразовано в класс, что позволяет расширять набор логируемых в истории действий в проектном решении с использованием стандартных средств, таких как объект IActionHistoryStrategy. Типы действий платформы доступны в статических полях ActionTypes, например, ActionTypes.Import (ранее требовалось указывать ActionType.Import). Для расширения доступных действий создайте наследник класса ActionHistoryDescriptionProvider и зарегистрируйте его по интерфейсу IActionHistoryDescriptionProvider, чтобы определить генерацию описания в карточке записи истории действий (если этого не сделать, то описание будет пустым). Тип действия требуется зарегистрировать в реестре ActionTypeRegistry.Instance.Register(actionType).
  192. API: Методы добавления этапа в маршрут IKrScript.AddStage и IKrScript.GetOrAddStage заменены на асинхронные IKrScript.AddStageAsync и IKrScript.GetOrAddStageAsync, соответственно.
  193. API: Если вы используете интерфейсы IRegistryItem и IRegistry<T>, то замените их на IRegistryItem<Guid> и IRegistry<Guid, T>, поскольку в интерфейсы добавлен параметр-тип с идентификатором элемента в реестре. В предыдущих сборках было возможно использовать идентификатор Guid, тогда как начиная с этой сборки можно использовать int и другие типы в качестве идентификатора.
  194. API: В методе CompilationHelper.FormatErrorIntoMember расширена поддержка элементов синтаксического дерева, для которых выполняется формирование строкового представления об ошибке компиляции, обработкой конструктора. В метод также добавлен необязательный параметр “memberKind” позволяющий указать тип искомого элемента синтаксического дерева.
  195. API: Свойство IFile.Options (и CardFile.Options) теперь сериализуется и десериализуется как типизированный json (ранее использовался нетипизированный json). Метод DeserializeOptions теперь возвращает Dictionary<string, object> (ранее использовался ISerializableObject).
  196. API: Добавлен интерфейс IFileSignatureExporter, посредством которого можно переопределить алгоритм, по которому генерируется имя файла для подписи. Переопределите интерфейс в Unity, отнаследовавшись от класса FileSignatureExporter и переопределив метод GetSignatureFileNameAsync, чтобы изменить расширение файла подписи: (await this.GetSignatureFileNameWithoutExtensionAsync(context, index, cancellationToken).ConfigureAwait(false)) + “.sig”.
  197. API: Для узла рабочего места IWorkplaceViewComponent можно указать свойство ClearSelectionOnRefresh (bool), предотвращающее автоматический выбор первой строки или первой ячейки представления при её первом отображении или после обновления данных. Следует учитывать, что если выбранных строк нет, то detail-представления не заполняются. Установить свойство можно в любой момент, в т.ч. в методе Initialized для расширения на узел рабочего места IWorkplaceViewComponentExtension.
  198. API: В типы IRoleManager и IRoleManagerService в метод синронизации заместителей добавлен параметр “bulkSize”, определяющий количество записей замещения, загружаемых при каждой итерации синхронизации заместителей.
  199. API: В web-клиенте добавлен метод расширения routeResolve для ApplicationExtension, позволяющий управлять роутингом внутри приложения.
  200. API: В коде расширений некоторые синхронные API переделаны на аналогичные асинхронные, например, вместо свойства view.Metadata используйте метод view.GetMetadataAsync(ct).
  201. API: Добавлено свойство ITempFolder.FolderPath, которое возвращает полный путь к временной папке, по аналогии со свойством ITempFile.FolderPath.
  202. API: В потоковом сканировании в расширении для печати штрих-кода теперь используется интерфейс IPrintDialogProvider вместо явно заданного класса PrintDialogProvider. Также от класса PrintDialogProvider можно отнаследоваться и переопределить его методы. Это позволяет изменить логику в отображаемом диалоге печати.
  203. API: Добавлена регистрация клиентских API WorkflowEngine в консольном приложении tadmin.
  204. API: Для интерфейса IDbmsErrorCodeProvider добавлен метод GetErrorCodeAsync, принимающий в качестве параметра IValidationResultItem для проверки типа исключений СУБД в объектах ValidationResult.
  205. API: Добавлен метод EnvironmentHelper.TryGetWindowsVersion(), который возвращает текущую версию Windows или null, если версию не удалось определить. Для Windows 7 возвращается версия 6.1.7601, для Windows 8.1 - 6.3.9600, для Windows 10 - 10.0.xxx, где xxx - номер сборки, это первое число в строке OS build на странице MSDN: https://docs.microsoft.com/en-us/windows/release-information/.
  206. API: В метод-расширение waitHandle.ToTask() добавлен опциональный параметр timeout для таймаута ожидания. Вызов await waitHandle.ToTask(timeout) возвращает true, если ожидание завершилось без таймаута, или false, если при ожидании произошёл таймаут.
  207. API: Добавлен абстрактный API SmartMerge (пространство имён Tessa.SmartMerge) для сравнения и объединения объектов любых типов. Этот API используется для объединения импортируемой и существующей карточек, чтобы выполнить импорт карточки без её предварительного удаления. Пример использования API описан в руководстве разработчика.
  208. API: Изменён базовый класс TypeExtensionTypeBase (для создания расширений типов) и базовый класс ValidatorTypeBase (для создания валидаторов типов): методы CreateEditorCoreAsync и RepairCoreAsync в качестве параметра получают объект ICardSchemeInfoProvider, используемый для доступа к метаданным схемы.
  209. API: В классах PropertyGrid, используемых для настроек типов, интерфейс ISchemeService заменен на ICardSchemeInfoProvider.
  210. API: Изменены интерфейсы ITessaViewService и ITessaWorkplaceService, используемые для взаимодействия с веб-сервисами рабочих мест и представлений.
  211. API: Модель представления окна выбора типа добавляемого этапа (StageSelectorViewModel) перенесена из Tessa.UI.Controls.StageSelector в Tessa.Extensions.Default.Client.Views.StageSelector.
  212. API: Добавлен метод AssemblyLoaderHelper.AddSuppressResolveFailWarningForAssembly для того, чтобы не выводить предупреждения в логе по указанной сборке при невозможности её загрузить.
  213. API: Для контрола “Таблица” в desktop-клиенте в класс GridViewModel добавлен метод UpdateColumnsAsync(). Вызовите метод после изменения списка колонок для карточки, которая уже была отображена.
  214. API: При добавлении исключений в IValidationResultBuilder теперь есть возможность указать сообщение в параметре message, которое будет выведено в основной части сообщения, тогда как полный текст исключения доступен в деталях. Для добавления исключений рекомендуется использовать метод-расширение AddException.
  215. API: Добавлено свойство GridViewModel.FilterRowFunc, используя которое можно не отображать некоторые из строк в таблице, которые присутствуют в виде моделей и моделей представлений в коллекциях карточки и элемента управления.
  216. API: Для определения расширения файла, хранящегося в базе данных MS SQL, более не используется хранимая функция GetFileExt. Для этого используется метод CardDatabaseContentStrategy.GetFileExtensionWithDotAsync, который можно переопределить в классе-наследнике.
  217. API: Для интерфейса IFileControl и класса TaskWorkspaceViewModel добавлена поддержка интерфейса ISupportUnloading с событием Unloaded, которое выполняется, когда элемент управления более недоступен.
  218. API: Для аргументов события в интерфейсе ISupportUnloading.Unloaded добавлено свойство e.ValidationResult, в которое возможно добавлять ошибки и другие сообщения. Они будут залогированы после того, как все элементы управления были выгружены вызовом Unload().
  219. API: Добавлен интерфейс IKrCreateBasedOnHandler, посредством которого выполняется создание карточки на основании другой карточки для документов типового решения. Используя этот интерфейс, упрощается вызов этой функциональности, а также появляется возможность заменить её регистрацию в Unity.
  220. API: В запрос на создание карточки newRequest.Info для создания на основании другой карточки (функциональность для документов типового решения) вместо идентификатора исходной карточки KrCreateBasedOnHelper.CardIDKey можно передать структуру карточки, на основании которой выполняется создание, для этого по ключу KrCreateBasedOnHelper.CardKey надо записать card.GetStorage(), чтобы карточка не загружалась из БД. Это удобно использовать в скриптах маршрутов и бизнес-процессов.
  221. API: В модель представления ICardModel были добавлен список делегатов TaskInitializers, который вызываются после создания моделей представления заданий карточки. Данные делегаты позволяют использовать списки делегатов ControlInitializers, BlockInitializers, FormInitializers моделей представления заданий.
  222. API: В метод CardHelper.CreateFromExportedCardAsync добавлен опциональный параметр ICardServerPermissionsProvider, указав который как значение из Unity на сервере, правила доступа не будут проверяться для сотрудника в текущей сессии. Объект для передачи в параметр недоступен на клиенте.
  223. API: Добавлен метод-расширение logger.LogResult(ValidationResult, ValidationLevel, “format string {0}”), который позволяет вывести в лог результат валидации с дополнительным текстовым обрамлением и указанием уровня логирования.
  224. API: Добавлен флаг IViewParameterMetadata.IsMissingParameter, который указывает на то, что параметр узла рабочего места отсутствует в исходном представлении.
  225. API: Метод-расширение IOperationRepository.ExecuteInLockAsync теперь передаёт идентификатор созданной операции-блокировки в делегат actionFunc и возвращает его в результате метода. Также добавлен параметр leaveOpen, пропускающий удаление операции при завершении метода, при этом блокировка считается всё ещё взятой, и другой код должен её удалить.
  226. API: Изменены методы отправки уведомлений в INotificationManager. Теперь в интерфейсе содержится единственный универсальный метод, а не несколько разных методов, которые определены как методы-расширения, с перебором различных вариантов параметров из пространства имён Tessa.Notices.Parameters. Также добавлена возможность отправлять уведомления на явно заданный список адресов электронной почты.
  227. API: ICardManager в своих методах теперь использует интерфейс ISourceContentProvider как источник файлов карточек, вместо простых имен файлов, это обеспечивает возможность импортировать, экспортировать и производить другие действия с карточками не только из файловой системы.
  228. API: Появилось новое API парсинга путей в storage-объектах, а также резолва значений по этим путям. Добавлены интерфейсы IStoragePathParser и IStoragePathResolver. Пример использования есть в руководстве разработчика в разделе “Методики разработки TESSA”.
  229. API: Появилась возможность написания расширений на маппинг полей карточек для выгрузки контента этих полей в отдельные файлы. Пример реализации и регистрации такого расширения есть в руководстве разработчика в разделе “Методики разработки TESSA”.
  230. API: В интерфейс IFileControl добавлено свойство ItemFilter, позволяющее указать функцию, посредством которой возможно скрытие определённых файлов IFileViewModel по переданному условию. Фильтрация выполняется после того, как был определён набор отображаемых файлов другими средствами (например, через фильтрацию в контекстном меню контрола).
  231. API: Удалены типы, свойства и методы, связанные с потоковой инициализацией посредством обработчиков IInitializationHandler в desktop-клиентах. Требуемые данные передавайте посредством ключей в context.Response.Info. Если в проектном решении присутствуют расширения на инициализацию, выполняющие метод context.AddHandler() для указания способа обработки части бинарного потока, то замените их на использование context.Response.Info, пример в расширениях типового решения KrServerInitializationExtension и KrClientAndConsoleInitializationExtension.
  232. API: При добавлении исключений в IValidationResultBuilder теперь есть возможность указать сообщение в параметре additionalDetails, которое выводится после текста исключения в деталях сообщения. Для добавления исключений рекомендуется использовать метод-расширение AddException.
  233. API: В интерфейсе ISupportUnloading метод UnloadAsync и событие Unloaded сделаны асинхронными.
  234. API: В модель представлений DateTimeViewModel контрола “Дата и время” в desktop-клиенте добавлены свойства CalendarDateStart, CalendarDateEnd, CalendarSelectedDate, CalendarBlackoutDates и CalendarBlackoutDatesInThePast, позволяющие настраивать из расширений начальную, конечную и выбранную при открытии даты в календаре, а также список заблокированных для выбора дат и признак того, что заблокированы все даты в прошлом для календаря, который выпадает по нажатию кнопки. Значения по умолчанию null соответствуют стандартному поведению: диапазон выбираемых дат не ограничивается, а при открытии календаря выбирается текущая дата, заданная в поле карточки, или текущая дата на компьютере пользователя, если в поле null.
  235. API: Добавлен метод IFileControl.RefreshItemFilteringAsync, который обновляет отображение списка файлов, применяя при этом фильтр, заданный в свойстве ItemFilter. Рекомендуется вызывать этот метод всякий раз после изменения свойства ItemFilter и после изменения свойств файлов, используемых в ItemFilter, если их изменение не приводило к визуальным изменениям, при которых фильтрация применяется автоматически.
  236. API: В web-клиенте теперь поддерживается переопределение обработчиков предпросмотра файлов. Обратитесь к руководству разработчика web-клиента за примерами.
  237. API: Для перечисления CardModelFlags добавлено значение IgnoreChanges, позволяющее отключить любые сообщения о наличии изменений в карточке, которые проверяются вызовом метода ICardModel.HasChangesAsync, в т.ч. стандартные сообщения при закрытии окна или вкладки с карточкой. Изменение актуально и для desktop-клиента, и для web-клиента.
  238. API: Обновлены библиотеки: .NET 5.0.6, AvalonEdit 6.1.2.30, BarcodeLib 2.4.0, CAdESLib 1.0.3.2, CsvHelper 27.1.0, DocumentFormat.OpenXml 2.13.0, Hardcodet.NotifyIcon.Wpf 1.1.0, HtmlAgilityPack 1.11.33, ITFoxtec.Identity.Saml2 4.6.3, Kerberos.NET 4.5.105, linq2db 3.4.0, MailKit 2.12.0, Microsoft.CodeAnalysis.CSharp 3.9.0, NetOffice.Word 1.7.4.11, Newtonsoft.Json 13.0.1, NLog 4.7.10, NLog.Web.AspNetCore 4.12.0, Npgsql 5.0.5, NTwain 3.7.0, PDFium 1.0.2, PDFiumSharpV2 1.0.1, QRCoder 1.4.1, Quartz 3.3.2, SixLabors.ImageSharp.Drawing 1.0.0-beta12, StackExchange.Redis 2.2.4, Swashbuckle.AspNetCore 6.1.4, UAParser 3.1.47, Unity 5.11.11, ZXing.Net 0.16.6.

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

  1. В web-клиенте исправлена доступность флажка “Вернуть при несогласовании” в настройках этапа согласования для запущенного процесса.
  2. В web-клиенте исправлено отображение контекстного меню на файлах, чтобы не происходило смещения меню после окончания анимации.
  3. В web-клиенте исправлена ошибка, из-за которой в рабочем месте не учитывалась настройка “Скрыть дерево по умолчанию”.
  4. В web-клиенте исправлена ошибка, из-за которой невозможно было скачать приложение Deski пользователям без прав администратора.
  5. В web-клиенте исправлена ошибка, из-за которой файлы в карточке, открытой в диалоге, могли сохраняться с ошибками.
  6. В web-клиенте исправлена ошибка, из-за которой автокомлпит не вызывал событие удаления “старого” значения, при его замене на “новое” значение, выбранное из представления.
  7. В web-клиенте исправлена ошибка оформления системных сообщений в обсуждениях.
  8. В web-клиенте исправлены опечатки в диалоге “О программе”.
  9. В web-клиенте исправлен вывод даты сборки в диалоге “О программе”, теперь он не зависит от часового пояса, в котором работает браузер пользователя.
  10. В web-клиенте исправлена ошибка с множественным выделением строк в представлениях и в контроле “Таблица”.
  11. В web-клиенте исправлена ошибка, из-за которой длинные названия файлов в файловом контроле отображались некорректно.
  12. В web-клиенте исправлена ошибка сохранения настроек уведомлений через диалог “Мои настройки”.
  13. В web-клиенте исправлена ошибка, из-за которой представления с глубокой вложенностью в дереве рабочего места не открывались по ссылке.
  14. В web-клиенте исправлена ошибка при обращении к полю authorId в объекте CardTaskHistoryItem.
  15. В web-клиенте исправлена ошибка, когда в представлении неправильно отображались пустые названия групп.
  16. В web-клиенте добавлена красная рамка в контрол автокомплита, если нет подставляемых значений и нет ручного ввода.
  17. В web-клиенте исправлена ошибка в UIContext.create. Теперь ссылка на родительский контекст проставляется корректно при создании области действия контекста.
  18. В web-клиенте добавлена возможность сериализовать info в ссылках на файлы.
  19. В web-клиенте исправлена работа пунктов меню “Добавить участников” и “Добавить роль” в обсуждениях.
  20. В web-клиенте в обсуждениях исправлена неработающая опция меню “Отписаться от уведомлений”.
  21. В web-клиенте в обсуждениях исправлена ошибка, из-за которой не выполнялась смена опций меню “Подписаться на уведомления” и “Отписаться от уведомлений” после изменения состояния подписки на уведомления.
  22. В web-клиенте увеличен размер шрифта текста сообщений в обсуждениях.
  23. В web-клиенте исправлена ошибка, из-за которой в таблице представления иногда не отображались строки, хотя счётчик строк был больше нуля.
  24. В web-клиенте удалено ограничение на размер скачиваемых файлов, которые приложены к карточке. Теперь можно скачать файл больше 2 Гб.
  25. В web-клиенте изменены ограничения на общий размер файлов, которые сохраняются в карточку единомоментно. Теперь это 4 Гб при установке системы на IIS, или без ограничений при использовании других веб-серверов (Nginx, Apache, Kestrel).
  26. В web-клиенте исправлена ошибка, из-за которой мог некорректно работать контрол Ссылка (поле с автодополнением), когда индексы отображения колонок не были заданы явно.
  27. В web-клиенте исправлена ошибка, из-за которой не удалялась активная операция сохранения карточки. Ошибка возникала в т.ч. при сохранении карточки с файлами, превышающими допустимый размер, указанный в настройках IIS.
  28. В web-клиенте исправлено некорректное поведение, при котором в текстовый контрол визуально можно было поместить больше символов, чем позволяло заданное ограничение.
  29. В web-клиенте исправлен поиск в представлениях по параметру типа Time.
  30. При неудачном логине в web-клиенте текст исключения теперь не выводится в текстовый лог log.txt, как и в случае с неудачным логином в desktop-клиенте. Независимо от этого, информация по неудачному входу записывается в историю действий.
  31. Исправлена Windows-аутентификация в web-клиенте. Ошибка появилась в версии 3.5.0.
  32. В web-клиенте в представлениях исправлена передача параметров с типом “время без даты”.
  33. Исправлена ситуация, когда окно TessaAppManager оказывалось скрытым из панели задач после двойного клика по иконке в трее.
  34. Оптимизирован импорт карточек приложений и web-приложений при установке и обновлении скриптами setup/upgrade.
  35. Исправлен вход в систему по вводу логина/пароля для пользователя в домене, если на сервере приложений отсутствуют права на олицетворение (impersonation) учётной записи пользователя.
  36. Исправлена ошибка NRE в методе CardGetStrategy.LoadTaskHistoryAsync, если параметр tasksByRowID равен null, и существует элемент истории у задания, для карточки которого выполняется загрузка информации по истории завершённых заданий.
  37. Исправлена ошибка, когда у пользователя при создании карточки был доступ на ручное редактирование номера даже тогда, когда в правиле доступа не был выставлен флаг “Ручное редактирование номера”.
  38. В конструкторе бизнес-процессов исправлена проблема в действиях “Задание” и “Группа заданий”, когда в таблице с диалогами в колонке “Тип карточки” отображалось значение “()”, если тип карточки не был задан.
  39. Исправлено изменение информации по дате сборки, которая последняя изменяла конфигурацию (поле “Configuration”.”BuildDate” в БД), если запрос к базе данных выполнялся в ОС с отрицательным часовым поясом, например, UTC-01:00. Для команды импорта схемы tadmin ImportSchemeSql был важен часовой пояс на компьютере, который запускает tadmin, для других команд, включая tadmin IncrementVersion, важен часовой пояс для ОС веб-сервиса. После исправления часовой пояс более не играет роли, и дата всегда записывается корректно.
  40. Во вкладке “Обсуждения” исправлена проблема, из-за которой после отправки сообщения страница прокручивалась наверх.
  41. В модуле AD/LDAP исправлена ошибка создания пользователей, которые входят в группу синхронизации сотрудников и статическую роль.
  42. При импорте подразделений, содержащих сотрудников, для них теперь указывается корректный тип вхождения в роль (поле RoleUsers.TypeID).
  43. Исправлена работа представлений AvailableApplications и Applications с PostgreSQL 9.6.
  44. Исправлен расчет замещений в метаролях в случае, если во вкладке сотрудника “Мои замещения” в таблице “Кто меня замещает” указано замещение по метароли.
  45. Для контрола “Текст с форматированием” по умолчанию не выставлен флаг “Скрывать заголовок”.
  46. В схему в поле “Редактировать сообщения не раньше, чем” добавлено значение по умолчанию, равное 60 минутам. Это важно при обновлениях с предыдущих версий, где редактирование сообщений определялось как запрещённое, хотя при новой установке системы можно было редактировать сообщения в течение 60 минут.
  47. Символы моноширинного текста в моноширинном блоке теперь действительно одной ширины.
  48. В области заданий у сообщения форума исправлена работа ссылок “далее” и “свернуть”.
  49. В контроле “Текст с форматированием” у кнопки разворачивания исправлена анимация при наведении мыши.
  50. Контрол “Текст с форматированием” при выборе связанного поля теперь доступны только колонки строкового типа.
  51. В контроле “Текст с форматированием” увеличен отступ от маркера или номера в тексте с форматированием. Увеличен отступ и у самого блока-списка.
  52. Исправлено зависание сервера приложений из-за взаимной блокировки между кэшами схемы и карточек. Ошибка могла воспроизводиться в случае изменения схемы данных на сервере приложений, когда система работает под нагрузкой.
  53. В диалоге с временем жизни “Карточка” исправлена ошибка инициализации после загрузки карточки, открытой в диалоге. Ошибка, например, приводила к отображению стандартных кнопок после нажатия кнопки “Пересчитать”, расположенной на вкладке “Маршрут” для карточки, которая открыта в диалоге. Исправление актуально для desktop- и web-клиентов.
  54. В маршрутах исправлена ошибка при переходе на группу этапов. Ошибка происходит, если текущий список этапов не содержит ни одного этапа из группы, на которую выполняется переход.
  55. В конструкторе бизнес-процессов исправлен расчёт дайджеста карточки для новых экземпляров процессов.
  56. Исправлена ошибка при запуске приложения в методе IFmNotificationStrategy.GetUniqueTopicIDs при получении данных для индикатора уведомлений.
  57. Исправлена ошибка при вызове свойства BeautifiedStackTrace.Current, когда в некоторых случаях он мог выдавать ошибку NRE.
  58. Улучшен вывод настроек безопасности ServerSecurityOptions в логе веб-сервиса.
  59. Исправлена ошибка NRE в методах класса CardCachedMetadata. Она возникала в случае, если происходит сброс кэша метаинформации карточек в тот же момент, когда кто-либо ещё им пользуется.
  60. При редактировании сообщений в обсуждениях исправлена возможность удалять цитаты в редактируемом сообщении.
  61. Исправлена ошибка с отображением контекстного меню вкладки с карточкой по клику правой кнопкой мыши вне области с карточкой: на области со статус-баром или на пространстве по краям окна.
  62. Исправлено расширение типов карточек “Сортировка строк” при выборе колонки для сортировки, тип данных которой отличен от строкового. Также в настройках расширения нельзя выбрать колонку из строковой секции или колонку типа Binary.
  63. Исправлена ошибка, возникающая при использовании INotificationManager с отложенной отправкой уведомлений в ситуации, когда в переданном контексте не задан параметр Info.
  64. В представлениях в ссылочных параметрах фильтрации колонки с типами данных “строка фиксированной длины” (char и nchar), а также колонки xml и json теперь могут корректно использоваться в качестве отображаемого значения для ссылок #reference(DisplayValue:…).
  65. В маршрутах в этапе “Дерегистрация” исправлен тип создаваемого события.
  66. В маршрутах исправлена ошибка при получении информации о типе документа для несохранённой карточки.
  67. Для команды tadmin ImportUsers исправлены параметры -cs и -db, указывающие строки подключения к БД и имени БД.
  68. Исправлена проблема, когда в расширенных настройках правил доступа карточки поля, указанные как замаскированные, были видны как редактируемые.
  69. Исправлена проблема, когда при копировании карточки с замаскированными полями копировалась маска этих полей. При копировании карточки с замаскированными полями эти поля должны очищаться.
  70. Оптимизировано обращение к карточкам настроек в расширениях и в объектах API в ситуациях, когда карточки настроек отсутствуют в базе данных или при их загрузке возникли ошибки.
  71. Регистрация расширений Tessa.Extensions.PostgreSql.Server, связанная со статическими маппингами, теперь выполняется в блокировке (lock) и не более одного раза, что предотвращает проблемы при одновременном создании нескольких серверных контейнеров Unity с расширениями.
  72. В TessaAdmin исправлено редактирование параметров маппинга представления для типа поля “Константа”. Ошибка появилась в сборке 3.5.0.
  73. В конструкторе бизнес-процессов исправлена ошибка NRE, возникающая при создании нового экземпляра процесса по несуществующему шаблону бизнес-процесса.
  74. Исправлено создание пакета приложения командами tadmin PackageApp/PackageWebApp, если у одного из файлов не была рассчитана хеш-сумма. Хотя она рассчитывается автоматически на сервере при сохранении файлов, но в базе данных поле FileVersions.Hash может быть равно NULL, что приводило к ошибке.
  75. В конструкторе бизнес-процессов исправлена ошибка обработки SQL-привязок в ссылочных полях.
  76. В маршрутах исправлена ошибка изменения порядка добавленного в сценарии постобработки шаблона этапов нового этапа методом IKrScript.AddStage.
  77. В маршрутах в этапах “Согласование” и “Подписание” исправлена проверка при определении необходимости выполнения перехода в начало текущей группы этапов при наличии завершённых отрицательным вариантом завершения заданий. Ошибка приводила к тому, что учитывались не только этапы в состоянии “Завершён”.
  78. Исправлена ошибка в представлении TaskHistory, из-за которой не работал автоматический выбор ширины в расширении “Представление истории заданий”.
  79. Исправлены ошибки, возникающие при прокрутке контрола “Представление” с расширением “Представление истории заданий”.
  80. В контроле “Представление” с расширением “Представление истории заданий” исправлена ошибка в отображении подсказки к тэгу задания, к которому приложены файлы.
  81. Добавлена подсказка к настройке “Группировка” в расширении “Список файлов в представлении”.
  82. Исправлена ошибка в расширении “Список файлов в представлении”, при которой было возможно сбросить группировку файлов в контекстном меню колонки.
  83. В контроле “Текст с форматированием” и в контроле “Обсуждения” исправлена вставка из буфера обмена, если содержимое этого буфера в формате rtf.
  84. В обсуждениях добавлены более подробные сообщения об отсутствии прав или при истёкшем интервале редактирования в процессе редактирования сообщений.
  85. Исправлена ситуация, когда при штатной отмене операции с карточкой посредством CancellationToken могли оставаться незакрытые блокировки на запись этой карточки. Например, небольшой шанс такой проблемы имелся, если закрыть окно браузера сразу после того, как началось выполнение сохранения карточки. Ошибка появилась в сборке 3.5.0.
  86. Исправлены ошибки при сохранении и создании подразделения, которые приводили к очистке настройки временной зоны сотрудника (удалённого из подразделения или добавленного в него при создании), если для него это подразделение было единственным.
  87. Для функции Func<IViewContext>, передаваемой в конструктор класса UIContext, теперь гарантируется, что она не возвращает null.
  88. В маршрутах исправлена ошибка при получении информации о карточке при проверке ограничений на запуск процесса, если тип карточки не содержит секции DocumentCommonInfo.
  89. Исправлены редкие ошибки в методе CardNewStrategy.CreateSectionRowsAsync, которые могли возникнуть при большом количестве одновременных запросов на чтение (GetAsync) или создание структуры (NewAsync) карточек.
  90. Исправлена ошибка, которая могла возникать при отправке почты через Exchange для некоторых серверов: Cannot process the message because the content type ‘text/plain; charset=utf-8’ was not the expected type ‘text/xml; charset=utf-8’. Ошибка появилась в сборке 3.5.0.
  91. В маршрутах исправлена ошибка при сохранении изменений в полях карточки и одновременной отправке задания. Ошибка приводила к выполнению двух сохранений: в первом сохранялась карточка, содержащая только созданное задание, а во втором - все остальные изменения.
  92. При удалении прикрепленного элемента в контроле “Текст с форматированием” и в контроле “Обсуждения” из текста сообщения удаляется ссылка на этот элемент.
  93. В модуле синхронизации с AD/LDAP исправлена ошибка при вычислении состава роли, включающего в себя пользователей вне домена.
  94. В контроле “Текст с форматированием” исправлена ошибка, возникающая при перемещении вставленной гиперссылки.
  95. В контроле “Текст с форматированием” исправлена ошибка при сохранении карточки, когда в развернутом состоянии был приложен элемент, который затем удален в нормальном состоянии.
  96. В развернутом состоянии контрола “Текст с форматированием” исправлена работа сочетания клавиш Ctrl+E (Редактировать).
  97. При сохранении карточки корректно сохраняются данные из контрола “Текст с форматированием”.
  98. Исправлена работа метода KrProcessHelper.CardExistsAsync, который по ошибке всегда возвращал true.
  99. Исправлен вывод названия платформы Syntellect TESSA большими буквами на страницах /check и /service.
  100. В модуле синхронизации с AD/LDAP исправлена ошибка при создании подразделений.
  101. В пространстве имен Tessa.PdfSharp исправлена редкая ошибка при многопоточной работе с pdf документами.
  102. Исправлена опечатка в имени группы для типа карточки ShowDialog.
  103. Исправлена ситуация, когда в TessaClient доступный только для чтения контрол “Ссылка” с выпадающим списком мог быть изменён после перевода фокуса на контрол и нажатия клавиш “стрелка вверх” или “стрелка вниз”.
  104. При создании шаблона карточки теперь очищается содержимое элемента управления “Обсуждения”.
  105. В конструкторе бизнес-процессов исправлена ошибка при сохранении изменений, внесённых в действии в карточку типа KrSatellite. Затрагиваемые действия: “Доработка”, “Согласование”, “Подписание”, “Смена состояния”, “Дерегистрация”, “Выполнение задачи”, “Инициализация маршрута”, “Настраиваемое задание”.
  106. Оптимизировано чтение строковых и бинарных данных в карточках для СУБД MS SQL, если в поле содержатся данные большого размера. Оптимизация становится заметной для данных размером 5 Мб и более.
  107. Исправлено получение контента файлов в случаях, когда Stream контента при чтении возвращал количество байт меньше, чем было запрошено. Проблема могла воспроизводиться в проектных расширениях.
  108. Исправлена проблема в правах доступа, из-за которой настройки правила доступа не всегда применялись в ситуации, когда в карточке правила доступа был выставлен флаг “Всегда проверять правило доступа” и в качестве ролей использовались только контекстные роли.
  109. Исправлена некорректная обработка плейсхолдеров fv и tv в ситуации, когда в них были только настройки представления, колонки и параметров.
  110. Исправлена ошибка при проверке прав доступа на первое сохранение карточки в ситуации, когда родительская секция заполняется на сервере при создании карточки, строка родительской секции изменяется, и у неё есть дочерняя секция, которая заполняется на клиенте.
  111. Исправлено логирование ошибок при выполнении запроса генератора метаролей.
  112. В ежедневной рассылке уведомлений по заданиям исправлено некорректное формирование ссылок на карточки для автосогласованных заданий.
  113. Исправлена отправка почты по протоколу SMTP, если SMTP-сервер не поддерживает аутентификацию. Это приводило к ошибке “The SMTP server does not support authentication”. Ошибка появилась в сборке 3.5.0.
  114. Исправлен код завершения сервиса Chronos на ОС Linux при его остановке посредством systemctl stop. Теперь при отсутствии ошибок указывается код завершения 0 вместо 143.
  115. В маршрутах исправлена ошибка при получении информации о состоянии несохранённой карточки при проверке ограничений на запуск процесса.
  116. Исправлено сохранение карточки при изменении истории заданий.
  117. Оптимизировано подключение Tessa Applications к серверам платформы 3.5.0 и старше. Также были исправлены потенциальные проблемы при подключении к серверам следующих версий платформы TESSA.
  118. Оптимизированы запросы на получение данных представлений view.GetDataAsync из desktop-клиента.
  119. Исправлена визуальная индикация того, что поле “Приоритет” в карточке “Правило доступа” является обязательным (по умолчанию приоритет по-прежнему равен 0). Также исправлено сообщение об ошибке, если поле не заполнено.
  120. Оптимизировано сохранение карточки сотрудника в случае, если у него изменяется краткое имя.
  121. Исправлены возможные ошибки при пересчёте замещений и состава ролей из-за наличия записей в RoleDeputies с одинаковым идентификатором сотрудника DeputyID, но разными именами сотрудника DeputyName.
  122. В конструкторе бизнес-процессов в действии “Подпроцесс” исправлена ошибка, из-за которой не выполнялось создание подписок узлов, расположенных в подпроцессе, на сигналы. Ошибка появилась в 3.5.0.
  123. В маршрутах в параметрах этапов исправлена ошибка в работе ссылки “Добавить роль “Вычисляемые исполнители” при настройке этапов, добавленных в карточку вторичного процесса. Ошибка затрагивает все этапы, содержащие указанную ссылку. Ошибка появилась в версии 3.3.1.
  124. В конструкторе бизнес-процессов исправлена проблема, приводящая к неправильному расчёту числа обработанных элементов при отправке сигнала в подпроцесс.
  125. Исправлено отображение названий для некоторых элементов управления в списках в TessaAdmin.
  126. Исправлен вывод имени ОС в окне “О программе” при наличии номера Service Pack.
  127. В типизированном сериализаторе json исправлена десериализация ключей с суффиксами ::dbl, ::lng и ::str внутри хеш-таблиц.
  128. Исправлено определение действительного IP-адреса пользователя в истории действий и в сессии, если пользователь заходит через один или несколько прокси-серверов.
  129. В конструкторе бизнес-процессов в действии “Диалог” исправлена ошибка NRE, происходящая при выполнении действия, если значение поля “Роль” не задано.
  130. В конструкторе бизнес-процессов исправлена ошибка при проверке наличия значения в поле “Роль” при выполнении действий: “Доработка”, “Задание регистрации”, “Настраиваемое задание”, “Задание”.
  131. Исправлено закрытие вкладки с карточкой в TessaClient после того, как в процессе закрытия карточка была неудачно сохранена.
  132. Исправлена ошибка, из-за которой при асинхронной отмене сохранения карточки с файлами в базе данных оставалась активная операция “Сохранение карточки”.
  133. В маршрутах исправлена ошибка, приводящая к потере исходной ошибки, которая была вызвана некорректным SQL-условием в шаблоне этапов для СУБД PostgreSQL.
  134. В конструкторе бизнес-процессов исправлена ошибка, из-за которой не перемещалась каретка в редактируемой аннотации по нажатию клавиш: “стрелка вверх”, “стрелка вниз”, “стрелка влево” и “стрелка вправо”.
  135. При установке системы в контейнере Docker для связи nginx и web-сервиса теперь используется соединение через порт вместо unix socket, что позволяет использовать WSL2 backend при запуске на Windows 10.
  136. Исправлены возможные проблемы с некорректным инициированием вежливой остановки для плагинов Chronos при работе на ОС Alpine Linux 3.10+ с использованием контейнеров Docker.
  137. В конструкторе бизнес-процессов убрана неактуальная проверка подписи асинхронной операции процесса в плагине Chronos.
  138. Плагин файловой конвертации будет автоматически перезапущен в течение минуты, если произошла его нештатная остановка.
  139. С использованием менеджера подписи “ServiceEDSManagerForCAdES” в настройках ЭП теперь возможно подписание файлов в TessaClient посредством установленного КриптоПро CSP, который доступен через Windows Crypto API, как это было в TESSA 3.4.0 и ранее. Чтобы выполнять подпись посредством COM-объекта КриптоПро (который доступен после установки расширения браузера), как это было на релизе TESSA 3.5.0, в карточке настроек ЭП для алгоритмов подписи “ГОСТ” укажите менеджер подписи “CryptoProEDSManager”.
  140. В контроле “Представление” исправлена ошибка, из-за которой кнопка “Обновить” становилась недоступной.
  141. В контроле “Представление” исправлена ошибка, когда высота контрола резко уменьшалась и затем увеличивалась при обновлении или переключении страницы.
  142. В редакторе схемы данных исправлено добавление записей в таблицы, в первичном ключе которых присутствуют колонки с типами данных, отличающимися от Guid, Byte, Int16, Int32, Int64.
  143. В модуле синхронизации с Active Directory / LDAP исправлено обновление пользователей при отсутствии изменений в составе статической роли. Ошибка появилась в версии 3.5.0.
  144. В конструкторе бизнес-процессов исправлена ошибка открытия руководства разработчика бизнес-процессов из конструктора процессов.
  145. Исправлена обработка ошибок при открытии карточки в TessaClient, если один из выполняемых методов расширений ICardUIExtension выбросил необработанное исключение.
  146. Исправлены скрипты миграции в папке Fixes при обновлении со сборки 3.2.0 или ранее.
  147. При возникновении ошибок, связанных с сессией, сервер теперь возвращает код 403 (Forbidden) вместо 401 (Unauthorized) для всех типов ошибок, кроме отсутствия токена сессии при обращении к методам сервера, его требующим. Ранее возвращался код ошибки 401 для любых типов ошибок с сессией.
  148. При подписании и проверке ЭП исправлена ошибка с обработкой неподдерживаемых протоколов для доверенных сертификатов.
  149. Исправлено отображение контекстного меню на значке в трее у менеджера приложений TessaAppManager, если не удалось подключиться ни к одному из серверов.
  150. Исправлено возможное дублирование текста сообщений о необработанных исключениях, которые выводятся пользователю в TessaDialog.
  151. Исправлены проблемы с выводом страницы /check при отсутствующем подключении к базе данных, а также при наличии ошибок с локализацией на сервере.
  152. Оптимизирована обработка почты, когда в очереди на отправку в таблице Outbox большое количество писем.
  153. Исправлена конвертация файлов .htm/.html в .pdf с использованием API IFileConverter.
  154. В маршрутах исправлена ошибка при обработке результата StageHandlerResult.EmptyResult для выполнения обработчика этапа.
  155. Оптимизирована работа desktop-клиента после отображения индикатора занятости для вкладки.
  156. Исправлена работа валидатора уникальности на сервере, когда могли удаляться лишние строки в результате вставки и удаления одних и тех же строк. Например, если удалить и тут же вставить один и тот же тип документа в карточке правила доступа, то после сохранения тип удалялся, хотя никаких изменений не должно было произойти. Ошибка воспроизводилась в web-клиенте со сборки 3.5.0.
  157. В web-клиенте исправлена ошибка отображения больших чисел в пейджинге контрола таблицы и представлений.
  158. В web-клиенте исправлен вывод тултипа с сообщением об ошибке валидации в контролах карточки.
  159. Исправлена ошибка, из-за которой временная зона изменялась на зону по умолчанию для всех строк истории заданий.
  160. Для Kerberos-аутентификации добавлена ошибка в лог веб-сервиса при отсутствии SPN у учётной записи, для которой был сгенерирован файл keytab.
  161. Оптимизирован пересчёт индексов для MS SQL в скрипте Fixes\RebuildIndexes.ms.sql. Скрипт задействован при установке и обновлении платформы.
  162. Исправлено асинхронное чтение из потока DelegateReaderStream. Класс используется для взаимодействия Tessa Applications с TessaHost.
  163. Исправлены ситуации, когда при асинхронной отмене некоторых операций с карточками ошибка TaskCanceledException могла быть записана в ValidationResult как обычное необработанное исключение, при этом асинхронная отмена далее не выполнялась.
  164. Исправлена конвертация файлов .htm/.html в .pdf с использованием API IFileConverter.
  165. Исправлены возможные проблемы с запуском Tessa Applications при подключении к основному серверу другой версии, в котором недоступны библиотеки локализации.
  166. Исправлено формирование ссылок с ответами в письмах мобильного согласования, если тема документа содержала некоторые из символов, являющиеся некорректными в URL-адресе.
  167. Улучшена обработка ошибок при получении почты в мобильном согласовании: выводится подробная информация по письму, которое не удалось получить, а также при ошибке удаления одного из писем процесс обработки других писем не прерывается.
  168. В модуле синхронизации с AD / LDAP исправлена ошибка синхронизации пользователей при совпадении хэша (не учитывались некоторые поля в Active Directory).
  169. В конструкторе бизнес-процессов исправлена редкая ошибка обработчика привязок процесса, из-за которой обработчик прекращал работу.
  170. В маршрутах при настройке этапа “Диалог” в представлении для поля “Тип карточки” исправлена фильтрация по параметру “Алиас” для PostgreSQL.
  171. В модуле синхронизации с AD / LDAP исправлена ошибка при синхронизации независимых элементов у пользователей.
  172. В модуле синхронизации с AD / LDAP добавлено логирование пользователей, которые будут заблокированы системой.
  173. В модуле синхронизации с AD / LDAP добавлена проверка, что AdSyncID заполнен при ручной синхронизации объектов.
  174. В web-клиенте исправлена ошибка локализации всплывающих подсказок в контролах карточки.
  175. Оптимизировано взаимодействие с базой данных, чтобы открытие соединений выполнялось только асинхронно. Также для PostgreSQL было возможно открытие соединения и тут же его закрытие при создании объекта DbManager (при использовании пула соединений это было незаметно).
  176. В web-клиенте исправлена ошибка, из-за которой настройка “Формат поля” для больше чем 9 параметров не учитывалась.
  177. Оптимизированы хранимые функции локализации для СУБД MS SQL.
  178. В маршрутах исправлена ошибка при определении роли, для которой выполняется пересчёт вторичного процесса при заданном владельце или инициаторе основного процесса. Ошибка появилась в версии 3.5.0.
  179. Исправлена ситуация, при которой TessaClient сохранял настройки отображения карточек (размер и положение области предпросмотра, области заданий, пустой области по краям и др.) на сервере для пользователя, даже если фактических изменений в настройках не было.
  180. В web-клиенте исправлена ошибка в форматировании колонок в контроле таблицы.
  181. В web-клиенте исправлена ошибка при поиске по значениям колонок строк в контроле таблицы.
  182. В web-клиенте исправлена ошибка, из-за которой в диалоге параметров представлений не работали горячие клавиши Esc и Enter.
  183. В маршрутах исправлена ошибка, происходящая при завершении первого задания для повторно запущенного процесса, в котором была изменена группа этапов в одном из шаблонов этапов на группу, имеющую больший порядковый номер, чем заменяемая.
  184. Оптимизированы выборки со списками сотрудников (join к RoleUsers) в представлениях.
  185. Оптимизировано открытие карточки “Приложение” в TessaClient, поскольку группы файлов теперь свёрнуты по умолчанию.
  186. Исправлена проблема, когда Tessa Applications мог не закрывать сессию к основному серверу, если при загрузке локализации возникли ошибки.
  187. Исправлено обращение к свойству сессии session.Token со стороны веб-сервиса, если токен сессии отсутствует, где вместо значения null выбрасывалось исключение InvalidOperationException. Например, это может быть для контроллеров, используемых для интеграции с другими системами, в которых авторизация выполняется без открытия стандартной сессии.
  188. Исправлена проблема, которая приводила к ошибке ERANGE на сервере приложений Linux при попытке отправить уведомление по глобальному событию, где в процессе после перевода события в сигнальное состояние и до его перевода в несигнальное состояние могло возникнуть исключение, например, в случае асинхронной отмены по CancellationToken в процессе ожидания мьютекса. Исправление актуально для глобального кэша метаинформации.
  189. В маршрутах исправлена ошибка при создании этапа с использованием метода IKrScript.AddStage или IKrScript.GetOrAddStage, из-за которой не выполнялась инициализация параметров созданного этапа значениями по умолчанию.
  190. Оптимизированы выборки в представлениях с агрегацией строк посредством FOR XML PATH для MSSQL.
  191. Исправлена ошибка при генерации конструктора по умолчанию, выполняющего инициализацию дополнительных методов подсистемы маршрутов. Ошибка приводила к возникновению исключения KeyNotFoundException при ошибке компиляции конструктора по умолчанию.
  192. В маршрутах в этапе “Уведомление” исправлена строка локализации, используемая при отображении ошибки компиляции для сценария изменения уведомления.
  193. Команды tadmin SchemeScript и SchemeCompact теперь создают файлы всегда в кодировке UTF-8 BOM (ранее была кодировка ANSI, которая зависит от ОС, в которой запускается tadmin). Локализация описаний в схеме использует английский язык (ранее язык локализации зависел от языка ОС, в которой запускается tadmin). Это позволяет выполнять генерацию файлов с их сохранением в репозитории, независимо от того, на какой ОС выполняется генерация.
  194. Исправлена ситуация, когда в результате использования метода StreamHelper.AcquireMemoryStream() могли удерживаться неиспользуемые блоки памяти большого размера. Теперь кэширование выполняется только для потоков, размер которых не превышает StreamHelper.MaxCachedSize (80 КБ в текущей реализации).
  195. Оптимизировано потребление памяти при использовании контекстной роли с большим количеством замещений совместно с объектом кэша ICardContextRoleCache. Например, это происходит при использовании контекстных ролей в правилах доступа, в бизнес-процессах или при отправке уведомлений.
  196. В web-клиенте исправлена ошибка, из-за которой настройки цвета заголовка контрола могли не применяться в карточке.
  197. Исправлена штатная остановка веб-сервиса посредством исключения OperationCanceledException, которое логировалось как ошибка.
  198. Исправлена ошибка при инициировании redirect с адреса web-клиента на страницу логина, если в ASP.NET Core присутствует Middleware, выполняемая перед TessaClientMiddleware, которая уже инициировала собственный redirect.
  199. Исправлены ситуации, при которых исключение OperationCanceledException, возникающее при асинхронной отмене действия, добавлялось в ValidationResult или логировалось, хотя не должно было, причём в ряде случаев исключение не выбрасывалось наружу метода, в котором было перехвачено.
  200. Исправлен скрипт миграции Migration-3.5-pre.ms.sql для корректного сквозного обновления на сборку 3.5.0 или старше с пропуском обновления до нескольких предыдущих сборок. Ошибка воспроизводилась для MS SQL Server 2016 или старше.
  201. Исправлена карточка “Печатный лист согласования” в типовом решении, в которой по ошибке было указано ограничение для использования в типе “Договор”.
  202. Исправлены обычный и печатный листы согласования при выводе информации по заданиям доп. согласования для записей в истории заданий, где заполнена колонка UserPosition (должность удваивалась).
  203. Исправлены ситуации, когда при закрытии сессии администратором могла возникнуть ошибка “Session token is unavailable in HttpContext”.
  204. Исправлена сериализация/десериализация типов данных DateTime в json, где мог неправильно учитываться DateTimeKind. Ошибка исправлена в методах CardMetadataHelper.ToString() и CardMetadataHelper.Parse().
  205. В web-клиенте исправлена ошибка, приводившая к тому, что элемент управления “Обсуждения” не учитывал минимальную и максимальную высоту, указанную в настройках.
  206. Исправлена ошибка “No credentials are available in the security package”, которая может возникать при подключении Tessa Applications к серверу IIS, в котором включена Windows-аутентификация, но она не выполняется для текущего пользователя.
  207. Исправлен файл Fixes\KrApprovalList\KrApprovalList.cs для использования устаревших расширений на лист согласования для текущей версии API.
  208. Исправлен метод присваивания свойства card.TaskHistoryGroups у объекта карточки Card. Он по ошибке присваивал TaskHistory в storage-объекте.
  209. Исправлена ситуация, когда в диалоге “Мои настройки” при первом изменении списка уведомлений настройки не сохранялись, если таблица условий не заполнена.
  210. В TessaAdmin исправлено отображение редактируемых узлов рабочих мест с несколькими вкладками. Выбранная вкладка могла сбрасываться при переключении между узлами, в каждом из которых есть вкладки.
  211. Исправлено поведение представлений-диаграмм в связке master-detail, например, в типовом решении это диаграмма “Просроченные задания”. По умолчанию сегмент диаграммы не выделен, поэтому detail-представления не заполняются. Когда пользователь выбирает сегмент диаграммы, то detail-представления заполняются данными этого сегмента, а если нажать на сегмент ещё раз, то он перестаёт быть выбранным и detail-представление очищается. Ранее при открытии узла был выбран первый сегмент диаграммы, хотя он не выглядел выбранным, и при повторном нажатии по выбранному сегменту визуально выделение снималось, но detail-представления не очищались.
  212. В модуле Обсуждения на сервере удалено лишнее логирование ValidationResult.
  213. В маршрутах в этапе “Ветвление” и “Управление ветвлением” исправлена ошибка NRE. Ошибка происходит при выполнении указанных этапов в основном процессе, если при создании строки секции KrConstants.KrForkSecondaryProcessesSettingsVirtual.Synthetic в сценарии инициализации, не задано значение поля KrConstants.StageRowID. Поле KrConstants.StageRowID секции KrConstants.KrForkSecondaryProcessesSettingsVirtual.Synthetic должно устанавливаться равным идентификатору текущего этапа. Информация о настройке данных этапов содержится в руководстве администратора в разделе “Маршруты документов” в пунктах “Ветвление” и “Управление ветвлением” соответственно.
  214. В TessaClient исправлено спорадическое дублирование элементов рабочего места в диалоге выбора из представления.
  215. Исправлены проблемы с многопоточным доступом к dynamic-свойствам объекта Card после вызова EnsureCacheResolved. Это актуально для карточек настроек и карточек контекстных ролей из ICardContextRoleCache.
  216. Оптимизирована хранимая функция FormatAmount для СУБД MS SQL.
  217. Исправлено обращение к локализации при построении метаинформации, которое могло привести к deadlock при запуске сервиса.
  218. В web-клиенте исправлена ошибка, из-за которой в контроле карточки “Таблица” событие rowEditorClosing не вызывалось повторно при установке event.cancel = true.
  219. Исправлено редактирование и сохранение библиотек локализации в части ограничений на длину текстовых полей в символах: имя библиотеки локализации - 128, имя строки локализации - 128, комментарий строки локализации - 512, значение для указанного языка - 1024.
  220. Исправлена ошибка при отправке или получении почты в Exchange по https, если клиент (на котором выполняется Chronos) не доверяет сертификату сервера.
  221. В web-клиенте исправлена ошибка в контроле “Представление”, из-за которой не учитывалась настройка “Сворачивать группы”.
  222. В web-клиенте для контрола с вкладками добавлена поддержка динамического изменения вкладок.
  223. При отправке почты по SMTP, если не указана настройка “SmtpDefaultCredentials” = true и если не заданы логин/пароль, то отправка выполняется без аутентификации. Ранее в этом случае выполнялась аутентификация Kerberos/NTLM.
  224. Исправлена ситуация, когда из-за CancellationToken, выброшенного при взятии блокировки на карточку, блокировка не могла быть освобождена, т.к. соединение с БД было закрыто к моменту освобождения блокировки. Ошибка появилась в сборке 3.5.0.
  225. Исправлена ошибка CLIPBRD_E_CANT_OPEN при обращении к методу Clipboard.GetDataObject(). Ошибка могла приводить к падению приложения TessaAdmin, а также к ошибкам при вставке из буфера в контролах “Список файлов” и “Текст с форматированием”.
  226. В web-клиенте исправлена ошибка, из-за которой некоторые плитки на создание карточек могли отображаться, даже если карточки были недоступны для создания.
  227. Метод IFileContent.IsModified() теперь возвращает false, если для объекта ранее был вызван Dispose(). Этот метод семантически аналогичен свойству, поэтому выбрасывание исключения ObjectDisposedException могло привести к непредусмотренным побочным эффектам в коде расширений.
  228. В web-клиенте исправлена ошибка, из-за которой в компоненте UIButton не учитывалось свойство IsEnabled.
  229. В контроле “Представление” исправлена ошибка при отображении значения параметра, в который через маппинг передается значение из колонки master-представления.
  230. Исправлены ошибки в контроле “Представление” в режиме опционального постраничного вывода.
  231. В контроле “Представление” исправлена ошибка, из-за которой кнопки для изменения страницы при постаничном отображении были неактивны, пока на них не нажали.
  232. Исправлена ошибка в контроле “Представление”, из-за которой в detail представлении не сбрасывался номер страницы при изменении выбранной строки master представления.
  233. Инициализация метаинформации представлений на сервере теперь выполняется всегда асинхронно и не может выполнить синхронный вызов с запросом кэша схемы данных или локализации.
  234. В TessaClient для заголовка диаграммы и для строк в легенде диаграммы выполняется локализация с форматированием, что позволяет локализовать плейсхолдеры {$Alias}, которые могут присутствовать в названиях ролей.
  235. Исправлено имя строки подключения по умолчанию в сообщениях об ошибках Configuration string “default” is not found/has an empty connection string.
  236. В TessaClient и TessaAdmin исправлена работа параметров фильтрации представлений для нестандартных числовых типов: Byte, SByte, Int16, UInt16, UInt32, UInt64. В некоторых случаях ввод был заблокирован, в других - выставлены некорректные ограничения на диапазоны вводимых чисел или отсутствовало значение по умолчанию.
  237. В TessaClient и TessaAdmin исправлена работа параметров фильтрации для ввода отрицательных чисел.
  238. Исправлена проблема, когда некорректно работала настройка “Всегда проверять правило доступа” с флагом “Редактировать карточку” при наличии взятого в работу задания “На согласование” без дополнительно выданных прав доступа на редактирование в настройках этапа.
  239. Исправлена ошибка при отображении контролов “Представление”, “Контейнер” и “Вкладки” в диалоговых окнах.
  240. В web-клиенте исправлена ошибка при смене пароля через диалог “Мои настройки”.
  241. Исправлено использование поля в карточках с типом данных DateTimeOffset для СУБД PostgreSQL.
  242. В представлениях исправлена передача параметров с типами UInt16, UInt32 и UInt64 для СУБД PostgreSQL.
  243. В скриптах установки и обновления при импорте карточек, для которых было выполнено автоматическое исправление структуры, предупреждение по таким исправлениям не выводятся в файл лога.
  244. Исправлена структура типовых карточек правил доступа, чтобы исключить автоматическое исправление их структуры при импорте.
  245. В desktop-приложениях исправлена ошибка при закрытии окна через нажатие Esc, когда для него уже выводится диалог вида “вы хотите закрыть окно? да/нет”.
  246. В web-клиенте добавлена возможность управлять компонентом диалогового окна при вызове showFormDialog.
  247. Если длина заголовка обсуждения превышает 150 символов, то этот заголовок будет обрезан до этой длины, как в контроле “Обсуждения”, так и в представлениях.
  248. Удалён метод-расширение unityContainer.RegisterEDS(). С версии сборки 3.5.0 регистрация интерфейсов IEDSManager и ICAdESManager выполняется в регистраторе типового решения.
  249. Реализацию провайдера ЭП можно получить по интерфейсу IEDSManager (помимо реализации для ICAdESManager), как это было в сборке 3.4.0 и ранее.
  250. В элементе управление “Представление” при опциональном постраничном отображении по умолчанию включается постраничное отображение.
  251. В маршрутах в этапе “Ветвление” исправлена ошибка при повторном запуске этапа путём выполнения перехода на этот этап или расположенный перед ним синхронный этап после завершения ветки с отзывом оставшихся веток. Ошибка возникала если между синхронным этапом, на который был выполнен переход, и этапом “Ветвление” не было асинхронных этапов.
  252. Исправлена обработка исключений при импорте карточек в TessaClient и TessaAdmin, когда вместо текста исходного исключения отображалась ошибка вида “Ключ CardID отсутствует в словаре”.
  253. В web-клиенте исправлена ошибка, из-за которой кнопки в этапе “Диалог” вторичных процессов могли функционировать некорректно.
  254. Исправлено сохранение карточки с файлами на сервере, если используется ICardFileManager совместно с репортингом прогресса операции container.StoreAsync(updateProgressAsync, updateProgressMillisecondInterval), или если используется сохранение посредством ICardStreamClientRepository. В этом случае репортинг прогресса выполнялся в отдельном потоке на том же соединении с базой данных, что и сохранение карточки, и это могло привести к ошибкам.
  255. В обсуждениях исправлена ошибка при получении контента файла изображения, приложенного к сообщению.
  256. В обсуждениях при редактировании сообщения, так же изменяется информация о нем для поиска по сообщениям.
  257. В обсуждениях при редактировании, цитировании сообщений и обновлении топика через меню, возвращается фокус клавиатуры в поле ввода сообщений.
  258. В web-клиенте исправлена ошибка с пробрасыванием токена прав доступа KrToken, если карточка сохраняется с обновлением, при этом после обновления загружается другая карточка (например, карточка-сателлит задания).
  259. Исправлена ошибка, когда токен прав доступа KrToken пробрасывался в загружаемую с клиента карточку, даже если карточка отличается от текущей открытой. Такая ситуация возможна, если клиентским расширением загружается другая карточка.
  260. Добавлен вертикальный скроллинг в поле “Комментарий” в окне записи истории заданий в desktop-клиенте.
  261. Исправлены действия с номерами при сохранении или импорте карточки, а также при выделении номера из контрола “Нумератор”, если существует расширение CardStoreExtension, зарегистрированное в WithOrder(AfterPlatform), которое в методе BeforeCommitTransaction приводит к ошибке сохранения.
  262. Исправлена ошибка при резервировании номера, если последовательность не содержит доступных интервалов.
  263. Исправлено открытие карточки динамической или метароли после пересчёта по кнопке “Пересчитать роль сейчас”. Ошибка воспроизводилась, если карточка ни разу не сохранялась.
  264. В обсуждениях для участника обсуждения в режиме только для чтения запрещено редактировать и цитировать сообщения.
  265. В обсуждениях исправлено получение файлов из сообщений, если до этого не была открыта вкладка с обсуждениями.
  266. В обсуждениях при добавлении участников больше не добавляются заместители сотрудников.
  267. В web-клиенте исправлено указание языка сотрудника при выполнении представлений в некоторых случаях. При этом вместо сортировки по локализованной строке могла выполняться сортировка по алиасу строки локализации, что обычно соответствовало английскому языку, но не русскому.
  268. В конструкторе бизнес-процессов исправлена ситуация, когда идентификатор подписки запуска процесса изменялся при изменении процесса, но без изменения действия старта процесса.
  269. В конструкторе бизнес-процессов исправлена проблема, из-за которой сигналы, отправленные из редактора экземпляра процесса, не переходили по связям.
  270. В маршрутах в этапе “Типизированное задание” исправлена ошибка NRE. Ошибка возникала при ошибке создания задания, например, при указании несуществующего типа задания в методе SendTaskAsync для сценария этапа “После завершения задания”.
  271. Исправлена обработка отмены выполнения цепочки расширений OperationCanceledException для расширений плагинов IPluginExtension.
  272. Исправлено отображение ошибки при запуске приложения TessaClient, если загрузка карточки-сателлита сотрудника выполнена неуспешно или возникли другие ошибки в ValidationResult.
  273. Исправлена ошибка при открытии представления из элемента управления “Ссылка”, из-за которой не всегда автоматически становилось активным первое доступное представление.
  274. Исправлена обработка клиентскими приложениями таймаута запросов к серверу приложений. В частности, в tadmin такие ошибки логируются и задают корректный код выхода.
  275. Исправлена проблема при автозапуске Tessa Applications вместе с запуском Windows, когда он при этом автоматически запускал единственное доступное приложение. Его запуск теперь выполняется только в том случае, если Tessa Applications запущен явным образом (по ярлыку).
  276. В шаблонах файлов исправлена ошибка генерации текстовых файлов со скриптами, из-за которой, при наличии в файле таблиц без скриптов и со скриптами одновременно, таблицы со скриптами не генерировались.
  277. Исправлена проблема с долгой загрузкой TessaClient в ситуации, когда происходит блокировка правил доступа.
  278. Исправлена ошибка запуска процесса через клиентский API конструктора процессов.
  279. Исправлена ошибка при отправке запроса через клиентский API конструктора процессов без указания идентификаторов узлов или экземпляров узлов.
  280. Исправлена редкая ошибка нарушения уникального индекса ndx_SequencesInfo_Name, если параллельно выполнялось несколько операций для карточки последовательности, которая отсутствовала в базе данных и будет создана в результате одной из операций. Теперь вместо ошибки последовательность будет создана одной из операций, а другая операция выполнит действие с уже существующей последовательностью.
  281. Исправлены возможные проблемы с транзакционностью валидаторов уникальности для СУБД MS SQL Server, где могло использоваться грязное чтение (dirty read) данных в другой транзакции. Теперь валидатор выполняет запросы с уровнем изоляции read committed.
  282. В маршрутах исправлен пропуск добавленных вручную этапов при указании у них флага Stage.Skip.
  283. Исправлено возможное зависание клиентского приложения (TessaClient, TessaAdmin), если открыть окно, в нём - дочернее модальное окно, потом через панель задач переключиться на первое окно и закрыть его клавишей Esc. Например, открыть существующую строку контрола “Таблица”, в нём через троеточие в контроле “Список” открыть выбор представления, через панель задач переключиться на окно строки таблицы и нажать Esc.
  284. Для AppManager исправлено скачивание обновлений для приложений и для самого AppManager, если дата изменения приложения на сервере отличается от даты скаченного локально приложения в меньшую сторону. Например, если изменить основной сервер, на котором AppManager опубликован раньше по времени, чем на предыдущем основном сервере, то после перезапуска Tessa Applications до исправления он не скачивал AppManager с нового сервера, теперь он будет его скачивать и обновлять.
  285. В web-клиенте исправлена ошибка при открытии на чтение виртуальных файлов в карточке.
  286. Для реестра “Протоколы” в дочернем представлении “Задания” исправлен вывод списка заданий, которые отправлялись по кнопке “Разослать задачи по решениям”. Также изменён порядок колонок “Вариант завершения” и “Результат”.
  287. Исправлены скрипты обновления платформы Upgrade.bat/upgrade.sh таким образом, чтобы перед взаимодействием с веб-сервисом был выполнен сброс кэшей схемы данных (и связанных с ним кэшей карточек). Схема данных ранее импортировалась скриптом посредством прямого соединения с БД, что могло привести к неконсистентному состоянию импортированных типов карточек по отношению к содержащейся в кэше старой схемы данных.
  288. Исправлена обработка ссылок Tessa Applications при наличии указанного в ссылке неизвестного сервера или алиаса приложения tessa://application.server/… Ранее приложение закрывалось после отображения ошибки.
  289. Исправлена редкая ошибка “Safe handle has been closed”. Ошибка могла возникать при ожидании событий вежливой остановки плагинов Chronos посредством объекта GlobalEventAwaiter.
  290. Исправлена ситуация, когда кэш представлений наполнялся на текущем открытом соединении в dbScope, в котором может быть незакрытая транзакция, или соединение могло быть открыто к другой БД. Теперь кэш всегда наполняется на отдельном соединении с БД.
  291. В маршрутах в типе карточки “Вторичный процесс” исправлено отображение поля “Дополнительные настройки видимости”/”SQL условие”.
  292. При получении и при отправке почты посредством Exchange исправлены проблемы с аутентификацией при наличии redirect, если Chronos выполняется на ОС Linux.
  293. В web-клиенте в диалоге просмотра структуры карточки добавлена возможность сохранять структуру карточки в файл при нажатии комбинации клавиш “Ctrl+S”.
  294. В web-клиенте добавлено отложенное построение дерева представлений в рабочем месте.
  295. В web-клиенте добавлена возможность вызывать асинхронный код в обработчике события “rowValidating” в контроле таблицы.
  296. Исправлено определение языка интерфейса Deski. Ранее он зависел не от языка интерфейса ОС, а от настроек дат и региональных параметров.
  297. Исправлена проблема, из-за которой сотрудник не добавлялся в статическую роль или подразделение через карточку сотрудника, если он уже входил в данную роль как заместитель.
  298. Исправлена ошибка проверки правил доступа на сохранение карточки, когда в строках секции с ссылками на родительскую секцию не были заданы значения ссылок на родителя.
  299. Исправлен некорректный вывод ошибки проверки прав доступа при загрузке карточки, когда система не могла инициировать проверку прав доступа.
  300. Исправлена ситуация, когда сплэш-окно о текущей выполняемой операции не скрывалось, если отображено сообщение об ошибке.
  301. В web-клиенте исправлена ошибка текстового поля в расширенном режиме, приводившая к некорректной подсветке синтаксиса кода.
  302. При открытии экспортированной в файл карточки “Ошибка” исправлена возможная ошибка “ArgumentNullException Value cannot be null. (Parameter ‘json’)” при нажатии кнопки “Показать в окне”.
  303. В web-клиенте исправлен баг текстового поля в расширенном режиме, приводивший к сбросу пользовательского выделения в точку начала выделения.
  304. Исправлена ситуация, когда при запуске клиентского приложения (TessaClient, TessaAdmin, TessaAppManager) могли удаляться пустые подпапки в папке с временными файлами %temp%\tessa\files, которые могли быть созданы параллельно работающим приложением, но файлы туда ещё не были записаны.
  305. Исправлена ошибка, из-за которой при удалении карточки проверка прав на удаление производилась без переданного в запросе токена.
  306. В маршрутах в этапах “Согласование” и “Подписание” исправлена ошибка при запросе комментария, если в настройках типа задания KrApprove/KrSigning установлен флаг “Автоматически брать в работу”.
  307. В конструкторе бизнес-процессов в действиях “Согласование” и “Подписание” исправлена ошибка при запросе комментария, если в настройках типа задания KrApprove/KrSigning установлен флаг “Автоматически брать в работу”.
  308. В web-клиенте исправлена проблема, которая могла приводить к cors-ошибкам браузера при saml аутентификации.
  309. Исправлена работа функции CalendarAddWorkingDaysToDateExact для СУБД PostgreSQL.
  310. Оптимизировано удаление некоторых типовых карточек и строк в таблицах, где имелся внешний ключ FK на таблицу без индекса.
  311. В редакторе схемы исправлена проблема, когда при изменении в настройках ссылочной колонки полей “Разряженная” или “Идентификатор строки” система не определяла данную колонку как измененную.
  312. В правилах доступа исправлена редкая ошибка, когда расширенные настройки правил доступа некорректно рассчитывались при наличии множества правил с разными приоритетами.
  313. В web-клиенте исправлена ошибка, приводившая к неправильной сортировке по умолчанию в представлениях.
  314. Исправлен запуск Tessa Applications по ярлыку при уже свернутом в трее приложении, если оно было запущено при запуске Windows.
  315. Исправлено вычисление расширения файла в колонке FileContent.Ext для файлов, хранящихся в базе данных MS SQL, если имя файла содержит специальные символы Unicode, например, если в имени используется символ “й”, который был введён в web-клиенте на macOS.
  316. Исправлено отображение ошибки при выборе файла в качестве фонового изображения TessaClient, если формат файла не поддерживается. Ошибка появилась в сборке 3.5.0.
  317. В редакторе схемы исправлена проблема, когда некоторые настройки системного индекса были видны как редактируемые, хотя таковыми не являлись.
  318. Исправлена ошибка, когда заместитель автора переставал видеть задание от имени автора, если он не является исполнителем, и задание взято в работу.
  319. В web-клиенте исправлена ошибка, приводившая к тому, что в карточке “Тип документа” при снятии флага “Использовать систему обсуждений” флаг “Использовать стандартную вкладку “Обсуждения” не скрывался.
  320. При возникновении ошибок доступа в подсистеме правил доступа в детали ошибки дополнительно теперь указывается тип карточки.
  321. В маршрутах в карточке вторичного процесса исправлена индикация блоков звёздочкой в заголовке “Дополнительные настройки видимости” и “Дополнительные настройки выполнения”, если они содержат сценарии.
  322. Оптимизирована проверка доступа создания подписок на типы уведомлений.
  323. Исправлено сообщение об ошибке в ситуации, когда для контрола карточки настроен маппинг с параметром представления, связанный с таким полем карточки, которое было включено в тип на момент добавления, но было удалено из типа к моменту использования.
  324. В web-клиенте в маршрутах в карточке вторичного процесса исправлена индикация звёздочкой в заголовке блоков “Дополнительные настройки видимости” и “Дополнительные настройки выполнения”, если они содержат сценарии.
  325. Исправлена ошибка, из-за которой в настройках этапа отображалась неиспользуемая настройка “Вернуть на роль: ” с пустым значением роли.
  326. При выгрузке типов карточек в формате .jtype исправлена ситуация, когда свойство Form контрола “Таблица” могло выводится то как null, то как пустой объект. Теперь всегда выводится null.
  327. В мобильной версии web-клиента уменьшена прозрачность дерева.
  328. В web-клиенте в маршрутах для этапа “Диалог” исправлена индикация звёздочкой по наличию скриптов.
  329. Исправлены фильтры по параметру “Дата создания” для представлений “Мои обсуждения” (MyTopics) и “Последние обсуждения” (LastTopics).
  330. Исправлена ошибка, из-за которой кнопка “Предпросмотр без расширений” в “Расположении блоков” выполняла предпросмотр с расширениями.
  331. В модуле синхронизации AD / LDAP исправлена синхронизация состава подразделения.
  332. Исправлена ошибка, из-за которой в контроле “Преставление” не работал перенос строк по словам в ячейках.
  333. Исправлена ошибка, из-за которой при клике правой кнопкой мыши на строку представления не сбрасывался выбор прочих cтрок представления.
  334. Исправлена ситуация, когда кэш правил доступа мог оказаться заблокированным после изменения карточки правила доступа, если в процессе её сохранения запрос был отменён (например, закрыта вкладка браузера) или при выполнении сохранения возникло исключение.
  335. Исправлена ситуация, когда зарезервированный или выделенный из последовательности номер не освобождался, если при сохранении карточки возникли исключения в методах AfterRequest для расширений, зарегистрированных на сервере с порядком WithOrder(BeforePlatform).
  336. Исправлено указание context.CancellationToken в расширениях на карточки. Теперь токен асинхронной отмены операции корректно пробрасывается в контекст из вызывающей операции.
  337. Исправлено копирование таблицы условий при копировании карточек “Правило доступа” и “Виртуальный файл”.
  338. Исправлен вызов команды tadmin ImportTypes с указанием имени файла вместо имени папки. При этом команда пыталась импортировать файл сразу в двух форматах: .jtype и .tct. Ошибка появилась в сборке 3.1.0.
  339. Исправлены утечки памяти и другие побочные эффекты для контролов “Список файлов” и для контролов “Представление” с расширением на список файлов, если контрол расположен на форме задания, для которой выполняется переключение между формами (например, переход в форму варианта завершения и возврат из неё).
  340. В модуле синхронизации с AD/LDAP исправлена массовая блокировка пользователей при обработке нескольких операций синхронизаций, выполняемых за один запуск плагина.
  341. Исправлена утечка памяти при создании и копировании карточки в TessaClient при наличии расширений, подписывающихся на структуру карточки context.Card. Проблема могла проявляться после создания карточки, включённой в типовое решение.
  342. Исправлено ошибка NRE в TessaAdmin при создании рабочего места в режиме просмотра.
  343. В web-клиенте исправлена ошибка, из-за которой боковые панели иногда не закрывались при переключении вкладок.
  344. Оптимизирован пересчёт календаря.
  345. При экспорте карточек в файлы .jtype/.card теперь выполняется очистка card.Clean() для карточек-сателлитов, сериализуемых в Info. Это делает содержимое результирующего файла более стабильным относительно репозитория, независимо от выполняемых при экспорте расширений.
  346. Исправлена ошибка, когда в карточке “Настройки сервера” дублировались строки настроек файловых хранилищ при загрузке карточки через ICardCache в расширениях TessaClient.
  347. Исправлено добавление в объект ValidationResult информации по исключению, у которого сообщение exception.Message является пустой строкой.
  348. В маршрутах в этапе “Ветвление” исправлена ошибка “KrAsyncProcessRunner: The first stage of the route is not defined”. Ошибка происходит при изменении карточки в скрипте инициализации этапа “Ветвление”.
  349. Исправлены отсутствующие строки локализации в представлениях.
  350. Исправлена ошибка расчета прав при подписке на уведомления по документу. Из-за ошибки, подписаться на уведомления мог только сотрудник, у которого также были права на создание документа этого типа.
  351. Исправлено кодирование русскоязычных имён файлов, приложенных к письмам, которые отправляются по протоколу SMTP. При этом улучшена совместимость со старыми почтовыми клиентами, которые могли не распознавать имя и выводить его как “Вложение без имени 00309.pdf”.
  352. При экспорте типов карточек в файлы jtype исправлены ситуации, когда пустые строки в настройках иногда экспортировались как null, а иногда как пустые строки. Теперь они всегда экспортируются как null.
  353. В представлениях исправлена редкая ошибка, из-за которой при переходе между страницами некоторые кнопки оставались неактивными.
  354. Исправлено удаление ролей рабочих мест в TessaAdmin.
  355. Для типовых карточек “Протокол” скрыта кнопка “Запустить процесс”, которая всегда приводила к ошибке запуска из-за отсутствия этапов маршрута, поскольку пользователь не мог их добавить. Если в проектном решении требуется использовать вкладку “Маршруты” и запуск основного процесса маршрута, то удалите строку в таблице со списком условий.
  356. Исправлено отображение названий карточек в диалоге импорта, в именах которых есть символы подчёркивания.
  357. В web-клиенте исправлена ошибка, из-за которой в настройках этапа отображалась неиспользуемая настройка “Вернуть на роль: ” с пустым значением роли.
  358. Удаление старых сессий, которые неактивны длительное время, теперь выполняются в плагине Chronos “RemoveClosedSessionsPlugin” раз в сутки, а не при каждом новом открытии сессий. Это оптимизировало открытие сессий и предотвратило возможные deadlock-и, когда одновременно выполняется множество операций по открытию сессий (например, при интерграциях с другими системами). Эта оптимизация не повлияла на алгоритмы расчёта числа занятых конкурентных лицензий.
  359. Исправлено сохранение карточки при закрытии вкладки в TessaClient (при ответе “Да” на вопрос о сохранении изменений при закрытии), где при наличии ошибок валидации или при отмене сохранения в методе расширения Saving вкладка всё равно закрывалась.
  360. Исправлена ошибка, из-за которой в контроле “Представление” всплывающая подсказка отображалась только при наведении на центральную область ячейки.
  361. В приложении TessaAdmin в диалоге подтверждения при удалении узла представления рабочего места теперь отображается имя узла, а не представления.
  362. Исправлена проблема, когда при каждом закрытии вкладки TessaClient, в которой запускался, но не был до конца запущен предпросмотр через внешнюю программу (например, документ Word), создавался лишний процесс TessaHost, а не использовался уже существующий процесс. Для воспроизведения проблемы должна была быть включена настройка “Разрешить предпросмотр через несколько внешних программ”.
  363. Расширения типов “Представление истории заданий”, “Запрет изменения” и “Скрыть вкладку” убраны из списка допустимых расширений для типов заданий.
  364. Исправлена редкая ошибка, когда представление, из которого открывалась карточка, не обновлялось автоматически, если карточка была изменена, и пользователь выполнил закрытие вкладки с сохранением.
  365. В представлении KrPermissionsReport (“Отчёт по правилам доступа”) исправлена сортировка по колонке “Приоритет” для СУБД PostgreSQL.
  366. В TessaAdmin исправлена ошибка, из-за которой при сохранении рабочего места пропадали привязанные к нему роли пользователей.
  367. Исправлено определение ОС в диалоге скачивания Deski в web-клиенте для Mac OS X.
  368. Исправлено определение разрядности ОС при открытии сессии в web-клиенте, который запущен в браузере Safari.
  369. В web-клиенте исправлена ошибка, из-за которой карточка “Сотрудник” скрывалась в тайле “Создать карточку”, даже если права позволяли создавать этот тип карточки.
  370. В web-клиенте для сообщений в обсуждениях исправлена возможность добавлять сразу несколько файлов за одно открытие диалога.
  371. Исправлена проблема, когда пользователь не мог изменять свои настройки и пароль после добавления типа карточки “Сотрудник” в типовое решение.
  372. В обсуждениях добавлена поддержка сочетания клавиш Ctrl+Alt+S для применения зачеркнутого стиля к тексту.
  373. В обсуждениях при инициализации клиента исправлена загрузка прочитанных обсуждений в ситуации, когда нет новых сообщений в ленте уведомлений.
  374. В desktop-клиенте в меню обсуждения убран пункт меню подписать/отписаться от уведомлений.
  375. В TessaAdmin во вкладке “Рабочие места” для узла рабочего места исправлено отображение параметров фильтра, отсутствующих в исходном представлении.
  376. В web-клиенте исправлено форматирование по умолчанию для decimal значений в колонках табличного контрола.
  377. Исправлено отображение блока с состоянием документа (KrBlockForDocStatus) при установке параметра “Скрывать вкладку “Маршрут”” в настройках типа документа.
  378. В маршрутах улучшено сообщение об ошибке при отсутствии класса, содержащего выполняемый сценарий.
  379. В конструкторе бизнес-процессов исправлен расчёт дайджеста у заданий “Подписание”.
  380. Исправлены проблемы для числовых контролов в TessaClient, когда разделитель разрядов иногда мог быть получен из настроек сессии, а иногда из настроек Windows. Например, если для русской культуры разделитель был изменён в настройках Windows с запятой на точку.
  381. В маршрутах исправлено “зависание” процесса в случае, если задание дополнительного согласования завершалось при активном дочернем запросе на комментарий.
  382. В web-клиенте исправлена ошибка, из-за которой иногда не учитывались последние изменения в карточке при закрытии карточки средней кнопкой мыши по вкладке.
  383. В web-клиенте исправлена ошибка, из-за которой многострочный контрол “Строка” в форме контрола “Таблица” закрывал форму при нажатии Enter.
  384. В обсуждениях исправлен просмотр изображений при условии, что у пользователя несколько мониторов.
  385. В редакторе схемы исправлена ошибка, возникающая при редактировании функций для Postgres, имеющих в настройках параметров значения по умолчанию.
  386. Исправлена ошибка, из-за которой новые поисковые запросы, добавленные в меню пользователем, дублировались в интерфейсе TessaClient.
  387. В конструкторе процессов в действиях с отправкой заданий исправлена проблема, из-за которой в скрипте “Сценарий инициализации задания” объект “task” переставал работать, если в этом же скрипте выполнялась загрузка карточки.
  388. В web-клиенте исправлена ошибка с проверкой ЭП для подписей, сделанных в версиях 3.3.1 и ранее.
  389. Исправлено преобразование в PDF/TIFF для всех форматов изображений, кроме PNG.
  390. В контроле “Таблица” исправлена ошибка, из-за которой не работал выбор строк таблицы в расширениях.
  391. В представлении KrTypesForDialogs исправлена сортировка по колонке “Алиас” для PostgreSQL.
  392. В контроле “Текст с форматированием” и в обсуждениях добавлена возможность сохранять приложенные файлы и изображения через контекстное меню.
  393. В контроле “Текст с форматированием” исправлено удаление файлов и изображений в ситуации, когда карточка еще не была сохранена.
  394. Исправлена ошибка, периодически возникавшая при копировании узла рабочего места в TessaClient.
  395. Исправлена сериализация и десериализация массива массивов в типизированный Json.
  396. Исправлена ошибка, из-за которой текущая выбранная вкладка в TessaAdmin сбрасывалась после подключения по RDP.
  397. В приложении TessaClient исправлена утечка памяти, происходящая, когда во вкладке карточки был открыт предпросмотр для незарегистрированного формата файла, после чего без очистки области предпросмотра вкладка закрывается.
  398. В web-клиенте исправлена ошибка с предпросмотром файлов для конвертируемых в PDF форматов (docx, xlsx и т.п.), которые были открыты на редактирование в Deski.
  399. В web-клиенте исправлено ошибочное отображение значка подписи для новой версии файла после подписи предыдущей версии.
  400. В web-клиенте исправлено отображение блока с состоянием документа (KrBlockForDocStatus) при установке параметра “Скрывать вкладку “Маршрут”” в настройках типа документа.
  401. В web-клиенте исправлена ошибка, из-за которой в detail-представлении счётчик страниц был равен 0, если в master-представлении не было строк.
  402. Исправлена обработка ошибки, добавленной в context.ValidationResult в методе StoreAsync для реализации ICardContentStrategy, созданной в проектном решении. Обработка такой ошибки теперь идентична обработке выброшенного исключения.
  403. Исправлена ошибка, из-за которой представление с сабсетами и связанными таблицами при установке фильтра дважды обновляло данные с сервера.
  404. Исправлено позиционирование индикатора уведомлений при использовании нескольких мониторов.
  405. Исправлена работа функций ObtainReaderLock и ObtainWriterLock для PostgreSQL, когда при параллельной работе с одной и той же карточкой запрос на снятие блокировки ожидал завершения выполнения этих функций.
  406. В обсуждениях для получения файлов в сообщениях достаточно быть лишь участником обсуждения, а не супер-модератором.
  407. В редакторе рабочих мест исправлена ошибка, из-за которой представления, добавленные как таблица, не отображались после удаления и повторного добавления.
  408. В контроле “Представление” исправлена ошибка, из-за которой требовалось два раза нажимать на кнопку для сброса параметров фильтрации после применения быстрого поиска.
  409. Исправлена ошибка “Index was outside the bounds of the array”, которая могла возникать при нажатии “Редактировать изображения” в контекстном меню на некоторых pdf-файлах в TessaClient.
  410. Исправлена возможность выбора значений в полях “Тип входа в систему” и “Язык” в карточке сотрудника для обычных пользователей, когда тип карточки “Сотрудник” добавлен в типовое решение.
  411. Исправлена ошибка в ситуации, когда тип карточки “Сотрудник” был добавлен в типовое решение и пользователь имел права на редактирование карточки сотрудника, в интерфейсе были доступны поля “Подразделения” и “Статические роли”, изменение которых приводило к ошибкам, т.к. отсутствовали права на редактирование типов карточек “Подразделение” и “Статическая роль” соответственно.
  412. Исправлена проблема проверки расширенных настроек правил доступа, когда карточка загружается и сохраняется в серверных расширениях.
  413. В маршрутах исправлены сообщения об ошибках при компиляции скриптов или выполнении SQL-сценариев, содержащих ошибку в карточках: группы этапов и вторичные процессы.
  414. В web-клиенте исправлена ошибка, из-за которой при запуске вторичного процесса в режиме “Кнопка” отсутствовало сообщение о недоступности выполнения.
  415. В карточках типов условий: “По автору”, “По контрагенту”, “По маршруту”, “По подразделению”, “По типу документа”, “По типу задания” исправлена обработка значения null, которое может быть возвращено методом GetCardAsync, доступным в контексте скрипта типа условия.
  416. В маршрутах исправлено задание разрешений для строк таблицы “Этапы маршрута” на вкладке “Маршрут” после копирования или создания карточки по шаблону.
  417. В TessaAppManager исправлена ошибка, из-за которой сообщения об ошибках при публикации приложения через ключ /publish мгновенно скрывались.
  418. Исправлена ошибка, из-за которой после открытия карточки в диалоговом окне открытие и создание карточек других типов также происходило во всплывающих диалоговых окнах.
  419. В web-клиенте исправлена ошибка с полем ExtendedCardSettings в KrToken, из-за которой при добавлении этапа в маршрут могла возникать ошибка.
  420. Исправлена ошибка, возникающая при попытке открыть карточку через контрол “Ссылка” или “Список”, если в поле с идентификатором карточки указан не Guid.
  421. В web-клиенте исправлена ошибка, возникающая при попытке открыть карточку через контрол “Ссылка” или “Список”, если в поле с идентификатором карточки указан не Guid.
  422. Оптимизирован логин в web-клиенте.
  423. В обсуждениях исправлена некорректная загрузка сообщений (при отправке нового сообщения, оно попадает на новую страницу, но переход на эту страницу не осуществляется). Ошибка была вызвана сравнением дат.
  424. Исправлена ошибка, когда в уведомлении по заданию отсутствовали некоторые атрибуты (например, автор задания и его срок). Ошибка воспроизводилась при отправке задания из вторичного процесса, запущенного из этапа “Ветвление”.
  425. Исправлена ошибка “ArgumentException: An item with the same key has already been added” при обращении к IConditionContext.Settings из нескольких потоков. Ошибка воспроизводилась в карточке “Условие” “По типу документа”.
  426. В маршрутах исправлена выдача прав при получении задания процесса согласования. Ошибка воспроизводилась, если в типе карточки задания был установлен флаг “Автоматически брать в работу”.
  427. Исправлена команда tadmin SetKey, если переданный параметром ключ идентичен ключу в файле app.json, в котором ключ заменяется. Теперь команда завершается с успешным кодом возврата, и в логе выводится сообщение об успешном выполнении. Исправление актуально для скриптов Upgrade.bat/upgrade.sh.
  428. Открытие файла двойным кликом теперь выполняется для редактирования, а не для чтения, если файл был только что загружен (и не сохранён), либо только что создан по шаблону, либо заменён.
  429. В desktop-клиенте исправлена ошибка, из-за которой изменения в рабочих местах, такие как добавление узлов поисковых запросов, пропадали при переоткрытии вкладки с рабочим местом и восстанавливались только после перезапуска приложения.
  430. Исправлена утечка памяти в TessaClient при использовании элемента управления “Предпросмотр файлов”.
  431. Исправлена возможная ошибка NullReferenceException при выборе файла стрелками на клавиатуре в контроле “Список файлов” в desktop-клиенте.
  432. Исправлена ошибка, когда сериализованные настройки пользователя в TessaClient могли очищаться при обновлении сотрудником своей же карточки сотрудника.
  433. Исправлен вывод сообщений об ошибках при подключении к веб-сервисам, где сообщения могли дублироваться на две строки.
  434. Исправлена ошибка StackOverflow, которая воспроизводилась при получении полного номера документа для типового решения, когда тип документа был известен на момент определения принадлежности типа карточки к типовому решению, но стал неизвестен на момент вызова GetFullNumberAsync. Например, если параллельно изменялась карточка настроек типового решения.
  435. Оптимизирован запуск desktop-приложений посредством кэширования метаинформации в папке %LocalAppData%\tessa\cache.
  436. Оптимизирован сетевой трафик между desktop-приложениями и web-сервисами посредством алгоритма сжатия Brotli, который ранее использовался в web-клиенте.
  437. В маршрутах исправлена ошибка NRE при выполнении KrScopeLevel.ExitAsync.
  438. В desktop-приложениях для контрола “Строка” в режиме “Avalon” исправлено отображение моноширинного шрифта.
  439. В web-клиенте исправлено форматирование колонки “Настройки” в этапах маршрута для этапов “Подписание” и “Согласование”.
  440. В web-клиенте исправлена ошибка при копировании узлов рабочего места.
  441. Исправлена отмена закрытия вкладки с карточкой путём установки context.Cancel = true в расширении ICardUIExtension.Finalizing.
  442. В web-клиенте добавлена возможность подписываться на событие closing для ICardEditorModel. Изменена последовательность вызова событий при закрытии карточки.
  443. В web-клиенте cookies теперь устанавливаются с флагом secure.
  444. В маршрутах исправлена ошибка, возникающая при загрузке удалённой карточки, которая содержит шаблон маршрута.
  445. Для Deski исправлен параметр командной строки -dir, используемый для переопределения папки со служебными файлами Deski. По умолчанию используется подпапка с именем “.deski_data”.
  446. В маршрутах исправлено изменение RowID строк коллекционных секций настроек этапов.
  447. В конструкторе процессов исправлена ошибка, когда в действиях “Согласование”, “Доработка”, “Настраиваемое задание”, “Задание регистрации” и “Подписание” указанный в настройках вид задания не записывался в истории заданий.
  448. Исправлена проблема отображения заголовка задания в карточке, когда для автора задания в качестве заголовка отображался тип задания вместо вида задания.
  449. Исправлена проблема, из-за которой тайлы, созданные вторичными процессами и шаблонами бизнес-процессов, располагались по-разному в desktop-клиенте и в web-клиенте.
  450. Исправлен печатный лист согласования, в котором отображались все циклы согласования.
  451. В web-клиенте исправлена ошибка, из-за которой настройки уведомлений в карточке сотрудника могли дублироваться при сохранении карточки.
  452. В конструкторе процессов в действии “Настраиваемое задание” исправлена проблема, из-за которой данное действие некорректно обрабатывало полученный сигнал завершения задания, отправленный через управление заданием или через редактор экземпляра процесса.
  453. Исправлена ошибка, приводящая к блокировке потока UI в TessaClient, при проверке возможности выполнения команды плитки.
  454. В представлении “KrStageGroups” исправлена ошибка фильтрации по параметру “Типы”.
  455. В представлении “Алгоритмы подписи” (“SignatureDigestAlgos”) исправлен фильтр по параметру “EncAlgoOid”.
  456. В web-клиенте исправлена ошибка в текстовом контроле с подсветкой кода при вставке/удалении текста.
  457. В представлении “KrSecondaryProcesses” исправлена ошибка фильтрации по параметру “Роли”.
  458. В desktop-клиенте исправлена ситуация, когда файл некоторое время мог оставаться открытым после возникновения ошибки предпросмотра в COM-объекте.
  459. В представлении “NotificationSubscriptions” исправлена сортировка по полю “Тип уведомления”.
  460. Исправлена ошибка, возникавшая при задании параметра нестрокового типа в окне быстрого поиска и в ссылочных контролах.
  461. В web-клиенте исправлена ошибка отрисовки файлового контрола в Firefox на ОС Linux.
  462. Исправлена возможная ошибка ArgumentException при обращении к свойствам CardGetResponse.Card и CardNewResponse.Card при наличии ошибок в ValidationResult. Также ошибка могла проявляться в других случаях при обращении к свойствам StorageObject, которые перед этим были установлены как null.
  463. В представлении “KrStageTemplates” исправлен фильтр по параметру “Положение относительно этапов, добавленных вручную”.
  464. Для ссылочных параметров в представлении исправлен набор операторов сравнения по умолчанию.
  465. В web-клиенте исправлена ошибка с работой электронной подписи в браузере Safari для macOS и iOS.
  466. Исправлена ошибка проверки доступа к карточкам с типом “Уведомление” при установке флага конфигурации сервера “Configuration.Sealed”.
  467. Оптимизировано обращение к кэшу файлов, в т.ч. для конвертации документов для предпросмотра в web-клиенте, чтобы изменения в нём не приводили к сбросу глобального кэша.
  468. Оптимизировано создание экземпляров расширений, зарегистрированных посредством WithDefaultConstructor().
  469. Исправлено создание экземпляров расширений, зарегистрированных посредством WithSingleton(). Теперь при параллельном выполнении не может быть создано более одного экземпляра расширения.
  470. При импорте подписей в TessaClient теперь отображается сплэш-окно, если импорт выполняется длительное время.
  471. Исправлен массовый экспорт поисковых запросов с одинаковыми именами, теперь при экспорте они сортируются по идентификатору.
  472. Исправлена ошибка, возникающая при удалении строки из таблицы в ситуации, когда перед удалением была добавлена новая строка.
  473. В маршрутах исправлена ошибка, из-за которой при завершении вложенного процесса, запущенного во вторичном процессе, не выполнялся отзыв заданий.
  474. В конструкторе бизнес-процессов для действия “Настраиваемое задание” исправлена валидация таблицы вариантов завершения.
Back to top