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。 或者,下列程式碼可用來從主要原因異常狀況物件傳回錯誤訊息。
      var method = createJavaMethod("java.lang.Throwable", "getMessage");
      errorMessage = runJavaMethod(eObj, method);
      
      可以檢查錯誤訊息是否有識別子字串 (例如 "SQL Error") ,以判斷原因異常狀況是否為 SQLException。