logo

Список критичных изменений системы версий 3.9.х

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

Изменение OracleTransformationProvider

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

PublicAPI

Нет изменений.

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

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

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

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

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

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

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

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

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

Было:

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

Стало:

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

PublicAPI

Нет изменений

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

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

Представления для типов Email и Телефон

Добавлены представления для отображения отдельных Email и Телефона (не списком). Переработаны представления для отображения списков Email и Телефонов.

Представление Site.cshtml

Представление DisplayTemplates/Site.cshtml было удалено из системы, его логика перенесена в представление DisplayTemplates/Uri.cshtml

Изменение функций генератора шаблонов

  1. Изменено наименование следующих функций:
    1. RemindTime изменено на GetReminderTimeSpan
    2. TransformFile изменено на TransformFileToSignedText
    3. IsProjectTemplate изменено на IsProjectTaskTemplate
    4. GetObject изменено на LoadEntityByWorkLogItem
    5. ObjectDisplayName изменено на GetEntityDisplayNameByWorkLogItem
  2. В стандартные функции генератора шаблона EleWise.TemplateGenerator.Function.DefaultFunctions были перенесены следующие функции EleWise.ELMA.Tasks.Notifications.TaskTemplateGeneratorFunctions.HtmlString и EleWise.ELMA.Messaging.SMS.Notifications.SmsTemplateGeneratorFunctions.StringCut.
  3. Был удален класс EleWise.ELMA.Messaging.SMS.Notifications.SmsTemplateGeneratorFunctions.

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

Доработка прав доступа к страницам

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

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

Проекты

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

Дизайнер

В конфигурационный файл дизайнера (EleWise.ELMA.BPM.Designer.exe.config) добавлено два параметра:

  1. SvcUtilPath (путь до утилиты SvcUtil) будет использоваться чаще всего. В файле должен быть локальный путь до SvcUtil.exe.
  2. SvcUtilAdditionalParams (дополнительные параметры для запуска SvcUtil) практически не будет использоваться, но может понадобиться в редких случаях. Необходимо передавать параметры для запуска, про которые можно прочитать на сайте https://msdn.microsoft.com/ru-ru/library/aa347733(v=vs.110).aspx

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

PublicAPI

Раздел CRM:

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

IsDeleted(Boolean isDeleted) - Добавлен

Раздел KPI:

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

UnderControl(Boolean underControl) - Удалён

UnderControl(Nullable<Boolean> underControl) - Добавлен

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

UnderControl(Boolean underControl) - Удалён

UnderControl(Nullable<Boolean> underControl) - Добавлен

Раздел Docflow:

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

UnderControl(Boolean underControl) - Удалён

UnderControl(Nullable<Boolean> underControl) - Добавлен

Раздел Projects:

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

UnderControl(Boolean underControl) - Удалён

UnderControl(Nullable<Boolean> underControl) - Добавлен

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

UnderControl(Boolean underControl) - Удалён

UnderControl(Nullable<Boolean> underControl) - Добавлен

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

UnderControl(Boolean underControl) - Удалён

UnderControl(Nullable<Boolean> underControl) - Добавлен

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

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

  1. В классе EleWise.ELMA.Documents.Managers.AcquaintanceTaskGroupManager методы AddExecutors помечены как устаревшие, вместо них использовать AddSwimlaneExecutors.
  2. В классе EleWise.ELMA.Documents.Managers.ApprovementTaskGroupManager методы AddExecutors помечены как устаревшие, вместо них использовать AddSwimlaneExecutors.
  3. В классе EleWise.ELMA.Security.Managers.ReplacementManager методы AddUserToList и GetExecutor помечены как устаревшие, вместо них использовать AddUserToList<T> и GetExecutor<T>.
  4. В классе EleWise.ELMA.Workflow.BPMN.Diagrams.Activities.BPMNActivity<TElement> методы Pair<IUser, IUser>[] GetExecutors помечены как устаревшие, вместо них использовать методы IUser[] GetSwimlaneExecutors. Методы AddUserToList помечены как устаревшие, вместо них использовать методы AddSwimlaneUserToList с другими наборами параметров. Метод Pair<IUser, IUser>[] IActivityWithExceptionFlowsImpl.GetExecutors помечен как устаревший, вместо него использовать метод IUser[] IActivityWithExceptionFlowsImpl.GetSwimlaneExecutors.
  5. В интерфейсе EleWise.ELMA.Workflow.BPMN.Diagrams.Activities.IBPMNActivity методы Pair<IUser, IUser>[] GetExecutors помечены как устаревшие. Добавлены методы IUser[] GetSwimlaneExecutors(IWorkflowInstance instance) и IUser[] GetSwimlaneExecutors(IWorkflowInstance instance, out bool assignedToResponsible).
  6. В интерфейсе EleWise.ELMA.Workflow.Diagrams.Activities. IActivityWithExceptionFlowsImpl метод Pair<IUser, IUser>[] GetExecutors помечен как устаревший. Добавлен метод IUser[] GetSwimlaneExecutors(NativeActivityContext context, out bool assignedToResponsible).
  7. Точка расширения ISwimlaneChangedHandler помечена как устаревшая, вместо неё используется ISwimlaneChangedExecHandler.

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

Сортировка по умолчанию в списке связанных объектов

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

Прочее

  1. В блоке процесса "Создание документа" убрана галочка "Не проверять обязательность заполнения контекстных переменных"
  2. Добавлен отдельный лог-файл для хранения информации по выполнению сценариев. Новые лог-файлы находятся по пути web\logs\ScriptLog.

PublicAPI

Раздел Docflow:

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

Void PublicAPI.Docflow.Document.AddComment(Document document, Comment comment, IEnumerable<Attachment> attachments, IEnumerable<DocumentAttachment> documentAttachments)

Раздел Portal:

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

PublicAPI.Portal.Objects.Security.ReplacementRule

ReplacementRuleFilterHelper PublicAPI.Portal.Objects.Security.ReplacementRule.Filter()

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

Replacement(Replacement replacement) - Добавлен

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

PropertyUid(Guid propertyUid) - Добавлен

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

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

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

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

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

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

В классе BinaryFile добавлено новое свойство:

/// <summary>
/// Удалить временный файл после сохранения в базу
/// </summary>
bool DeleteTempFileAfterSave { get; set; }

а также метод:

/// <summary>
/// Установить локальный путь до файла
/// </summary>
/// <param name="contentFilePath">Локальный путь до файла</param>
/// <param name="deleteTempFileAfterSave">Удалить временный файл после сохранения в базу</param>
void SetContentFilePath(string contentFilePath, bool deleteTempFileAfterSave = false);

Данное свойство указывает, что после сохранения файла в базу, физический файл-исходник необходимо удалить, для этого свойства автоматические ставится значение true, когда вызывается метод InitializeContentFilePath, и ставится значение false, когда присваивается в свойство ContentFilePath новое значение. Также добавлена очистка папки для хранения временных файлов ELMA, все файлы, созданные больше 24 часов назад, будут автоматически удаляться.

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

  1. В интерфейсе EleWise.ELMA.BPM.Web.Common.Controllers. IFilterController изменен метод FilterFields: добавлен параметр string filterGridId = "".
  2. В html-разметке формы фильтров введены уникальные id объектов и скриптов.

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

Переназначение задач по бизнес-процессам

Только исполнитель задачи и его начальники могут переназначить задачу (при отсутствии запрета на переназначение в процессе). Инициатор процесса, являющийся автором задачи, лишен такой привилегии.

PublicAPI

Нет изменений

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

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

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

namespace EleWise.ELMA.Web.Mvc.Binders
{
    /// <summary>
    /// Фабрика для ValueProvider
    /// </summary>
    [ExtensionPoint(ServiceScope.Shell)]
    public interface IValueProviderFactory
    {
        /// <summary>
        /// Создать ValueProvider для текущего <see cref="controllerContext"/>
        /// </summary>
        IValueProvider GetValueProvider(ControllerContext controllerContext);
    }
}

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

Доработки модуля LDAP

Реализованы ручная и автоматическая синхронизации импортированных из LDAP пользователей с автоматической блокировкой пользователя в ELMA. (по условию, указанному в фильтре импорта/синхронизации)

Включение/выключение автоматической синхронизации, а также запуск ручной синхронизации осуществляется через настройки модуля LDAP.

Отображение родительских задач на диаграмме Гантта

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

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

  • Исправлено форматирование текста в поле Описание задачи.
  • Добавлено объединение ячеек в колонке для одиночных объектов (только заголовок, только поле для редактирования и т.п.).
  • Добавлена возможность скрывать заголовок блока, грида для таблиц с настраиваемой шириной колонок.

ELMA плагин для Visual Studio

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

Реализована возможность смены папки дизайнера/веб сервера/менеджера пакетов. Для активации соответствующих кнопок, необходимо запустить Visual Studio от имени администратора.

PublicAPI

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

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

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

В ComplexCacheService появились новые методы для размещения и освобождения данных по регионам:

/// <summary>
        /// Получить значение из кэша или вычислить значение и записать в кэш, если не найдено
        /// </summary>
        /// <typeparam name="T">Тип значения</typeparam>
        /// <param name="key">Ключ для хранения в кэше</param>
        /// <param name="timestampKey">Ключ для временного отпечатка</param>
        /// <param name="timestampRegionKey">Ключ для временного отпечатка региона</param>
        /// <param name="valueAccessor">Функция, возвращающая значение. Вызывается, когда в кэше информация не найдена.</param>
        /// <returns>Значение</returns>
        T GetOrAdd<T>(string key, string timestampKey, string timestampRegionKey, Func<T> valueAccessor);

        /// <summary>
        /// Получить значение из кэша или вычислить значение и записать в кэш, если не найдено
        /// </summary>
        /// <typeparam name="T">Тип значения</typeparam>
        /// <param name="key">Ключ для хранения в кэше</param>
        /// <param name="timestampKey">Ключ для временного отпечатка</param>
        /// <param name="timestampRegionKey">Ключ для временного отпечатка региона</param>
        /// <param name="valueAccessor">Функция, возвращающая значение. Вызывается, когда в кэше информация не найдена.</param>
        /// <param name="timeout">Время хранения значения</param>
        /// <returns>Значение</returns>
        T GetOrAdd<T>(string key, string timestampKey, string timestampRegionKey, Func<T> valueAccessor, TimeSpan timeout);

        /// <summary>
        /// Обновить временной отпечаток
        /// </summary>
        /// <param name="timestampKey">Ключ для временного отпечатка</param>
        /// <param name="timestampRegionKey">Ключ для временного отпечатка региона</param>
        void RefreshTimestamp(string timestampKey, string timestampRegionKey);

        /// <summary>
        /// Обновить временной отпечаток региона
        /// </summary>
        /// <param name="timestampRegionKey">Ключ для временного отпечатка региона</param>
        void RefreshTimestampRegion(string timestampRegionKey);

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

1. Для экспорта-импорта типов документов добавлен перенос простых настроек:

  • Шаблон названия документа
  • Разрешать менять названия документа
  • Загрузка версии из файла
  • Кнопка сканирования версии
  • Генерация версии по шаблону
  • Контроль отправки
  • Разрешать регистрировать документы этого типа несколько раз
  • Ограничить работу с документом через веб-интерфейс
  • Использовать жизненный цикл для документов этого типа

2. Для экспорта-импорта типов документов добавлен перенос групп документов.

