Создание портлета для компонента при помощи Дизайнера
В статье приведен пример создания портлета для компонента Пакет процессов "Управление договорами". В данном компоненте реализованы два процесса: бизнес-процесс "Сформировать договорной документ по шаблону" и бизнес-процесс "Согласование договорного документа", экземпляры которых будут записываться в блок портлета.
Блок имеет следующие колонки:
- Название экземпляра (тип Экземпляр процесса).
- Инициатор (тип Пользователь).
- Дата старта (тип Дата/Время).
В портлете реализованы настройки: можно выбрать, по каким процессам отображать информацию.
Портлеты можно создавать в Дизайнере ELMA в разделе Интерфейс. Для создания портлета достаточно нажать правой кнопкой мыши на папке Портлеты и добавить новый портлет или при помощи кнопки Добавить в тулбаре, затем добавить необходимые контекстные переменные, настройки, сформировать Ваше отображение портлета при помощи конструктора форм и реализовать логику портлета в контроллере.
Рис. 1. Создание собственного портлета в Дизайнере
Пример отображения данных
Рис. 2. Портлет с блоком по отображению информации о запущенных экземплярах процессов
Рис. 3. Настройки портлета с выбранными процессами
Пример реализации портлета
В разделе Интерфейс был добавлен новый портлет "Статусы по процессам согласования договоров", в контекст которого был добавлен блок с полями:
- Название экземпляра.
- Инициатор.
- Дата старта.
Рис. 4. Контекст портлета «Статусы по процессам согласования договоров»
После добавления контекста формируем представление портлета на вкладке Представление. Создание представления для портлета реализовано при помощи конструктора форм, что позволяет быстро и просто создать собственную форму портлета.
Рис. 5. Представление портлета «Статусы по процессам согласования договоров»
Также во вкладке Настройки портлета добавлена переменная типа Заголовок процесса с типом связи Список.
Рис. 6. Настройки портлета «Статусы по процессам согласования договоров»
Код контроллера:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using EleWise.ELMA.Workflow.Models; using EleWise.ELMA.Model.Managers; using EleWise.ELMA.UI.Controllers; using EleWise.ELMA.UI.Models; using EleWise.ELMA.UI.Results; using EleWise.ELMA.API; namespace EleWise.ELMA.UI.Portlets { /// <summary> /// Контроллер портлета "Статусы по процессам" /// </summary> public partial class StatusyPoProcessamController : PortletController<StatusyPoProcessam.Content, StatusyPoProcessam.Personalization, StatusyPoProcessam.Settings> { /// <summary> /// Загрузка содержимого портлета /// </summary> /// <param name="portlet">Модель портлета</param> public override void Content_Load(PortletContentLoadViewModel<StatusyPoProcessam.Content, StatusyPoProcessam.Personalization> portlet) { List<WorkflowInstanceStatus> wkflinststatuses = new List<WorkflowInstanceStatus>(); wkflinststatuses.Add(PublicAPI.Enums.Workflow.WorkflowInstanceStatus.Running); //Статус запущен var currUser = PublicAPI.Portal.Security.User.GetCurrentUser(); foreach (var process in portlet.Settings.ProcessHeader) { var fl = PublicAPI.Processes.WorkflowInstance.Filter().ProcessHeader(process).Statuses(wkflinststatuses).Find(); // Выбранный в настройках процесс со статусом "Запущен" foreach (var tmpProcess in fl) { if (tmpProcess.Members.Any(m => m.User == currUser) || tmpProcess.Responsible == currUser) //Только участники процесса или ответственный { var block = EntityManager<StatusyPoProcessam.Content_ContractDocumentApproval>.Create(); block.WorkflowInstance = tmpProcess; block.Initiator = tmpProcess.Initiator; block.StartDate = tmpProcess.StartDate; portlet.Context.ContractDocumentApproval.Add(block); } } } } } }
Пример портлета см. во вложении.