...

Завершение родительского процесса и его подпроцессов при ошибке в одном из подпроцессов

Тема в разделе "Вопросы по платформе", создана пользователем SashKovrik, 11 ноя 2024.

Метки:
  1. SashKovrik

    SashKovrik Новичок

    Добрый день, пишу тестовый бизнес процесс, проверяющий, как из одного подпроцесса можно прервать родительский процесс и все его подпроцессы.
    Имеются три процесса - Главный процесс, Подпроцесс 1, Подпроцесс 2.
    Главный процесс:
    upload_2024-11-11_11-8-38.png
    Подпроцесс 2:
    upload_2024-11-11_11-9-22.png
    Подпроцесс 1:
    upload_2024-11-11_10-52-44.png
    При запуске Главного процесса параллельно запускаются Подпроцесс 1, Подпроцесс 2, а также задача, назначенная на инициатора. Подпроцесс 1 при запуске назначает инициатору задачу, при выходе из которой запускается сценарий, осуществляющий поиск текущего процесса (Подпроцесс 1), родительского (Главный процесс) и всех его подпроцессов (Подпроцесс 2), после чего прерывает работу всех трёх.
    Сценарий прерывания:
    upload_2024-11-11_10-54-4.png
    Поиск поиск текущего процесса ( .where(x => x.__id.eq(Context.data.__id) ) проходит успешно.
    Получение родительского процесса (await current_process!.getParent()) также проходит успешно
    Поиск Подпроцесса 2 через id родителя не работает ( .where(x => x.__parentId.eq(parent!.data.__id)) ). Также выяснилось, что у текущего процесса (Подпроцесс 1) значение __parentId равно NaN, что не соответствует документации (https://tssdk.elma365.com/ru/2024.9/interfaces/_01_items_.processinstancedata.html#__parentid)
    Также в документации указано, что экземпляр процесса должен иметь поле __item, в котором хранится ссылка на приложение, от которого был запущен процесс (https://tssdk.elma365.com/ru/2024.9/interfaces/_01_items_.processinstancedata.html#__parentid), что также могло бы помочь найти этот процесс в реестре. Но такого поля нет.
    upload_2024-11-11_11-1-20.png
    Подскажите, как в таком случае можно решить мою задачу?
    Второй вопроc: Из документации не совсем ясно, как пользоваться методом interrupt (https://tssdk.elma365.com/ru/2024.9/interfaces/_01_items_.processinstanceitem.html#interrupt). "Если экземпляр процесса завершен или в текущий момент исполняет активный блок, то метод прерывается исключением." В таком случае, что конкретно происходит с процессом после исключения и как мне гарантировано прервать процесс (по аналогии с кнопкой "прервать" в мониторе процессов)

    Вложения:

  2. QuadroZero9

    QuadroZero9 Участник

    Не специалист, но насколько я понял из изученных статей на которые вы ссылаетесь, то в данной статье говорится, что свойство __item это "ссылка на связанный элемент приложения", а не на само приложение. Рискну предположить, что из-за того что нет создаваемого элемента, он не выводит это свойство.