logo

Список критичных изменений системы с версии 3.12.0 по 3.12.22 включительно

Список исправлений к версии 3.12.22

Добавлена возможность использовать параметры типа "Перечисление" с одиночным типом связи как sql параметры:

select * from TaskBase
where TaskBase.Priority=@OneEnum

Добавлена возможность использовать параметры типа "Перечисление" с типом связи "Список" как sql параметры:

select * from TaskBase
where TaskBase.Priority in (@ManyEnum)

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

Иначе не будет работать, например, запрос из статьи https://www.elma-bpm.ru/KB/article-5873.html. Условие {$TaskPriority}=’High’} всегда будет возвращать false, т.к. {$TaskPriority} будет возвращать строковое представление его типа (если параметр TaskPriority является перечислением с типом связи "Список").

Публичные методы и интерфейсы

Добавлена public перегрузка метода EleWise.ELMA.Model.Types.EnumDescriptor.GetPropertyInitExpression(ClassMetadata classMetadata, bool forList, PropertyMetadata propertyMetadata, bool forFilter = false), получающая выражение инициализации свойства в соответствии со значением по умолчанию.

Список исправлений к версии 3.12.21

Добавлена настройка времени жизни результата выполнения задачи планировщика. Если результат выполнения задачи планировщика не обновлялся больше, чем указанный таймаут, – он считается просроченным. По истечении времени жизни задача планировщика считается устаревшей и не блокирует попытку выполнения новых задач. По умолчанию время жизни результата – 720 минут. Пример настройки в файле settings.config : <add key="SchedulerJobRunInfo.Timeout" value="720" /> .

PublicApi

Добавлена перегрузка метода EleWise.ELMA.CRM.Managers.LeadManager.SetStatus(ILead lead, LeadStatus leadStatus, string comment), которая позволяет изменить статус и добавить комментарий к возможности.

Список исправлений к версии 3.12.20

Трудозатраты

Интерфейс IOvertimeWorkLogExtension помечен как Obsolete. Добавлен новый интерфейс IOvertimeWorkLogExtension2.cs взамен IOvertimeWorkLogExtension. Ранее реализованные точки рекомендуется переписать, хотя текущие имплементации также остаются рабочими.

Документооборот

Добавлен новый интерфейс ICryptoProvider2, унаследованный от интерфейса ICryptoProvider.

В интерфейсе добавлен новый метод string GetFileHash(BinaryFile file, string algorithm), позволяющий выполнять расчет хэша по указанному алгоритму.

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

Внутренний портал

При отправке объекта (объект CRM, документ, объект из меню справочников, матрица эффективности) по маршруту после выбора процесса добавлена загрузка формы стартового события процесса.

Проекты

Интерфейс IProjectTaskProperties помечен как неиспользуемый.

Список исправлений к версии 3.12.19

Для того, чтобы не давать права суперпользователя для подключения ELMA в PostgreSQL, появилась возможность указать в файле конфигурации пользователя с правами SuperUser, от которого будет осуществляться создание/удаление БД при запуске системы.

Пример файла конфигурации:

<main.db connectionStringName="MainDB" type="EleWise.ELMA.Extensions.PostgreSQL.PostgreSQLProvider, EleWise.ELMA.Extensions.PostgreSQL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" backupEnabled="false" sysUser="postgres" sysPassword="MASTERKEY" />
<connectionStrings>
<add name="MainDB" connectionString="Host=127.0.0.1;Port=5432;Database=elma3;User Id=user;Password=qwerty;Unicode=true;" />
</connectionStrings>

В данном примере в строке подключения указывается пользователь user с минимальными правами, а в main.db указан суперпользователь postgres.

Список исправлений к версии 3.12.18

Публичные методы

