使用錯誤界限事件來捕捉錯誤

附加至活動界限的錯誤中間事件稱為錯誤界限事件。 當您將錯誤界限附加至服務流程或繼承人工服務中的活動時,事件會從附加它的活動中捕捉錯誤並接收錯誤資料。 當活動在執行中,並岔斷在該步驟執行服務時,會觸發錯誤界限事件。

關於此作業

例如,在服務流程中,您附加錯誤事件的活動可以是服務作業或鏈結的服務流程。

提示: 若要針對不同的錯誤具有不同的錯誤處理邏輯,您可以在一個活動上定義多個錯誤界限事件。 對於每一個錯誤界限事件,請使用不同的錯誤碼或錯誤資料來區分不同類型的錯誤。 然後,將每一個連接至套用的錯誤處理邏輯。

程序

若要將錯誤界限事件新增至活動,請完成下列步驟:

  1. 開啟設計程式。
  2. 從檔案庫中,建立或開啟您要使用的服務。 若要建立服務,請參閱 建立服務流程
  3. 圖表 視圖中,將錯誤事件 錯誤事件 拖曳至活動節點。
    錯誤事件會將本身附加至活動的界限。
  4. 選取錯誤界限事件,並在 實作 標籤的 錯誤內容下,選取 捕捉所有錯誤捕捉特定錯誤 ,以指定您要錯誤事件捕捉的錯誤類型。
  5. 如果您選取 捕捉特定錯誤,請按一下 錯誤碼錯誤對映 旁邊的挑選器,以根據錯誤碼來過濾可捕捉的特定錯誤,並將錯誤資料對映至區域變數。
    如果您有一項服務作業使用外部服務來呼叫 Web 服務,外部服務可能會根據 WSDL 定義而有錯誤。 您可以選擇捕捉及處理與這些特定錯誤相關的錯誤。
    附註: 錯誤資料無法對映至清單類型的變數。 如果您想要傳遞具有序列結構的資訊作為錯誤資料,請建立包含清單類型參數的商業物件,然後使用此商業物件作為變數的類型。
  6. 將錯誤界限事件連接至發生錯誤時要執行的邏輯。
    例如,如果您的服務流程呼叫 REST 服務,請將捕捉所有錯誤事件佈線至 Script 作業,以處理 REST 服務傳回的 HTTP 錯誤。 REST 服務傳回的錯誤資訊會在 RESTResponseException 節點的 tw.system.error 變數中傳回:
    <error type="com.ibm.bpm.externalservice.rest.api.UnexpectedRESTResponseException" 
           description="UnexpectedRESTResponseException">
        <HTTPHeaderNames type="java.util.Collection" description="HTTPHeaderNames"></HTTPHeaderNames>
        <HTTPStatus type="java.lang.Integer" description="Integer">500</HTTPStatus>
        <RESTResponseException type="com.ibm.bpm.externalservice.rest.api.RestResponseData" description="RestResponseData">
            <HTTPStatusCode type="java.lang.Integer" description="Integer">409</HTTPStatusCode>
            <HTTPStatusMessage type="java.lang.String" description="String">Conflict</HTTPStatusMessage>
            <content type="java.lang.String" description="String">{
                "code" : 409,
                "error" : "Classifier not ready",
                "description" : "The classifier is not ready. The status of the classifier is 'Training'."
                }
            </content>
        </RESTResponseException>
        <cause type="java.lang.Throwable" description="cause"></cause>
        <localizedMessage type="java.lang.String" 
                          description="String">CWXSD1028E: The operation classify_get with HTTP method GET returned an unexpected response status code 409 with response message Conflict
        </localizedMessage>
        <message type="java.lang.String" 
                 description="String">CWXSD1028E: The operation classify_get with HTTP method GET returned an unexpected response status code 409 with response message Conflict
        </message>
        <messageKey type="java.lang.String" description="String">Api.UnexpectedResponseStatus</messageKey>
        ...
    </error>
    您的 JavaScript 可以存取 tw.system.error 變數中 RESTResponseException 節點的 HTTPStatusCodeHTTPStatusMessagecontent 元素。 例如,若要測試 REST 服務是否傳回 HTTP 狀態碼 404 ,請在 Script 作業實作中使用下列陳述式:
    if (tw.system.error.RESTResponseException[0].HTTPStatusCode[0].getText()=='404') { ... }
  7. 按一下 儲存完成編輯