根据更改请求提交情况进行同步
以下每个自动机均已转换为对象事件同步自动机,如下所述:
模板
自动机
Change Investigation Process
Sync on Request Submit
Change Analysis Process
Sync on Request Submit
Change Proposal Process
Sync on Request Submit
Change Order Process
Sync on Request Submit
Change Activity Process
Sync on Request Submit
在版本 5.1 之前,表达式逻辑执行了以下操作:
1. 通过导航一个或两个基于更改对象的关联级别来确定父项更改请求:
对于更改调查或更改提议,导航 ResearchedBy 关联。
对于更改单,导航 AddressedBy2 关联。
对于分析活动,首先导航 DetailedBy 关联以获取更改调查或更改提议,然后导航 ResearchedBy 关联。
对于更改活动,首先导航 IncludedIn2 关联以获取更改单,然后导航 AddressedBy2 关联。
2. 确定更改请求的当前生命周期状态。
3. 确定存储在复杂性属性中的当前值 (仅限 Sync on Request Submit)。
4. 根据步骤 2 和步骤 3 的结果,可以继续保持或移动到工作流中后续的几个可能活动之一。
已对此逻辑进行以下更改:
每个工作流中都引入了名为 parentChangeRequest 的新进程变量。它会保存父项请求,并在工作流通过进程启动转变的转变表达式开始时进行初始化。
下图显示了在版本 5.1 之前存在的表达式同步自动机。
此自动机被替换为条件路由器,随后是同步自动机。已更改为对象事件同步自动机的新自动机如下图所示。
该对象是刚刚介绍的新更改请求进程变量。在每种情况下,事件均为“状态更改”。条件路由器包含与对象事件订阅自动机中的表达式完全相同的逻辑。此条件路由器的目的是立即检查是否已达到状态。这有助于避免在实例化同步自动机之前达到状态的争用条件。(在这两个图中,假设 parentChangeRequest 变量已初始化。)
对象事件同步自动机和条件中的表达式已更改为直接使用工作流变量 parentChangeRequest,而不是重复访问数据库来确定父项更改请求。
这些更改可获得以下性能改进:
由于将更改请求保存在工作流变量中,因此会缩短每次执行同步表达式时的查找时间。
同步表达式仅在更改请求的状态更改后执行。因此,每次运行表达式时,都很有可能达到适当的状态。
这对您有帮助吗?