Добавлена возможность получения значений по фильтру для мест регистрации в котроллере:

  • добавлены необязательные параметры в метод EleWise.ELMA.Documents.Docflow.Web.Controllers.RegistrationPlaceController.GetRegistrationPlace(long? accountingYear, string text = null, string filterProviderUid = null, string filterProviderData = null), который возвращает места регистрации по году и по фильтру;
  • добавлены необязательные параметры в метод EleWise.ELMA.Documents.Docflow.Web.Controllers.RegistrationPlaceController.PopupEntity(string inputId, [JsonBinder]ICollection<SelectListItem> selected, bool multiselect, long? accountingYear, string filterProviderUid = null, string filterProviderData = null), который возвращает popup выбора значений для сущности.

Изменена область видимости public методов на internal в менеджере EleWise.ELMA.Security.Managers.UserSecurityProfileManager:

  • CreateProfile
  • FailedLogon
  • DisallowLogon
  • AllowLogon
  • ResetCountFailedLogon
  • ResetCountFailedLogonWithCheck
  • ResetCountFailedLogonAllUsers
  • SetForcedChangePasswordWithCheck
  • SetForcedChangePassword
  • ResetForcedChangePassword

Прочее

Периодические изменения свойств сущности EleWise.ELMA.Security.Models.UserSecurityProfile осуществляются прямыми запросами в БД, из-за чего отследить такие изменения свойств с помощью IEntityEventsListener не получится. Это можно сделать с помощью точки расширения EleWise.ELMA.Security.Extensions IUserSecurityProfileEventHandler.

Список исправлений к версии 3.12.17

Обновление

Обновление на 3.12.17 может занять продолжительное время, так как будет выполнено полное преобразование БД.

SDK

Оптимизация менеджера блокировок:

1. Изменены блокировки на БД (применяется по умолчанию на кластере, если настроен распределенный кэш).

Раньше блокировка выставлялась на соответствующей записи таблицы DbLock через FOR UPDATE, данная блокировка "висела" на записи таблицы в течение всего времени нахождения в критической секции, что негативно сказывалось на статистике, т.к. большой процент времени были блокировки как раз на таблице DbLock.

Сейчас блокировка устанавливается путем вставки записи в DbLock. Снятие блокировки - путем удаления. Наличие записи говорит о том, что блокировка кем-то захвачена. Т.е. блокировки на таблице DbLock будут возникать только тогда, когда конкурирующие транзакции пытаются вставить/удалить одинаковые записи из таблицы DbLock в один момент.

2. Реализованы блокировки на Redis. Данный сервис блокировок надо включать явно (configuration.config)

Пример:

Логика блокировок такая же, как и на БД: есть ключ в redis-е, значит кто-то захватил блокировку, нет ключа - блокировки нет. Для работы с редис необходимо для отказоустойчивости минимум 3 независимые ноды (не кластер, не сентинел, а просто 3 экземпляра сервера). Блокировка считается установленной, если её удалось установить на более, чем половине узлов. Настройка редис провайдера блокировок выполняется через configuration.config - указываются соединения с нодами (в формате, который используется и для конфигурирования кэша редиса). Используется алгоритм redlock, рекомендованной офиц. документацией.

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

Переработан LockManager:

  1. Унаследован от интерфейса ILockManager, поэтому рекомендуется в модулях инжектировать именно ILockManager, а не использовать LockManager
  2. У LockManager’а помечены как Obsolete группа методов TryObtainLock, ObtainLock и ReleaseLock. Вместо них рекомендуется использовать методы интерфейса ILockManagerLock, TryLock, которые возвращают IDisposable блокировку.

Внутренний портал

Обновлен модуль ZeroClipboard. Flash контент удален из системы. Функционал заменен js скриптами.

Монитор процессов

Устранена XSS уязвимость в разделе "Монитор процессов". Отключена возможность сортировки по колонкам "Контекст" и "Значения" в разделе "Монитор процессов".

Сообщения

  • При выполнении архивации ленты избранные сообщения игнорируются;
  • Ранее заархивированные сообщения автоматически перенесутся в ленту при первом запуске системы после обновления.

Список исправлений к версии 3.12.16

Возможность указания разного перевода для одного ключа

Для указания нескольких переводов для одного ключа необходимо указать их в ресурсе по следующему шаблону:

Msgstr "[[Место11,Место12,Место13]]Перевод1[[Место21,Место22,Место23]]Перевод2",

где Место - место использования. Место использования можно взять из закомментированных строк использования над переводами:

  1. 25cab08fff420add/Applications/BPM/EleWise.ELMA.BPM.Web/Modules/EleWise.ELMA.CRM.Web/Views/Lead/SelectTypes.cshtml:15 Lead_SelectTypes (Для файлов .cshtml - от папки Views, и замена символа / на _);
  2. 25cab08fff420add/Applications/BPM/EleWise.ELMA.BPM.Web/Modules/EleWise.ELMA.Workflow.Processes.Web/Views/WorkflowInstance/ChangeTimer.cshtml:15 WorkflowInstance_ChangeTimer;
  3. 25cab08fff420add/SDK/EleWise.ELMA.SDK.Design/BPMApps/Views/BPMAppsRibbonPanelView.Designer.cs:118 Designer (Для файлов .cs - название файла).

Монитор процессов

Добавлена поддержка экспорта в Excel колонки текущих задач по процессам.

Оповещения

Реализованы глобальные настройки для добавления заголовка в тело сообщения для SMS и EMAIL уведомлений.

Список исправлений к версии 3.12.15

Публичные методы

Метод Init(List<IDocument> documents, bool fillVersions = true), перемещен из EleWise.ELMA.Documents.Docflow.Web.Models.ApprovementInfo и EleWise.ELMA.Documents.Docflow.Web.Models. AcquaintanceInfo в EleWise.ELMA.Documents.Docflow.Web.Models.DocumentTaskBaseInfo<T>.

Добавлена перегрузка данного метода Init(Dictionary<IDocument, IDocumentVersion> documentsAndVersions, bool fillVersions = true).

Список исправлений к версии 3.12.14

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

Публичные методы и интерфейсы

  1. Добавлен интерфейс EleWise.ELMA.Model.Types.IValidatableTypeDescriptor, позволяющий провести валидацию типа.
  2. Добавлена валидация для класса EleWise.ELMA.Model.Types.RefTypeDescriptor<T, SettingsT>.
  3. Добавлена валидация для класса EleWise.ELMA.Model.Metadata.EntityPropertyMetadata.

Список исправлений к версии 3.12.13

Общие доработки

Замена списка вариантов регистрации в разделе Канцелярия документооборота на выпадающий список.

Список исправлений к версии 3.12.12

Пользовательский интерфейс

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

Конструктор форм

Добавлен параметр кнопки На форме только для чтения. Данный параметр определяет возможность отображения созданной кнопки на форме «Только для чтения» и после выполнения процессной задачи.

Параметр включает в себя три варианта отображения:

  • Активна – кнопка будет активна на форме, то есть пользователь будет иметь возможность выполнить определенное действие, нажав на данную кнопку.
  • Неактивна – кнопка будет отображена на форме, но будет неактивна, то есть пользователь не будет иметь возможности воспользоваться данной кнопкой.
  • Скрыта – кнопка не будет доступна пользователю и будет скрыта с формы.

Формы

Добавлены проверки текущего состояния полей ввода на формах создания/редактирования:

  • Задачи
  • Проектные задачи
  • Процессные задачи (со всеми формами конструктора)
  • Календарь, события
  • Проекты - проектные задачи
  • Отчеты
  • Сообщение
  • KPI(шаблон матрицы эффективности, цель, смарт-задача, мероприятие)
  • CRM(контрагенты, встречи, звонки и др.)
  • Документооборот(задачи по документам, документы)

При закрытии/перезагрузке вкладки срабатывает проверка - изменилось ли их состояние. Если пользователь не вносил никаких изменений, то при закрытии/перезагрузке переход осуществляет без появления предупреждающего окна. Добавлена возможность использовать отслеживание в Popup-окнах.

Изменения в коде

