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

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

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

Доработан поиск EQL

1. Реализована возможность фильтрации по связанным сущностям без прямой ссылки:
Property in (from Entity setect EntityProperty where Condition)

2. При фильтрации в подзапросах можно обращаться к полям содержащего запроса:
Property1 in (SubProperty in (SubSubProperty = parent.parent.Property2 or SubSubProperty = root. Property3))

3. При совпадении наименования свойства с зарезервированным словом EQL, его нужно заключать в квадратные скобки:
[Parent] = 123

Удалено представление \Modules\EleWise.ELMA.BPM.Web.Common\Views\Shared\Filter\FilterFields.cshtml

При оптимизации фильтров представление \Modules\EleWise.ELMA.BPM.Web.Common\Views\Shared\Filter\FilterFields.cshtml

было удалено, и его код частично помещен в \Modules\EleWise.ELMA.BPM.Web.Common\Views\Shared\Filter\FilterModelFields.cshtml

Точки расширения отмечены устаревшими

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

EleWise.ELMA.BPM.Web.Common.ExtensionPoints.IFieldsFilterExtension
EleWise.ELMA.BPM.Web.Common.ExtensionPoints.IFilterPropertyEditor
EleWise.ELMA.BPM.Web.Common.ExtensionPoints.IFilterPropertyReloadFormHandler
EleWise.ELMA.BPM.Web.Common.ExtensionPoints.IFilterPropertyVisibility

отмечены устаревшими, вместо них нужно использовать точки расширения

namespace EleWise.ELMA.Common.Extensions
{
    [ExtensionPoint(ServiceScope.Shell)]
    public interface IFilterPropertiesExtension
    {
        /// <summary>
        /// Работает ли точка расширения с данным свойством из указанного класса
        /// </summary>
        /// <param name="prop">Метаданные свойства</param>
        /// <param name="metadata">Метаданные сущности</param>
        /// <returns></returns>
        bool Resolve(PropertyMetadata prop, ClassMetadata metadata);

        /// <summary>
        /// Получить свойства, которые нужно добавить перед указанным свойством
        /// </summary>
        /// <param name="obj">Объект фильтра</param>
        /// <param name="prop">Метаданные свойства</param>
        /// <param name="metadata">Метаданные сущности</param>
        /// <param name="prefix">Текущий префикс для имени свойства</param>
        /// <param name="filterObjectTypeUid">Тип объектов фильтра</param>
        /// <param name="filterCode">Код для дополнительного разделения фильтров внутри типа</param>
        /// <param name="addProperty">true, если нужно добавить указанное свойство после тех, что возращены</param>
        /// <returns>Свойства, которые нужно добавить перед указанным свойством</returns>
        IEnumerable<FilterMetadataProperty> GetFilterMetadataProperties(IEntityFilter obj, PropertyMetadata prop, ClassMetadata metadata, string prefix, Guid? filterObjectTypeUid, Guid? filterCode, out bool addProperty);

        /// <summary>
        /// Финальное преобразование набора свойств для указанного типа
        /// </summary>
        /// <param name="type">Тип сущности</param>
        /// <param name="filterObjectTypeUid">Тип объектов фильтра</param>
        /// <param name="filterCode">Код для дополнительного разделения фильтров внутри типа</param>
        /// <param name="properties">Текущий список свойств</param>
        /// <returns></returns>
        void UpdateProperties(Type type, Guid? filterObjectTypeUid, Guid? filterCode, List<FilterMetadataProperty> properties);
    }
}
namespace EleWise.ELMA.BPM.Web.Common.ExtensionPoints
{
    [ExtensionPoint(ServiceScope.Shell)]
    public interface IFilterPropertyEditorExtension
    {
        /// <summary>
        /// Работает ли точка расширения с данным свойством из указанного класса
        /// </summary>
        /// <param name="property">Метаданные свойства</param>
        /// <param name="filterModel">Модель фильтра</param>
        /// <returns></returns>
        bool Resolve(FilterMetadataProperty property, FilterModel filterModel);

