Показать сообщение отдельно
Старый 22.03.2012, 17:55   #20  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Может подойти класс 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');
}
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.

Последний раз редактировалось Pustik; 22.03.2012 в 18:01.
За это сообщение автора поблагодарили: Андрей К. (1).