Метод EleWise.ELMA.Projects.Managers.ProjectTaskBaseManager. ChangeTaskPropertyNotShowInLists(IProjectTaskBase task, bool saveAfterChange = false, bool updateStatus = true) помечен как устаревший и вскоре будет удален, вместо него следует использовать EleWise.ELMA.Projects.Managers.ProjectTaskBaseManager. ChangeTaskVisibility(IProjectTaskBase task, bool saveAfterChange = false).

Список исправлений к версии 3.12.11

Изменений нет

Список исправлений к версии 3.12.10

API Кода. Публичные методы и интерфейсы

1. Метод bool EleWise.ELMA.Documents.Web.FullTextSearch.Extensions.HasUserFields (IDocumentFilter filter) отмечен устаревшим, вместо него нужно использовать метод void EleWise.ELMA.Documents.Web.FullTextSearch.Extensions.HasUserFields(IDocumentFilter filter, CheckFullTextSearchModel checkResult).

Пользовательский интерфейс

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

Список исправлений к версии 3.12.7

Изменения в Планировщике

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

Под рабочими днями нужно иметь в виду ПОРЯДКОВЫЙ НОМЕР РАБОЧЕГО ДНЯ В МЕСЯЦЕ!

Часовые пояса

В Дизайнере ELMA появилась настройка Не учитывать временные зоны для свойства типа Дата/время. Она позволяет хранить и просматривать данное свойство без смещения по тайм-зоне. Например, если было введено значение 01.01.2018 01:00:00 при тайм-зоне +3ч, то в результате при считывании пользователем с тайм-зоной +1ч, значение останется тем же. Однако аналогично работает свойство, когда в настройке указано не показывать время, т.е. все свойства типа Дата/время без времени так же не смещаются по тайм-зоне.

Публичные методы

Добавлены следующие методы:

  • EleWise.ELMA.Model.Metadata.EntityMetadata.GetAllTableParts(), возвращающий список всех блоков, относящихся к метаданным (включая все вложенные);
  • EleWise.ELMA.Model.Metadata.EntityMetadata.GetAllProperties(), возвращающий список всех свойств, относящихся к метаданным (включая свойства всех вложенных блоков);
  • EleWise.ELMA.Model.Metadata.EntityMetadata.GetAllPropertiesAndTableParts(), возвращающий список всех свойств и блоков, относящихся к метаданным (включая свойства и блоки всех вложенных блоков).

Изменения в модуле "Отчеты"

Для обновления системных отчетов не нужно дополнительно вносить изменения в файл «ReportsDbStructure.xml».

Список исправлений к версии 3.12.6

Изменения в модуле "Отчеты"

В дизайнере в списке отчетов была добавлена группа «Корзина», в которую помещаются удаленные отчеты и подотчеты. Для восстановления необходимо нажать правой кнопкой мыши по отчету, выбрать «Восстановить». Если восстановление пройдет успешно, отчет появится в группе «Общие отчеты».

Список исправлений к версии 3.12.5

KPI

При создании нового скрипта KPI добавлены по умолчанию сборка EleWise.ELMA.KPI и пространства имен EleWise.ELMA.Model.Common, EleWise.ELMA.KPI.Extensions, EleWise.ELMA.KPI.Security, EleWise.ELMA.KPI.Managers.

SDK

Добавлена возможность предобработки файла перед его сохранением при помощи новой точки расширения IPreUploadFile. Компоненты этой точки расширения собираются через конструктор класса FileSystemFileStoreProvider (провайдер для работы с файлами).

Изменения в модуле "Отчеты"

  1. Все параметры отчета передаются в POST - запросе.
  2. Удален класс EleWise.ELMA.Reports.Managers.ReportCacheManager, предназначенный для хранения параметров и настроек отчета в кэше.
  3. Обновлен системный отчет "Отчет по исполнительской дисциплине (3.1)".

Изменения работы с параметрами отчета

Запрещено переписывать параметры отчета на макете отчета Razor. Для этого необходимо использовать пользовательский код контроллера.

Перенос классов и представлений модуля "Отчеты"

  1. Класс EleWise.ELMA.Reports.Web.ReportPagerSettings перенесен в EleWise.ELMA.BPM.Web.Reports.Components.ReportPagerSettings.
  2. Класс EleWise.ELMA.Reports.Web.ReportPagerSettingsBinder перенесен в EleWise.ELMA.BPM.Web.Reports.Components.ReportPagerSettingsBinder.
  3. Класс EleWise.ELMA.Reports.Code.ReportParametersBinder перенесен в EleWise.ELMA.BPM.Web.Reports.Components.ReportParametersBinder.
  4. Представление \Modules\EleWise.ELMA.BPM.Web.Reports\Page\Report.aspx перенесено в \Modules\EleWise.ELMA.BPM.Web.Reports\FastReportPage\Report.aspx.
  5. Класс EleWise.ELMA.Reports.Web.Report перенесен в EleWise.ELMA.BPM.Web.Reports.FastReportPage.Report.

Публичные методы

  1. Конструктор с параметром EleWise.ELMA.Reports.Models.CustomPagerParameters.CustomPagerParameters(bool isActive) отмечен как устаревший (Использовать конструктор без параметров).
  2. Сделаны виртуальными следующие методы:
  • Telerik.Web.Mvc.UI.Html.GridPagerNumericSectionBuilderCustom.Create
  • Telerik.Web.Mvc.UI.Html.GridPagerPagingSectionsBuilder.CreateSections
  • Telerik.Web.Mvc.UI.Html.GridPagerPagingSectionsBuilder.AppendNumericSection

Проекты

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

Документооборот

Для задач документооборота (EleWise.ELMA.Documents.Models.Tasks.IDocumentTask) добавлено дополнительное поле ExecutorOriginal, хранящее первого (оригинального) исполнителя задачи.

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

Для ранее созданных задач лист согласования/ознакомления остался прежним (т.е. отображается – «замещается польз-лем»).

Добавление функции

Добавлена функция расширения стандартного функционала jQuery- settimeout.

А именно, функция - elmaTimeout.waitUntilValidatorReady” - таймаут ожидания создания валидатора для формы.

Список исправлений к версии 3.12.4

API Кода. Публичные методы и интерфейсы

Полнотекстовый поиск

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

Возможность отключить защиту CSRF

Добавлена возможность частично отключить CSRF-защиту для контроллера или метода. Для этого на соответствующем контроллере или методе необходимо указать атрибут следующим образом:

[AntiForgeryToken(true)]

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

PublicAPI

Раздел Docflow:

Добавленные методы:

DocumentApprovementTask PublicAPI.Docflow.Tasks.CreateTask(CreateTaskParams params)

Раздел Processes:

Устаревшие методы:

Void PublicAPI.Processes.WorkflowTaskBase.ReAssignToReplacement(TaskBase task) (Больше не используется)

Список исправлений к версии 3.12.3

Точка расширения ISubTaskSettingsRenderer

В интерфейсе этой серверной точки расширения был убран метод:

MvcHtmlString Render(HtmlHelper html, ICreateSubtaskActionModel settings, PropertyMetadata property);

Вместо него создана точка расширения для ISubtaskSettingsWebRenderer.

Точка расширения ISubtaskSettingsWebRenderer

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

/// <summary>
/// Тип элемента интерфейса создания подзадач, который реализуется компонентом
/// </summary>
CreateSubtaskSettingTypes SettingType { get; }

/// <summary>
/// Сможет ли компонет выдать разметку по указанному полю?
/// </summary>
/// <param name="settings">Настройки создания подзадачи</param>
/// <param name="property">Поле из настройки</param>
/// <returns>true, если компонент может вернуть разметку для указанного поля, иначе - false</returns>
bool CanRender(ICreateSubtaskActionModel settings, PropertyMetadata property);

/// <summary>
/// Сгенерировать разметку для элемента интерфейса
/// </summary>
/// <param name="html">Html хелпер</param>
/// <param name="settings">Настройки создания подзадачи</param>
/// <param name="property">Поле из настройки</param>
/// <returns>Html разметка</returns>
MvcHtmlString Render(HtmlHelper html, ICreateSubtaskActionModel settings, PropertyMetadata property);