        /// <summary>
        /// PropertyEditor для указанноко свойства
        /// </summary>
        /// <param name="html">HtmlHelper</param>
        /// <param name="property">Метаданные свойства</param>
        /// <param name="filterModel">Модель фильтра</param>
        /// <returns>PropertyEditor для указанноко свойства, или null, если не нужно</returns>
        MvcHtmlString PropertyEditor(HtmlHelper<object> html, FilterMetadataProperty property, FilterModel filterModel);

        /// <summary>
        /// Установка атрибутов свойства для стандартного Editor-а
        /// </summary>
        /// <param name="html">HtmlHelper</param>
        /// <param name="property">Метаданные свойства</param>
        /// <param name="filterModel">Модель фильтра</param>
        /// <param name="a">Атрибуты свойства</param>
        void PropertyAction(HtmlHelper<object> html, FilterMetadataProperty property, FilterModel filterModel, WebViewAttributes a);
    }
}

Провайдеры превью файлов

  1. В IFilePreviewCreator был добавлен метод - bool HasPreview(BinaryFile file, long priority) и bool EnableGenerateHtml();
  2. В IFilePreviewService был добавлен метод - bool HasPreview(BinaryFile file, long priority);

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

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

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

  2. Фиксирование перехода в истории задач по БП. Фиксируется название перехода, с которым задача была завершена.

  3. Оповещение наблюдателей. Добавлены оповещения в ленту сообщений о добавлении/удалении из списка наблюдателей.

  4. Возможность публиковать план проекта из режима редактирования. В режиме редактирования плана проекта доступна кнопка сохранения и публикации/отправки на согласование (после сохранения будет запущена публикация или отправка на согласование в зависимости от настроек типа проекта).

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

  7. Настройка связей между задачами проекта. В настройках типа проекта появилась настройка “Учитывать связи задач плана проекта”. При включении данной настройки связи между задачами будут влиять на постановку проектных задач следующим образом.
    • Связь окончание-начало. Последующая задача не будет поставлена исполнителю, пока предшествующая не будет выполнена.
    • Связь окончание-окончание, начало-окончание . Кнопки "Сделано", "Невозможно выполнить" последующей задачи будут скрыты, пока предшествующая задача не будет выполнена. Также невозможно установить процент выполнения 100% последующей задаче, если есть невыполненные предшествующие задачи.
    • Связь начало- начало. Кнопки "Работа начата", "Сделано" и "Невозможно выполнить" последующей задачи будут скрыты, пока не начнется работа над предшествующей задачей.


Добавлен счетчик сообщений

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

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

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

  1. В профиль пользователя добавились ссылки на скачивание Агента для Mac и Linux.
  2. Приоритет оповещений о трудозатратах повышен до Самого важного.
  3. Изменены стандартные шаблоны оповещений наблюдателей по задачам на e-mail. Теперь если пользователь является наблюдателем по задаче, то в заголовке оповещения на e-mail будет добавлена соответствующая пометка ("наблюдение").

Изменено название настройки документа

В Дизайнере в настройках документа название настройки «Запретить создавать через веб-интерфейс» изменено на «Ограничить работу с документом через веб-интерфейс».

Изменение этапа проверки визарда импорта в дизайнере

  1. «Предупреждения» и «Ошибки» объединены в «Конфликты».
  2. Изменено сообщение при наличии «Предупреждения» (см. рис. 1).

Рис.1. Предупреждение о некорректной конфигурации

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

Назначение категорий контрагентам и возможностям по правилам

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

Реализация в веб-части модуля работы с клиентами убрана, и перемещена в соответствующие менеджеры объектов, в них добавлена функция:

public SaveWithCategoryRulesResult SaveWithCategoryRules(IContractor contractor, RuleDeletedCategoryAction ruleDeletedCategoryAction = RuleDeletedCategoryAction.Delete)

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

  • Удаление категорий – значение по умолчанию;
  • Категории не удаляются – при этом они остаются в сущности и остаются отмеченными назначенными по правилам;
  • Откатить изменения – при выборе этого параметра при наличии категорий, которые нужно удалить, никаких изменений не будет произведено, категории, которые нужно добавить и удалить из сущности будут в возвращаемом параметре. Данный вариант используется для веб-части, чтобы можно было спросить пользователя что делать.

