执行业务规则集执行计划
业务规则集执行计划的生成过程包括:
1. 基于业务规则中定义的选择器创建特定 RuleValidation 实例。
2. RuleValidation 实例将用于通过 isConfigurationValid 方法确定业务规则的配置是否有效。如果配置无效,RuleValidation 将跳过业务规则集执行计划,并记录错误。
3. 对于每个业务规则,将使用以下项调用 RuleValidation 实例:
a. 规则将评估的对象集合
b. RuleValidation 可用于配置其执行的上下文特定条件 (如容器参考)。
4. RuleValidation 实例将添加到执行计划中。
所有业务规则验证器都将实现 RuleValidation 接口。典型业务规则将分为两个主要类别:
简单验证:针对业务对象本身或由关系配置的种子对象完成规则检查。例如,可以在发布之前检查属性验证或检查对象的生命周期状态。
结构化验证:规则可能会针对业务对象执行,也可能不执行,但会包括对其关联对象 (如部件或文档的子项) 进行某些验证检查。在此类型的验证中,通常需要较复杂的算法集来计算业务验证规则并使用适当的标志填充校验结果。结构化验证规则的一个示例是校验检查,用于确保所有产生的对象和所有第一级从属项处于正确状态。
以下是随 Windchill 默认安装提供的受支持的 RuleValidation 实现:
业务规则选择器
RuleValidation
说明
CHECKOUT_RULE
com.ptc.core.businessRules.validation.CheckoutRuleValidator
用于验证对象是否检出到项目。
RELEASE_TARGET
com.ptc.core.businessRules.validation.ReleaseTargetValidator
用于确保所有“产生的对象”均处于相应的发布状态,并且均指定了与分配生命周期转变规则一致的相应变更管理转变。
ATTRIBUTE_RULE
com.ptc.core.businessRules.validation.AttributeRuleValidator
用于验证对象类型的指定属性规则配置是否有效。
BOM_RELEASE_RULE
com.ptc.core.businessRules.validation.BOMReleaseRuleValidator
用于确保所有产生的对象均处于适当状态,并且所有的第一级子项处于适当状态。
* 
自 11.0 版本开始,升级请求支持属性规则和检出规则。变更通告支持任何规则。
RuleValidation 的实例化将基于业务规则中定义的选择器。应用程序服务将用于查找已定义选择器的实现类。如果未定义任何实现类,或者类无法实例化,则系统会记录错误。
在执行任何验证之前,引擎将调用 RuleValidation.isConfigurationValid,以确定业务规则配置是否有效。在加载业务规则 (请参阅创建业务规则) 时,也会调用业务规则配置的此验证,但由于可能会更改已注册的 RuleValidation,因此,在执行业务规则验证之前也会调用该配置验证。
将名称为 prepareTheRuleValidation 初始化方法对整个种子对象集执行某些初始预处理,其中种子对象集根据业务规则集进行验证。其目的是允许在 Windchill 服务器内进行任何预先验证 (例如,可能是检索很多项所共有的生命周期模板)。最好从 RuleValidation.prepare 方法调用多对象 API。建议不要使用 RuleValidation.peformValidation 方法来执行多对象调用。
如果方法 RuleValidation.isConfigurationValid 返回 true,则会为每个种子对象调用 RuleValidation performValidation。种子对象在 RuleValidationObject 内传递。RuleValidationObject 将保存目标对象 (如果种子对象不是链接,则保存种子对象,或者,如果种子对象是链接,则保存角色 A 或角色 B) 和链接 (如果种子对象是链接)。当业务规则为结构化类型 RuleValidation 时,则 RuleValidationObject 还会包含所收集的子项以及所收集子项到收集时所使用链接的映射。performValidation 应始终返回一个新的 RuleValidationResult,它具有对目标对象的参考,而不是链接。
业务规则引擎和序列图
业务规则引擎和验证交互图
RuleValidation 实现在 service.properties 中注册。要创建或覆盖 RuleValidation 实现,请将以下内容添加到自定义 service.properties xconf 文件中:
<Service context="default" name="com.ptc.core.businessRules.validation.
RuleValidation">
<Option serviceClass="com.ptc.core.businessRules.validation.
CheckoutRuleValidator"
selector="CHECKOUT_RULE"
cardinality="singleton"
requestor="null"/>
</Service>
如果可能,应将 RuleValidation 的基数设置为 "singleton",以减少特定 RuleValidation 实现的实例数。RuleValidationKeyaddToProcessingMap() 可用于存储预先验证数据,以便在基数设置为 "singleton" 时支持对 RuleValidation 实现的线程安全处理。
这对您有帮助吗?