GGLP

Настраиваем Terrasoft Creatio

Остановка ранее запущенных экземпляров процесса

Зачастую процессы, запускаемые по таймеру, обрабатывает множество записей и в некоторых случаях их количество настолько велико, что процесс не успевает завершиться до запуска следующего экземпляра. Это чревато нестабильным поведением системы, т.к. фильтры на процессах одинаковые, может запуститься обработка одной и той же записи, могут сбиться счётчики и возникнуть прочие проблемы.

Чтобы этого избежать необходимо сделать так, чтобы одновременно в системе работал только один экземпляр интересующего нас процесса.

Задача

Принудительно завершить ранее запущенные экземпляры процесса при запуске текущего процесса

Решение

  1. Ожидание требования остановки
    1. Одновременно с запуском процесса запускаем ветку ожидания сигнала прерывания. Называть сигнал лучше по названию процесса. Например, процесс называется ProcessImportOrdersUpdateOpen, тогда сигнал назвать StopProcessImportOrdersUpdateOpen
    2. Ставим таймер задержки прерывания, чтобы процесс не остановил сам себя;
  2. Генерация требования остановки
    1. Добавляем генерацию сигнала по всей системе на остановку прочих экземпляров

Описание

Процесс идёт по всем безусловным веткам управления одновременно. А дальше останавливается на элементе, который необходимо выполнить. Если это системное действие, оно будет выполнено автоматически, если пользовательское, процесс на нём остановится в ожидании реакции пользователя. На ожидании промежуточного сигнала процесс тоже остановится. Как только в системе будет сгенерирован нужный промежуточный сигнал, продолжит выполняться параллельная ветка процесса и процесс перейдёт к сигналу завершения. В результате процесс будет завершён вне зависимости от статуса выполнения прочих шагов (они будут отменены).

Обсудить в Telegram