2016-03-01 2 views
1

Мы используем функции в одном .p-файл, как следующее:транзакций и функции

myTest.p

BLOCK-LEVEL ON ERROR UNDO, THROW. 

FUNCTION secondFunc RETURNS LOG(): 
    UNDO, THROW NEW Progress.Lang.AppError("ERROR HAPPENED, UNDO ALL!"). 
END FUNCTION. 

FUNCTION firstFunc RETURNS LOG(): 
    secondFunc(). 
END FUNCTION. 

FUNCTION starter RETURNS LOG(): 

    /* start transaction */ 
    DO TRANSACTION: 
     firstFunc(). 
    END. 
END FUNCTION. 

/* start execution of the function tree */ 
starter(). 

CATCH err AS Progress.Lang.Error: 
    RUN WRITE_log(err:GetMessage(1)). 
    MESSAGE err:GetMessage(1) VIEW-AS ALERT-BOX. 
    UNDO, RETURN ERROR. 
END. 

В соответствии с этим кодом, делает Transaction отменить все изменилось сделано внутри его в starter() -функция? Или нам нужно передать какую-то ручку ко всем функциям внутри Transaction, чтобы ее можно было «отменить»?

ответ

3

Если «внешняя» транзакция откатывается назад, все вспомогательные транзакции, в том числе и в вызываемом коде, также будут откат.

 Смежные вопросы

  • Нет связанных вопросов^_^