...

Как получить значение контекстной переменной БП зная задачу созданную в рамках БП в портлете "Код"?

Тема в разделе "Вопросы по функционалу", создана пользователем romvbem, 17 окт 2017.

  1. romvbem

    romvbem Member

    Цель: Сделать интерфейс более удобным для отдельных групп сотрудников. Для этого я хочу создать страницу с типом "Код", вывести в ней список задач на сотруднике созданных в рамках определенного БП в отдельную табличку и напротив темы задачи в соседних столбцах таблицы вывести значения контекстных переменных процесса в рамках которого эта задача была создана.

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

    Не знаю как:
    - отобразить список задач созданных только определенным БП
    - вывести значения контекстных переменных этого БП в отдельные колонки напротив задачи

    Вот часть кода:
    @{
    var TaskRef = "http://192.168.1.13:8000/Workflow/WorkflowTask/Execute/";
    var CurUser = (User)AuthenticationService.GetCurrentUser<EleWise.ELMA.Security.Models.IUser>();
    var WorkflowtaskFilter = InterfaceActivator.Create<WorkflowTaskFilter>();
    WorkflowtaskFilter.Executor = CurUser;
    WorkflowtaskFilter.Query = "EndWorkDate IS NULL";
    var MyTask = WorkflowTaskManager.Instance.Find(WorkflowtaskFilter, null);

    foreach(var item in MyTask)
    {
    <tr class="rom">
    <td class="rom" width="80">@item.Id</td>
    <td class="rom" width="80">@item.CreationDate</td>
    <td class="rom" width="600"><a href=@TaskRef@item.Id> @item.Subject </a></td>
    <td class="rom" width="80">@item.Executor</td>
    <td class="rom" width="80">@item.EndWorkDate</td>
    <td class="rom" width="80">@item.EndWorkDate</td>
    </tr>
    }
    }


    В файлике portletworkflowtasks.txt весь код который я вставляю в портлет
     

    Вложения:

  2. pushkarev

    pushkarev Active Member

    Процессная задача напрямую не связана с контекстом процесса, но способ получить данные из контекста есть.
    Добраться до контекста из объекта задачи можно через примерно такую конструкцию:
    Код:
    task.WorkflowBookmark.Instance.Context
    
    Единственное, что скорее всего контекст не будет видеть переменные вашего процесса, т.к. контекст в данном случае будет базового типа. Поэтому я бы предложил через EntityManager <P_Название_процесса> сделать выборку с помощью EQL фильтра, примерно так должен выглядеть запрос:
    Код:
    string.Format("Instance = {0}", Task.WorkflowBookmark.Instance.Id.ToString())
    Пишу по памяти, так что могут быть ошибки.
    В результате получите запись с данными нужного контекста процесса, которую можно вывести в ваш портлет.
    Запрос к контексту нужно будет в этом случае делать для каждой задачи, либо в EQL запросе перечислить все идентификаторы процессов для всех задач и уже потом разбираться какая запись к какой задаче относится. Второй вариант писать чуть сложнее, но он будет быстрее работать. Есть еще более оптимальный и быстрый способ получить данные, но это уже через SQL запрос с джойнами нужных таблиц.
     
    1 это нравится

Поделиться: