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