Публичные методы и интерфейсы

Добавлена новая сущность UserSecurityProfile.

Пароль пользователя для входа в систему:

  • Свойство Password сущности User перенесено в UserSecurityProfile:
    • Свойство Password сущности User отмечено устаревшим
    • Свойство Password добавлено в новую сущность UserSecurityProfile
  • Добавлен дополнительный код в сущность User:
    • при попытке получения значения User.Password будет вызван метод return UserSecurityProfileManager.Instance.Load(this).Password
    • при попытке задать значение в User.Password будет вызван метод UserSecurityProfileManager.Instance.PasswordReset(this, value)
  • Старый код вида:
var user = UserManager.Instance.Create();
user.Password = password;   // некоторый пароль

не будет задавать пароль, пока сущность пользователя не сохранена (т.е. сначала сохранить, потом установить пароль).

Рекомендуется использовать:

1. var user = UserManager.Instance.Create();

UserSecurityProfileManager.Instance.CreateProfile(user, password);

2. Или сохранять пользователя, используя одну из перегрузок метода Save менеджера UserManager, включающую параметр password, или SaveUserWithGroups([NotNull] Models.IUser obj, string password, IEnumerable<long> newGroups, Func<IUserGroup, bool> oldGroupsCondition = null)

1. Метод EleWise.ELMA.Security.Managers.UserManager. SaveUserWithGroups([NotNull] Models.IUser obj, IEnumerable<long> newGroups, Func<IUserGroup, bool> oldGroupsCondition = null) отмечен устаревшим, вместо него нужно использовать метод EleWise.ELMA.Security.Managers.UserManager.SaveUserWithGroups([NotNull] Models.IUser obj, string password, IEnumerable<long> newGroups, Func<IUserGroup, bool> oldGroupsCondition = null)

2. Метод EleWise.ELMA.Security.Managers.UserManager.Save([NotNull] Models.IUser obj, bool saveAsBlocked) отмечен устаревшим, вместо него нужно использовать метод Метод EleWise.ELMA.Security.Managers.UserManager.Save([NotNull] Models.IUser obj, string password, bool saveAsBlocked)

Пользовательский интерфейс

Изменены настройки безопасности

Было:

Стало:

Панель «Настройка видов авторизации» и «Настройка криптопровайдеров»

Добавлены кнопки «Сменить пароль при следующем входе»/ «Снять принудительную смену пароля» в блок «Безопасность» в профиле пользователя:

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

Новая форма для принудительной смены пароля при авторизации.

Пользовательский интерфейс

1. Добавлено отображение ошибок при сохранении на форме свойств-справочников реализующих EntityCollection:

2. В портлете для сообщений канала была убрана настройка «Количество отображаемых сообщений». Настройка «Количество отображаемых комментариев» берется из настроек портлета:

Список исправлений к версии 3.12.2

Создание документа

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



Согласование документа

При согласовании, ознакомлении и подписании документа появилась возможность убрать поле «Комментарии». Возможность обязательности заполнения комментария стала вложенной.


Список исправлений к версии 3.12.1

Подключение через прокси сервер

Продолжение при переходе заголовков на сервер:

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

Веб-часть, Документооборот, Задачи, Процессы Workflow

Были расширены возможности системы в плане создания подзадач.

Было:

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

Стало:

«Родительская задача» -> «возможные типы дочерних задач»:

Родительская задача Возможные типы дочерних задач
Обыкновенное согласование Согласование, Ознакомление, Задача (все подзадачи обыкновенные)
Процессное согласование Согласование, Ознакомление, Задача (все подзадачи обыкновенные)
Обыкновенное ознакомление Ознакомление, Задача (все подзадачи обыкновенные)
Процессное ознакомление Ознакомление, Задача (все подзадачи обыкновенные)
Обыкновенная резолюция Обыкновенная задача (сохранен существующий функционал создания задач по резолюции)
Процессная резолюция Обыкновенная задача (сохранен существующий функционал создания задач по резолюции)
Обыкновенная задача Обыкновенная задача
Процессная задача Обыкновенная задача

Существующий в системе функционал по созданию подзадач также был сохранён.

Вложенность подзадач не ограничивается.

У всех типов задач, в которых имеется возможность создать подзадачу, под кнопкой "Действия" имеется пункт "Создать подзадачу".

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

Наличием опции «Требовать ЭЦП» управляют глобальными настройками ЭЦП (пункт «Администрирование» / «Настройка модуля« Документооборот »/« Настройки ЭЦП »).

Для задач ознакомления и согласования созданы отдельные переключатели. Установка параметра в значение "Да" убирает опцию "Требовать ЭЦП" из окна выбора типа подзадач, и на вновь создаваемые подзадачи начинает действовать глобальная настройка из модуля, либо настройка из элемента диаграммы.

После создания хотя бы одной подзадачи в представлении родительской задачи появляется вкладка "Подзадачи". Во вкладке - таблица созданных подзадач, но без учёта вложенных (подзадачи подзадач не отображаются).

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

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

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

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

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

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

Далее понадобится ввести комментарий к операции отмены и подтвердить свой выбор.

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

Безопасность

Помечены Obsolete:

  • метод EleWise.ELMA.Security.Managers.UserCertificateManager.CheckSignature - "Устарел. Используйте EleWise.ELMA.Security.Services.AuthCryptoProviderService.CheckSignature".

Документооборот

Помечены Obsolete:

  • метод VerifyData у EleWise.ELMA.Documents.Extensions.ICryptoProvider, "Устарел. Используйте CryptoProviderBase.Verify";
  • менеджер EleWise.ELMA.Documents.DigitalSignature.CryptoProviderManager "Устарел. Используйте EleWise.ELMA.Documents.Services.SignCryptoProviderService";
  • метод EleWise.ELMA.Documents.Managers.AcquaintanceTaskManager.SignValid, в качестве замены используйте EleWise.ELMA.Documents.Services.SignCryptoProviderService;
  • метод EleWise.ELMA.Documents.Managers.ApprovementTaskManager.SignValid, в качестве замены используйте EleWise.ELMA.Documents.Services.SignCryptoProviderService;
  • метод EleWise.ELMA.Documents.Managers.DocumentVersionExtManager.SignValid, в качестве замены используйте EleWise.ELMA.Documents.Services.SignCryptoProviderService;
  • структура EleWise.ELMA.Documents.Models.DigitalSignature.Signer, устарела, используйте EleWise.ELMA.Security.Models.Crypto.Signer;
  • структура EleWise.ELMA.Documents.Models.DigitalSignature.VerifyDataStruct, устарела, используйте EleWise.ELMA.Security.Models.Crypto.VerifyResult;
  • метод EleWise.ELMA.Documents.Docflow.Web.Extensions.ICertificateSelectionOnMultipleSigningWeb.RenderMultipleSignCheckBox, устарел и больше не используется.

Обновлены интерфейсы криптопровайдеров:

  • В серверной части в сборке Security выделен базовый интерфейс криптопровайдера (Uid - ProviderUid, Имя - DisplayName, Настройки - Settings, метод проверки подписи - Verify, метод вычисления хэша - GetFileHash) EleWise.ELMA.Security.Extensions.ICryptoProviderBase;
  • в веб-части ICryptoProviderWebBase (Uid - ProviderUid, метод рег-ции js скриптов - RegisterScripts, метод подготовки скриптов добавления сертификата - PrepareAttachCertificate);
  • появилось разделение на криптопровайдер входа и подписания в серверной части EleWise.ELMA.Security.Extensions.IAuthCryptoProvider (новый) и EleWise.ELMA.Documents.Extensions.ICryptoProvider (этот интерфейс был, теперь просто наследуется от EleWise.ELMA.Security.Extensions.ICryptoProviderBase);
  • в веб-части EleWise.ELMA.BPM.Web.Security.ExtensionPoints.IAuthCryptoProviderWeb (новый) и EleWise.ELMA.Documents.Docflow.Web.Extensions.ICryptoProviderWeb (был, теперь наследуется от ICryptoProviderWebBase);
  • Таким образом при обновлении реализации собственного КП в части документооборота необходимо:
    • в серверной части переопределить метод Verify у AbstractCryptoProvider, т.к. VerifyData устарел, реализация идентична;
    • в веб-части дополнительно определить методы/св-ва Provider, RegisterScripts, PrepareAttachCertificate.