Проекты

  1. Метод EleWise.ELMA.Projects.Managers.ProjectPlanManager.GetLastNumber(IProject) заменён методом EleWise.ELMA.Projects.Managers.ProjectPlanManager.GetNewNumber(IProject).
  2. Метод EleWise.ELMA.Projects.Managers.SetParticipantsFromProject(T project, IUser user) помечен как устаревший, вместо него нужно использовать статический метод EleWise.ELMA.Projects.Managers. EnsureUserIsProjectMember (T project, IUser user).

Процессы

Изменились методы запуска процесса через службу API Workflow StartProcess и StartProcessAsync - в параметры добавлена еще одна переменная string ProcessToken.

Для запуска процесса укажите либо токен:

// POST-data для запуска процесса через идентификатор заголовка процесса
{"Items":
     [
         {"Name":"ProcessToken","Value":"9050ae07-0f1d-4a76-bff8-9d3170219791"},
         {"Name":"ProcessName","Value":"Запуск процесса через токе"}
     ]
}

либо идентификатор заголовка процесса:

// POST-data для запуска процесса через токен
{"Items":
     [
         {"Name":"ProcessHeaderId","Value":"10"},
         {"Name":"ProcessName","Value":"Запуск процесса через идентификатор заголовка"}
     ]
} 

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

Миграция проектов 3.5 -> 3.6

  1. На основе существующих проектов, их шаблонов и жизненных циклов создаются новые типы проектов по следующему правилу:
    • Уникальное сочетание: Id шаблона (по которому создан хотя бы 1 экземпляр проекта) + Id жизненного цикла.
    • Шаблоны, по которым не создано ни одного проекта, помечаются завершенными экземплярами базового шаблона. Нового типа по ним не создается.
  2. В конфигурационном файле FullProjectConvert.config указываются поля и блоки исходного (старого) типа проектов, которые нужно переместить в новые типы:
    • Каждый новый тип проекта описывается в конфигурационном файле следующим образом: <ProjectType TemplateId="1" LifeCycleId="1">. Здесь TemplateId – Id шаблона, LifeCycleId – Id жизненного цикла.
    • Внутри каждого такого узла можно указать, какие атрибуты в него добавить, и какие удалить: <RemovePropertyName>TipProektaVnedreniya</RemovePropertyName>
      <AddPropertyName>UstavProekta1</AddPropertyName>
    • По умолчанию, если не указано иного, все дополнительные атрибуты будут перемещены в базовый тип проекта. Из других типов они будут удалены.
  3. Если в системе были процессы, переменные которых указывали на проектные задачи, то ссылки обнулятся.
  4. Все имеющиеся проектные задачи распределяются по 3 новым типам, основываясь на соответствующих признаках:
    • Проектная задача
    • Контрольная точка
    • Проектная задача с БП
  5. Для каждого проекта генерируется текущий опубликованный план, основываясь на его задачах.
  6. Чтобы после миграции были видны трудозатраты в проектах, необходимо в настройках: "Администрирование –> Задачи -> Объекты трудозатрат -> Добавить объект трудозатрат" выбрать все нужные типы, связанные с проектами, а также: "Справочники -> Задачи -> Вид деятельности" добавить типы нужных объектов.
  7. После миграции, в некоторых проектах и шаблонах могут остаться роли c постфиксом – "_Устаревшая" ("Администрирование шаблона_Устаревшая", "Создание проекта по шаблону_Устаревшая"). Их необходимо удалить из проектов вручную. Либо исключить из этих ролей всех пользователей.
  8. Во время миграции происходит 1 плановая перезагрузка сервера.

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

  1. В интерфейсе EleWise.ELMA.Workflow.Extensions. IStartableByRouteProcess добавлен метод RouteStartPostProcess(IWorkflowInstance instance, Guid objectType, List<object> objectsId).
  2. Изменена сигнатура публичного метода в ProjectMetadataHeadManager:
    public virtual IProjectMetadataHead CreateDefault(Guid projectTypeUid, IProjectMetadataGroup group, string projectName, Action<IProjectMetadataHead> initializer, bool isNeedToCreateStages = true).
  3. Изменен тип входных переменных при запуске процессов из проектов:
    • Запуск процесса при смене стадии с "Базовый тип проекта" на "Собственный тип проекта"
    • При запуске процесса с карточки проекта с "Собственный тип проекта" на "Базовый тип проекта"
  4. Обновление библиотеки Aspose.Tasks с версии 6.5 до версии 7.2.
  5. Обновление Ораклового клиента до версии 4.121.1. Если где напрямую подключается клиент в скриптах, то могут быть проблемы.
  6. Обновление ZXing с 0.9 до 0.14.

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

  1. Вернули возможность привязывать обычные задачи к проектам (поле "Проект" при создании).
  2. Добавлена возможность удалить черновик плана проекта.
  3. Добавлена возможность класть план проекта на форму задачи по БП.
  4. На карточку создания задачи в плане добавлены поля "Файлы" и "Документы".
  5. Переделан импорт плана проекта из MS Project (интегрирован компонент Ext Gantt).

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