Привилегии в CRM

В CRM возвращена служебная категория «Без категорий» для Контрагентов и Возможностей. Алгоритм работы: если у Контрагента (Возможности) в правах стоит флаг «Наследовать из категорий» и отсутствует назначенная категория, то в раздел «Наследуемые права» автоматически добавляются права из категории «Без категорий».

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

Настройка форм в процессах

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

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

Экспорт карты диаграммы

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

Было:

Стало:

Задачи

  • При создании подзадачи с несколькими исполнителями в историю пишется одна запись со всеми созданными задачами.
  • Добавлен запрет на создание просроченных подзадач.

Настройки

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

PublicAPI

Раздел Docflow:

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

Boolean PublicAPI.Docflow.Document.ChangeStatus(Document document, LifeCycleStatus status)

Boolean PublicAPI.Docflow.Document.ChangeStatus(Document document, LifeCycleStatus status, String comment)

Boolean PublicAPI.Docflow.Document.CanChangeStatus(Document document, LifeCycleStatus status)

IEnumerable<LifeCycleStatus> PublicAPI.Docflow.Document.GetEnableStatuses(Document document)

Раздел Projects:

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

NotIds(Int64[] notIds) - Добавлен

NotIds(List<Int64> notIds) - Добавлен

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

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

1. Метод EleWise.ELMA.KPI.Managers.SmartTaskManager.CheckTaskExpiration(DateTime checkTime) помечен как устаревший.

2. Точка расширения EleWise.ELMA.BPM.Web.Common.ExtensionPoints. IFilterPortletGridId помечена как устаревшая.

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

Настройки исходящей почты

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

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

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

Настройка происходит в диалоговом окне свойства:

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

Экспорт карты диаграммы

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

Процессы

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

Добавлено отображение подписчиков на тип документа

Было:

Стало:

Теперь подписчики на тип документа отображаются во всплывающем окне в меню документа: «Действия» – «Просмотр подписок»

PublicAPI

Раздел Docflow:

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

Void PublicAPI.Docflow.Objects.Tasks.AcquaintanceTaskGroup.Terminate(AcquaintanceTaskGroup group, String comment, Boolean sendNotification)

Void PublicAPI.Docflow.Objects.Tasks.AcquaintanceTaskGroup.Terminate(AcquaintanceTaskGroup group, Boolean sendNotification)

Void PublicAPI.Docflow.Objects.Tasks.ApprovementTaskGroup.Terminate(ApprovementTaskGroup group, String comment, Boolean sendNotification)

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

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

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

  • bool AcceptableElement(IElementWithView element) - для какого типа задачи используется точка расширения;
  • FormView GetFormView(IElementWithView element, IWorkflowTaskBase task) - получить форму для элемента.

Реализована базовая реализация данной точки расширения – BaseFormViewTransformation, которая выполняется для всех типов процессных задач и возвращает element.View, если не было найдено другой реализации. Реализованы два наследника от данного класса: UserTaskViewTransformation и DocflowViewTaskTransformation для пользовательских задач по процессу и для документных задач по процессу.

Документы

Убрана возможность создавать в сценарии документ без указания конкретного типа

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

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

  1. Добавлена настройка «Использовать лес»
  2. Добавлены настройка импорта по шаблону для леса

Дизайнер

Добавлена отладка пользовательских расширений (по аналогии с отладкой скриптов процессов). Отладка доступна только после публикации пользовательского расширения.

PublicAPI

Раздел Docflow:

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

Document PublicAPI.Docflow.Document.Create(BinaryFile file, Folder folder, String name) (Этот метод устарел)

Document PublicAPI.Docflow.Document.Create(Folder folder, String name) (Этот метод устарел)

Document PublicAPI.Docflow.Document.Create() (Этот метод устарел)

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

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

  • Добавлен метод LoadMetadata(string filename, bool throwEx) в MetadataSerializer. Если метаданные не были найдены в файле, то в зависимости от throwEx будет возвращено null (throwEx == false) или возвратится ошибка (throwEx == true).
  • В интерфейсе IElementWithExceptionFlows добавлено 3 метода: CanHandleException, QueueExecutionTimeoutSupported и GetQueueExecutionTimeout.
  • В классе ActivityExceptionFlowHelper метод Execute помечен как [Obsolete].
  • Для того, чтобы в собственных реализациях операций бизнес-процессов реализовать автоматическую эскалацию по ошибке и по таймеру, требуется реализовать интерфейс IElementWithExceptionFlows (либо при наследовании от BPMNFlowElement переопределить методы CanHandleExceptionByEscalation и QueueExecutionTimeoutSupported)

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

Конвертация возможности

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

Телефония

Добавлена возможность настройки CallerId, при использовании Asterisk, для каждого пользователя.

ELMA плагин для Visual Studio

Убрана возможность создавать ELMA Entity в плагине ELMA для Visual Studio. Возможность редактировать существующие ELMA Entity осталась.

PublicAPI

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

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

ELMA плагин для Visual Studio

Добавлена поддержка Visual Studio 2015 плагином ELMA.

Добавлены новые функции в генератор документов по шаблону:

Функция отображения даты и времени в заданном формате - DateTimeFormat

Полный аналог DateTime.ToString("тут ваш формат")

* - обязательный параметр

Параметры:

[0]*: Дата\время (DateTime)

[1]: Формат отображения

Пример: {DateTimeFormat({$Date}; ‘yy-MM-dd’)}

Функция отображения числа в заданном формате - NumberFormat

Принимаются как стандартные форматы, так и формат ввиде числа количества знаков после запятой

* - обязательный параметр

Параметры:

[0]*: Число (все числовые типы, кроме byte)

[1]: Один из стандартных или кастомых форматов отображения (string)

[1]: Число количества знаков после запятой (все числовые типы, кроме byte)

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

Пример: {NumberFormat(2345.6789;3)}

Функция отображения числа в виде денег. Отображается только в формате русской культуры - MoneyFormat

Разделителем порядком числа является символ « » (пробел)

Так же принимает формат в виде количества знаков после запятой

* - обязательный параметр

Параметры:

[0]*: Число (все числовые типы, кроме byte)

[1]: Число количества знаков после запятой (все числовые типы, кроме byte)

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

то количество знаков будет равно целой части этого числа с учётом округления

Пример: {MoneyFormat(23451234.6789;2)}

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

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

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

Публичные интерфейсы API

Криптопровайдеры

  1. Интерфейс ICryptoProvider расширен: добавлены свойства IsAttributesSupported и IsContentSupported
  2. Добавлен абстрактный класс AbstractCryptoProvider, реализующий интерфейс ICryptoProvider
  3. Все криптопровайдеры наследуются от AbstractCryptoProvider, вместо ICryptoProvider

Работа с файлами

В классе EleWise.ELMA.Web.Mvc.Controllers. BinaryFilesController методы:

  1. HasPermissionOnFile(BinaryFile file)
  2. HasPermissionOnFile(BinaryFile file, out string errorMessage)
  3. PrepareBinaryFile(BinaryFile file)
  4. GetRanges(string rangesHeader, long fileLength, out long[] RangesStartIndexes, out long[] RangesEndIndexes)

помечены как Obsolete, код данных методов перенес в класс EleWise.ELMA.Web.Service.FileUpDownHelper.

В классе EleWise.ELMA.Web.Service.FileUpDownHelper дополнительно реализованы следующие методы:

  1. GetContentRange(string rangeHeader, out long fileLength, out long startPos, out long endPos)
  2. BinaryFile GetStorableBinaryFile(string id, out string errMessage)
  3. GetCachedBinaryFile(string id, out string fileName, out string filePath, out string contentType)
  4. Stream GetPartialFileStream(string filePath, out long fileLength, out long startOffset, out long endOffset, out bool isPartial, out string errMessage)
  5. bool CreateOrAppendIncrementFile(ref Guid fileGuid, string fileName, Stream inputStream, long startPos, long endPos)

Из версии 3.10 перенес класс EleWise.ELMA.Files.RangeStreamWrapper

PublicAPI

Раздел Docflow:

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

DocumentApprovementTask PublicAPI.Docflow.Tasks.CreateTask(ApprovementTaskGroup group, ApprovementListItem item, Nullable<WorkTime> planWorkLog, Boolean forceEndDateFromTask, SwimlaneElement swimlane, User author, Nullable<DateTime> endDateFromTask, String customName)

DocumentApprovementTask PublicAPI.Docflow.Tasks.CreateTask(ApprovementTaskGroup group, ApprovementListItem item, Nullable<WorkTime> planWorkLog, SwimlaneElement swimlane, User author, Nullable<DateTime> endDateFromTask, String customName)

DocumentApprovementTask PublicAPI.Docflow.Tasks.CreateTask(ApprovementTaskGroup group, ApprovementListItem item, Boolean forceEndDateFromTask, SwimlaneElement swimlane, User author, Nullable<DateTime> endDateFromTask, String customName)

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

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

Раздел Enums:

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

PublicAPI.Enums.Documents.DigitalSignature.SignatureGeneratingType.TemplateAndContent

PublicAPI.Enums.Documents.DocumentsDigitalSignature.SignatureGeneratingType.TemplateAndContent

PublicAPI.Enums.KPI.Performance.PerformanceMatrixStatus.NoComplete

PublicAPI.Enums.KPI.KPIPerformance.PerformanceMatrixStatus.NoComplete

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

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

  1. Добавлена комбинация клавиш Ctrl+S для форм (представлений).
  2. Изменено поведение флага "Не проверять обязательность заполнений контекстных переменных" - валидация отключается только для контекстых переменных, для остальных переменных на форме валидация остается прежней.
    Данное поведение работает только для элементов, указанных ниже:
    1. Отправка на согласование
    2. Отправка на ознакомление
    3. Вынесение резолюции
    4. Формирование задач по резолюции
    5. Подписание
    6. Согласование
    7. Регистрация документа
    8. Создание документа
  3. Добавлен флаг "Не проверять обязательность заполнений контекстных переменных" для следующих элементов:
    1. Отправка документа
    2. Вынесение резолюции
    3. Формирование задач по резолюции
    4. Подписание
    5. Согласование
  4. Добавлен флаг "Проверять обязательность заполнений контекстных переменных" для следующих элементов:
    1. Регистрация документа
    2. Создание документа

PublicAPI

Раздел Docflow:

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

PublicAPI.Docflow.Permissions.TranslateSystemPermission

Раздел Processes:

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

PublicAPI.Processes.Permissions.TranslateSystemPermission

Раздел Portal:

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

PublicAPI.Portal.Security.PermissionsSecurity.TranslateSystemPermission

PublicAPI.Portal.CalendarEvent.PermissionsEvent.TranslateSystemPermission

Раздел Projects:

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

PublicAPI.Projects.Permissions.TranslateSystemPermission

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

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

Дополнительный фильтр EQL на документах

Наложенный дополнительный фильтр EQL на свойство с документами фильтрует в том числе последние использованные документы

Заблокированные пользователи в пользовательской группе

При выборе пользователей из пользовательской группы заблокированные пользователи исключаются.

Поиск пользователей по элементу оргструктуры

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

Привязка процесса к смене стадий сделки в активной воронке продаж

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

Динамическое текстовое поле

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

Вложенные свойства объекта в блоке

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

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

Возможности переведены на конструктор форм

