Scripting 中異常狀況處理的準則
您可以使用 catchError()
Script 運算來捕捉 Scripting 程式碼中的異常狀況,並根據異常狀況採取必要的動作。 您可以選擇以程式化方式處理異常狀況,或將異常狀況重新擲出至呼叫程式碼。
建議您以下列方式處理異常狀況:
- 如果異常狀況訊息字串指出由 Script 實作以程式化方式處理的商業錯誤失敗,則您可以選擇處理它。
- 如果從啟動 IBM® Product Master 作業收到異常狀況,且您判定異常狀況的主要原因是 SQLException ,則必須確定已回復作用中交易。
- 如果 Scripting 程式碼導致異常狀況包含在
useTransaction()
區塊內,則必須在useTransaction()
的右大括弧之外擲出異常狀況,以確保回復現行交易。catchError(e, eObj) { useTransaction() { //your code } } if (e != null) { //it is safe to handle the exception, since the transaction has been rolled-back }
- 如果 Scripting 程式碼導致異常狀況包含在
startTransaction()
區塊內,則當startTransaction()
啟動時,如果作用中交易已存在,則必須將異常狀況重新擲出至呼叫端程式碼。var existingTxn = inTransaction(); catchError(e, eObj) { startTransaction() { //your code } } if (e!= null) { if ((existingTxn == true) && isSQLException(eObj)) { throwSQLException() } // otherwise it is safe to handle the exception since the transaction owned by us has been rolled-back }
- 如果 Scripting 程式碼導致異常狀況未包含在交易區塊內,則如果在啟動程式碼時存在作用中交易,則必須從呼叫程式碼重新擲出異常狀況。
var existingTxn = inTransaction(); catchError(e, eObj) { //your code } if (e != null) { if ((existingTxn == true) && isSQLException(eObj)) { throwSQLException() } }
- 因為 throwError Script 運算不會保留主要原因異常狀況,所以您可以在字串前面加上字首,以向呼叫程式碼指出它是「SQL 錯誤」。
function throwSQLException(e) { throwError("SQL ERROR OCCURRED: " + e); }
isSQLException(eObj) 方法可以透過建立 Java™ 程式碼來實作,該程式碼會對異常狀況物件執行instanceOf
,以偵測它是否為 SQLException。 或者,下列程式碼可用來從主要原因異常狀況物件傳回錯誤訊息。
可以檢查錯誤訊息是否有識別子字串 (例如 "SQL Error") ,以判斷原因異常狀況是否為 SQLException。var method = createJavaMethod("java.lang.Throwable", "getMessage"); errorMessage = runJavaMethod(eObj, method);
- 如果 Scripting 程式碼導致異常狀況包含在