動詞處理

連接器的角色是橋接工作流程中的資料結構與商業物件。MQ Workflow 要負責依據商業物件中設定的動詞來採取動作-連接器僅能保證工作流程順利收到內容。因此,連接器無法影響 MQ Workflow 產品中的商業物件。實際上,就 MQ Workflow 的本質而言,商業物件的持續性資料結構可能不存在,因為它可能僅用作後續工作流程的觸發程式。

「商業物件處理常式 (BOHandler)」會忽略動詞,而以同一方式處理所有商業物件。使用 DOM 剖析器,連接器可建構 WfMessage

連接器會檢查最上層商業物件的應用程式特有文字,以確定是否定義 cw_mo_wfptcfg=XXX 格式的名稱值組。會剖析 XXX 識別的子項 Meta 物件,並解譯值。

執行的範本由 Meta 物件屬性 ProcessTemplateName 識別。這些範本提供指定 MQ Workflow 的全部指令及包含結果所需要的結構。]如果指定屬性 ProcessInstanceName,則連接器會執行現有的實例;否則,它會建立範本的新實例。範本將使用授與子項 Meta 物件屬性 UserId 識別之使用者的權限來執行。如果未指定屬性,則會使用連接器配置內容 ApplicationUserID 的值來替代。如需範本的詳細資訊,請參閱修改 WebSphere MQ Workflow 應用程式最上層商業物件及內容配置

連接器支援控制現有工作流程之要求的下列商業物件動詞:

收到 MQ Workflow 的訊息時,連接器會從 WfMessageProgramParameters 的值識別商業物件的動詞。ProgramParameters 的文字必須包含一個 name=value 組,指定包含在訊息中的商業物件動詞。例如,若要指定 Delete 動詞,元素文字包含的 name=value 組為 verb=Delete

然而在反方向的部份,連接器並不指示 MQ Workflow 要使用哪個動詞來處理要求。當向 MQ Workflow 發出商業物件時, 連接器會忽略商業物件的動詞。相反地,連接器會將商業物件轉換成 XML,並將內容納入 MQ Workflow 的 WfMessage 中。向其發出商業物件的工作流程會判斷應採取的動作 (而不是由協同作業為商業物件指定的動詞)。

XML API 動詞處理

註:
對於 MQ Workflow 3.3.2 版及更高版本,建議您使用 XML API 進行動詞處理。

使用 MQ Workflow 連接器 XML API,協同作業可以監視及控制工作流程程序的狀態。在順利控制工作流程作業時, 連接器會將程序的詳細資料移入程序實例物件 (MO_MQWorkflow_ProcessInstance)。連接器會將其 app-text 等同於 ProcessInstance 的任何物件,視為 MO_MQWorkflow_ProcessInstance 的實例。

連接器會將商業物件轉換成 XML,並將內容納入 MQ Workflow 的 WfMessage。為商業物件指定的動詞決定了要對程序實例所執行的動作。

使用 XML API 時,連接器支援 MO_MQWorkflow_ProcessInstance 的下列動詞:

Delete

連接器會從 MQ Workflow 刪除指定的程序實例。程序實例必須處於下列其中一種狀態:「已備妥」、「已完成」或「已終止」。如果程序不存在或無法刪除,則連接器會傳回 BON_FAIL。否則,連接器會傳回輸入新狀態的 MO_MQWorkflow_ProcessInstance 物件。

Suspend

連接器會發出暫停工作流程程序的要求,如果程序不存在或無法暫停,則會傳回 BON_FAIL。程序實例必須處於「執行中」狀態。如果 deep 選項為 true,則也會暫停所有非自主子程序。如果程序不存在或無法暫停,則連接器會傳回 BON_FAIL。否則,連接器會傳回輸入新狀態的 MO_MQWorkflow_ProcessInstance 物件。

Terminate

連接器會終止程序實例及其所有非自主子程序。所有在執行中、已移出及已暫停的活動都會終止。程序必須處於下列其中一種狀態:「執行中」、「已暫停」或「暫停中」。如果程序不存在或無法終止,則連接器會傳回 BON_FAIL。否則,連接器會傳回輸入新狀態的 MO_MQWorkflow_ProcessInstance 物件。

Restart

