...

Получить отклик из бизнес-процеса о состоянии задачи в реальном времени

Тема в разделе "Вопросы по платформе", создана пользователем dekarh3, 4 дек 2023.

  1. dekarh3

    dekarh3 Участник

    Добрый день.
    Задача тривиальная, но решения ни в low-code ни с помощью скриптов пока не нашел:
    Нужно отследить принятие в работу задачи, поставленной на нескольких человек с правилом приема: Кто первый. Если задача не принята в заданный промежуток времени то послать сообщение руководителю.
    Находил в коммюнити похожую тему про согласование, но согласование процесс без заполнения, то есть состояния принята(в работе) у него нет и задача упрощается до отслеживания завершился процесс согласования или нет.
    В моей постановке задачи нужно отследить состояние задачи. Пробовал из формы задачи изменять контекстные переменные процесса. Они изменяются внутри формы, но обновляются только ПОСЛЕ завершения задачи, то есть так задачу не решить.
    Пробовал делать задачу на постановку задачи с таймером и три задачи по истечению: upload_2023-12-4_17-38-23.png
    Но при истечении времени, если ранее была открыта форма задачи, то всё что будет, записано не отразится в задаче "Дозаполнить чек-лист", так как она поставлена раньше и поля уже поставленной задачи не обновляются. Подскажите в какую сторону копать, пожалуйста
  2. zhigalova

    zhigalova Участник

    Добрый день! Найти текущую активную задачу текущего процесса можно скриптом:
    async function nextTask(): Promise<void> {
    Context.data.result = "";
    // получение инстанса текущего процесса
    const instances = await Global.processes._searchInstances().where((f, g) => g.and(f.__id.eq(Context.id))).first();
    // получение всех активных задач (в статусе inProgress) раздела contracts приложения registraciya_docs
    const taskUUIDs = await Global.ns.contracts.app.registraciya_docs.processes._searchTasks()
    .size(10000)
    .where((f,g) => g.and(f.state.like(ProcessTaskState.inProgress)))
    .all();
    // поиск среди всех активных задач той задачи, которая принадлежит текущему процессу
    for (let key of taskUUIDs){
    const k = await key.fetch()
    if (k.data.instance!.__id == instances!.data.__id){
    let task_curr = k;
    if (task_curr){
    try {
    let task = await System.processes._searchTasks().where(x => x.__id.eq(task_curr.data.__id)).first();
    Context.data.result = Context.data.result + task!.data.__id+ "\n"
    } catch (e) {
    Context.data.result = Context.data.result + e +"error\n";
    }
    }
    }
    }
    }
    где Context.data.result - переменная типа Строка, в которую выведется id текущей задачи процесса; вспомогательная переменная
    Так можно отследить задачи, находящиеся в других статусах: https://tssdk.elma365.com/ru/latest...ходится-на-распределении-мехнизм-«кто-первый»