Изменение работы отчетов

  1. Убран кэш отчетов FastReport EleWise.ELMA.Reports.Services. FastReportRunCache.
  2. Системные отчеты после импорта публикуются автоматически.

Изменение работы метаданных

  1. Введено ограничение на именование колонок таблиц для пользовательских свойств метаданных (Uid и TypeUid).

Редактор сценариев

  1. В модуле сценариев отчетов добавлен автокомплит по PublicAPI
  2. Изменён механизм генерации ссылки на веб-сервис. Новый механизм аналогичен добавлению веб-сервисов в Visual Studio. Генерация по старому способу так же доступна

Было:

Стало:

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

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

2. На вкладке подзадачи Проектных задач подзадачи из устаревших и производных от них неопубликованных версий плана отображаются с пометкой “(устаревший план)”

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

4. Для объекта Оргструктура:

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

4.2 Форма поиска. При нажатии на иконку оргструктуры реализовано иерархическое отображение.

Модель данных

1. В интерфейс EleWise.ELMA.Projects.Models.IProjectTaskBase добавлено свойство Obsolete, указывающее, что данная задача не относится к текущей версии плана.

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

1. Запрещен экспорт данных из справочников, помеченных не участвующими в экспорте-импорте данных
2. Запрещен импорт данных, метаданные которых, помечены как не участвующие в экспорте-импорте

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

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

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

Поддержка нового плагина Рутокен

В связи с отключением NPAPI в Chrome, код интеграции с Рутокен был переписан на асинхронные вызовы.

Портал

Добавлена настройка цветового решения веб интерфейса ELMA

PublicAPI

Раздел CRM:

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

LeadPersonPermissionFilterHelper PublicAPI.CRM.Objects.LeadPersonPermission.Filter()

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

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

PermissionRole(Nullable<Guid> permissionRole) - Добавлен

Lead(Lead lead) - Добавлен

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

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

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

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

Раздел Projects:

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

Obsolete(Boolean obsolete) - Добавлен

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

Obsolete(Boolean obsolete) - Добавлен

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

Obsolete(Boolean obsolete) - Добавлен

Список критичных изменений в версии 3.9.5

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

Настройка таймаута сессий для именованных лицензий

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

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

Выбор пользователя в фильтре

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

Конструктор форм для объекта Контакт

В модуле «Работа с клиентами» для объекта Контакт реализован конструктор форм. Можно настроить форму просмотра, создания, редактирования и детальную информацию о контакте в юридическом лице.

Возможность выбор группы или элемент орг. структуры в этапе согласования

При заполнении объекта «Маршрут согласования» в этапе согласования в качестве согласующих теперь можно выбрать группу пользователей или орг. структуру. Появилась галочка «Кто первый».

Телефония

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

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

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

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

Добавлена перегрузка для метода GetEntityActions(EntityMetadata metadata, bool inherit, bool onlyBase, bool loadextensions) в MetadataLoader, с помощью которой можно получить действия сущности с учетом расширений.

PublicAPI

Раздел Docflow:

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

UseRegistrationPlacePermissions(Nullable<Boolean> useRegistrationPlacePermissions) - Добавлен

Раздел Portal:

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

Void PublicAPI.Portal.Objects.Tasks.Question.AddComment(Question task, String comment, IEnumerable<Attachment> attachments)

Void PublicAPI.Portal.Objects.Tasks.Question.AddComment(Question task, String comment, User commentAuthor)

Void PublicAPI.Portal.Objects.Tasks.Question.AddComment(Question task, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.AddComment(Question task, CommentActionModel model)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, DateTime endDate)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, DateTime endDate, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, DateTime endDate, Comment comment)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate, Comment comment)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate, TaskPriority priority)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate, TaskPriority priority, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, TaskPriority priority, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate, TaskPriority priority, Comment comment)