連接器會發出重新啟動工作流程程序實例的要求。僅可以重新啟動已完成或已終止的最上層程序實例。如果程序不存在或無法重新啟動,則連接器會傳回 BON_FAIL。否則,連接器會傳回輸入新狀態的 MO_MQWorkflow_ProcessInstance 物件。

Resume

連接器會發出回復處理已暫停或暫停中之程序實例的要求。如果 deep 選項為 true,則也會回復所有非自主子程序。如果程序不存在或無法回復,則連接器會傳回 BON_FAIL。否則,連接器會傳回輸入新狀態的 MO_MQWorkflow_ProcessInstance 物件。

非同步要求

如果配置 Meta 物件的屬性 ResponseTimeout 小於零,則連接器會向 MQ Workflow 伺服器發出要求,而無需等待回應。如果執行程序時發生錯誤,則無法通知協同作業。圖 4 顯示範例非同步要求。

圖 4. MQ Workflow 的範例非同步連接器要求


  1. 連接器收到 『ResponseTimeout』 屬性為負的 WfRequest_MyCustomer 最上層商業物件。
  2. 連接器會發出要求給 MQ Workflow 伺服器,要求中會包含物件 『MyCustomer』,作為要傳遞至程序的資料結構。
  3. 連接器順利傳回,而無需等待回應。僅當連接器無法將訊息置於 MQ Workflow 伺服器的 XML 輸入佇列時,才會發生錯誤。

程序實例 ID 的非同步要求

如果子項 Meta 物件中提供非負的 ResponseTimeout 且屬性 ExecutionModeAsynchronous,則連接器會發出要求,並將程序實例 ID 傳回協同作業。順利接收程序實例 ID 並不表示順利完成對應的工作流程程序。協同作業必須在程序實例 ID 上執行 『Retrieve』,才能判斷狀態。這對長期交易有用處。圖 5 說明此程序。

圖 5. 程序實例 ID 的範例非同步連接器要求


  1. 連接器收到 WfRequest_MyCustomer 最上層商業物件,其為屬性 ResponseTimeout 指定非負值,且為屬性 ExecutionMode 指定了值 Asynchronous
  2. 連接器會發出要求訊息給 MQ Workflow 伺服器,要求訊息中會包含物件 MyCustomer,作為程序範本 CustomerCreditCheck 的輸入資料結構。連接器等待回覆 (最多 5000 毫秒)。
  3. 會設定新 MQ Workflow 程序實例 CustomerCreditCheck 的實例化。在工作流程程序完成之前,會將回應訊息傳回連接器。訊息僅包含程序實例 ID。
  4. 連接器將程序實例資訊移入物件 MyProcessInstance。如果 MQ Workflow 傳回錯誤訊息,則連接器會傳回 BON_FAIL 並傳送工作流程訊息中提供的錯誤訊息。

同步要求

當子項 Meta 物件中提供非負的 ResponseTimeout 屬性且屬性 ExecutionModeSynchronous 時,連接器會發出同步要求。工作流程程序已完成之後,要求才會順利傳回。同步要求處理能夠保證通知協同作業由其起始之 MQ Workflow 程序的成功或失效。對於短期交易,同步處理是產生立即回饋的有效方法。圖 6 說明同步要求。

圖 6. MQ Workflow 的範例同步連接器要求


  1. 連接器收到 WfRequest_MyCustomer 最上層商業物件,且配置 Meta 物件為屬性 ResponseTimeout 指定了非負值,並為屬性 ExecutionMode 指定了值 Synchronous
  2. 連接器會發出要求訊息給 MQ Workflow 伺服器,要求訊息中會包含物件 MyCustomer,作為程序範本 CustomerCreditCheck 的輸入資料結構。連接器等待回覆 (最多 5000 毫秒)。
  3. 在 MQ Workflow 中設定工作流程程序 CustomerCreditCheck 之新實例的實例化。當工作流程程序完成時,會將回應訊息傳回連接器。
    註:
    對於長期同步交易,請確定 ResponseTimeout 的值足夠允許執行整個程序。
  4. 連接器將程序傳回的資料結構轉換成回應物件 MyCreditCheck。此外,連接器將程序實例資訊移入物件 MyProcessInstance。如果 MQ Workflow 傳回錯誤訊息,則連接器會傳回 BON_FAIL 並傳送 MQ Workflow 訊息中提供的錯誤訊息。

Copyright IBM Corp. 1997, 2003