...

Получение задач процесса

Тема в разделе "Примеры сценариев", создана пользователем armaginov, 18 апр 2022.

  1. armaginov

    armaginov Новичок

    Цель:

    Получить ссылки на все задачи по процесса по идентификатору процесса

    Как можно получить задачи?

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

    Пример:

    Поиск будем осуществлять на странице. Для этого:

    1 Создадим интерфейс в нужном разделе(приложении) или форму.
    2 Добавим необходимые контекстные переменные:
    [​IMG]

    В переменной «Задачи процесса» будет одно строковое поле task_link. В него будем записывать сформированную ссылку.

    3 Вынесем на форму поле для ввода идентификатора процесса, добавим кнопку и таблицу со списком задач:
    [​IMG]

    Таблица представлена виджет-кодом следующим образом:

    HTML:
    <style type="text/css">
       table {
          border: 1px solid #D9D9D9;
          padding-left: 3px;
          padding-right: 3px;
       }
       tr th {
          background-color: #f8f8f8;
       }
    </style>
    <table border="1" cellpadding="0" cellspacing="0">
       <tr align="center">
        <th >Наименование задачи</th>
       </tr>
          <% for (const item of Context.data.process_task) { %>
            <tr><td>
                <%= item.task_link %>
            </td></tr>
          <% } %>
    </table>

    4 Кнопку привязываем к методу, который выполняет запрос, формирует и записывает ссылки на задачи в таблицу:

    Код:
    
    async function findAllTaskByProcess(): Promise<void> {
        
    //создать таблицу
        
    let table Context.fields.process_task.create();
        
    //получаем экземпляр процесса по идентификатору
        
    const resp await fetch(encodeURI("https://x5lktdqsv6jmk.elma365.ru/pub/v1/bpm/instance/"Context.data.process_id! +"/get"), {
            
    method'post',
            
    headers: {
                
    'X-TOKEN''5d98a66d-3a0d-410a-84d'
                
    }
            });
               
            if(!
    resp.ok) {
                throw new 
    Error(resp.statusText);
            }
            else {
                const 
    temp = (await resp.json())!;
                if(
    temp["data"] && temp["data"]["__tasks"]) { //в объекте __tasks хранятся все объекты задач экземпляра процесса
                    
    let tasks temp["data"]["__tasks"];
                    for (var 
    task in tasks) { //для каждой задачи получаем необходимые id задачи и его наименование и формируем ссылку
                        
    let row table.insert();
                        
    row.task_link "<a href='(p:task/"+tasks[task]["__id"]+")'>" tasks[task]["__name"] + "</a>";
                    }
                }
            }
        
    Context.data.process_task table;
    }
    Где:
    "https://x5lktdqsv6jmk.elma365.ru" - url компании;
    "5d98a66d-3a0d-410a-84d" - токен.​

    Результат:
    [​IMG]
  2. neo18

    neo18 Участник

    А можно ли в отчете, через Global по id процесса найти задачи?
    Или обязательно API использовать?