logo

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

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

Добавлена возможность использовать параметры типа "Перечисление" с одиночным типом связи как 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.11.31

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

PublicApi

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

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

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

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

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

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

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

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

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

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

Проекты

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

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

Для того, чтобы не давать права суперпользователя для подключения 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.11.28

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

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

  • добавлены необязательные параметры в метод 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 выбора значений для сущности.

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

Обновление

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В Дизайнере 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.11.16

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

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

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

KPI

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

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

  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

Проекты

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

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

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

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

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

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

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

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

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

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

[AntiForgeryToken(true]

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

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

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

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

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

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

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

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

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

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

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

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

Исправлена ошибка с подключением дизайнера под прокси: добавлена возможность переключать поведение 100-Continue при передаче заголовков на сервер:

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

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

Нет критичных изменений.

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

Public API

В EleWise.ELMA.SDK\Model\Managers\LockManager.cs добавлен класс DataBaseLocker для упрощения работы с блокировкой базы данных, а также методы Lock(string lockKey) и Lock(string lockName, int timeout) для его реализации.

Web

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

Error 1 - При POST-запросе формы отсутствует токен

Решение

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

Razor

@Html.AntiForgeryToken()

Error 2 – На форме присутствует множество токенов

The anti-forgery token could not be decrypted. If this application is hosted by a Web Farm or cluster, ensure that all machines are running the same version of ASP.NET Web Pages and that the <machineKey> configuration specifies explicit encryption and validation keys. AutoGenerate cannot be used in a cluster.

Решение

Удалить из формы все токены(не из всей страницы!) с наименованием “__RequestVerificationToken” и добавить новый.

JavaScript

$(form).find("input[name=__RequestVerificationToken]").remove();

$(form).AddAntiForgeryToken()

Дизайнер

В дизайнере добавлена возможность редактировать часть метаданных базовой расширяемой системной сущности. На данным момент для редактирования открыто поле скрипта автозаполнения (если оно было заполнено ранее). Данных механизм распространяется только на расширяемые системные сущности, на объекты созданные в дизайнере – нет.

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

Добавлена вкладка со списком всех экземпляров данного события.

Изменён функционал тулбара.

Процессы Workflow

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

Было:

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

Стало:

  1. Причину перехода теперь необходимо указывать прямо на странице с информацией об изменении версии.
  2. Под текстовым блоком «Причина смены версии» появилась сворачиваемая панель "Различия в зонах ответственности". Панель содержит сводную таблицу по обнаруженным изменениям в зонах. Учитываются различия в типах. Если типы совпадают, то проверка углубляется до конкретных параметров зон.

В первом столбце указан статус зоны ответственности:

  1. Новая - в новой версии процесса эта зона была добавлена. В предыдущей версии её не было.
  2. Изменена - по сравнению со старой версией процесса в новой у зоны изменились некоторые параметры.
  3. Удалённые зоны не отображаются.
  4. Если в зоне ответственности с изменениями находится активный элемент, то об этом сообщит текст "Активный элемент в зоне".

Во втором столбце указаны параметры изменившихся зон ответственности в старой, предыдущей версии процесса. Если зона новая, т.е. была создана в новой версии, то в колонке появится поясняющий текст: "В старой версии процесса данная зона отсутствует. Она была добавлена в новой версии."

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

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

  1. "Оставить текущего исполнителя". Эффект - в зоне ответственности при переходном изменении останется прежний исполнитель. Действие доступно, если у зоны есть привязка к исполнителю вне зависимости от наличия активного элемента в зоне. Текущий исполнитель будет указан ниже описания.
  2. "Указать исполнителя вручную". Эффект - в зону ответственности при переходном изменении будет назначен указанный пользователь. Данное действие доступно, если у зоны есть привязка к исполнителю, в ней нет активного элемента и тип зоны в новой версии не "Бизнес-роль". Выбрать можно любого пользователя. Сам элемент выбора пользователя является обязательным к заполнению и расположен ниже описания.
  3. "Назначить из зоны ответственности". Эффект - в зону ответственности при переходном изменении будет назначен исполнитель, определяемый правилами зоны ответственности из новой версии процесса. Данное действие доступно, если у зоны нет привязки к исполнителю и в ней нет активного элемента.
  4. "Оставить назначенные задачи как есть". Эффект - назначенная задача останется на прежних исполнителях, и первый, кто выполнит её, станет исполнителем зоны. Данное действие доступно, если у зоны нет привязки к исполнителю и в ней присутствует активный элемент. После выполнения данного действия может оказаться так, что реальный исполнитель не совпадает с теми, что указаны в настройках зоны. Это штатная работа механизма.

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

Public API

Раздел KPI:
PublicAPI.KPI.Objects.Models.KpiWorkflowTask.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
PublicAPI.KPI.Objects.Performance.ApprovalTaskPerformance.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
PublicAPI.KPI.Objects.SMART.SMARTTask.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
PublicAPI.KPI.Objects.KpiTask.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
Раздел Docflow:
PublicAPI.Docflow.Objects.BPMN.AssignDocumentTask.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
PublicAPI.Docflow.Objects.BPMN.CreateDocumentTask.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
PublicAPI.Docflow.Objects.BPMN.RegistrationDocumentTask.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
PublicAPI.Docflow.Objects.BPMN.SendToAcquaintanceTask.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
PublicAPI.Docflow.Objects.BPMN.SendToApprovementTask.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
PublicAPI.Docflow.Objects.Tasks.DocumentAcquaintanceTask.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
PublicAPI.Docflow.Objects.Tasks.DocumentApprovementTask.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
PublicAPI.Docflow.Objects.Tasks.ResolutionTask.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
PublicAPI.Docflow.Objects.Tasks.RouteApprovementTask.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
PublicAPI.Docflow.Tasks.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
Раздел Processes:
PublicAPI.Processes.WorkflowTaskBase.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
Раздел Portal:
PublicAPI.Portal.Objects.Tasks.Question.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
PublicAPI.Portal.Objects.Tasks.ReplacementTask.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
Раздел Projects:
PublicAPI.Projects.ProjectTaskBase.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
PublicAPI.Projects.ProjectTaskBase.Milestone.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
PublicAPI.Projects.ProjectTaskBase.WorkflowProjectTask.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
PublicAPI.Projects.Objects.Budgets.ProjectBudgetApprovalTask.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
PublicAPI.Projects.Objects.Prediction.ProjectPredictionApprovalTask.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
PublicAPI.Projects.Objects.Prediction.ProjectPredictionDatesTask.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
PublicAPI.Projects.Objects.Prediction.ProjectPredictionWorkLogTask.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
PublicAPI.Projects.Objects.ProjectComplexTask.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
PublicAPI.Projects.Objects.ProjectPlanApprovalTask.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
PublicAPI.Projects.Objects.ProjectDatesApprovalTask.Filter() - есть изменения в фильтре:
HideOldPlanTasks(Boolean hideOldPlanTasks) - Добавлен
Раздел Services:
Добавленные методы:
Boolean PublicAPI.Services.SecurityServices.CanCheckPermission(Permission permission, Type type)

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

Public API

Добавлен метод вычисления прав на редактирование документа PublicAPI/REST/EleWise.ELMA.Documents/Document/{DOCUMENTID}/CanEditDocument

Добавлена возможность отображения списка справочников как списка форм

Для этого необходимо для типа объектов списка определить форму для отображения. Перенести значение спискового свойства на форму и определить пользовательскую разметку, где вызвать метод Html.EntityCollection с указанием идентификатора формы для типа объектов списка.

Результат:

Примечание: действие «Удалить» удаляет сущность из базы данных, при вызове действия «Редактировать» откроется стандартная форма редактирования данного справочника в popup’е.

Ограничение на выбор показателя

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

Блоки

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

Было:

Блоки не отображались на формах. Вместо блока отображался текст «Не удалось отобразить пользовательскую разметку» красными буквами.

В журнале ошибок появлялась запись вида:

ERROR 2017-09-06 08:55:22,486 [39] EleWise.ELMA.Logging.Logger - Ошибка в методе контроллера EleWise.ELMA.Web.Mvc.Controllers.TablePartController System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта. в EleWise.ELMA.Web.Mvc.Controllers.TablePartController.IsRequiredProperty(PropertyInfo propInfo) в System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext() в EleWise.ELMA.Web.Mvc.Controllers.TablePartController.GetGridResult(TablePartData data, Boolean isAnyChange, String prefix) в EleWise.ELMA.Web.Mvc.Controllers.TablePartController.Grid(GridCommand command, TablePartRequestData data) в lambda_method(Closure , ControllerBase , Object[] )

Стало:

Блоки выводятся на страницу, даже если у них хотя бы одно поле не было отображаемым.

Блоки

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

Было:

При вызове методов контроллера динамических форм внесённые через поля быстрого редактирования изменения теряются.

Стало:

Внесённые через поля быстрого редактирования изменения корректно обрабатываются и передаются в методы контроллера динамических форм.

Процессы Workflow, Дизайнер

Реализовано исправление поведения (со старого на новое) опции «Нельзя переназначать» через параметр совместимости.

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

1. Опция «Нельзя переназначать» только запрещает или разрешает переназначать задачи с веб-страницы.

2. Опция «Запретить замещение» в настройках зоны ответственности запрещает или разрешает замещение исполнителя.

3. Опции полностью изолированы друг от друга, эффект от переключения одной не влияет на функционирование другой.

Было:

Опция "Нельзя переназначать" в пользовательской задаче может влиять на автоматическое замещение".

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

Пользоваться опцией становится сложнее, так как она даёт побочные эффекты, которые нужно тоже учитывать в процессах.

Стало:

Параметр совместимости определяет, допускать ли влияние функции «Нельзя переназначать» на замещения. Он определён для каждой версии процесса на вкладке «Настройка» в сворачиваемой панели «Параметры совместимости»:

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

Если возникнет необходимость перейти к новому поведению функции, то необходимо снять галочку и подтвердить переход к новому поведению. Внимание! Отключение необратимо, обратно включить уже будет невозможно. Поэтому при переходе проверьте процесс на предмет использования опции «Нельзя переназначать» для запрета замещения и исправьте все такие места (запретом замещения управляет опция зоны ответственности).

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

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

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

В BaseDocumentFromElementResolver добавлен метод с двумя параметрами:

public virtual FormView GetView(IWorkflowInstance instance, Element element)

Старый метод отмечен как устаревший: FormView GetView(Element element).

Удален из основной поставки EleWise.ELMA.CRM.UA

Для корректного обновления с более ранней версии на эту необходимо придерживаться правил:

1. Если украинский модуль не был активирован, то можно спокойно обновлять систему. После обновления удалить в папке ELMA3\Packages следующие файлы:
EleWise.ELMA.CRM.UA.ваша_версия.elma3manifest,
EleWise.ELMA.CRM.UA.Import.Web.ваша_версия.nupkg,
EleWise.ELMA.CRM.UA.Import.Web.ваша_версия.nuspec,
EleWise.ELMA.CRM.UA.ваша_версия.nupkg,
EleWise.ELMA.CRM.UA.ваша_версия.nuspec,
EleWise.ELMA.CRM.UA.Web.ваша_версия.nupkg,
EleWise.ELMA.CRM.UA.Web.ваша_версия.nuspec,
EleWise.ELMA.CRM.UA.ваша_версия.png.

2. Если украинский модуль был активирован ранее, то перед обновлением системы необходимо скачать компонент «Работа с клиентами (Украина)», скопировать в папку "ELMA3\UserConfig\Packages", а затем накатывать обновление системы.

Блоки, Веб-часть

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

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

Было:

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

Стало:

Валидация подсвечивает блоки и подблоки с обязательными, но незаполненными полями. Помечает подблоки, у которых обязательные для заполнения пустые поля оказались на невидимой пользователю странице. Для блоков выводит сообщение «Заполните обязательные поля на другой странице». Например:

Пример, как выглядит подблок, у которого имеются незаполненные поля на второй странице:

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

API кода и публичных классов

Метод EleWise.ELMA.Projects.Managers.ProjectTaskBaseManager.IsActiveForPublish(IProjectPlanItem planItem) устарел и вскоре будет удален в следующих версиях, следует использовать EleWise.ELMA.Projects.Managers.ProjectPlanItemManager.IsActiveForPublish(IProjectPlanItem planItem)

Метод EleWise.ELMA.Projects.Managers.ProjectTaskManager.IsActiveForPublish(IProjectPlanItem planItem) устарел и вскоре будет удален в следующих версиях, следует использовать EleWise.ELMA.Projects.Managers.ProjectPlanItemManager.IsActiveForPublish(IProjectPlanItem planItem)

JQuery

В библиотеке jquery.maskedinput-1.3.js в функции mask() добавлена возможность в маске указывать русские буквы, используя спец символ «r». Пример: $(’#nomber’).mask(’rr 999’)

Блоки, Веб-часть

Изменён порядок правил валидации – набор правил блока («Заполните значения обязательных полей» и «Необходимо завершить редактирование записи») поставлен перед правилами для полей. В результате – правила блока получили приоритет над правилами для полей и начали срабатывать раньше.

Было:

Ранее, если блок имел валидационное правило для поля (например, «Заполните обязательное поле»), то оно могло блокировать правила блока. В таких ситуациях валидационное сообщение не менялось, хотя в ходе событий блок должен отобразить сообщение от одного из своих валидаторов (например, «Необходимо завершить редактирование записи»).

Стало:

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

Дизайнер

В редакторе типов документов и проектов убрана вкладка «Фильтр». Так же на вкладке «Дополнительно» убраны блоки «Настройки фильтра» и «Программные настройки».

Так же блоки «Настройки фильтра» и «Программные настройки» были убраны из визардов создания типов документов и проектов

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

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

Адреса

Интерфейс точки расширения EleWise.ELMA.CRM.Components.IAddressProvider для реализации работы с адресами различных стран отмечен устаревшим, вместо него нужно использовать EleWise.ELMA.CRM.ExtensionPoints.IAddressProvider, EleWise.ELMA.CRM.Web.Extensions.IAddressProviderWeb и EleWise.ELMA.CRM.Web.Extensions.IAddressBaseSettings.

Классы EleWise.ELMA.CRM.Web.Models.AddrBaseCrm, EleWise.ELMA.CRM.RU.Web.Models.AddrBaseCrm отмечены устаревшими.

Переработаны представления, отвечающие за ввод адресов.

Изменение механизмов экспорта-импорта

  1. В хелпере EleWise.ELMA.Deploy.Import.Helpers. MetadataImportHelper:
  • изменен метод ValidateEntityTableName: добавлен необязательный параметр string messageAdditionalInfo = null
  • изменен метод ValidateTableName: добавлен необязательный параметр string messageAdditionalInfo = null

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

Календарь

В календаре добавлено выделение событий, требующих подтверждение:

Кроме выделения цветом в «тултип» было добавлено соответствующее сообщение.

Блоки, Веб-часть, Сценарии

Устранены ошибки валидации блока, которая была обновлена в версии 3.11.2.

Было:

Неподходящий способ валидации блока проявлялся двумя способами:

  1. Из-за ошибки на странице переставали работать кнопки, использующие вызов JavaScript функции.
  2. При редактировании строк блока через всплывающее окно возникал конфликт валидации и было невозможно успешно завершить редактирование строки. Всплывающее окно после нажатия на кнопку «Сохранить» начинало выглядеть это примерно так:

Стало:

Валидация блока (telerik грида) была реализована другим способом. В результате:

  1. Приводящая к ошибке в JS ситуация была устранена и кнопки снова заработали.

  2. Устранен конфликт валидации при редактировании строки блока через всплывающее окно.

База данных

При использовании MSSQL и конфигурационного файла с строкой соединения БЕЗ AttachDbFilename, ELMA не может сделать резервную копию, требуя указать путь в backupPath.

Такое поведение является некорректным. Когда в файле конфигурации указано backupPath="", то это означает "использовать путь по-умолчанию", который в MSSQL является путём для резервного копирования (устанавливается администратором БД).

Было:

Обновление БД останавливалось с ошибкой:

*EleWise.ELMA.Runtime.Exceptions.ConfigurationInitializeException: Ошибка инициализации конфигурации ELMA ---> System.InvalidOperationException: Не удалось создать резервную копию базы данных: не задана папка для сохранения резервной копии базы данных. Необходимо в секции "main.db" указать путь в параметре "backupPath".

Стало:

При обновлении БД резервное копирование выполнялось автоматически. Копия появлялась в каталоге резервного копирования экземпляра MSSQL.

PublicAPI

Раздел Docflow:

PublicAPI.Docflow.Objects.DmsObject.Filter() - есть изменения в фильтре:

Virtual(Boolean virtual) - Добавлен

PublicAPI.Docflow.Document.Filter() - есть изменения в фильтре:

Virtual(Boolean virtual) - Добавлен

PublicAPI.Docflow.Types.WebDocumentReport.Filter() - есть изменения в фильтре:

Virtual(Boolean virtual) - Добавлен

PublicAPI.Docflow.Types.BudgetExpense.Filter() - есть изменения в фильтре:

Virtual(Boolean virtual) - Добавлен

PublicAPI.Docflow.Types.Contract.Filter() - есть изменения в фильтре:

Virtual(Boolean virtual) - Добавлен

PublicAPI.Docflow.Types.Deed.Filter() - есть изменения в фильтре:

Virtual(Boolean virtual) - Добавлен

PublicAPI.Docflow.Types.File.Filter() - есть изменения в фильтре:

Virtual(Boolean virtual) - Добавлен

PublicAPI.Docflow.Types.ContractOutgoing.Filter() - есть изменения в фильтре:

Virtual(Boolean virtual) - Добавлен

PublicAPI.Docflow.Types.ContractIncoming.Filter() - есть изменения в фильтре:

Virtual(Boolean virtual) - Добавлен

PublicAPI.Docflow.Types.DisagreementsProtocol.Filter() - есть изменения в фильтре:

Virtual(Boolean virtual) - Добавлен

PublicAPI.Docflow.Types.ContractAttachment.Filter() - есть изменения в фильтре:

Virtual(Boolean virtual) - Добавлен

PublicAPI.Docflow.Types.AdditionalAgreement.Filter() - есть изменения в фильтре:

Virtual(Boolean virtual) - Добавлен

PublicAPI.Docflow.Types.BudgetIncome.Filter() - есть изменения в фильтре:

Virtual(Boolean virtual) - Добавлен

PublicAPI.Docflow.Objects.Folders.ActionFolder.Filter() - есть изменения в фильтре:

Virtual(Boolean virtual) - Добавлен

PublicAPI.Docflow.Objects.Folders.FilterDocumentFolder.Filter() - есть изменения в фильтре:

Virtual(Boolean virtual) - Добавлен

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

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

1. Была убрана лишняя полоска в разметке на форме отчета по сделкам

2. При появлении серого блокера и блока «Пожалуйста подождите…», убирается фокус с активного элемента. При скрытии серого блокера фокус возвращается.

Безопасность, Процессы WorkFlow, Слой Платформа

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

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

Было:

Текст ошибки не отображался, а сам таймер прервать не удавалось.

Стало:

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

Блоки, Веб-часть, Сценарии

Валидация блока (telerik грида) реализована другим способом.

Было:

Неподходящий способ валидации блока проявлялся двумя способами:

  1. Из-за ошибки в JS на странице переставали работать кнопки, использующие вызов JavaScript функции.
  2. При редактировании строк блока через всплывающее окно возникал конфликт валидации и было невозможно успешно завершить редактирование строки. Всплывающее окно после нажатия на кнопку «Сохранить» начинало выглядеть это примерно так:

Стало:

Валидация блока (telerik грида) была реализована другим способом. В результате:

  1. Приводящая к ошибке в JS ситуация была устранена и кнопки снова заработали.
  2. Устранен конфликт валидации при редактировании строки блока через всплывающее окно.

Настройка ограничений размера в свойствах

  1. Изменена логика настройки ограничений в свойствах. Если в свойстве установлен флаг "Может иметь пустое значение" и указано минимальное и максимальное значение свойства, при не заполненном свойстве проверка на мин/макс не делается.
  2. Для всех числовых типов если флаг "Может иметь пустое значение" НЕ установлен, незаполненное свойство автоматически заполняется значением "0".
  3. Для дробных чисел добавлено ограничение по точности, т.е. позволяется вводить столько знаков после запятой, сколько указано в настройках свойства.

Редактирование бизнес-процессов

Добавлена возможность сохранять изменения, сделанные в редакторе бизнес-процесса, при закрытии дизайнера (кроме вкладки «Регламент»)

При появлении окна пользователю на выбор предлагается три варианта: сохранить изменения во всех БП, которые он редактировал, продолжить изменения, а также выйти из дизайнера без сохранения изменений. Дерево кликабельное – при двойном нажатии можно попасть в тот БП, который был отредактирован.

Веб часть, Работа с клиентами

В раздел «Работа с клиентами» в подраздел «Сделки» в таблицу сделок была добавлено поле «Следующее взаимоотношение», в котором отображаются дата и время предстоящего (или последнего, если предстоящего нет) взаимоотношения по сделке с контрагентом.

Модуль «Проекты»

Добавлен портлет для отображения процессов проекта

PublicAPI

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

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

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

Изменение OracleTransformationProvider

  1. Свойство Connection класса EleWise.ELMA.Extensions.Oracle.OracleTransformationProvider вместо connection провайдера оракла возвращает EleWise.ELMA.Runtime.Db.Proxies.DbConnectionProxy.

Изменение менеджера выполнения sql-запросов отчетов

  1. В классе EleWise.ELMA.Reports.Managers. ReportDataSourceSqlQueryManager убраны методы:
  • public virtual void SetParamValue(IDbCommand cmd, string name, object val)
  • public virtual void SetInt32(IDbCommand cmd, string name, int val)
  • public virtual void SetInt64(IDbCommand cmd, string name, long val)
  • public virtual void SetInt16(IDbCommand cmd, string name, Int16 val)
  • public virtual void SetByte(IDbCommand cmd, string name, byte val)
  • public virtual void SetFloat(IDbCommand cmd, string name, float val)
  • public virtual void SetDouble(IDbCommand cmd, string name, double val)
  • public virtual void SetGuid(IDbCommand cmd, string name, Guid val)
  • public virtual void SetString(IDbCommand cmd, string name, string val)
  • public virtual void SetDecimal(IDbCommand cmd, string name, decimal val)
  • public virtual void SetDateTime(IDbCommand cmd, string name, DateTime val)
  • public virtual void SetImage(IDbCommand cmd, string name, byte[] val)
  • public static void AddParameter(IDbCommand cmd, string name, object val)

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

Процессы Workflow

Реализовано переключение экземпляра процесса на новую версию с возможностью изменения диаграммы (добавления и удаления элементов).

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

Было:

Валидатор смены версии процесса не пропускал добавление и/или удаление элементов диаграммы. Перейти на такую версию было невозможно.

Стало:

Доработано обновление состояния запущенного рабочего процесса. Снято ограничение валидатора на добавление и/или удаление элементов. При смене версии под заголовком страницы выводится уведомление, сообщающее, было ли успешно переключение. Например, попытка перейти на новую версию процесса при наличии активных задач у экземпляра приведёт к такому сообщению:

Веб-часть, Задачи, Процессы Workflow

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

Другими словами, была убрана принудительная валидация всех полей ввода формы после выполнения сценария. Вместо этого обработчик теперь определяет, у каких полей изменились валидационныеметаданные после применения методов Validation.Error("…") и Validation.Ok(). После работы сценария только эти поля ввода проходят принудительную валидацию.

Было:

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

Стало:

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

Также у двух элементов ввода данных было исправлено поведение после ввода данных – они не скрывали сообщение обязательного заполнения после ввода.

Веб-часть, Проекты, Сценарии

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

Попутно код JavaScript, относящийся к задаче, был собран из разрозненных мест в одном js-скрипте.

Было:

Функция на кнопке «Выполнить» пользовалась переменной, которая оказывалась объявленной только когда в таблице имелись данные. Без них выполнить задачу не удавалось, т.к. браузер не находил эту переменную.

Стало:

Код JavaScript, относящийся к формам указания прогноза сроков и трудозатрат, был собран из разрозненных мест в одном js-скрипте. Таким образом, не только нужная переменная теперь всегда объявлена, но и вся логика содержится в одном файле.

База данных

Усилена политика резервного копирования (РК) при обновлении БД: в дополнение к механизму автоматического резервного копирования (АРК) добавляется и механизм явного ручного резервного копирования (РРК). Обнаружив обновления БД, ELMA сначала инициирует резервное копирование. После чего приступает к обновлению БД. Если активно АРК, то от пользователя никаких действий не потребуется, система всё сделает сама. Если работает механизм РРК, то отображается дополнительная информация о резервном копировании, и система может вывести пользователя на форму ручного подтверждения наличия резервной копии. Попав на такой экран, администратор должен сперва сделать резервную копию, а затем подтвердить это системе, введя кодовое слово из указанного на форме файла. Файл расположен на сервере, где установлена система ELMA. После ввода кодового слова сервер ELMA перезагружается и выполняет обновление.

АРК поддерживается в следующих случаях:

  • СУБД Firebird
  • СУБД MSSQL
  • СУБД PostgreSQL, когда сервер ELMA и СУБД установлены на одном сервере

РРК активируется в следующих случаях:

  • Опция АРК (backupEnabled="false") отключена в конфигурационном файле, действует на все СУБД
  • СУБД Oracle
  • СУБД PostgreSQL, когда сервер ELMA и PostgreSQL стоят на разных серверах

При работе РРК пользователю выводится дополнительная строка на стартовом экране, которая сообщает о ходе резервного копирования. Возможные сообщения:

  1. "В ходе инициализации возможно потребуется сделать резервную копию БД вручную.". Данное сообщение выводится оранжевым цветом. Её предназначение - донести до пользователя/администратора, что ему необходимо задержаться у экрана и дождаться либо формы РРК, либо сообщений, что ELMA сама справилась с резервной копией.
  2. "Резервное копирование БД не требуется.". Сообщение выводится зелёным цветом. Появляется, когда сервер был просто перезапущен и никаких обновлений БД не обнаружено.
  3. "Резервная копия БД была сделана в автоматическом режиме.". Сообщение выводится зелёным цветом. Появляется, когда сервер ELMA самостоятельно провёл резервное копирование.
  4. "Резервная копия БД была сделана и подтверждена вручную.". Сообщение выводится зелёным цветом. Появляется, когда администратор подтвердил, что резервная копия сделана.

Также был добавлен способ РК для СУБД PostgreSQL - он проводится средствами утилиты pg_dump. Для случаев, когда на сервере с ELMA установлено несколько экземпляров PostgreSQL и необходимо пользоваться определённым экземпляром, предусмотрена опция pathToPgDump. Она позволяет указать абсолютный путь к исполняемому файлу pg_dump, включая имя и расширение.

Пример конфигурации секции, где атрибуты разбиты на строки для наглядности:

<main.db
connectionStringName="MainDB"
type="EleWise.ELMA.Extensions.PostgreSQL.PostgreSQLProvider, EleWise.ELMA.Extensions.PostgreSQL"
backupEnabled="true"
backupPath="C:\Work"
pathToPgDump="C:\PostgreSQL\pg95\bin\pg_dump.exe" />

ВНИМАНИЕ! Произошли изменения в файле конфигурации для PostgreSQL в разделе <configSections>.

В качестве типа в строке

<section name="main.db" type="EleWise.ELMA.Configuration.MainBaseSettingsSection, EleWise.ELMA.SDK, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cb29d04eca9b031d"/>

теперь необходимо указывать

<section name="main.db" type="EleWise.ELMA.Extensions.PostgreSQL.PostgreSQLSettingsSection, EleWise.ELMA.Extensions.PostgreSQL" />

В систему добавлен журнал РК – там фиксируются все связанные действия. Путь к журналам относительно веб каталога сервера: \logs\Backup\backup-log-*.

Было:

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

Стало:

Работа системы в режиме АРК ничем не отличается от того, как система работала прежде.

При работе системы в режиме РРК на стартовый экран добавляется дополнительное сообщение, которое проясняет текущее состояние РК:

И в зависимости от обстоятельств, пользователь может увидеть форму ручного подтверждения наличия РК:

Согласование трудозатрат из карточки трудозатраты

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

Процессы Workflow

Описание задачи «Настройка маршрута согласования» вынесено на форму задачи в веб часть

Изменения в Возможностях

Кнопка запуска процесса из раздела и карточки возможности перенесена из основного меню в подменю «Выбранные».

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

Лента сообщений

В оповещения о событии была добавлена информация о времени и месте проведения события (если это поле заполнено), таким образом оповещения о событиях стали информативнее.

Было:

В оповещение о событии выводится тема и описание события.

Стало:

В оповещение о событии выводится описание тема, место, дата начала и описание события.

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

Добавлена кнопка «Наверх»

Добавлена кнопка «Наверх» для перемещения в начало страницы, которая появляется в левом нижнем углу экрана после скролла страницы вниз.

Было:

Кнопка для перемещения в начало страницы отсутствовала.

Стало:

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

Изменен дизайн сообщений об ошибке

PublicAPI

Раздел CRM:

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

Void PublicAPI.CRM.Inpayment.SetInpaymentStatus(Inpayment inpayment, InpaymentStatus inpaymentStatus, Nullable<DateTime> actualDate, String changeStatusComment)

Void PublicAPI.CRM.Inpayment.SetInPlanStatus(Inpayment inpayment, Nullable<DateTime> actualDate, String comment)

PublicAPI.CRM.Inpayment.Filter() - есть изменения в фильтре:

ActualDate(DateTimeRange actualDate) - Добавлен

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

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

Округление чисел с использованием сценариев

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

Оповещения

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

Для этого необходимо в шаблоне добавить тэг <Author></Author>. Данный тэг позволяет при необходимости переопределить создателя оповещения, которое отображается в теле письма (см. рисунок ниже).

Пример шаблона, позволяющий «обернуть» автора сообщения в некоторую функцию AALocalizeUser для вывода локализованного имени автора (данная функция используется только для примера), приведен ниже:

<?xml version="1.0" encoding="utf-8"?>
<Notifications description="Оповещения по документу" version="3.9.0.29000">
  <Default>
    <Filter>
      <Event>IEntityActionHandler.ActionExecuted</Event>
      <Object>EleWise.ELMA.Documents.Models.Document</Object>
    </Filter>
    <RecipientSet>
      <User>{$WatchList}</User>
    </RecipientSet>
    <URL>
      /Documents/Document/View/{$New.Id}
    </URL>
    <ObjectId>{$New.Id}</ObjectId>
    <Author>
      {AALocalizeUser({$Author})}
    </Author>
  </Default>
</Notifications>

Локализация

Добавлена возможность слияния ресурсов, выгруженных из дизайнера.

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

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

Отображение дублей для возможностей

Добавлен постраничный вывод для дублей возможностей

Работа с клиентами

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

Уведомление участникам о создании периодического события

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

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

Скрыта кнопка «Скопировать» для типов документов

Web, пользовательский интерфейс

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

Генератор MS Word документов

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

Дизайнер, Модель данных, Процессы Workflow

Сделана проверка введённых пользователем имён классов и таблиц в БД на форме создания нового процесса в дизайнере. Вводимые в эти поля идентификаторы должны начинаться с латинской буквы, далее могут использоваться цифры, латинские буквы или знаки подчёркивания "_". Дополнительно, для имён классов запрещено использование ключевых слов языка C#, а для имён таблиц БД - ключевых слов языка запросов используемой СУБД.

Было:

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

Стало:

Сделана проверка введённых пользователем имён классов и таблиц в БД на форме создания нового процесса в дизайнере с выводом сообщений об ошибках.

Проекты+

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

Сравнение двух версий планов проекта без фильтра “Показать только изменения на диаграмме”:

Сравнение двух версий планов проекта после применения фильтра “Показать только изменения на диаграмме”:

PublicAPI

Раздел Portal:

PublicAPI.Portal.Objects.Common.LastObjectInfo.Filter() - есть изменения в фильтре:

UniqueObjects(Nullable<Boolean> uniqueObjects) - Добавлен

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

Обновление библиотек вне основного решения ELMA

packages/AsterNET.1.6.3.4/lib/net40/AsterNET.dll

Удалено

packages/AsterNET.1.6.3.6/lib/net40/AsterNET.dll

Добавлено

packages/EleWise.TemplateGenerator.3.8.20/lib/net40/EleWise.TemplateGenerator.Merged.dll

Удалено

packages/EleWise.TemplateGenerator.3.8.22/lib/net40/EleWise.TemplateGenerator.Merged.dll

Добавлено

packages/EleWise.TemplateGenerator.Cells.3.8.20/lib/net40/EleWise.TemplateGenerator.Cells.dll

Удалено

packages/EleWise.TemplateGenerator.Cells.3.8.22/lib/net40/EleWise.TemplateGenerator.Cells.dll

Добавлено

packages/EleWise.TemplateGenerator.Words.3.8.20/lib/net40/EleWise.TemplateGenerator.Words.dll

Удалено

packages/EleWise.TemplateGenerator.Words.3.8.22/lib/net40/EleWise.TemplateGenerator.Words.dll

Добавлено

packages/NHibernate.4.0.4.4004/lib/net40/NHibernate.dll

Удалено

packages/NHibernate.4.0.4.4005/lib/net40/NHibernate.dll

Добавлено

packages/RabbitMQ.Client.3.4.4/lib/net40/RabbitMQ.Client.dll

Удалено

packages/RabbitMQ.Client.3.6.0/lib/net40/RabbitMQ.Client.dll

Добавлено

Интерфейс EleWise.ELMA.Web.Mvc.UI.INotifier теперь наследуется от EleWise.ELMA.Model.Views.IFormNotifier.

Следующие методы были удалены из интерфейса INotifier и перенесены в IFormNotifier:

 /// <summary>
        /// Отобразить информативное сообщение
        /// </summary>
        /// <param name="text"></param>
        void Information(string text);

        /// <summary>
        /// Отобразить предупреждающее сообщение
        /// </summary>
        /// <param name="text"></param>
        void Warning(string text);

        /// <summary>
        /// Отобразить сообщение об ошибке
        /// </summary>
        /// <param name="text"></param>
        void Error(string text);

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

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

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

Генерация документа по шаблону. Добавлена возможность формирования документа в зависимости от смещения часового пояса в минутах посредством установки сдвига в минутах для свойства TemplateTimeZoneOffset провайдера IGeneratorProvider базового генератора GeneratorBase (свойство Provider), если свойство не задано - время не преобразуются.

Производственные календари

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

Режим «Календарь».

Режим «Список».

Список общих календарей.

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

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

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

Редактор дня недели и исключительного дня.

Редактор интервала рабочего времени в экспертном режиме редактирования.

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

На вкладке «Календарь» редактора профиля пользователя добавлена возможность установки одного из трех типов производственных календарей.

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

Общий производственный календарь – пользовательский производственный календарь, может быть назначен пользователю системы.

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

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

Сценарии

В сервис для работы с производственным календарем добавлены следующие методы.

1. IProductionSchedule GetProductionSchedule(IUser user, IEntity entity, TZSettings tzSettings);

2. IProductionSchedule GetProductionSchedule(IUser user, IEntity entity);

Возвращают вычислитель глобального производственного календаря.

Необходимо передать в метод максимальное количество информации для агрегации.

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

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

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

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

В 99% для выполнения этого условия ничего делать не нужно, но если по какой-либо причине условия не выполнилось - использовать методы трансформации времени статического класса EleWise.ELMA.TZ.

3. IProductionSchedule GetGlobalProductionSchedule(TZSettings tzSettings);

4. IProductionSchedule GetGlobalProductionSchedule();

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

База данных

Реализована проверка версии СУБД при запуске сервера ELMA. При попытке использовать СУБД с версией ниже, чем указано в минимальных требованиях, при старте сервера выводится сообщение следующего содержания:

Телефония

Общие настройки

Меню настройки телефонии. Объединены блоки настроек телефонии ELMA и настроек провайдера телефонии. Возможность сделать тестовый звонок для проверки настроек.

Добавлена возможность настроить код страны, используемый по умолчанию (учитывается при вводе номера). Также можно настроить равнозначные префиксы телефонных номеров (например, +7, 7 и 8).

Обновлено меню настройки ip-телефонии в профиле пользователя. Добавлена возможность отключить использовании телефонии для конкретных пользователей.

Панель телефонии для Asterisk

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

При правильно настроенной телефонии и выполненных требованиях, панель позволяет ввести телефонный номер, имя контрагента или имя компании, с поиском по всем объектам CRM.

Также на панели присутствует история звонков, звонки фиксируются в историю даже при отключенном пользователе.

Добавлена возможность приостановить работу (звонки будут приниматься, карточка открываться не будет)

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

Общие доработки телефонии

  1. Хранение телефонных номеров в форматированном виде
  2. Приведение реализаций модулей провайдеров телефонии к единому формату
  3. Хранение истории вызов в справочнике CallHistory

Бизнес процессы

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

Процессы в Полном мониторе процессов теперь сортируются по алфавиту

Валидация и конструктор форм

В объект динамической формы FormViewBuilder<T> form, что используется в скриптах, добавлен метод .ForAll(). Он действует на все элементы динамической формы и предназначен для массового изменения состояния всех элементов формы.

Реализована валидация значения у любого элемента динамической формы в скрипте на изменение значения. В дополнение к имеющимся методам формы .Visible(bool), .ReadOnly(bool) и .Required(bool) у каждого элемента появились новые методы для валидации - .Validation.Ok() и .Validation.Error(string). Первый метод делает значение валидным и скрывает сообщение об ошибке валидации. Второе – устанавливает признак невалидности значения и сообщение об ошибке валидации.

Отправка-ожидание сообщений

Доработана система доставки сообщений при помощи элементов "Отправка сообщения" и "Ожидание сообщения". Реализована так называемая "Гарантированная доставка" (далее ГД). В прошлой версии системы доставки имеется изъян - сообщение бесследно теряется, если отправитель посылает сообщение до того, как процесс-получатель доходит до ожидания сообщения. Гарантированная доставка снимает эту проблему.

Теперь типы сообщений в системе классифицируются на "сообщения с ГД" и "обыкновенные":

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

Изменения:

1. Стандартный тип сообщений был расширен: появился параметр "Гарантированная доставка". Соответственно, диалог типа сообщения обновился.

2. Реализовано "мягкое" удаление типов сообщений с функцией восстановления.

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

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

5. В стартовом меню дизайнера добавлен раздел "Типы сообщений", где имеются следующие функции: добавление, редактирование, удаление, копирование и поиск процессов, в которых сообщение используется. Добавлена опция "Показать удалённые типы сообщений", которая открывает доступ к функции восстановления удалённых типов сообщения.

6. Имя типа сообщения является уникальным (включая удалённые).

7. Создан диалог для поиска использований определённого типа сообщения в процессах (устаревших, опубликованных, черновиках).

8. При настройке элемента "Отправка сообщения" список доступных типов сообщения зависит от значения комбобокса с экземпляром процесса: если экземпляр процесса выбран, то сообщения с ГД доступны, если комбобокспустует - сообщения с ГД будут убраны из списка.

9. Добавлена сущность - элемент очереди сообщений с ГД (WorkflowMessageItem).

10. При отправке сообщения с ГД, оно всегда сохраняется в очереди. Затем делается попытка выполнить мгновенную доставку (когда процесс-получатель уже стоит на точке ожидания сообщения). В случае, когда получателя обнаружить не удалось, сообщение просто хранится в очереди в ожидании появления получателя.

11. При получении сообщения с ГД элемент пытается найти первое непрочитанное сообщение в очереди с подходящими параметрами: тип сообщения и процесс-получатель. Если он находит подходящее сообщение, то выполняется доставка. Если сообщений для элемента нет, процесс уходит на ожидание сообщения.

12. Сущность "Элемент очереди сообщений с ГД" хранит список уникальных идентификаторов элементов "Ожидание сообщения", которые прочитали данное сообщение.

13. В запланированные задачи добавлена новая - "Очередь сообщений с гарантированной доставкой". Задача запускается через каждые 2 минуты и выполняет 2 функции: очистка очереди от устаревших сообщений (когда экземпляр завершил своё выполнение) и отложенная доставка (ожидается, что она будет срабатывать только в высоконагруженных системах). Данная запланированная задача не отображается среди задач планировщика (скрыта).

Процессы Workflow

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

Основные нововведения:

1. Новый экран (интерфейс, форма) для принятия решения и проведения смены версии. Состав формы: описание операции, резюме по смене, ошибки и предупреждения, информация об экземпляре, сравнение версий.

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

3. Новые привилегии (права) на смену версии процесса. По умолчанию такие права НИКОМУ не даны.

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

  1. Запрещено добавление и удаление элементов с активностью. В эту группу попадают почти все элементы диаграммы за исключением артефактов, зон ответственности и коннекторов.
  2. Запрещено изменение версии в случае, когда активный элемент находится в шлюзе, у которого в новой версии появляется ветвь в обход активного элемента.
  3. Запрещено изменение версии, когда активный элемент меняет зону ответственности на новую, либо, когда у его зоны ответственности меняется исполнитель, либо её тип.
  4. Разрешено менять контекст элементов и скрипты.
  5. Разрешено добавлять и удалять контекстные переменные.
  6. Разрешено перемещать элементы по диаграмме, в том числе, переносить неактивный элемент в другую зону ответственности. Исключения составляют: перемещение активного элемента в другой шлюз и выстраивание параллельно выполнявшихся активных элементов в последовательную цепочку.
  7. Разрешено протянуть коннекторы по-другому. Например, исключить ставший неактуальным элемент из рабочего процесса.

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

  1. процесс должен ещё работать
  2. его текущая версия должна быть ниже последней опубликованной
  3. у текущего пользователя имеются права на изменение версии процесса

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

7. Создан шаблон оповещения о смене версии процесса. Оповещение приходит инициатору процесса и ответственному за процесс, если лицо с правами, но не инициатор и не ответственный за процесс, меняет версию.

Дизайнер

Добавлена настройка для запрета запуска процесса из системы - «Запуск из веб-приложения». При снятии галочки процесс также перестает отображаться в списке процессов. Галочка «Вручную» переименована в «Видимость в списке процессов».

Интерфейс

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

  1. Строка;
  2. Текст;
  3. Да/нет;
  4. Целое число;
  5. Дробное число;
  6. Деньги;
  7. Выпадающий список;
  8. Дата/время;
  9. Перечисление.

Рис. 1. Быстрое редактирование свойства «данет» в блоке

Для активации данного режима работы блока необходимо у свойства блока на форме установить галочку «Быстрое редактирование свойства».

Рис. 2. Включение режима редактирования свойства блока «данет» в дизайнере

Community Edition:

Убран конструктор сценариев из дизайнера CE

Дизайнер

1. Создание сценариев через конструктор доступно только через контекстное меню в списке сценариев. Данное контекстное меню открывается только при зажатой клавише shift

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

3. Добавлена на форму конструктора панель с предупреждением, что это бета-функционал

4. Раздел «Пользовательские расширения» теперь находиться между разделами «Процессы» и «Глобальные модули».

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

6. Добавлена возможность повесить сценарий на определённый переход. Данный функционал реализован для обычных пользовательских задач.

Для данных скриптов введена новая сигнатура

public virtual bool Qwerty (Context context, EleWise.ELMA.Model.Views.FormViewBuilder<Context> form)
        {
            return true;
        }

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

Если возвращается false, пользователь остается на той же странице

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

7. Пользовательские оповещения (доступны везде, где есть FormViewBuilder). В FormViewBuilder добавлено новое свойство Notifier. Данное свойство предоставляет возможность оставлять информативные и предупреждающие сообщения, а также сообщения об ошибках. Данные сообщения отображаются на той форме, с которой они были вызваны. Для попапов будут отображаться прямо в попапах. Для портлетов – в портлетах.

Функции на входе принимают строку. Вызов следующий: form.Notifier.Warning (context.Stroka);

Можно вызвать сразу несколько сообщений за одну итерацию:

form.Notifier.Information (context.Stroka);
form.Notifier.Warning (context.Stroka);
form.Notifier.Error (context.Stroka);




Конструктор форм для Задач в типах Проектов

1. Проектные задачи (Базовый класс проектной задачи, Задача (проектная), Контрольная точка, Запуск бизнес-процесса) переведены на конструктор форм

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

Изменение работы фильтров объектов

  1. В контроллере EleWise.ELMA.BPM.Web.Common.Controllers. EntityController изменен метод Explorer: добавлен параметр GridCommand command.

Изменение работы внешней авторизации и авторизации в LDAP

Используемые термины:

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

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

1. Изменен порядок работы валидации пользователя:

  • метод void Validating(UserValidationContext context) обработчика событий авторизации в системе EleWise.ELMA.Security.Services.IMembershipServiceEventHandler больше не используется для валидации, результаты его выполнения занесенные в context учитываться не будут
  • вместо него валидация проводится в методе bool ValidateUser(string userNameOrEmail, string password) точки расширения реализации внешней авторизации EleWise.ELMA.Security.IExternalMembershipService

2. Точка расширения реализации внешней авторизации EleWise.ELMA.Security. IExternalMembershipService помечена атрибутом Obsolete. В ближайших версиях она будет удалена.

3. Класс EleWise.ELMA.Security. MembershipSettings помечен атрибутом Obsolete. В ближайших версиях он будет удален.

4. Удален провайдер авторизации в LDAP EleWise.ELMA.IntegrationLdap.Extensions. LdapExternalMembershipService:

  • вместо него в дальнейшем будет использоваться неудаляемый экземпляр модуля авторизации LDAP
  • настройки провайдера авторизации LDAP будут перенесены в неудаляемый экземпляр модуля авторизации LDAP при старте системы

5. Удален обработчик событий авторизации в системе EleWise.ELMA.IntegrationLdap.Extensions. LdapUserModelMembershipEventHandler

6. Изменен класс настроек провайдера авторизации LDAP EleWise.ELMA.IntegrationLdap. IntegrationLdapSettings:

  • больше не реализует интерфейс System.ICloneable
  • удален метод public IntegrationLdapSettings Clone()

7. Удален контроллер модуля настроек провайдера LDAP EleWise.ELMA.IntegrationLdap.Web.Components. IntegrationLdapSettingsModuleController.

8. Изменен контроллер настроек провайдера LDAP EleWise.ELMA.IntegrationLdap.Web.Controllers. IntegrationLdapSettingsController:

  • удален метод public ActionResult View()
  • удален метод public ActionResult Edit()
  • изменен метод ManualSyncStart(): добавлен параметр Guid uid
  • изменен метод RefreshSyncStatus(): добавлен параметр Guid uid
  • изменен метод RefreshSyncDate (): добавлен параметр Guid uid

9. Логи модуля авторизации EleWise.ELMA.IntegrationLdap вынесены в отдельный лог IntegrationLdapLog.

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

Изменен эксплорера выбора объекта

  1. Для эксплорера выбора объекта добавлены:
  • расширенный поиск (для пользовательских справочников и ряда системных объектов)
  • eql-поиск (для пользовательских справочников и ряда системных объектов)

Изменение настроек авторизации в LDAP

1. В настройках системы вместо блока настроек «Интеграция с LDAP» добавлен блок настроек «Внешние модули авторизации»

2. Изменена форма просмотра/редактирования настроек подключения к LDAP

Подробнее об интеграции с LDAP-сервером см. соответствующий раздел справки.

Служба генерации предпросмотра

1. RabbitMQ обновлен до версии 3.6.0;

2. В дизайнере для очереди сообщений RabbitMQ добавлены настройки прокси-сервера.

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

4. В класс EleWise.ELMA.MessageQueue.Manager.QueueMessageManager добавлены новые методы:

        /// <summary>
        /// Получить сообщение из очереди
        /// </summary>
        /// <param name="type">Массив типов получаемых сообщений</param>
        /// <param name="typeUid">Uid типа очереди</param>
        /// <param name="settings">Настройки</param>
        /// <returns>Возвращестся объект с полученным сообщением либо null если сообщения остутствуют</returns>
        public object Receive(object type, Guid typeUid, object settings)
 
        /// <summary>
        /// Отправить сообщение в очередь
        /// </summary>
        /// <param name="message">Отправляемое сообщение</param>
        /// <param name="typeUid">Uid типа очереди</param>
        /// <param name="settings">Настройки очереди</param>
        public void Send(object message, Guid typeUid, object settings)

5. Менеджеры EleWise.ELMA.MessageQueueJMS.Manager.JMSMessageManagers, EleWise.ELMA.MessageQueue.Manager. MSMQMessageManager,

EleWise.ELMA.MessageQueue.Manager. RMQMessageManager

перенаследованы от точки расширения IQueueMessageExManager.

6. В пакетную систему добавлен новый компонент FilePreviewCreatorComponent.

7. В класс EleWise.ELMA.Packaging. ElmaPackageInfoData добавлены новое свойство и метод:

    • public string Tags { get; set; }
    • public ElmaPackageInfo ToInfo()

Отправка писем пачками и группировка по темам

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

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

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

В задачах, проектных задачах, SMART-задачах, документах вкладка «Журнал трудозатрат» переименована на «Трудозатраты».

Согласование трудозатрат

Если среди выбранных трудозатрат для согласования было введено согласуемое время меньше, чем фактически поданное, то появляется всплывающее окно, в котором выведены эти трудозатраты и предлагается выбор: проигнорировать остаток (фактически поданное время минус согласуемое) или создать отказанные трудозатраты с этим остатком. Раньше система всегда действовала по первому варианту. Трудозатраты с согласуемым временем «0:00» отказываются.

Доступ к разделу Маркетинг

Для привилегии "Доступ к разделу Маркетинг" установлена возможность просмотра раздела «Маркетинг».

Добавлена привилегия "Полный доступ к разделу Маркетинг":

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

Регламент

В формируемом документе добавлено

  • Время выполнения операции
  • Описание переходов
  • Описание шлюзов
  • Вывод привязанных к операциям артефактов
  • Описание группы элементов, в которую входит операция
  • На карте документа изменена нумерация артефактов

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

PublicAPI

Раздел CRM:

Добавленные менеджеры объектов:

PublicAPI.CRM.Objects.Telephony

PublicAPI.CRM.Objects.Telephony.Models

PublicAPI.CRM.Objects.Telephony.Models.CallHistory

CallHistoryFilterHelper PublicAPI.CRM.Objects.Telephony.Models.CallHistory.Filter()

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

PhoneFilterHelper PublicAPI.CRM.Objects.Phone.Filter()

PublicAPI.CRM.Objects.Telephony.Models.CallHistory.Filter() - есть изменения в фильтре:

CallDate(DateTimeRange callDate) - Добавлен

CallDirection(CallDirection callDirection) - Добавлен

Number(String number) - Добавлен

Author(User author) - Добавлен

SearchString(String searchstring) - Добавлен

Id(Int64 id) - Добавлен

Query(String query) - Добавлен

Find() - Добавлен

PublicAPI.CRM.Objects.Phone.Filter() - есть изменения в фильтре:

PhoneString(String phoneString) - Добавлен

DisplayName(String displayName) - Добавлен

ReferenceOnEntity(ReferenceOnEntity referenceOnEntity) - Добавлен

SearchString(String searchstring) - Добавлен

Id(Int64 id) - Добавлен

Query(String query) - Добавлен

Find() - Добавлен

Раздел Docflow:

PublicAPI.Docflow.Objects.DocumentAssignUser.Filter() - есть изменения в фильтре:

AuthProviderGuid(Guid authProviderGuid) - Добавлен

Раздел Processes:

Добавленные менеджеры объектов:

PublicAPI.Processes.Permissions.ChangeProcessVersionPermission

PublicAPI.Processes.Objects.WorkflowMessageItem

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

CustomActivityFilterHelper PublicAPI.Processes.Objects.CustomActivity.Filter()

PublicAPI.Processes.Objects.CustomActivity.Filter() - есть изменения в фильтре:

SearchString(String searchstring) - Добавлен

Id(Int64 id) - Добавлен

Query(String query) - Добавлен

Find() - Добавлен

Раздел Portal:

Добавленные менеджеры объектов:

PublicAPI.Portal.Objects.Calendar.BaseTimeInterval

PublicAPI.Portal.Objects.Calendar.ResourceCalendarUserMap

ResourceCalendarUserMapFilterHelper PublicAPI.Portal.Objects.Calendar.ResourceCalendarUserMap.Filter()

Скрытые из дерева PublicAPI:

PublicAPI.Portal.Objects.Calendar.ResourceCalendarUserMap

PublicAPI.Portal.Objects.Calendar.ResourceCalendarUserMap.Filter() - есть изменения в фильтре:

User(User user) - Добавлен

Calendar(ResourceCalendar calendar) - Добавлен

SearchString(String searchstring) - Добавлен

Id(Int64 id) - Добавлен

Query(String query) - Добавлен

Find() - Добавлен

Раздел Enums:

Добавленные перечисления:

PublicAPI.Enums.CRM.Telephony

PublicAPI.Enums.CRM.Telephony.Enums

PublicAPI.Enums.CRM.Telephony.Enums.CallDirection

PublicAPI.Enums.CRM.Telephony.Enums.CallDirection.Incoming

PublicAPI.Enums.CRM.Telephony.Enums.CallDirection.Outgoing

PublicAPI.Enums.CRM.Telephony.Enums.CallDirection.Missed

PublicAPI.Enums.CRM.Telephony.Enums.CallDirection.Redirect

PublicAPI.Enums.IntegrationAsterisk.Model.ChannelType

PublicAPI.Enums.IntegrationAsterisk.Model.ChannelType.SIP

PublicAPI.Enums.IntegrationAsterisk.Model.ChannelType.PJSIP

PublicAPI.Enums.Workflow.WorkflowProcessRunAvailability.Denied

Раздел Services:

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

IProductionSchedule PublicAPI.Services.ProductionCalendarServices.GetProductionSchedule(User user, Document entity, TZSettings tzSettings)

IProductionSchedule PublicAPI.Services.ProductionCalendarServices.GetProductionSchedule(User user, Document entity)

IProductionSchedule PublicAPI.Services.ProductionCalendarServices.GetGlobalProductionSchedule(TZSettings tzSettings)

IProductionSchedule PublicAPI.Services.ProductionCalendarServices.GetGlobalProductionSchedule()

Void PublicAPI.Services.EmailServices.SendMessages(SmtpSettings smtpSettings, MailMessage[] message)

Void PublicAPI.Services.EmailServices.SendMessages(SmtpSettings smtpSettings, IEnumerable<MailMessage> messages)

AuthenticatedSessionInfo PublicAPI.Services.AuthenticationServices.GetCurrentSession()

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

Void PublicAPI.Services.ProductionCalendarServices.SetHoliday(DateTime date) (Не использовать)

Void PublicAPI.Services.ProductionCalendarServices.SetWorkDayTime(TimeSpan workStart, TimeSpan workEnd, TimeSpan dinnerStart, TimeSpan dinnerEnd) (Не использовать)

Void PublicAPI.Services.ProductionCalendarServices.SetWorkDayTime(TimeSpan workStart, TimeSpan workEnd) (Не использовать)

Void PublicAPI.Services.ProductionCalendarServices.SetWorkDayTime(TimeSpan workStart) (Не использовать)

Интерфейс EleWise.ELMA.Web.Mvc.UI.INotifier теперь наследуется от EleWise.ELMA.Model.Views.IFormNotifier.

Следующие методы были удалены из интерфейса INotifier и перенесены в IFormNotifier: