Может подойти класс Tread. Поскольку Вам все равно нужно чистить таблицу вне зависимости выполнилась ли бизнесс-логика или нет, то конструкцию можно организовать на примере следующего джоба :
X++:
static void Job620(Args _args)
{
Thread bpt; // поток для бизнесс-процесса
Thread clt; // поток для удаления таблицы
bpt = new Thread();
clt = new Thread();
bpt.setInputParm(connull()); // передача параметров потоку для бизнесс-процесса
// запуск
bpt.run( classnum( TestClassThread),staticmethodstr(TestClassThread,BuisnessProcess));
bpt.waitUntilSignaled(); // ожидание завершения БП
clt.setInputParm(connull()); /
clt.run( classnum( TestClassThread ), staticmethodstr(TestClassThread,ClearTable)); // чистка
clt.waitUntilSignaled(); // ожидание завершения чистки
}
Потоки запускаются в разных сессиях, поэтому друг другу не мешают. Т.е. один поток не будет зависить от ошибки другого ( даже того же throw error()) А
X++:
bpt.waitUntilSignaled();
не даст очистить таблицу раньше времени. Для тестирования можете создать класс TestClassThread как указан в джобе и написать там 2 статических метода :
X++:
server static void BuisnessProcess(Thread t)
{
container con = t.getInputParm();
;
// выполнение бизнесс процесса
// выполнение бизнесс процесса
throw error('Ошибка');
}
X++:
server static void ClearTable(Thread t)
{
container con = t.getInputParm();
;
// очистка таблицы
// очистка таблицы
info('ClearTable');
}