常用构建基块 > 数据库连接构建基块 > 操作前、操作时和操作后事件的分派与验证
操作前、操作时和操作后事件的分派与验证
每当启动创建、更新或删除操作后,系统都会先调用操作前验证器事物 (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 服务。如果要在单个操作中创建或更新多个作业单,且其中一个作业单指定了无效的执行状态,则整个操作都将失败。将“日志级别”设置为“调试”,以在“监控” > ScriptLog 查看验证服务的详细信息以及所有错误。要查看在验证失败时抛出异常的示例,请参考 ValidateJobOrderSite 服务。
操作时服务示例
PTC.JobOrderImpl.Manager 事物中提供了以下服务:OnCreateJobOrderOnUpdateJobOrderUpdateJobOrderExecutionResponsesForJobOrders
成功创建或更新工作定义后,根据所执行的操作调用 OnCreateJobOrderOnUpdateJobOrder 服务。该操作随后会调用 UpdateJobOrderExecutionResponsesForJobOrders 服务。
操作后服务示例
PTC.SCA.SCO.DefaultProductionOrderManager 事物中提供了以下服务:WorkDefinitionPostCreateWorkDefinitionPostUpdateLogWorkDefinitionExecutionStatusChange
成功创建或更新工作定义后,会根据所执行的操作调用 WorkDefinitionPostCreateWorkDefinitionPostUpdate 服务。该操作会进而调用 LogWorkDefinitionExecutionStatusChange 服务,用以记录有关该操作的下列详细信息:负责操作的代理程序、所创建或更新的工作定义的 UID 以及执行状态的 UID 和值。这些详细信息可在“监控” > ScriptLog 中查看,但前提是将“日志级别”设置为“调试”
添加操作前、操作时和操作后服务
PTC.DBConnection.PreActionValidatorPTC.DBConnection.OnActionProcessorPTC.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. 单击“保存”以保存数据库事物配置更改。
这对您有帮助吗?