Список исправлений к версии 3.12.0

1. При импорте плана проекта добавлена возможность его объединения с планом, в который производится импорт;

2. Добавлена возможность отображения отчета в виде таблицы.

Для вывода результатов отчета в виде таблицы добавлен генерируемый шаблон Razor-разметки (кнопка Шаблон –> Шаблон таблицы в тулбаре на вкладке макета отчета). Результаты выводятся посредством стандартной таблицы с возможностью сортировки*, группировки*, пейджинга, настройки колонок и экспорта в формат Excel. Состояние настроек таблицы сохраняется индивидуально для каждого пользователя (сохраняются настройки отображения колонок, сортировки, пейджинга). В случае изменения отчета, все настроенные пользовательские настройки этого отчета сбрасываются.

* По техническим причинам сортировка/группировка по колонкам типа Строка невозможна для СУБД Oracle

Ограничения на запрос к источнику данных при использовании табличного режима:

  • Запрос должен начинаться с ключевого слова select
  • Не следует сортировать результирующую выборку в запросе - это делается средствами таблицы (не использовать в запросе ключевое слово order by)
  • Ограничения на длину алиаса в зависимости от СУБД

SQL Server – 128символов

Firebird 2.5 – 255 символов

PostgreSQL – 63 символа

Oracle–30 символов, в версии 12.2 и старше – 128 символов

  • Не следует ограничивать результирующую выборку в количестве (смещение первого результата и количество результатов) - это также делается средствами таблицы. В зависимости отиспользуемой СУБД это будут различные ключевые слова.

Firebird – FIRST,SKIP

PostgreSQL – OFFSET,LIMIT

SQL Server – OFFSET,FETCH NEXT

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

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

При использовании HQL-источников при формировании отчета данные в таблице выводятся с использованием стандартных шаблонов отображения.

При использовании SQL-источников при формировании отчета данные в таблице выводятся в том виде, в котором они хранятся в таблице БД. Для кастомизации вывода данных из SQL-источников существует возможность использования служебных колонок:

  • Колонка для отображения в таблице – постфикс _$view.
  • Колонка для использования при экспорте в Excel – постфикс _$export.

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

Внимание!
В таблице будет отображена только одна колонка. Служебная колонка в выводимом отчете не отображается.

Рассмотрим пример вывода колонки, содержащей имя пользователя:

Колонка "Исполнитель" – идентификатор пользователя, хранящийся в колонке "Executor" из таблицы TaskBase.

Но, т.к. идентификатор не подходит для вывода (это неинформативно), вводим дополнительную колонку "Исполнитель_$view", которая кастомизирует вывод колонки "Исполнитель" в виде ФИО со ссылкой на профиль пользователя.

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

Генерация Razor-разметки для макета отчета


Окно мастера создания макета отчета в режиме таблицы

Сгенерированная Razor-разметка макета отчета для отображения в табличном режиме

Результат отображения отчета в веб-части



Публичные методы и интерфейсы

  1. Класс EleWise.ELMA.Projects.Models.MSProject.ResourceMergedView удален;
  2. Класс EleWise.ELMA.Projects.Models.MSProject.TaskMergedView удален;
  3. В интерфейс EleWise.ELMA.Runtime.Db.Migrator.Framework.ITransformationProvider добавлен метод GetEngineVersion , который будет номер версии сервера используемой СУБД.