Дублирование даты 6.01.2015 в календаре

После установки обновления Windows для временных зон (часовых поясов) России (http://support.microsoft.com/kb/2998527) в календаре отмечено дублирование даты 6 января 2015 года. Данная ошибка прослеживается только в тех часовых поясах, в которых осенью 2014 года было переведено время.

Данная ситуация связана с тем, что согласно обновлению Windows для временных зон России 2014 года в первую среду года в 00:00 часов должен быть осуществлен переход на летнее время, и дата 7.01.2015 00:00 меняется на 6.01.2015 23:00.

В настройках временных зон России 2015 года указано, что данный переход не будет осуществлен. Таким образом, дублирование данного дня не произойдет после наступления даты 01.01.2015 00:00.

Изменение в сервисах Web API, возвращающих данные о задачах по бизнес-процессам

В сервисах Web API, возвращающих данные о задачах по бизнес-процессам добавилась информация об экземпляре бизнес-процесса.

EleWise.ELMA.Workflow.Models.WorkflowTaskBaseExtensions.ExecuteAsync

Метод EleWise.ELMA.Workflow.Models.WorkflowTaskBaseExtensions.ExecuteAsync отмечен устаревшим.

Метод EleWise.ELMA.Workflow.Models.WorkflowTaskBaseExtensions.ExecuteAsyncStatus отмечен устаревшим.

Вместо метода ExecuteAsync и ExecuteAsyncStatus нужно использовать стандартный метод выполнения задачи и получением статуса выполнения через метод WaitWhileQueued сервиса EleWise.ELMA.Workflow.Services.IWorkflowQueueService

EleWise.ELMA.Workflow.Web.Extensions.IExecutedTaskInfoProvider

Интерфейс EleWise.ELMA.Workflow.Web.Extensions.IExecutedTaskInfoProvider перемещен из библиотеки EleWise.ELMA.Workflow.Web в EleWise.ELMA.Workflow и добавлен новый метод.

    /// <summary>
    /// Точка расширения для получения информации о выполнении задачи
    /// </summary>
    [ExtensionPoint(ServiceScope.Shell)]
    public interface IExecutedTaskInfoProvider
    {
        /// <summary>
        /// Получить информацию в виде HTML
        /// </summary>
        /// <param name="html">HtmlHelper</param>
        /// <param name="instance">Экземпляр процесса</param>
        /// <returns></returns>
        HtmlString GetInfo(HtmlHelper html, IWorkflowInstance instance);

        /// <summary>
        /// Получить информация в виде <see cref="WebData"/>
        /// </summary>
        /// <param name="instance">Экземпляр процесса</param>
        /// <returns></returns>
        WebData GetData(IWorkflowInstance instance);
    }

Управление показателями

Изменено определение ряда для показателей. Начиная с текущей версии справочник считается рядом, если он соответствует интерфейсу IKPIDimension

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

  1. Добавлен диалог настройки прокси для плагина Outlook.
  2. После переоткрытия SMART-задачи процент выполнения сбрасывается на 0.
  3. Отмененные SMART-задачи не учитываются на картах целей.
  4. При удалении показателя, от которого зависят другие показатели, появляется диалоговое окно, позволяющее открыть зависимые показатели для исправления.

Изменение сервиса сообщений

  1. В передаваемую информацию о приложении к посту или комментарию RenderInfo добавлены Uid типа документа и флаг "Является веб-документом" (1 – является, 0 – не является).

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

Изменен визард импорта

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

Список пользователей

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

Форма авторизации

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

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

Обновление на версию 3.6 заблокировано

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

Существует возможность обойти данную блокировку (при острой необходимости):

  1. Инсталлятор можно запустить с флагом -IgnoreOldVersionCheck. При этом не будет проводиться проверка текущей установленной версии.
  2. Если у вас был активирован модуль "Управление проектами", то преобразование БД также прервется с ошибкой. Обходное решение описано ниже по документу.

Логика группы «Все пользователи»

  1. До обновления логика прав доступа с использованием группы «Все пользователи»была следующая:
    1. Если в доступ включена группа «Все пользователи» – права выдавались всем незаблокированным пользователям системы (вне зависимости от состава группы «Все пользователи»).
    2. Если в доступ включена группа, в составе которой группа «Все пользователи» – права выдавались (помимо других участников группы) всем пользователям, включенным в группу «Все пользователи» (группа может содержать не всех пользователей).
  2. После обновления логика прав доступа такова, что группа «Все пользователи» ничем не выделяется из остальных групп.

Конфигурация, статические файлы и переопределение

Теперь нет возможности из папки конфигурации (WebApplication) переопределить любой статический файл (картинку, css стиль, js код). Вся статика в приложении теперь делится на 2 части:

  • полностью статичная – все, что лежит в папке веб-приложения Web\ отдается через встроенные механизмы IIS без участия приложения;
  • расширяемая – статика в папке конфигурации WebApplication\, которая используется в переопределенных представлениях или в workplace.

Для обращения к расширяемым ресурсам необходимо в адрес дописывать префикс «Custom/», т.е. если вы создали картинку в «WebApplication\Content\Images\mypic.png», то обратиться к ней из представления можно только через адрес «/Custom/Content/Images/mypic.png».

Такое поведение регулируется на уровне конфигурации web.config в секциях «system.web/httpHandlers» и «system.webServer/handlers».

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

Управление проектами 3.6

Обновление на версию 3.6 при активированном модуле проектов недоступно.

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

Изменения в модулях

  1. Модуль EleWise.ELMA.Projects.Workflow удалён, всё его содержимое (классы, перечисления, ресурсы и т.п.) перенесены в EleWise.ELMA.Projects.
  2. Модуль EleWise.ELMA.Projects.Workflow.Web удалён, всё его содержимое (классы, перечисления, ресурсы и т.п.) перенесены в EleWise.ELMA.Projects.Web.

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

Интерфейс EleWise.ELMA.Projects.Models.IProject

  1. Следующие свойства перенесены в настройки типа проекта (EleWise.ELMA.Projects.Models.IProjectMetadataHead):
    ShowTaskBeforeDays, PercentTimeAllocateTask, BudgetExpenseItems, BudgetIncomeItems, Phases, Template (ProjectTemplate), LifeCycle, PlanWorkLogs, LimitPlanWorkLog, WorkLogHarmonizator.
  2. Удалены:
    Risks – будем получать через метод менеджера в проекте ProjectManager.Risks.
    Contractor – будет добавляться через дизайнер.
    InfoChannelEnabled – инфоканалы будут у всех проектов.
    DeleteTaskAfterClosing – закрытые задачи будем скрывать, переключением вида отображения в календарном плане.
  3. Расширение EleWise.ELMA.Projects.WorkflowProjectLifeCycleStage для сущности EleWise.ELMA.Projects.ProjectLifeCycleStage, удалено. Свойства ProcessHeader, ContextVar, InstanceName, ContextVarFromStage и ContextVarToStage перенесены в EleWise.ELMA.Projects.ProjectLifeCycleStage.
  4. Расширение EleWise.ELMA.Projects.WorkflowProject для сущности EleWise.ELMA.Projects.Project, удалено. Свойство WorkflowInstance перенесено в EleWise.ELMA.Projects.Project.
  5. Расширение EleWise.ELMA.Projects.WorkflowHeadProjectLifeCycle для сущности EleWise.ELMA.Projects. ProjectLifeCycle, удалено. Свойство ProcessHeader перенесено в EleWise.ELMA.Projects.ProjectLifeCycle.
  6. Метод EleWise.ELMA.Projects.Managers.ProjectManager.LoadProjectOrProjectTemplate заменён методом EleWise.ELMA.Projects.Managers.ProjectManager.LoadProject.
  7. Метод EleWise.ELMA.Projects.Managers.ProjectManager.ChangeStage(IProject, IProjectLifeCycleStage) заменён методом EleWise.ELMA.Projects.Managers.ProjectManager.ChangeStage(T, IProjectLifeCycleTransition, int)
  8. Интерфейс EleWise.ELMA.Projects.Web.Extensions.IProjectTaskBaseExtension удалён.

Интерфейс EleWise.ELMA.Projects.Models.IProjectPhase

  1. Свойства BudgetIncome и BudgetExpenseудалены.
  2. Добавлено свойство ProjectMetadataHead для связи с типом проекта.
  3. Свойство Project установлено как необязательное.

Интерфейс EleWise.ELMA.Projects.Models.IProjectLifeCycleудалён. Жизненный цикл теперь определяется настройками типа ProjectMetadataHead.

Интерфейс EleWise.ELMA.Projects.Models.IProjectLifeCycleStage

  1. Свойства System, Description, Order, ProjectLifeCycle, ProcessHeader, ContextVar, InstanceName, ContextVarFromStage, ContextVarToStage - удалены.
  2. Вместо ссылки ProjectLifeCycle на удалённый интерфейс IProjectLifeCycle, используется свойство IProjectMetadataHead ProjectMetadataHead (настройки типа проекта).

Интерфейс EleWise.ELMA.Projects.Models.IProjectPlanItem

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

Интерфейс EleWise.ELMA.Projects.Models.IProjectTaskBase

Переименован в EleWise.ELMA.Projects.Models.ITaskBaseExtension. Интерфейс IProjectTaskBase введен как базовый интерфейс для наследования от него остальных типов проектных задач.

Интерфейс EleWise.ELMA.Projects.Models.IProjectTask

Данный интерфейс раснесен на 3 различных интерфейса: EleWise.ELMA.Projects.Models.IProjectTask, EleWise.ELMA.Projects.Models.IMilestone, EleWise.ELMA.Projects.Models.IWorkflowProjectTask.

  1. Свойство TaskType - удалено. Вместо него для создания внутренних задач по проекту использовать поле Internal базового класса IProjectTaskBase
  2. Свойство Milestone - удалено. Введен новый тип сущности для контрольной точки IMilestone.
  3. Свойство MSProjectIDудалено (устаревшее).
  4. Свойство DoNotNotifyAboutOverdueEndWorkOnSubTasks переименовано в DontNotifyOverdueStartWorkOnSubTasks
  5. Свойство DoNotNotifyAboutOverdueStartWorkOnSubTasks переименовано в DontNotifyOverdueStartWorkOnSubTasks
  6. Свойство DoNotNotifyAboutStartWorkOnSubTasks переименовано в DontNotifyStartWorkOnSubTasks
  7. Свойства IndexNumber, AddDocOnEndTask перенесены в базовый класс ProjectTaskBase
  8. СвойствоLinks – удалено (устаревшее, теперь для связи используется аналогичное поле в ProjectPlanItem)

Интерфейс EleWise.ELMA.Projects.Models.IMilestone

Данный интерфейс введен для проектных задач типа Контрольная точка

Интерфейс EleWise.ELMA.Projects.Models.IWorkflowProjectTask

Данный интерфейс введен для проектных задач типа Запуск БП

Интерфейс EleWise.ELMA.Projects.Models.IProjectLinkTask

Удален, вместо него для связей между элментами плана теперь используется интерфейс EleWise.ELMA.Projects.Models.IProjectLinkPlan

Интерфейс EleWise.ELMA.Projects.Models. IProjectLinkPlan

Интерфейс для сущностей-связей между элементами плана.

Изменена структура менеджеров по проектным задачам

Базовый менеджер: ProjectTaskBaseManager. Унаследованные от него менеджеры для каждого типа проектных задач: ProjectTaskManager, MilestoneManager, WorkflowProjectTaskManager

Изменена структура контроллеров задач по проектам

Создан базовый контроллер BaseProjectTaskController. Наследники – контроллеры по каждому типу проектных задач: ProjectTaskController, MilestoneTaskController, WorkflowProjectTaskController

Класс EleWise.ELMA.Projects.ProjectsConstants

В связи с дальнейшей ненужностью удалены константы:

  1. DefaultLifeCycleStageDraftUid, DefaultLifeCycleStageActiveUid, DefaultLifeCycleStageClosedUid.

Другие классы

  1. Класс EleWise.ELMA.Projects.ViewItems.ContractorProjectsGridViewItem помечен как устаревший.
  2. Удалены: EleWise.ELMA.Projects.Web.Components.ontractorProjectsFormViewItemTransformate, EleWise.ELMA.Projects.Web.Components.ContractorProjectsGridViewItemRenderer, EleWise.ELMA.Projects.Web.Integration.Tabs.ContractorProjectsTab, EleWise.ELMA.Projects.Extensions.ContractorProjectsGridViewItemBuilder, EleWise.ELMA.Projects.Extensions.ViewItemBuilderExtension, EleWise.ELMA.Projects.Managers.ProjectLifeCycleManager, EleWise.ELMA.Projects.Enums ProjectTaskType.
  3. Класс EleWise.ELMA.Projects.ProjectPlanModel.ProjectPlanImportExportManager перемещён в пространство имён EleWise.ELMA.Projects.Managers.ProjectPlanImportExportManager.

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

  1. В интерфейсе EleWise.ELMA.ComponentModel.IComponentManager (а также его реализации - EleWise.ELMA.ComponentModel.ComponentManager) убран метод IEnumerable<object> GetExtensionPoints(Type type). Данный метод не использовался и работал неверно.
  2. Изменена сигнатура метода GetInfo в интерфейсе EleWise.ELMA.Workflow.Web.Extensions.IExecutedTaskInfoProvider (точка расширения для отображения информации о статусе выполнения экземпляра):
    вместо
    HtmlString GetInfo(HtmlHelper html, IWorkflowTaskBase task);
    теперь
    HtmlString GetInfo(HtmlHelper html, IWorkflowInstance instance);
  3. В интерфейсе EleWise.ELMA.BPM.Web.Tasks.Extensions.ISolveTaskAction добавлен новый метод: void RenderPopups(HtmlHelper helper).
  4. В DmsObjectFilter добавлено булево свойство ReturnOnlyDocuments для корректной фильтрации по свойству DocumentType (без этого свойства фильтрация по типу документа возвращала все папки + нужный тип документа).
  5. Добавлена обработка фильтрации по TypeUid в объекте Document (раньше возвращало все подряд, теперь возвращает только нужный тип документа).

Интерфейс IEntityManager

В интерфейсе добавлена новая функция:

void CheckFilter(IEntityFilter filter);

Она используется для проверки правильности составления фильтра. Основное назначение – это проверка фильтра EQL из Web-интерфейса. Данная функция должна выполнить все действия как и поиск, кроме последнего шага: отправки запроса в базу данных. В случае ошибки в фильтре должно быть исключение.

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

Изменен элемент поиска документа

  1. При включенном полнотекстовом поиске и незаполненных расширенных настройках поиска контрол поиска документа EleWise.ELMA.BPM.Web/Modules/EleWise.ELMA.Documents.Web/Views/Folder/DocumentSearch.cshtml будет возвращать результат полнотекстового поиска. В ином случае, результат штатного поиска ELMA.
  2. Добавлено минимальное количество символов, возможное для ввода в контрол поиска документов (3 символа).

Изменена главная страница раздела «Отчеты»

  1. Системные и пользовательские отчеты отображаются в отдельных блоках.
  2. Отчеты отсортированы по названию.
  3. Добавлен поиск отчетов по названию. Результат поиска отображается в одном без разделениям по группам.

PublicAPI

Изменена генерация АПИ
Теперь все пользовательские объекты создаваемые в дизайнере (включая типы документов и типы проектов) создаются в АПИ с префиксом User.

Пользовательские типы документов лежат по пути PublicAPI.Docflow.Types.
Пример: PublicAPI.Docflow.Types.UserTestDocumentType.

Пользовательские типы проектов лежат по пути PublicAPI.Projects.Types.
Пример: PublicAPI.Projects.Types.UserTestProjectType.

Пользовательские объекты лежат по пути PublicAPI.Objects.UserObjects.
Пример: PublicAPI.Objects.UserObjects.UserTestObject.

  1. Добавлена функция AddComment в TaskBase;
  2. В каждый объект добавлено свойство TypeUid;
  3. Удален ProjectTemplate;
  4. Добавлены типы проектов. Путь доступа: PublicAPI.Projects.Types;
  5. В проекты добавлено два новых нода: ProjectTaskBase, ProjectLifeCycleStage. ProjectLifeCycleStage – это полная аналогия нода Stage, добавлен лишь для того, чтобы корректно строился путь доступа. ProjectTaskBase – новый нод, содержащий в себе новые проектные задачи.
  6. Добавлены пермишены в АПИ. Пути доступа: PublicAPI.Docflow.Permissions; PublicAPI.Portal.CalendarEvent.Permissions; PublicAPI.Portal.Security.Permissions; PublicAPI.Processes.Permissions; PublicAPI.Projects.Permissions;
  7. Для объектов, участвующих в поиске, добавлены фильтр-билдеры.
    Примеры:
    var documentList = PublicAPI.Docflow.Document.Filter().CreationAuthor(currentUser).IsArchived(false).DocumentType(PublicAPI.Docflow.Types.File.TypeUid).Find(); 

    Функция Filter() создает фильтр-билдер для объекта «Документ». Функция CreationAuthor() устанавливает значение фильтрации для поля «Автор создания», функция IsArchived() - для поля «Архивировано или нет», DocumentType() – для поля «Тип документа». С помощью данного кода мы получим все документы типа «Файл», созданные текущим пользователем и которые не находятся в архиве.
    var docFilter = PublicAPI.Docflow.Document.Filter().CreationAuthor(currentUser).IsArchived(false).DocumentType(PublicAPI.Docflow.Types.File.TypeUid).Filter; 

    С помощью такой записи мы получим готовый фильтр для объекта «Документ» с заполненными полями для фильтрации «Автор создания», «Тип документа» и «Архивировано или нет».

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

  1. Картинка с карандашиком больше не висит поверх всех окон.
  2. Описание функций в АПИ теперь отображает информацию, содержащуюся в тегах summary, param, returns.

Конструктор сценариев 3.6

  1. Разделены понятия Конструктор сценариев и Редактор сценариев.
  2. Изменена вкладка «Сценарии» в процессе.
  3. Добавлен Конструктор сценариев.
  4. В графической модели добавлена возможность создания сценария с помощью Конструктора сценариев.
  5. Изменен диалог создания нового сценария. Удалено поле «Тест сценария».
  6. Редактор сценариев открывается в отдельной вкладке.
  7. Добавлена вложенная кнопка для создания сценария в Редакторе сценариев.