通用建構區塊 > 資料庫連線建構區塊 > 動作前、動作時和動作後事件分派與驗證
動作前、動作時和動作後事件分派與驗證
每當啟動建立、更新或刪除動作時,都會在資料庫更新之前調用動作前驗證器物件 (PTC.DBConnection.PreActionValidator)。如果驗證成功,則會更新資料庫並呼叫動作時處理器物件 (PTC.DBConnection.OnActionProcessor)。資料庫成功更新後,會在另一個執行緒中呼叫動作後處理常式物件 (PTC.DBConnection.PostActionHandler),而不會影響動作執行。
下圖顯示了動作前驗證器、動作時處理器和動作後處理常式的高級設計:
動作前驗證器與動作後處理常式高階設計的圖表。
下圖顯示了動作前驗證成功時,動作前驗證器、動作時處理器和動作後處理常式的分派器序列。
此圖表顯示動作前驗證成功時,動作前驗證器與動作後處理常式的分派器序列。
如果驗證失敗,則動作不會完成,且資料庫不會更新。下圖顯示了動作前驗證失敗時的分派器序列。
此圖表顯示動作前驗證失敗時的分派器序列。
動作前驗證器物件 (PTC.DBConnection.PreActionValidator) 會繼承動作前驗證器物範本 (PTC.DBConnection.PreActionValidator_TT)。動作時處理器物件 (PTC.DBConnection.OnActionProcessor) 繼承動作時處理器物範本 (PTC.DBConnection.OnActionProcessor_TT)。同樣地,動作後處理常式物件 (PTC.DBConnection.PostActionHandler) 會繼承動作後處理常式物範本 (PTC.DBConnection.PostActionHandler_TT)。這些物範本會實行必要的物形式,以供觸發動作前、動作時和動作後事件分派。
當啟動建立、更新或刪除動作時,會觸發動作前驗證器的對應動作前服務 (PreCreateActionPreUpdateActionPreDeleteAction)。動作前服務隨即會執行 CallServices 服務,以審核資料變更並讀取動作前驗證器的組態。如果針對該動作及資料形式配置了服務,CallServices 會分派適當的驗證服務。如果驗證的任何部份失敗,則整個動作都不會成功。
如果動作前驗證成功,則會更新資料庫並觸發動作時服務 (OnCreateActionOnDeleteActionOnUpdateAction)。然後,動作時服務會執行 CallServices 服務,後者會讀取動作時處理器上的組態。如果已針對該資料形式與動作配置了服務,則系統會分派此動作時服務。
完成建立、更新或刪除動作之後,會觸發動作後處理常式 (PostCreateActionPostUpdateActionPostDeleteAction)。然後,動作後服務會執行 CallServices 服務,以讀取預設動作後處理常式的組態。如果已針對該資料形式和動作配置服務,則會分派該動作後服務。
服務在動作前驗證器以及動作後處理常式中提供,在建立或更新工作定義、班次或站台時予以執行。實行自己的動作前和動作後服務時,這些實作可以用作模型。
動作前服務範例
本節將以工作單動作為範例描述行動前服務的運作方式。
下列服務可在 PTC.JobOrderImpl.Manager 物件中找到:JobOrderPreCreateJobOrderPreUpdateValidateDispatchStatusValidateJobOrderSite
當建立或更新工作單,並且已指定執行狀態時,會先驗證執行狀態,然後才允許動作繼續進行。根據所執行的動作呼叫 JobOrderPreCreateJobOrderPreUpdate 服務。該動作隨後會呼叫 ValidateDispatchStatusValidateJobOrderSite 服務。如果要在單一動作中建立或更新多個工作單,而為其中一個工作定義指定的執行狀態無效,則整個動作不會成功。將「記錄層級」設定為「偵錯」,以在「監視」 > 「指令集記錄檔」中查看驗證服務以及任何錯誤的詳細資訊。欲透過範例瞭解如何在驗證失敗時解決例外,請參閱 ValidateJobOrderSite 服務。
動作時服務範例
下列服務可在 PTC.JobOrderImpl.Manager 物件中找到:OnCreateJobOrderOnUpdateJobOrderUpdateJobOrderExecutionResponsesForJobOrders
建立或更新工作單之後,會根據所執行的動作呼叫 OnCreateJobOrderOnUpdateJobOrder 服務。該動作隨後會呼叫 UpdateJobOrderExecutionResponsesForJobOrders 服務。
動作後服務範例
下列服務可在 PTC.SCA.SCO.DefaultProductionOrderManager 物件中找到:WorkDefinitionPostCreateWorkDefinitionPostUpdateLogWorkDefinitionExecutionStatusChange
成功建立或更新工作定義之後,會根據所執行的動作呼叫 WorkDefinitionPostCreateWorkDefinitionPostUpdate 服務。此動作會進而呼叫用以記錄此動作的下列詳細資訊的 LogWorkDefinitionExecutionStatusChange 服務:動作的負責代理程式、所建立或更新的工作定義的 UID 以及執行狀態的 UID 和值。將設定為 > 後,可以在「監視」ScriptLog 中檢視這些詳細資訊。
新增動作前、動作時和動作後服務
PTC.DBConnection.PreActionValidator 物件、PTC.DBConnection.OnActionProcessor 物件與 PTC.DBConnection.PostActionHandler 物件不可編輯。
欲新增其他動作前、動作時或動作後服務:
1. 對於其他動作前服務,請複製 PTC.DBConnection.PreActionValidator 物件。如需其他動作時服務,請複製 PTC.DBConnection.OnActionProcessor。對於其他動作後處理常式服務,請複製 PTC.DBConnection.PostActionHandler 物件。在此程序中,會將這些重複物件分別稱為 PTC.DBConnection.PreActionValidator_Duplicate 物件、PTC.DBConnection.OnActionProcessor_Duplicate 物件與 PTC.DBConnection.PostActionHandler_Duplicate 物件。若需進一步資訊,可參閱 複製建構區塊實體
2. 針對資料形式所屬的建構區塊,在管理員物件上建立您的動作前、動作時及動作後服務。例如,針對 PTC.JobOrderImpl.Manager 物件的工作單建立動作前、動作時以及動作後服務。
3. 按需為 PTC.DBConnection.PreActionValidator_Duplicate 物件、PTC.DBConnection.OnActionProcessor_Duplicate 物件或 PTC.DBConnection.PostActionHandler_Duplicate 物件在「組態」頁面的 ActionConfigurationSettings 組態表中新增新輸入項:
DataShapeName - 搜尋並選取將執行此動作前、動作時或動作後服務的資料形式的名稱。
Action - 輸入以下動作:CreateUpdateDelete。值區分大小寫,因此輸入的值必須與此處顯示的值完全相同。
ThingName - 搜尋並選取服務所在管理員物件的物件名稱,例如 PTC.JobOrderImpl.Manager
ServiceName - 輸入要由 CallServices 分派的服務的名稱。如果實作包含多個服務,請輸入用於呼叫其他服務的初始服務。值區分大小寫,因此必須與服務名稱完全相符。
* 
雖然您的實行可以包含一系列服務,但在 ActionConfigurationSettings 配置表上指定並由 CallServices 分派的服務必須包含名為 DataChanges 的輸入參數。此輸入參數是資料形式 PTC.DBConnection.DataChange 的資料負載。
4. 按一下「新增」,然後按一下「儲存」即可儲存組態變更。
5. 導覽至針對您的系統配置的資料庫物件,例如 PTC.DBConnection.MSSQLDatabase
* 
您可在 PTC.DBConnection.Manager「組態」頁中找到在 DefaultDatabaseConfiguration 組態表中為您的系統設定的資料庫物件。
6. 在資料庫物件「組態」頁面的 DatabaseValidationConfigurationTable 下方,更新 PreActionValidatorPostActionHandlerOnActionProcessor 欄位以指向步驟 1 中建立的重複物件。
7. 按一下「儲存」以儲存資料庫物件組態變更。
這是否有幫助?