自定义信息内容和访问 > 操作前和操作后事件调度与验证
操作前和操作后事件调度与验证
每当启动创建、更新或删除操作后,系统都会在更新数据库之前,调用操作前验证程序事物 (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 服务。如果要在单个操作中创建或更新多个工作定义,且其中一个工作定义指定了无效的执行状态,则整个操作都将失败。将“日志级别”设置为“调试”,以在“监控” > ScriptLog 查看验证服务的详细信息以及所有错误。要查看在验证失败时抛出异常的示例,请参考 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_DuplicatePTC.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_[发布版本]) 的“配置”页面上找到为您的系统配置的数据库事物。
6. 在数据库事物的“配置”页面上,在 DatabaseValidationConfigurationTable 下更新 PreActionValidatorPostActionHandler 字段使其指向在步骤 1 中创建的副本事物。
7. 单击“保存”以保存数据库事物配置更改。