2016-03-01 103 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撤消所有改變DONE裏面它在starter()-功能?或者我們是否需要將某種句柄傳遞給Transaction中的所有函數,以便它可以「撤消」?

回答

3

如果「外部」事務回滾,則所有子事務(包括被調用代碼中的事務)也將回滾。