商業物件本身包含一個最上層商業物件,該商業物件含有一或多個代表資料結構的子項物件。這表示每一個商業物件都包括部份含有 Meta 資料的子項物件,以及一或多個含有實際商業內容的子項物件。
最上層商業物件是所有要交換之物件的外層。當作外層的最上層商業物件並不含有商業資料,而是提供建置物件 (起始及完成交換需要此物件) 需要的應用程式特有文字及名稱值組。名稱值組表示子項屬性,該子項屬性可以指定建立所要求或需要之商業物件所需的 Meta 資料。
圖 8 顯示下列情況時最上層商業物件及子項物件關係:
圖 8. 輪詢事件範例情況中的最上層商業物件及子項 (商業及 Meta 物件)
圖 9 顯示下列情況時最上層商業物件及子項物件關係:
圖 9. 輪詢事件範例情況中的最上層商業物件及子項 Meta 物件
圖 10 顯示下列情況時最上層商業物件及子項物件關係:
圖 10. 要求處理範例情況中的最上層商業物件及子項 (商業及 Meta) 物件
圖 11 顯示下列情況時最上層商業物件及子項物件關係:
圖 11. 要求處理範例情況中的最上層商業物件及子項 (商業及 Meta) 物件
WebSphere MQ Workflow 程序可以具有不同的輸入及輸出資料結構,但涉及協同作業及連接器的交易僅可包括一種物件類型。為避免此限制, 建構了部份最上層商業物件,這些商業物件具有一個要求物件及一或多個回應物件 (作為子項)。明確地說,附加到 <boprefix> 配置內容的資料結構名稱可以判斷建立哪個最上層商業物件。這個最上層商業物件中的第一個 (與 Meta 資料無關) 子項物件中會輸入資料結構。
若要區分子項 Meta 物件與商業內容子項物件,最上層商業物件的應用程式特有資訊必須包括如下的標籤:
cw_mo_tag=child meta-object_attribute_name
其中 tag = 下列其中之一:
會為配置或動態 Meta 資料保留所有以 cw_mo_ 開頭的應用程式特有資訊。因此,當連接器代理程式收到商業物件時,它只需檢查商業物件本身的應用程式特有資訊, 就可以立即判斷是否已為商業物件併入所有執行時期 Meta 資料。資料處理常式也會檢查商業物件層次的應用程式特有資訊, 以判斷在序列化或解除序列化程序中要併入或排除哪些子項物件。
例如,請考量最上層商業物件 WfRequest_MyCustomer,該商業物件需要一個配置 Meta 物件。您可以指定 MyConfig 類型的物件配置屬性。序列化母物件時,若要允許連接器辨識 Meta 物件並防止將資料處理常式納入 『MyConfig』, 您可以將應用程式特有資訊新增到 WRequest_MyCustomer 物件中 (使用標籤 cw_mo_wfptcfg=MyConfig 的格式)。
當建構 WebSphere MQ Workflow 的要求或回應時,連接器會使用範本來建構商業物件。
為了提供要建立並執行之 WebSphere MQ Workflow 程序的資訊,連接器需要將 Meta 物件併入最上層商業物件中。此 Meta 物件包括要使用之程序範本的相關資訊、是否需要回應、WebSphere MQ Workflow 是否必須等到程序完成才傳回結果等等。藉由將此資訊儲存在 Meta 物件中,連接器可以為所要求的 WebSphere MQ Workflow 程序動態配置應用程式特有資訊。所有協同作業要求都需要此 Meta 物件 (或同等項目)。
連接器會讀取最上層商業物件的應用程式特有資訊,並尋找名稱值組:
cw_mo_wfptcfg=xxx
其中 xxx 是子項屬性的名稱,該子項屬性指定 Meta 資料。表 8 顯示屬性名稱及說明。
表 8. MO_MQWorkflow_ProcessTemplateConfig Meta 物件屬性
屬性名稱 | 說明 | 接受值 |
---|---|---|
ProcessTemplateName(必要) | 要執行之 WebSphere MQ Workflow 範本的名稱。預設值 = 無 | 任意 |
ProcessInstanceName | 要執行之 WebSphere MQ Workflow 實例的名稱。不適用於非同步執行模式。
預設值 = 如果留為空白,會建立新的程序範本實例。 | 任意 |
KeepName | 指示使用後是否應捨棄程序的旗標。
預設值 = false | true 或 false |
UserID | 識別具有執行程序之權限的使用者。這與連接器特有內容 ApplicationUserID
相同。如需此屬性的重要限制,請參閱ApplicationUserID。
預設值 = 連接器配置內容 ApplicationUserID 的值 | 任意 |
ResponseTimeout | 等待 WebSphere MQ Workflow 回應的時間量
(毫秒)。正值表示要求連接器等待回應。負值則會使連接器在向 WebSphere MQ Workflow
輸入佇列發出要求之後便順利返回。
預設值 = -1 | 整數 |
TimeoutFatal | 如果 WebSphere MQ Workflow 未收到回應,則連接器會將
BON_APPRESPONSETIMEOUT 傳回到 InterChange Server,並終止連接器代理程式。
預設值 = false (如果 ResponseTimeout 小於 0,則不適用) | true 或 false |
ExecutionMode | 判斷程序與協同作業是要非同步執行或同步執行。當此模式為
Asynchronous 時,會建立並執行新的程序範本實例。PID
會傳回給協同作業以便進行追蹤之用。當此模式為 Synchronous
時,會執行程序範本的實例
(現有的或新的實例)。工作流程程序一旦完成,會立即將商業物件結果傳回給協同作業。
預設值 = Synchronous | Asynchrounous 或 Synchronous |
WebSphere MQ Workflow 發出的活動呼叫 (ActivityImplInvoke)訊息,除商業物件之外還可以選擇性地保留儲存區資訊。可以將此儲存區資訊對映到子項 Meta 物件 MO_MQWorkflow_ContainerInfo (如已定義) 並發佈到訂閱協同作業。它包括了 WebSphere MQ Workflow 所提供,關於程序產生狀況及環境的資訊。
連接器會讀取最上層商業物件的應用程式特有資訊,並尋找名稱值組:
cw_mo_wfcontainer=XXX
其中 XXX 為要輸入最上層商業物件資訊的子項屬性名稱。此資訊沒有連接器的值,且不用於處理商業物件。將此資訊作為商業物件的一部份傳遞到連接器並不會有影響。
以下是 MO_MQWorkflow_ContainerInfo 定義。
[ReposCopy] Version = 3.1.0 [End] [BusinessObjectDefinition] Name = MO_MQWorkflow_ProcessInfo Version = 1.0.0 [Attribute] Name = Role Type = String Cardinality = 1 MaxLength = 255 IsKey = true IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = Organization Type = String Cardinality = 1 MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = ProcessAdministrator Type = String Cardinality = 1 MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = Duration Type = String Cardinality = 1 MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = ObjectEventId Type = String MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Verb] Name = Create [End] [Verb] Name = Delete [End] [Verb] Name = Retrieve [End] [Verb] Name = Update [End] [End] [BusinessObjectDefinition] Name = MO_MQWorkflow_ActivityInfo Version = 1.0.0 [Attribute] Name = Priority Type = String Cardinality = 1 MaxLength = 255 IsKey = true IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = MembersOfRoles Type = String Cardinality = 1 MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = CoordinatorOfRole Type = String Cardinality = 1 MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = Organization Type = String Cardinality = 1 MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = OrganizationType Type = String Cardinality = 1 MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = LowerLevel Type = String Cardinality = 1 MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = UpperLevel Type = String Cardinality = 1 MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = People Type = String Cardinality = 1 MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = PersonToNotify Type = String Cardinality = 1 MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = Duration Type = String Cardinality = 1 MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = Duration2 Type = String Cardinality = 1 MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = ObjectEventId Type = String MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Verb] Name = Create [End] [Verb] Name = Delete [End] [Verb] Name = Retrieve [End] [Verb] Name = Update [End] [End] [BusinessObjectDefinition] Name = MO_MQWorkflow_ContainerInfo Version = 1.0.0 [Attribute] Name = PROCESS_INFO Type = MO_MQWorkflow_ProcessInfo ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = ACTIVITY_INFO Type = MO_MQWorkflow_ActivityInfo ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = ACTIVITY Type = String Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = PROCESS Type = String Cardinality = 1 MaxLength = 1 IsKey = true IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = PROCESS_MODEL Type = String Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = ObjectEventId Type = String MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Verb] Name = Create [End] [Verb] Name = Delete [End] [Verb] Name = Retrieve [End] [Verb] Name = Update [End] [End]
WebSphere MQ Workflow 為回應程序執行會選擇性地傳回程序實例 ID (PID)。當建立或執行工作流程程序順利完成時, 連接器會在此物件中輸入程序的詳細資料。如果與起始協同作業並行執行程序,則協同作業可以使用 PID 來控制程序實例 (如果程序與協同作業非同步執行的話)。
連接器會讀取母項商業物件的應用程式特有資訊,並尋找名稱值組:
cw_mo_wfpid
=XXX
其中 XXX 是子項屬性的名稱,該子項屬性應含有程序實例 Meta 資料。物件必須符合 XML 資料處理常式闡明的需求。而且,子項物件中的屬性名稱具有連接器的語意值。物件的應用程式特有資訊必須包括 『ProcessInstance』。
強烈建議從此範例衍生所有自訂物件。
表 9. MO_MQWorkflow_ProcessTemplateInstance Meta 物件屬性
屬性名稱 | 說明 | 接受值 |
---|---|---|
ProcInstID | 識別程序實例的主要索引鍵 | 任意 |
ProcessInstName | 請參閱 WebSphere MQ Workflow programming guide。 |
|
ProcInstParentName | 請參閱 WebSphere MQ Workflow programming guide。 |
|
ProcInstTopLevelName | 請參閱 WebSphere MQ Workflow programming guide。 | 任意 |
ProcInstDescription | 請參閱 WebSphere MQ Workflow programming guide。 | 整數 |
ProcInstState | 程序狀態 | SuspendedResumedTerminated |
LastStateChangeTime | 請參閱 WebSphere MQ Workflow programming guide。 | Asynchronous 或 Synchronous |
LastModificationTime | 請參閱 WebSphere MQ Workflow programming guide。 |
|
ProcTempID | 請參閱 WebSphere MQ Workflow programming guide。 |
|
ProcTempIName | 請參閱 WebSphere MQ Workflow programming guide。 |
|
Icon | 請參閱 WebSphere MQ Workflow programming guide。 |
|
Category | 請參閱 WebSphere MQ Workflow programming guide。 |
|
當 WebSphere MQ Workflow 程序實例發出活動呼叫 (ActivityImplInvoke) 訊息且符合下列條件時:
連接器會從 ActivityImplInvoke 訊息摘錄活動資訊。此活動資訊對映到子項 Meta 物件 MO_MQWorkflow_ActivityRequest,然後發佈到訂閱協同作業。
連接器會讀取最上層商業物件的應用程式特有資訊,並尋找下列名稱值組:
cw_mo_wfactivityrequest
=XXX
其中 XXX 為要輸入最上層商業物件資訊的子項屬性名稱。此資訊既不是連接器的值,也不用於處理商業物件。表 10 顯示屬性名稱及說明
表 10. MO_MQWorkflow_ActivityRequest 屬性
屬性名稱 | 說明 | 接受值 |
---|---|---|
ActImplCorrelID | 將由程序實例發出的
ActivityImplInvoke 訊息與 ActivityImplInvokeResponse 訊息關聯起來的 ID。協同作業會使用 ActImplCorrelID 將回應傳送到連接器 | 任意 |
Starter | 起始程序實例的使用者 ID | 任意 |
ProcTemplID | 程序範本的 ID。 | 任意 |
ProgramName | 程序實例所呼叫的程式名稱 | 任意 |
ResponseRequired | 識別程序 (或實例) 是否預期 ActivityImplInvokeResponse 訊息 | Yes 或 No 或 IfError |
ExternalProcessContext | 程序實例的程序環境定義 | 任意 |
若要使回應與要求產生關聯,連接器需要最上層商業物件包括具有適當資訊的 Meta 物件。此 Meta 物件包括某些資訊,這些資訊主要關於相關 ActivityImplInvoke 訊息的 ActImplCorrelID、與程序實例相關聯的使用者 ID (Starter),以及鏈結至程序實例的回覆碼。當協同作業建立 ActivityImplInvokeResponse 與 ActivityImplInvoke 訊息的關聯性時,需要此 Meta 物件。
連接器會讀取最上層商業物件的應用程式特有資訊,並尋找下列名稱值組:
cw_mo_wfactivityrequest
=XXX
其中 XXX 是子項屬性的名稱,該子項屬性指定 Meta 資料。表 11 顯示屬性名稱及說明
表 11. MO_MQWorkflow_ActivityResponse 屬性
屬性名稱 | 說明 | 接受值 |
---|---|---|
ActImplCorrelID | 程序實例藉由此 ID 將回應與相關聯之
ActivityImplInvoke 訊息呼叫的要求關聯起來。 | 任意 |
Starter | 起始與 ActivityImplInvoke 訊息相關聯之程序實例的使用者 ID | 任意 |
ReturnCode | 向程序實例發出的回覆碼 | 整數 |
母項商業物件層次之應用程式特有資訊的結構是名稱值組的格式,且以分號來區隔。空格會被忽略。例如:
cw_mo_wfptcfg=CUST_Config;cw_mo_pid=CUST_IN_Nieman