Void PublicAPI.Portal.Objects.Tasks.Question.SetTaskEndDate(Int64 taskId, DateTime newEndDate)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLog(Int64 taskId, Int64 minutes, DateTime startDate, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLog(Int64 taskId, Int64 minutes, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLog(Int64 taskId, Int64 minutes, DateTime startDate)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLog(Int64 taskId, Int64 minutes)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLogHours(Int64 taskId, Int64 hours, DateTime startDate)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLogHours(Int64 taskId, Int64 hours, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLogHours(Int64 taskId, Int64 hours)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLogHours(Int64 taskId, Int64 hours, DateTime startDate, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLogDays(Int64 taskId, Int64 days, DateTime startDate)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLogDays(Int64 taskId, Int64 days, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLogDays(Int64 taskId, Int64 days)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLogDays(Int64 taskId, Int64 days, DateTime startDate, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.CompleteTask(Int64 taskId, CompleteTaskModel model)

Список критичных изменений в версии 3.9.4

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

Фильтрация по типу Файл (бинарный файл)

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

Представления razor при копировании форм в конструкторе форм

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

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

  1. При невозможности выполнить действие сервер возвращает ошибку HTTP с кодом 409 Conflict
  2. Изменён метод передачи данных из POST в GET модуля «Сообщения» для метода /Posts/GetMyFavorite

PublicAPI

Раздел CRM:

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

Void PublicAPI.CRM.Contractor.AddComment(Contractor contractor, String comment, User commentAuthor)

Void PublicAPI.CRM.Contact.AddComment(Contact contact, String comment, User commentAuthor)

Void PublicAPI.CRM.Lead.AddComment(Lead lead, String comment, User commentAuthor)

Void PublicAPI.CRM.Sale.AddComment(Sale sale, String comment, User commentAuthor)

Void PublicAPI.CRM.Inpayment.AddComment(Inpayment inpayment, String comment, User commentAuthor)

Void PublicAPI.CRM.Relationship.AddComment(Relationship relationship, String comment, User commentAuthor)

Раздел KPI:

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

Void PublicAPI.KPI.Objects.KpiTask.AddComment(KpiTask task, String comment, User commentAuthor)

Void PublicAPI.KPI.Objects.Performance.ApprovalTaskPerformance.AddComment(ApprovalTaskPerformance task, String comment, User commentAuthor)

Void PublicAPI.KPI.Objects.KPIPerformance.ApprovalTaskPerformance.AddComment(ApprovalTaskPerformance task, String comment, User commentAuthor)

Void PublicAPI.KPI.Objects.SMART.SMARTTask.AddComment(SMARTTask task, String comment, User commentAuthor)

Void PublicAPI.KPI.Objects.KPISMART.SMARTTask.AddComment(SMARTTask task, String comment, User commentAuthor)

Раздел Docflow:

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

Void PublicAPI.Docflow.Objects.BPMN.SendDocumentTask.AddComment(SendDocumentTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.BPMN.AssignDocumentTask.AddComment(AssignDocumentTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.BPMN.RegistrationDocumentTask.AddComment(RegistrationDocumentTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.BPMN.CreateDocumentTask.AddComment(CreateDocumentTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.BPMN.SendToAcquaintanceTask.AddComment(SendToAcquaintanceTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.BPMN.SendToApprovementTask.AddComment(SendToApprovementTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendDocumentTask.AddComment(SendDocumentTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.AssignDocumentTask.AddComment(AssignDocumentTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.RegistrationDocumentTask.AddComment(RegistrationDocumentTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.CreateDocumentTask.AddComment(CreateDocumentTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendToAcquaintanceTask.AddComment(SendToAcquaintanceTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendToApprovementTask.AddComment(SendToApprovementTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.Tasks.DocumentAcquaintanceTask.AddComment(DocumentAcquaintanceTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.Tasks.DocumentTask.AddComment(DocumentTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.Tasks.ResolutionTask.AddComment(ResolutionTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.Tasks.DocumentApprovementTask.AddComment(DocumentApprovementTask task, String comment, User commentAuthor)

Раздел Processes:

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

Void PublicAPI.Processes.WorkflowInstance.AddComment(WorkflowInstance instance, String comment, User commentAuthor)

Void PublicAPI.Processes.WorkflowTaskBase.AddComment(TaskBase task, String comment, User commentAuthor)

Void PublicAPI.Processes.WorkflowTaskBase.WorkflowTask.AddComment(WorkflowTask task, String comment, User commentAuthor)

Раздел Portal:

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

Void PublicAPI.Portal.TaskBase.AddComment(TaskBase task, String comment, User commentAuthor)

Void PublicAPI.Portal.TaskBase.Task.AddComment(Task task, String comment, User commentAuthor)

Void PublicAPI.Portal.Objects.Tasks.ApprovalTask.AddComment(ApprovalTask task, String comment, User commentAuthor)

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

ConfirmParticipation(Boolean confirmParticipation) - Добавлен

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

ConfirmParticipation(Boolean confirmParticipation) - Добавлен

Раздел Projects:

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

Void PublicAPI.Projects.ProjectTaskBase.AddComment(ProjectTaskBase task, String comment, User commentAuthor)

Void PublicAPI.Projects.ProjectTask.AddComment(ProjectTask task, String comment, User commentAuthor)

Void PublicAPI.Projects.Tasks.AddComment(ProjectTaskBase task, String comment, User commentAuthor)

Void PublicAPI.Projects.ProjectTaskBase.ProjectTask.AddComment(ProjectTask task, String comment, User commentAuthor)

Void PublicAPI.Projects.ProjectTaskBase.Milestone.AddComment(Milestone task, String comment, User commentAuthor)

Void PublicAPI.Projects.ProjectTaskBase.WorkflowProjectTask.AddComment(WorkflowProjectTask task, String comment, User commentAuthor)

Void PublicAPI.Projects.Objects.ProjectComplexTask.AddComment(ProjectComplexTask task, String comment, User commentAuthor)

Void PublicAPI.Projects.Objects.CreateProjectTask.AddComment(CreateProjectTask task, String comment, User commentAuthor)

Void PublicAPI.Projects.Objects.ProjectPlanApprovalTask.AddComment(ProjectPlanApprovalTask task, String comment, User commentAuthor)

Void PublicAPI.Projects.Objects.Budgets.ProjectBudgetApprovalTask.AddComment(ProjectBudgetApprovalTask task, String comment, User commentAuthor)

Список критичных изменений в версии 3.9.3

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

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

Добавлена возможность поворота страницы в предпросмотр PDF -файла

Портлет «Решение задач»

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

ELMA Plugin для Visual Studio

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

Изменение логирования

  1. Убрано прямое использования log4net для собственных логов. Для них следует использовать код вида:
    private static readonly EleWise.ELMA.Logging.ILogger ImportLog = EleWise.ELMA.Logging.Logger.GetLogger("ElmaImport");
  2. Изменен логгер класса EleWise.ELMA.CRM.Telephony.Managers.TelephonyManager. Вместо public static log4net.ILog telephonyLog используется public static readonly EleWise.ELMA.Logging.ILogger TelephonyLog.
  3. Изменен логгер класса EleWise.ELMA.Integration1C.Data.CProvider. Вместо protected static log4net.ILog integrationLog используется protected static readonly EleWise.ELMA.Logging.ILogger IntegrationLog.
  4. Изменен логгер класса EleWise.ELMA.Integration1C.Listeners.Connection1CScheduler. Вместо protected static log4net.ILog integrationLog используется protected static readonly EleWise.ELMA.Logging.ILogger IntegrationLog.
  5. Изменен логгер класса EleWise.ELMA.Integration1C.V77.CDocument77. Вместо protected static log4net.ILog integrationLog используется protected static readonly EleWise.ELMA.Logging.ILogger IntegrationLog.
  6. Изменен логгер класса EleWise.ELMA.Integration1C.V77.CHelper77. Вместо protected static log4net.ILog integrationLog используется protected static readonly EleWise.ELMA.Logging.ILogger IntegrationLog.
  7. Изменен логгер класса EleWise.ELMA.Integration1C.V81.CDocument81. Вместо protected static log4net.ILog integrationLog используется protected static readonly EleWise.ELMA.Logging.ILogger IntegrationLog.
  8. Удален логгер класса EleWise.ELMA.Integration1C.V81.CProvider81. Вместо protected static log4net.ILog integrationLog используется protected static readonly EleWise.ELMA.Logging.ILogger IntegrationLog его базового класса EleWise.ELMA.Integration1C.Data.CProvider.
  9. Изменен логгер класса EleWise.ELMA.Integration1C.Integration1CService. Вместо protected static log4net.ILog integrationLog используется protected static readonly EleWise.ELMA.Logging.ILogger IntegrationLog.
  10. Изменен логгер класса EleWise.ELMA.Messages.Impl.TransactionalMessageManager. Вместо public static log4net.ILog MessagesLog используется public static readonly EleWise.ELMA.Logging.ILogger MessagesLog.
  11. Изменен логгер класса EleWise.ELMA.Tasks.Managers. SolveTaskHelper. Вместо public static log4net.ILog SolveTaskLog используется public static readonly EleWise.ELMA.Logging.ILogger SolveTaskLog.

Список критичных изменений в версии 3.9.2

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

Вывод логов из скриптов в отдельный файл

В базовом классе для скриптов объектов (в том числе типах документов и проектов) и процессов появилось новое свойство Logger, с его помощью можно выводить логи в отдельный лог-файл (logs\scripts\sc-log-*).

Вне класса со скриптами к объектам и процессам (например в глобальных модулях, и при необходимости в отдельных модулях в VS) можно воспользоваться классом EleWise.ELMA.Logging.ScriptLogger.

После перепубликации какого-либо объекта, во всех классах скриптов объектов, конструкция Logger.Log.Error(...) будет использовать свойство Logger вместо класса EleWise.ELMA.Logging.Logger, тем самым логи автоматически вместо лога ошибок будут писаться в лог скриптов. Для того же эффекта в процессах требуется перекомпиляция скриптов процессов (соответствующей версии) или публикация новой версии процесса для вновь запущенных экземпляров.

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

В лог скриптов выводится следующая информация:
Дата/время [поток] класс.метод(:номер строки) - сообщение.
Пример:
2016-07-21 14:46:42,157 [7] EleWise.ELMA.ConfigurationModel.Scripts.SpravochnikScripts.FormLoad(:26) - FormLoad1.

Для корректного вывода номера строки для скриптов объектов добавлена запись файла отладочной информации Web\App_Data\CompiledModel\EleWise.ELMA.ConfigurationModel.Scripts.pdb (для скриптов процессов файл отладочной информации уже давно пишется).

Формы системных объектов

Добавлены базовые формы к объекту «Взаимоотношение». Текущие формы наследников «Взаимоотношения» переделаны на базовые формы.

Изменения в экспорте-импорте объектов

  1. Реализован алгоритм по переносу локальных сборок (которые подключены в скрип-модуле объекта) с сервера-источника на сервер-приёмник.
  2. При импорте объектов, содержащих глобальные модули, будет выскакивать окно с оповещением. Импорт глобальных модулей следует проводить ОТДЕЛЬНО. Если импортировать объекты с глобальными модулями на сервер-приемник, где таковых глобальных модулей нет, импорт будет отменён с соответствующей ошибкой.

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

Доработан элемент для выбора объекта

Добавлена иконка «Выбрать», отображающаяся внутри контрола. Свойства AutocompleteComboBox: ShowComboBoxSelectIcon, ComboBoxSelectImageUrl, ComboBoxSelectOnClick.

Добавлена иконка «Добавить», отображающаяся внутри контрола. Свойства AutocompleteComboBox: ShowComboBoxAddIcon, ComboBoxAddImageUrl, ComboBoxAddOnClick.

Добавлена иконка «Очистить поле». Свойства AutocompleteComboBox: ShowComboBoxDeleteIcon, ComboBoxDeleteImageUrl, ComboBoxDeleteOnClick.

Для Single Select:

Добавлена возможность использовать для отображения внутри контрола шаблон. Свойства AutocompleteComboBox : UseTemplate , Template , TemplateJs , TemplateOnLoad . Для этого необходимо установить UseTemplate = True, и передать шаблоны в свойства Template (отображение при рендере контрола), TemplateJs (отрисовка шаблона при выборе объекта).

Добавлена иконка «Редактировать поле». Свойства AutocompleteComboBox : ShowEditTemplateIcon , Template , EditTemplateImageUrl , EditTemplateOnClick .

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

Все контролы выбора объектов настроены в режим отображения шаблона. Внешние иконки «Выбрать», «Добавить» не отображаются – отображаются внутренние.

Выбор даты завершения для задачи при переназначении

При переназначении задач по бизнес-процессам, документообороту и др. появилась возможность не указывать сроки задачи (если они не были установлены, то поля останутся пустыми). В некоторых типах задач (например, SMART-задача) при переназначении сроки вообще нельзя менять: поля не доступны в данной форме.

Портлет «Решение задач»

В портлет «Решение задач» было добавлено отображение задач подписания документа. Если в процессной задаче выбрано «Требовать ЭЦП», тогда кнопки будут скрыты и выполнять задачу необходимо с карточки задачи. Аналогичное поведение будет наблюдаться, если в Администрировании при подписании документов выбрано «Требовать ЭЦП». Если в процессной задаче выбрано «Подписывать текущую версию», тогда в окне будет выбрана сразу текущая версия документа. Если у пользователя не будет хватать прав доступа, то в popup-окне появится соответствующая ошибка.

В портлете «Решение задач» изменен дизайн popup-окна для вынесения резолюции по задаче рассмотрения документа.

Проекты

Появилась возможность ввести наименование при создании/копировании версий плана проекта и бюджета.

Дизайнер

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

PublicAPI

Раздел CRM:

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

ContainerContractorPermission(ContContractorPermission containercontractorPermission) - Добавлен

Раздел KPI:

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

Void PublicAPI.KPI.Objects.KpiTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.KPI.Objects.KpiTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.KPI.Objects.KpiTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.KPI.Objects.Performance.ApprovalTaskPerformance.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.KPI.Objects.Performance.ApprovalTaskPerformance.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.KPI.Objects.Performance.ApprovalTaskPerformance.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.KPI.Objects.KPIPerformance.ApprovalTaskPerformance.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.KPI.Objects.KPIPerformance.ApprovalTaskPerformance.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.KPI.Objects.KPIPerformance.ApprovalTaskPerformance.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.KPI.Objects.SMART.SMARTTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.KPI.Objects.SMART.SMARTTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.KPI.Objects.SMART.SMARTTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.KPI.Objects.KPISMART.SMARTTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.KPI.Objects.KPISMART.SMARTTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.KPI.Objects.KPISMART.SMARTTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Раздел Docflow:

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

Void PublicAPI.Docflow.Objects.BPMN.SendDocumentTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.BPMN.SendDocumentTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.BPMN.SendDocumentTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.BPMN.AssignDocumentTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.BPMN.AssignDocumentTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.BPMN.AssignDocumentTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.BPMN.RegistrationDocumentTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.BPMN.RegistrationDocumentTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.BPMN.RegistrationDocumentTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.BPMN.CreateDocumentTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.BPMN.CreateDocumentTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.BPMN.CreateDocumentTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.BPMN.SendToAcquaintanceTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.BPMN.SendToAcquaintanceTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.BPMN.SendToAcquaintanceTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.BPMN.SendToApprovementTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.BPMN.SendToApprovementTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.BPMN.SendToApprovementTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendDocumentTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendDocumentTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendDocumentTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.AssignDocumentTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.AssignDocumentTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.AssignDocumentTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.RegistrationDocumentTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.RegistrationDocumentTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.RegistrationDocumentTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.CreateDocumentTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.CreateDocumentTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.CreateDocumentTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendToAcquaintanceTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendToAcquaintanceTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendToAcquaintanceTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendToApprovementTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendToApprovementTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendToApprovementTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.Tasks.DocumentAcquaintanceTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.Tasks.DocumentAcquaintanceTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.Tasks.DocumentAcquaintanceTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.Tasks.DocumentTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.Tasks.DocumentTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.Tasks.DocumentTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.Tasks.ResolutionTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.Tasks.ResolutionTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.Tasks.ResolutionTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.Tasks.DocumentApprovementTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.Tasks.DocumentApprovementTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.Tasks.DocumentApprovementTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.Tasks.RouteApprovementTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.Tasks.RouteApprovementTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.Tasks.RouteApprovementTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Раздел Processes:

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

Void PublicAPI.Processes.WorkflowTaskBase.WorkflowTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Processes.WorkflowTaskBase.WorkflowTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Processes.WorkflowTaskBase.WorkflowTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Раздел Portal:

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

Void PublicAPI.Portal.TaskBase.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Portal.TaskBase.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Portal.TaskBase.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Portal.TaskBase.Task.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Portal.TaskBase.Task.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Portal.TaskBase.Task.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Portal.Objects.Tasks.ApprovalTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Portal.Objects.Tasks.ApprovalTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Portal.Objects.Tasks.ApprovalTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Раздел Projects:

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

Void PublicAPI.Projects.ProjectTaskBase.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Projects.ProjectTaskBase.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Projects.ProjectTaskBase.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Projects.ProjectTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Projects.ProjectTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Projects.ProjectTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Projects.ProjectTaskBase.ProjectTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Projects.ProjectTaskBase.ProjectTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Projects.ProjectTaskBase.ProjectTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Projects.ProjectTaskBase.Milestone.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Projects.ProjectTaskBase.Milestone.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Projects.ProjectTaskBase.Milestone.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Projects.ProjectTaskBase.WorkflowProjectTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Projects.ProjectTaskBase.WorkflowProjectTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Projects.ProjectTaskBase.WorkflowProjectTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Budget PublicAPI.Projects.Budgets.BudgetBudgets.Create(Project project, Action<IBudget> preSave)

Budget PublicAPI.Projects.Budgets.BudgetBudgets.CreateFrom(Budget oldBudget, Boolean cloneItems, Project newProject, Action<IBudget> preSave)

Void PublicAPI.Projects.Objects.ProjectComplexTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Projects.Objects.ProjectComplexTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Projects.Objects.ProjectComplexTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Projects.Objects.CreateProjectTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Projects.Objects.CreateProjectTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Projects.Objects.CreateProjectTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Projects.Objects.ProjectPlanApprovalTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Projects.Objects.ProjectPlanApprovalTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Projects.Objects.ProjectPlanApprovalTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Projects.Objects.Budgets.ProjectBudgetApprovalTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Projects.Objects.Budgets.ProjectBudgetApprovalTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Projects.Objects.Budgets.ProjectBudgetApprovalTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Список критичных изменений в версии 3.9.1

Редизайн дизайнера

В этой версии обновлен графический дизайн Дизайнера ELMA.

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

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

    /// <summary> /// Проверить является ли дата рабочим днем /// </summary> /// <param name="dateTime">День</param>
    /// <returns><c>true</c>, если дата является рабочим днём</returns> public bool IsWorkDay(DateTime
    dateTime) /// <summary> /// Вычислить дату и время по истечении срока в соответствии с календарем /// </summary>
    /// <param name="startTime">Дата начала</param> /// <param name="interval">Интервал времени</param>
    /// <returns>Дата истечения срока</returns> public DateTime EvalTargetTime(DateTime startTime, TimeSpan interval)
    /// <summary> /// Вычислить дату и время по истечении срока в соответствии с календарем /// </summary> /// <param
    name="startTime">Дата начала</param> /// <param name="intervalHours">Интервал в часах</param> /// <returns>Дата
    истечения срока</returns> public DateTime EvalTargetTime(DateTime startTime, double intervalHours) /// <summary>
    /// Вычислить интервал рабочего времени между датами (значение в днях, часах, минутах и секундах) /// </summary> ///
    <param name="startTime">Дата начала</param> /// <param name="endTime">Дата окончания</param> ///
    <returns>Интервал рабочего времени</returns> public TimeSpan EvalWorkTimeDifference(DateTime startTime, DateTime
    endTime) /// <summary> /// Вычислить длительность в рабочих днях между датами. Рабочим днём считается день в котором
    есть рабочие часы. Независимо от их длительности. /// </summary> /// <param name="startTime">Дата начала</param>
    /// <param name="endTime">Дата окончания</param> /// <returns>Интервал рабочего времени</returns>
    public int EvalWorkDaysDifference(DateTime startTime, DateTime endTime) /// <summary> /// Вычислить дату завершения по дате начала и длительности /// </summary> /// <param name="start"></param> /// <param name="durationDays"></param>
    /// <returns></returns> public DateTime EvalEndDateByStartAndDuration(DateTime start, long durationDays) ///
    <summary> /// Получение даты конца предыдущего рабочего дня /// </summary> /// <param name="date">Исходная
    дата</param> /// <returns>Результирующая дата</returns> public DateTime GetPreviousWorkDayEnd(DateTime
    date) /// <summary> /// Получение даты начала следующего рабочего дня /// </summary> /// <param name="date">Исходная
    дата</param> /// <returns>Результирующая дата</returns> public DateTime GetNextWorkDayStart(DateTime date)
    /// <summary> /// Получить начало рабочего времени (если выходной - 0) /// </summary> /// <param name="day">День</param>
    /// <returns>Начало рабочего времени</returns> public TimeSpan GetWorkTimeStart(DateTime day) /// <summary>
    /// Получить конец рабочего времени (если выходной - 0) /// </summary> /// <param name="day">День</param>
    /// <returns>Конец рабочего времени</returns> public TimeSpan GetWorkTimeEnd(DateTime day) /// <summary>
    /// Добавление к дате определенного количества дней с учетом календаря (без учеты времени работы) /// </summary> ///
    <param name="startTime">Исходная дата</param> /// <param name="addDays">Добавляемое/вычитаемое количество
    дней</param> /// <returns>Результирующая дата</returns> public DateTime AddDays(DateTime startTime, long
    addDays) /// <summary> /// Получить продолжительность рабочего дня /// </summary> /// <returns>Продолжительность
    рабочего дня</returns> public TimeSpan GetWorkTimeInDay(DateTime day) /// <summary> /// Количество минут в рабочем
    дне /// </summary> /// <param name="day">День</param> /// <returns>Количество минут</returns>
    public long MinutesInDay(DateTime day)

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

1. Добавлен перенос регламентов для процессов .

2. Добавлен перенос папок пользовательских расширений .

3. Изменен интерфейс действий с объектами при импорте EleWise.ELMA.Deploy.Import.ExtensionPoints. IEntityImportSaveActions:

  • метод ExecPostSaveActions(IEntity entity, Type type, Dictionary<string, object> values, Dictionary<string, string> serviceData, List<LinksDictionaryItem> links) заменен методом ExecPostSaveActions(IEntity entity, Type type, Dictionary<string, object> values, Dictionary<string, string> serviceData, LinksDictionary links).

4. Изменен класс сериализатора экспорта-импорта EleWise.ELMA.Deploy.Serialization.EntityXmlSerializer :

  • тип возвращаемого значения функции Deserialize(object obj, Dictionary<string, object> serObj) изменен на EleWise.ELMA.Deploy.Import.Links. LinksDictionary;
  • убрана функция ConvertFromSerializable(Dictionary<string, object> serObj, Type entityType, out IEntity tpItem);
  • убрана функция ConvertFromSerializable(object obj, Dictionary<string, object> serObj);

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

1. Массовое вложение документов в задачу

2. Заполнение темы задачи при вложении документа.

3. Обработка пробелов в телефонном номере. При попытке звонка на телефонный номер с пробелами, содержащийся в системе, пробелы пропускаются

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

Модуль Сообщения

Изменения в WEB API

  1. Методы:
    bool EleWise . ELMA . Messages . API . IMessageFeedService . GetSettingsPostCommentEnterKey(),
    bool EleWise . ELMA . Messages . API . MessageFeedService . GetSettingsPostCommentEnterKey() помечены как устаревшие . Вместо них используются методы:
    FeedSettings EleWise . ELMA . Messages . API . IMessageFeedService . GetFeedSettings () и  FeedSettings EleWise . ELMA . Messages . API . MessageFeedService . GetFeedSettings ()
    соответственно.

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

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

Портлет «Решение задач»

В портлет «Решение задач» было добавлено отображение задач предварительного согласования задач с возможностью быстрого согласования/отказе в согласовании задач или согласования/отказе в согласовании задачи через popup-окно.

Public API

Нет изменений в Public API

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

Список наиболее важных структурных изменений и доработок

  1. Обновление платформы ASP.NET MVC с версии 3 на версию 4. Подробнее см. в  данной статье .
  2. Обновление NHibernate до версии 4.0.
  3. На MSSQL полностью изменен механизм генерации идентификаторов. Теперь используются хранимые процедуры - аналоги «генераторов». Теперь при сохранении объекта методом Save он не сразу попадает в БД, а только при подтверждении транзакции
    При обновлении на версию 3.9 существующей базы данных MSSQL будет произведено масштабное преобразование БД, которое может занять длительный период времени. Для обеспечения корректного обновления требуется увеличить таймауты работы с БД:
    • В файле ELMA\Web\Settings.config указать параметр «DbTransformCommandTimeout» значение в секундах. Наша рекомендация ставить с запасом – 360000. Так же проверьте файл UserConfig\WebApplication\settings.config – если там этот параметр есть, то его тоже надо установить в это значение.
    • В файле UserConfig\configuration.config найдите тэг <main connectionStringName="MainDB" … /> там добавьте атрибут commandTimeOut="360000", если такого атрибута еще не было. Если же он там уже есть – просто установите его значение.
    • Обновление может занять ОЧЕНЬ продолжительный период, это сильно зависит от размеров БД и ресурсов на сервере БД. Наши тесты показали, что в среднем база размером 100ГБ на сервере с 16ГБ ОЗУ и 4 ядрами 2.4ГГц обновляется около 5-8 часов.
    • Так же для работы на сервере MSSQL теперь используется механизм Linked Server – он позволяет изолировать транзакции генерации идентификаторов от основной транзакции. При первом запуске система сама попытается создать точку связи, в случае неудачи – будет выведено сообщение в веб интерфейс с инструкцией для администратора БД.
  4. Убраны привилегии уровня отдельного сообщения.
  5. Добавлена возможность архивирования Ленты за период.
  6. Полностью изменена система привилегий в CRM.
  7. Разграничили права на создание объектов CRM
  8. Доработан механизм полнотекстового индекса и добавлено использование встроенного провайдера Lucene.NET.
  9. [Проекты] Перенесен справочник статей доходов и расходов в общий модуль.
  10. Переделаны календарные события для конструктора форм
  11. Переделаны формы для писем под конструктор форм
  12. Переделаны формы для встреч под конструктор форм
  13. Переделаны формы для звонков под конструктор форм
  14. Реализован EQL поиск по документам в папках-фильтрах
  15. [Процессы WorkFlow] Новые операции отправки почтового сообщения и sms
  16. Регистрация событий безопасности для аудита
    • Это отдельный модуль – пишет данные в отдельную БД
  17. Отправка списка записей справочника по процессу
  18. Настройка доступа на уровне полей справочника
  19. Поддержка Firebird 3.0
    • В поставке по-прежнему идет Firebird 2.5
    • Возможно развернуть новую базу на FB 3 или провести преобразование существующей (описание внутри задачи)
  20. [Замещения 2.0] Доработка замещений (активные задачи)
  21. Страница проверки EQL для любого типа объекта
  22. Публикация плана проекта сильно нагружает сервер (вплоть до остановки)
    • Полностью переделан механизм публикации, теперь он «асинхронный», т.е. выполняется на сервере в фоновом режиме.
    • Пока идет публикация проекта многие из его функций становятся недоступны
  23. Возможность выбора объекта в выпадающем списке по ссылке

Обновленные пакеты 3-й стороны

packages/Antlr3.Runtime.3.1.0.39271/lib/net40/Antlr3.Runtime.dll

Deleted

packages/Antlr3.Runtime.3.5.0.2/lib/net40/Antlr3.Runtime.dll

Added

packages/AsterNET.1.6.3.3/lib/net40/AsterNET.dll

Deleted

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

Added

packages/Autofac.2.2.4.900/lib/net40/Autofac.dll

Deleted

packages/Autofac.2.2.4.901/lib/net40/Autofac.dll

Added

packages/BitMiracle.LibTiff.NET.2.3.642.1/lib/net40/BitMiracle.LibTiff.NET.dll

Deleted

packages/BitMiracle.LibTiff.NET.2.4.528.0/lib/net40/BitMiracle.LibTiff.NET.dll

Added

packages/FirebirdSql.Data.FirebirdClient.4.5.0.1/lib/net40/FirebirdSql.Data.FirebirdClient.dll

Deleted

packages/FirebirdSql.Data.FirebirdClient.4.10.0.0/lib/net40/FirebirdSql.Data.FirebirdClient.dll

Added

packages/FluentNHibernate.2.0.3/lib/net40/FluentNHibernate.dll

Added

packages/Iesi.Collections.4.0.1.4000/lib/net40/Iesi.Collections.dll

Added

packages/NHibernate.2.1.2.4007/lib/net40/NHibernate.dll

Deleted

packages/NHibernate.4.0.4.4001/lib/net40/NHibernate.dll

Added

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

Импорт показателей

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

1. Возможность настройки доступности (скрытие, чтение, редактирование) полей и свойств для справочников, на основе пользователя, пользовательской группы, элемента оргструктуры или содержимого одного из свойств (содержащего пользователя, пользовательскую группу или элемент оргструктуры). Таким образом, один и тот же справочник, разные пользователи могут видеть по-разному. Находится в разделе Администрирование-Пользователи-Настройки доступа-Справочники.

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

2. Возможность настройки доступности (скрытие, чтение, редактирование) полей и свойств для объектов CRM (контрагенты, Сделка, Взаимоотношение), на основе пользователя, пользовательской группы, элемента оргструктуры или содержимого одного из свойств (содержащего пользователя, пользовательскую группу или элемент оргструктуры). Таким образом, один и тот же справочник, разные пользователи могут видеть по-разному.

Находится в разделе Администрирование-Настройки CRM – Права доступа к полям и свойствам.

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

Изменение системы привилегий в CRM

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

Удалено понятие “Обычных” и “Обязательных” категорий.

Глобальная привилегия «Создание контрагента» разделена на «Создание Юридического лица», «Создание Физического лица» и т.д. по всем наследникам контрагента.

Более подробно работа с правами уже описана в  справке по системе .

Блок «Оповещение»

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

Статистика SMS

В левом меню «Администирование» появился новый пункт меню «Статистика SMS» при переходе по которому открывается страница для просмотра статистики SMS.

Согласование по этапам

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

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

Добавлены два новых активити «Настройка маршрута согласования» и «Новый этап согласования».

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

Напоминания о завершении задачи

Изменён интерфейс. Появилась возможность указать абсолютное время.

Настройка «Скрывать пустой элемент» в конструкторе форм

В конструкторе форм 2 настройки: не показывать пустые свойства только для чтения, скрывать пустые панели/вкладки; объединены в одну с возможностью наследования значения от контейнера элемента.

В администрировании настройки портала выделены в отдельный портлет

Отправка списка записей справочника по процессу

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

Проекты

1. Появился режим просмотра/редактирования плана проекта в виде Иерархического справочника работ;

2. Добавлена возможность распечатать план проекта (beta-версия, включается через настройку Gantt.EnablePrint = true в Settings.config)

3.На диаграмме Ганта появилась возможность вывести для задач плановые суммы дохода и расхода из текущего бюджета по проекту (колонки в таблице доступны если есть опубликованный бюджет);

4. На диаграмме Ганта появилась возможность настроить связи для задачи через добавление предшественников (пункт ‘Предшественники’ контекстного меню задачи).

5. В портлете Календарь если у события количество участников более 6, то они выводятся в раскрывающейся панели.

6. Для связей между задачами плана введен режим планирования (поле ScheduleMode в EleWise.ELMA.Projects.Models. IProjectLinkPlan):

  • ручной - связанные задачи сдвигаются произвольно с учетом выходных
  • автоматический - связанные задачи сдвигаются согласно установленной задержке

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

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

  • Информационная панель о текущем состоянии публикации плана. Панель появляется над планом проекта в момент запуска публикации и отображает текущее выполняемое действие, общий ход выполнения, название выполняемой операции и процент ее выполнения, ошибка публикации, кнопка перезапуска (показывается при возникновении ошибки, если есть права администратора проекта)
  • Монитор публикуемых планов проектов (ссылка на него находится в тулбаре на главной странице проектов, доступен при наличии привилегии “Полный доступ ко всем проектам”). Монитор отражает список публикуемых на данный момент планов проектов в виде таблицы. В таблице указаны все данные на публикацию: время запуска, кем запущен, процент выполнения, дата старта, возможность просмотреть ошибку и перезапустить в случае ошибки.
  • Автоматический запуск незавершенных публикаций при перезапуске сервера
  • Блокировка зависимых от публикации операций. Все зависимые операции при активной публикации по проекту блокируются. В веб-части выводится предупреждение об активной публикации, а в скриптах будет выкинуто исключение типа EleWise.ELMA.Projects.Exceptions.PublishException и операция прервется.

Служба для запуска процессов в ELMA на основе данных выгруженных из xml-файла

Разработанная служба позволяет запускать процессы на основое данных xml-файла. Xml-файл может быть создан по двум схемам "strict" и "custom". Strict-схема xml-файла обеспечивает валидацию импортируемых значений.

Custom-схема при описании xml-файла не обеспечивает валидацию переданных значений, однако позволяет импортировать более сложные объекты.

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

Подробнее см. в  данной статье .

Работа с EQL

1. EQL-парсер переписан на Nemerle.Peg

2. В EQL-поиск добавлена функция COUNT

Форматы записи:

  • Count(Contact)
  • Count(from Contractor where Name like ’%ООО%’)

3. Добавлены 5 новых функций в EQL-поиск для работы с подчинением и группами:

  • GetChiefByUser(<Id пользователя>) - все начальники пользователя;
  • GetUserSubordinate(<Id пользователя>) - все подчиненные пользователя;
  • GroupUsers(<Id группы>) - все пользователи группы;
  • UserGroups(<Id пользователя>) - все группы пользователя;
  • UserOrganisationItems(<Id пользователя>) - все должности пользователя;

4. Доработан помощник EQL-поиска. Теперь помощник помогает строить вложенные запросы.

5. Добавлена страница для фильтрации любых типов объектов.

Редактор сценариев

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

2. Добавлено окно с информацией о настройке отладки в Visual Studio в раздел «Сценарии»: процессы, глобальные модули.

3. Добавлена комбинация клавиш Ctrl+S в следующие разделы:

  • Процессы
  • Объекты и перечисления
  • Документооборот (только типы документов)
  • Проекты (типы проектов)
  • Отчёты
  • Интерфейс (страницы, портлеты)
  • Сценарии (процессы, глобальные модули, пользовательские расширения)

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

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

  • Процессы
  • Объекты
  • Типы документов
  • Типы проектов
  • Отчёты
  • Интерфейс (страницы, портлеты)
  • Сценарии (сценарии процессы, глобальные модули, пользовательские расширения)

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

6. Добавлена подсветка синтаксических ошибок. Добавлены тултипы по синтаксическим ошибкам. Добавлено отображение синтаксических ошибок на скролл баре (с возможностью клика и перехода к ошибке). Добавлены комбинации клавиш Alt+PageUp и Alt+PageDown для быстрого перехода к ближайшей синтаксической ошибке.

7. Обновлено контекстное меню – добавлены две новых команды: форматирование выделенного текста (Ctrl+I) и форматирование всего документа (Ctrl+Shift+I). ВАЖНО!!! -> форматирование кода не будет работать, если в документе присутствуют синтаксические ошибки.

8. Добавлена подсветка скобочек (фигурные, круглые, квадратные). См. скрин выше

9. Добавлена поддержка регионов и сворачиваемого кода

10. Добавлено автоформатирование кода (переносы, отступы, автозакрытие скобочек, строк)

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

12. Добавлена поддержка добавления веб-сервисов с basic-авторизацией. Добавлен прогресс бар при добавлении веб-сервиса (на легковесных веб-сервисах он будет почти незаметен)

13. Расширен стандартный набор ссылок в процессах

Изменение работы индексации и полнотекстового поиска

Провайдеры индексации

В версии 3.9.0 доступно два провайдера индексации: Lucene.Net 3.0.3 (далее Lucene) и ElasticSearch 1.7.3 (далее ElasticSearch).

Провайдер Lucene является провайдером по умолчанию и доступен для всех редакций ELMA. Не требует отдельной установки сервера индексации и какой-либо настройки.

Провайдер ElasticSearch требует установки отдельного сервера индексации и настройки подключения к нему. Недоступен в версии Express.

В версии ELMA 3.9.0 провайдер ElasticSearch был обновлен, для индексации требуется версия сервера индексации 1.7.3. Работа со старой версией сервера индексации не поддерживается.

Рекомендации по развертыванию сервера ElasticSearch https://www.elastic.co/guide/en/elasticsearch/guide/current/hardware.html

Что происходит при первом запуске 3.9.0

Если ELMA была установлена с нуля, в качестве провайдера индексации устанавливается Lucene и автоматически включается индексация контрагентов и документов.

При обновлении ELMA с более ранних версий, если индексация не была включена, в качестве провайдера индексации устанавливается Lucene, индексация не запускается.

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

Настройки индексации

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

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

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

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

Настройка «Индексировать версии документов» включает/выключает индексацию текущей версии документа. Индексируется содержимое файла версии. При выключенном индексировании документов не работает.

Общий принцип работы индексации

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

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

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

Карточка объекта

При индексировании объект не передается провайдеру индексации напрямую. Для этого используется промежуточный DTO (далее «карточка объекта»), представляющий собой реализацию наследника интерфейса EleWise.ELMA.FullTextSearch.Model.IFullTextSearchObject.

Индексируемые типы

При индексации объекта в индекс попадают только свойства следующих типов: да / нет, дата / время, дробное число, выпадающий список, объект, перечисление, уникальный идентификатор (GUID), HTML разметка, целое число (16 бит), целое число (32 бита), целое число, деньги, ссылка на объект, строка, текст, временной интервал, URL, интервал рабочего времени.
Блоки и свойства блоков объектов не индексируются.

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

Некоторые типы данных поддерживают не только поиск по полному совпадению (фильтрацию), но и поиск с учетом морфологии (расширенный аналог быстрого поиска). Этим свойством обладают следующие типы: HTML разметка, строка, текст, URL.

Варианты поиска в индексе

Для вызова поиска в индексе используется сервис EleWise.ELMA.FullTextSearch.Services.FullTextSearchService. Он позволяет получить данные из индекса тремя способами.

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

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

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

Регистрация событий безопасности

1. События безопасности регистрируются в системе ELMA. Хранение осуществляется во внешней базе. Поддерживаются Microsoft SQL и Firebird.

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

3. Не регистрируются события выборки данных из системы, такие как просмотр, печать и экспорт данных объектов, документов, отчетов, за исключением просмотра документа. Регистрируемые события:

  • Регистрация входа / выхода пользователя
  • Добавление / Изменение / Удаление данных пользователем
  • Создание / Удаление / Блокировка пользователей
  • Изменение прав пользователей
  • Изменение настроек системы
  • Изменение групп пользователей, в том числе добавление / удаление пользователей в группе
  • Просмотр документа

Астериск

1. Добавлены методы работы с очередью

ELMA Агент

1. Добавлен многострочный комментарий.

2. Добавлены информационные подсказки при наведении мышки на кнопки

3. Оптимизация работы агента под MAC

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

5. Исправления:

  • Из агента можно было отредактировать подписанную версию документа

Процессы

1. Убрана поддержка настройки «Workflow.QueueEnabled=false» в файле «Settings.config» (данная настройка, установленная в значение false, позволяла использовать механизм исполнения бизнес-процессов без использования очереди исполнения).

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

Активация

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

Разработка компонентов (nupkg)

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

    <?xml version="1.0"?> <package> <xmetadata> <uninstallDependencies> <dependency id="<ID_удаляемого_пакета>"
    /> </uninstallDependencies> </xmetadata> </package>

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

Web API

При создании объектов через IEntityService теперь можно указывать UID

Календарь

Добавлен сервис для работы с календарными событиями - /API/REST/Calendar/Help

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

Для фильтров ELMA появился базовый интерфейс IFilterBase. Теперь IFilter и IFilterDocumentFolder его реализуют.

В ECM удален контроллер FilterDocumentFolderController.cs и его все вьюхи (папка FilterDocumentFolder ). Вместо него появился контроллер: FilterDocumentController. cs. Всеь функционал папок фильтров идет теперь через него.Если какие-то вьюхи подменялись для фильтров по документу, а именно из папки FilterDocumentFolder , то они не буду работать на 3.9. Нужно их переписывать.

Также удалена форма поиска документа: DocumentSearchForm.cshtml .

В модуле «Управление договорами» также удален контроллер с вьюхами: FilterDocumentFolderController.cs

Модуль сообщения

Сборка EleWise. ELMA. Messages. Web

1. В контроллере EleWise.ELMA.Messages.Web.Controllers.BaseMessageController удалены следующие публичные методы:

  • ActionResult MessagesCount()
  • SetMessagesReadedAll([Bind(Prefix = "BaseMessageFilter")] IBaseMessageFilter filter)

2. Контроллер EleWise.ELMA.Messages.Web.Controllers.MessageController удалён .

3. Удалены следующие классы:

  • EleWise.ELMA.Messages.Web.Models.InternalMailMessageModel
  • EleWise.ELMA.Messages.Web.Models.MessageGrid
  • EleWise.ELMA.Messages.Managers

Сборка EleWise.ELMA.Messages

4. В менеджере EleWise.ELMA.Messages.Managers.BaseMessageManager удалены следующие методы:

  • long GetUnreadedMessagesCount()
  • ResetUnreadedMessagesCountCache(long userId)
  • List<BaseMessageStatus> GetStatusesForMessages(List<long> messagesId, IUser recipient)
  • void SetAllMessagesStatus(ELMA.Security.Models.IUser user, MessageStatus status)
  • void UpdatePermissions(IBaseMessage message)

5. Удалены следующие классы:

  • EleWise.ELMA.Messages.Managers.BaseMessagePermissionManager
  • EleWise.ELMA.Messages.Models.BaseMessagePermission
  • EleWise.ELMA.Messages.Security.BaseMessageInstanceDefaultPermission
  • EleWise.ELMA.Messages.Security.BaseMessageInstanceUpdatePermission
  • EleWise.ELMA.Messages.Security.InstanceSettingsBaseMessagePermission
  • EleWise.ELMA.Messages.Security. MessagesRoleTypes

6. В менеджере EleWise.ELMA.Messages.Managers.InformationChannelManager удалены методы

  • void UpdatePermissions(IInformationChannel channel)

7. В объекте EleWise.ELMA.Messages.Models.BaseMessage удалены свойства:

  • Iesi.Collections.Generic.ISet<EleWise.ELMA.Messages.Models.IBaseMessagePermission> Permissions

8. В классе EleWise.ELMA.Messages.permissionProvider удалены свойства и константы:

  • const string MessageViewPermissionId
  • const string MessageEditPermissionId
  • string MessageFullPermissionId
  • Permission MessageViewPermission
  • Permission MessageEditPermission
  • Permission MessageFullPermission

ELMA Plugin for VS

Добавлены шаблоны проектов на английском языке (переведены все комментарии, названия объектов, их свойств и действий). Шаблон нужного языка будет использован при создании проекта в зависимости от языка, указанного в настройках локали Visual Studio.

Исправлена ошибка вылета Visual Studio при переходе на вкладку «Свойства» или «Фильтр» в объекте

Шаблоны проектов переведены на MVC4

PublicAPI

Раздел CRM:

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

PublicAPI.CRM.Objects.ContContractorPermission

PublicAPI.CRM.Objects.ContLeadPermission

PublicAPI.CRM.Objects.RelationshipPersonPermission

RelationshipPersonPermissionFilterHelper PublicAPI.CRM.Objects.RelationshipPersonPermission.Filter()

PublicAPI.CRM.Objects.LeadPersonPermission

PublicAPI.CRM.Objects.ContactPersonPermission

ContactPersonPermissionFilterHelper PublicAPI.CRM.Objects.ContactPersonPermission.Filter()

PublicAPI.CRM.Objects.ContractorPersonPermission

ContractorPersonPermissionFilterHelper PublicAPI.CRM.Objects.ContractorPersonPermission.Filter()

PublicAPI.CRM.Objects.SalePersonPermission

PublicAPI.CRM.Objects.TemplateLeadPermission

TemplateLeadPermissionFilterHelper PublicAPI.CRM.Objects.TemplateLeadPermission.Filter()

PublicAPI.CRM.Objects.TemplateContractorPermission

TemplateContractorPermissionFilterHelper PublicAPI.CRM.Objects.TemplateContractorPermission.Filter()

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

Void PublicAPI.CRM.Contractor.DeletePermission(Contractor contractor, User user)

Void PublicAPI.CRM.Contractor.DeletePermission(Contractor contractor, UserGroup userGroup)

Void PublicAPI.CRM.Contractor.DeleteAuthorPermission(Contractor contractor, Permission permission)

Void PublicAPI.CRM.Contractor.AddAuthorPermission(Contractor contractor, Permission permission)

Void PublicAPI.CRM.Contractor.DeletePermission(Contractor contractor, OrganizationItem orgItem)

Void PublicAPI.CRM.Contractor.EnableInheritPermissions(Contractor contractor)

Void PublicAPI.CRM.Contractor.DisableInheritPermissions(Contractor contractor)

Void PublicAPI.CRM.Contractor.AddPermission(Contractor contractor, User user, Permission permission)

Void PublicAPI.CRM.Contractor.AddPermission(Contractor contractor, UserGroup userGroup, Permission permission)

Void PublicAPI.CRM.Contractor.AddPermission(Contractor contractor, OrganizationItem orgItem, Permission permission)

Void PublicAPI.CRM.Contractor.DeletePermission(Contractor contractor, User user, Permission permission)

Void PublicAPI.CRM.Contractor.DeletePermission(Contractor contractor, UserGroup userGroup, Permission permission)

Void PublicAPI.CRM.Contractor.DeletePermission(Contractor contractor, OrganizationItem orgItem, Permission permission)

Void PublicAPI.CRM.Contact.DeletePermission(Contact contact, User user)

Void PublicAPI.CRM.Contact.DeletePermission(Contact contact, UserGroup userGroup)

Void PublicAPI.CRM.Contact.DeleteAuthorPermission(Contact contact, Permission permission)

Void PublicAPI.CRM.Contact.AddAuthorPermission(Contact contact, Permission permission)

Void PublicAPI.CRM.Contact.DeletePermission(Contact contact, OrganizationItem orgItem)

Void PublicAPI.CRM.Contact.EnableInheritPermissions(Contact contact)

Void PublicAPI.CRM.Contact.DisableInheritPermissions(Contact contact)

Void PublicAPI.CRM.Contact.AddPermission(Contact contact, User user, Permission permission)

Void PublicAPI.CRM.Contact.AddPermission(Contact contact, UserGroup userGroup, Permission permission)

Void PublicAPI.CRM.Contact.AddPermission(Contact contact, OrganizationItem orgItem, Permission permission)

Void PublicAPI.CRM.Contact.DeletePermission(Contact contact, User user, Permission permission)

Void PublicAPI.CRM.Contact.DeletePermission(Contact contact, UserGroup userGroup, Permission permission)

Void PublicAPI.CRM.Contact.DeletePermission(Contact contact, OrganizationItem orgItem, Permission permission)

Void PublicAPI.CRM.Lead.DeletePermission(Lead lead, User user)

Void PublicAPI.CRM.Lead.DeletePermission(Lead lead, UserGroup userGroup)

Void PublicAPI.CRM.Lead.DeleteAuthorPermission(Lead lead, Permission permission)

Void PublicAPI.CRM.Lead.AddAuthorPermission(Lead lead, Permission permission)

Void PublicAPI.CRM.Lead.DeletePermission(Lead lead, OrganizationItem orgItem)

Void PublicAPI.CRM.Lead.EnableInheritPermissions(Lead lead)

Void PublicAPI.CRM.Lead.DisableInheritPermissions(Lead lead)

Void PublicAPI.CRM.Lead.AddPermission(Lead lead, User user, Permission permission)

Void PublicAPI.CRM.Lead.AddPermission(Lead lead, UserGroup userGroup, Permission permission)

Void PublicAPI.CRM.Lead.AddPermission(Lead lead, OrganizationItem orgItem, Permission permission)

Void PublicAPI.CRM.Lead.DeletePermission(Lead lead, User user, Permission permission)

Void PublicAPI.CRM.Lead.DeletePermission(Lead lead, UserGroup userGroup, Permission permission)

Void PublicAPI.CRM.Lead.DeletePermission(Lead lead, OrganizationItem orgItem, Permission permission)

Void PublicAPI.CRM.Sale.DeletePermission(Sale sale, User user)

Void PublicAPI.CRM.Sale.DeletePermission(Sale sale, UserGroup userGroup)

Void PublicAPI.CRM.Sale.DeleteAuthorPermission(Sale sale, Permission permission)

Void PublicAPI.CRM.Sale.AddAuthorPermission(Sale sale, Permission permission)

Void PublicAPI.CRM.Sale.DeletePermission(Sale sale, OrganizationItem orgItem)

Void PublicAPI.CRM.Sale.EnableInheritPermissions(Sale sale)

Void PublicAPI.CRM.Sale.DisableInheritPermissions(Sale sale)

Void PublicAPI.CRM.Sale.AddPermission(Sale sale, User user, Permission permission)

Void PublicAPI.CRM.Sale.AddPermission(Sale sale, UserGroup userGroup, Permission permission)

Void PublicAPI.CRM.Sale.AddPermission(Sale sale, OrganizationItem orgItem, Permission permission)

Void PublicAPI.CRM.Sale.DeletePermission(Sale sale, User user, Permission permission)

Void PublicAPI.CRM.Sale.DeletePermission(Sale sale, UserGroup userGroup, Permission permission)

Void PublicAPI.CRM.Sale.DeletePermission(Sale sale, OrganizationItem orgItem, Permission permission)

Void PublicAPI.CRM.Relationship.DeletePermission(Relationship relationship, User user)

Void PublicAPI.CRM.Relationship.DeletePermission(Relationship relationship, UserGroup userGroup)

Void PublicAPI.CRM.Relationship.DeleteAuthorPermission(Relationship relationship, Permission permission)

Void PublicAPI.CRM.Relationship.AddAuthorPermission(Relationship relationship, Permission permission)

Void PublicAPI.CRM.Relationship.DeletePermission(Relationship relationship, OrganizationItem orgItem)

Void PublicAPI.CRM.Relationship.EnableInheritPermissions(Relationship relationship)

Void PublicAPI.CRM.Relationship.DisableInheritPermissions(Relationship relationship)

Void PublicAPI.CRM.Relationship.AddPermission(Relationship relationship, User user, Permission permission)

Void PublicAPI.CRM.Relationship.AddPermission(Relationship relationship, UserGroup userGroup, Permission permission)

Void PublicAPI.CRM.Relationship.AddPermission(Relationship relationship, OrganizationItem orgItem, Permission permission)

Void PublicAPI.CRM.Relationship.DeletePermission(Relationship relationship, User user, Permission permission)

Void PublicAPI.CRM.Relationship.DeletePermission(Relationship relationship, UserGroup userGroup, Permission permission)

Void PublicAPI.CRM.Relationship.DeletePermission(Relationship relationship, OrganizationItem orgItem, Permission permission)

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

PermissionId(Guid permissionId) - Добавлен

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

PermissionRole(Nullable<Guid> permissionRole) - Добавлен

Relationship(Relationship relationship) - Добавлен

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

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

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

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

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

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

PermissionRole(Nullable<Guid> permissionRole) - Добавлен

Contact(Contact contact) - Добавлен

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

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

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

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

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

PermissionId(Guid permissionId) - Добавлен

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

UserSecuritySetCacheId(Nullable<Int64> userSecuritySetCacheId) - Добавлен

PermissionRole(Nullable<Guid> permissionRole) - Добавлен

Contractor(Contractor contractor) - Добавлен

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

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

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

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

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

ContainerLead(ContLeadPermission containerLead) - Добавлен

AddPermission(Boolean addPermission) - Добавлен

DelPermission(Boolean delPermission) - Добавлен

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

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

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

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

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

ContainerContractor(ContContractorPermission containercontractor) - Добавлен

AddPermission(Boolean addPermission) - Добавлен

DelPermission(Boolean delPermission) - Добавлен

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

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

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

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

Раздел Docflow:

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

PublicAPI.Docflow.Objects.Tasks.RouteApprovement

RouteApprovementFilterHelper PublicAPI.Docflow.Objects.Tasks.RouteApprovement.Filter()

PublicAPI.Docflow.Objects.Tasks.StageApprovement

StageApprovementFilterHelper PublicAPI.Docflow.Objects.Tasks.StageApprovement.Filter()

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

ApprovementTaskGroupFilterHelper PublicAPI.Docflow.Objects.Tasks.ApprovementTaskGroup.Filter()

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

PublicAPI.Docflow.Objects.Tasks.RouteApprovementTask

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

ApprovementStageList(StageApprovement[] approvementStageList) - Добавлен

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

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

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

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

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

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

Users(User[] users) - Добавлен

Name(String name) - Добавлен

StagePassed(Boolean stagePassed) - Добавлен

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

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

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

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

Раздел Processes:

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

PublicAPI.Processes.Objects.TerminateScriptSchedulerJob

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

ImprovedProcessHeaderId(Nullable<Int64> improvedProcessHeaderid) - Добавлен

Раздел Portal:

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

PublicAPI.Portal.Objects.Messages.BaseMessagePermission

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

PublicAPI.Portal.Security.PermissionsSecurity.AbsenceViewPermission

PublicAPI.Portal.Objects.Tasks.ReplacementTask

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.AddQuestion(ReplacementTask task, User recipient, String description, Boolean showAll, IEnumerable<Attachment> attachments)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.AddQuestion(ReplacementTask task, User recipient, String description, Boolean showAll)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.AddQuestion(ReplacementTask task, Question question)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.AddComment(ReplacementTask task, String comment, IEnumerable<Attachment> attachments)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.AddComment(ReplacementTask task, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.AddComment(ReplacementTask task, CommentActionModel model)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, DateTime endDate)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, DateTime endDate, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, DateTime endDate, Comment comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate, Comment comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate, TaskPriority priority)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate, TaskPriority priority, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, TaskPriority priority, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate, TaskPriority priority, Comment comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetTaskEndDate(Int64 taskId, DateTime newEndDate)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLog(Int64 taskId, Int64 minutes, DateTime startDate, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLog(Int64 taskId, Int64 minutes, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLog(Int64 taskId, Int64 minutes, DateTime startDate)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLog(Int64 taskId, Int64 minutes)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLogHours(Int64 taskId, Int64 hours, DateTime startDate)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLogHours(Int64 taskId, Int64 hours, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLogHours(Int64 taskId, Int64 hours)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLogHours(Int64 taskId, Int64 hours, DateTime startDate, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLogDays(Int64 taskId, Int64 days, DateTime startDate)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLogDays(Int64 taskId, Int64 days, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLogDays(Int64 taskId, Int64 days)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLogDays(Int64 taskId, Int64 days, DateTime startDate, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.CompleteTask(Int64 taskId, CompleteTaskModel model)

ReplacementTaskFilterHelper PublicAPI.Portal.Objects.Tasks.ReplacementTask.Filter()

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

CalendarEventBuilder PublicAPI.Portal.CalendarEvent.CalendarEventBuilder()

CalendarEventPeriodicalBuilder PublicAPI.Portal.CalendarEvent.CalendarEventPeriodicalBuilder()

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

PublicAPI.Portal.Objects.Common.CatalogProfile

PublicAPI.Portal.Objects.Common.PropertyAccess

PublicAPI.Portal.Objects.Common.PropertyProfile

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

Replacement(Replacement replacement) - Добавлен

Statuses(List<TaskBaseStatus> statuses) - Добавлен

TimePlannedRange(Nullable<TimeSpan> timePlannedRange) - Добавлен

IsPlanned(Nullable<Boolean> isPlanned) - Добавлен

TaskId(Nullable<Int64> taskId) - Добавлен

TypeUid(Nullable<Guid> typeUid) - Добавлен

CompleteStatus(TaskCompleteStatus completeStatus) - Добавлен

Executors(User[] executors) - Добавлен

DatePeriod(DateTimeRange datePeriod) - Добавлен

TypeUids(Guid[] typeUids) - Добавлен

TypeUids(List<Guid> typeUids) - Добавлен

OnlyFromMyDepartment(Nullable<Boolean> onlyFromMyDepartment) - Добавлен

OnlyForMyDepartment(Nullable<Boolean> onlyForMyDepartment) - Добавлен

CreationAuthors(User[] creationAuthors) - Добавлен

ExcludedTypeUids(Guid[] excludedTypeUids) - Добавлен

ExcludedTypeUids(List<Guid> excludedTypeUids) - Добавлен

Subject(String subject) - Добавлен

Description(String description) - Добавлен

CreationDate(RelativeDateTime creationDate) - Добавлен

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

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

StartDate(DateTimeRange startDate) - Добавлен

EndDate(RelativeDateTime endDate) - Добавлен

Priority(TaskPriority priority) - Добавлен

ParentTask(TaskBase parentTask) - Добавлен

Status(TaskBaseStatus status) - Добавлен

EndWorkDate(RelativeDateTime endWorkDate) - Добавлен

InformTo(User[] informTo) - Добавлен

NotShowInLists(Boolean notShowInLists) - Добавлен

Category(TaskCategory category) - Добавлен

IsEmulation(Boolean isEmulation) - Добавлен

ProjectStatus(Nullable<ProjectStatus> projectStatus) - Добавлен

ProjectIds(Int64[] projectIds) - Добавлен

ProjectIds(List<Int64> projectIds) - Добавлен

Project(Project project) - Добавлен

InnerDocument(Document innerDocument) - Добавлен

InnerDocuments(Document[] innerDocuments) - Добавлен

FilterByEntity(Boolean filterByEntity) - Добавлен

Contractor(Contractor contractor) - Добавлен

Contact(Contact contact) - Добавлен

Lead(Lead lead) - Добавлен

Sale(Sale sale) - Добавлен

InstanceId(Int64 instanceid) - Добавлен

ProcessHeaderId(Nullable<Int64> processHeaderId) - Добавлен

ActivityUids(Guid[] activityUids) - Добавлен

ActivityUids(List<Guid> activityUids) - Добавлен

SwimlaneUid(Nullable<Guid> swimlaneUid) - Добавлен

ProcessHeaderIdList(Int64[] processHeaderIdList) - Добавлен

ProcessHeaderIdList(List<Int64> processHeaderIdList) - Добавлен

InstanceFilter(Filter instanceFilter) - Добавлен

Resolution(Resolution resolution) - Добавлен

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

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

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

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

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

Users(User[] users) - Добавлен

Раздел Projects:

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

PublicAPI.Projects.Objects.PublishPlanStateInfo

PublishPlanStateInfoFilterHelper PublicAPI.Projects.Objects.PublishPlanStateInfo.Filter()

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

ProjectPlanId(Int64 projectplanId) - Добавлен

ProjectId(Int64 projectId) - Добавлен

ProjectTypeUid(Guid projectTypeUid) - Добавлен

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

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

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

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

Раздел Enums:

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

PublicAPI.Enums.Projects.PublishPlanStateStatus

PublicAPI.Enums.Projects.PublishPlanStateStatus.Begin

PublicAPI.Enums.Projects.PublishPlanStateStatus.OldTaskClosing

PublicAPI.Enums.Projects.PublishPlanStateStatus.OldTaskClosingEnd

PublicAPI.Enums.Projects.PublishPlanStateStatus.BudgetVersionUpdating

PublicAPI.Enums.Projects.PublishPlanStateStatus.BudgetVersionUpdatingEnd

PublicAPI.Enums.Projects.PublishPlanStateStatus.NewTaskCreating

PublicAPI.Enums.Projects.PublishPlanStateStatus.NewTaskCreatingEnd

PublicAPI.Enums.Projects.PublishPlanStateStatus.ChangeTaskPropertyNotShowInLists

PublicAPI.Enums.Projects.PublishPlanStateStatus.ChangeTaskPropertyNotShowInListsEnd

PublicAPI.Enums.Projects.PublishPlanStateStatus.RunProcessTask

PublicAPI.Enums.Projects.PublishPlanStateStatus.RunProcessTaskEnd

PublicAPI.Enums.Projects.PublishPlanStateStatus.ActionEventGenerating

PublicAPI.Enums.Projects.PublishPlanStateStatus.ActionEventGeneratingEnd

PublicAPI.Enums.Workflow.BPMN.Elements.Tasks.TaskType

PublicAPI.Enums.Workflow.BPMN.Elements.Tasks.TaskType.User

PublicAPI.Enums.Workflow.BPMN.Elements.Tasks.TaskType.Script

PublicAPI.Enums.Workflow.BPMN.Elements.Tasks.TaskType.Manual

PublicAPI.Enums.Workflow.BPMN.Elements.Tasks.TaskType.Notification

PublicAPI.Enums.Workflow.BPMN.Elements.Tasks.TaskType.MessageSend

PublicAPI.Enums.Workflow.BPMN.Elements.Tasks.TaskType.MessageReceive

PublicAPI.Enums.Workflow.WorkflowBPMN.Elements.Tasks.TaskType

PublicAPI.Enums.Workflow.WorkflowBPMN.Elements.Tasks.TaskType.User

PublicAPI.Enums.Workflow.WorkflowBPMN.Elements.Tasks.TaskType.Script

PublicAPI.Enums.Workflow.WorkflowBPMN.Elements.Tasks.TaskType.Manual

PublicAPI.Enums.Workflow.WorkflowBPMN.Elements.Tasks.TaskType.Notification

PublicAPI.Enums.Workflow.WorkflowBPMN.Elements.Tasks.TaskType.MessageSend

PublicAPI.Enums.Workflow.WorkflowBPMN.Elements.Tasks.TaskType.MessageReceive

PublicAPI.Enums.Projects.ScheduleMode

PublicAPI.Enums.Projects.ScheduleMode.Manual

PublicAPI.Enums.Projects.ScheduleMode.Auto

PublicAPI.Enums.Documents.Tasks.ApprovementCompleteType.ContinueApprovementInPhase

PublicAPI.Enums.Tasks.ApprovalStatus.Pending

PublicAPI.Enums.Workflow.BPMN.Elements.Tasks.NotificationElementRecipientType.NotSet

PublicAPI.Enums.Workflow.WorkflowBPMN.Elements.Tasks.NotificationElementRecipientType.NotSet

Раздел Docflow:

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

Void PublicAPI.Docflow.Document.AddComment(Document document, Comment comment, IEnumerable<Attachment> attachments, IEnumerable<DocumentAttachment> documentAttachments)

Раздел Portal:

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

PublicAPI.Portal.Objects.Security.ReplacementRule

ReplacementRuleFilterHelper PublicAPI.Portal.Objects.Security.ReplacementRule.Filter()

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

Replacement(Replacement replacement) - Добавлен

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

PropertyUid(Guid propertyUid) - Добавлен

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

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

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

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