Для бота в параметрах бота под строкой "Последовательное выполнение" добавляем строку "Транзакционный", в которой есть галочка и количество минут таймаута. По дефолту галочка не стоит. Если поставить в "Транзакционный" галочку, то строка "Последовательное выполнение" становится не активной и в ней ставится галочка.
Для внутреннего подпроцесса надо добавить признак "Транзакция" (по умолчанию - False).
Если признак - False, то остается текущее поведение.
Если признак - True, то:
Функциональность предполагается применять, например, для бота работы с внешним хранилищем, если надо прочитать записи из таблицы, найти максимальный номер записи, прибавить к нему единицу и с этим номером добавить в таблицу новую запись.
Одна из возможных реализаций:
Транзакционный бот где-то у себя хранит информацию, связан ли он сейчас с конкретной композицией конкретного экземпляра БП.
Если не связан, - то работает как обычный бот.
Если связан, то:
Получив любую задачу, проверяет, остались ли в композиции, с которой он связан, точки управления. Если нет, то "отвязывает" от себя композицию и выполняет задачу.
Если да, то проверяет, что задача пришла от композиции, с которой он связан. Если да, то выполняет задачу. Если нет, то игнорирует задачу, переходит к следующей.
Diff:
Diff:
Diff: