过程 - 更新工作流以使用同步关闭
以下示例将从使用同步关闭完成审阅任务后的基本工作流 (从“正在审阅”到“已解决”状态) 开始。
1. 选择工作流模板特性链接。转至“变量”选项卡,然后添加一个名为 handlesClosure 的新布尔型变量,且将默认值设置为 true。
2. 在“审阅任务”和“设置状态已解决”之间添加新的同步表达式。
3. 更新新同步表达式以在“对象事件”上进行同步。选择“父项更改对象状态更改”或“子项更改对象状态更改”事件。有关每个事件的说明,请参阅
解决方案。在“初始表达式”和“路由表达式”中添加以下两个表达式之一:
◦ 当监听“父项更改对象状态更改”时:
if(com.ptc.windchill.pdmlink.change.server.impl.WorkflowProcessHelper.
isRelatedParentsInStates (primaryBusinessObject,
new String[]{"RESOLVED"})) {
result = "Resolved";
}
◦ 当监听“子项更改对象状态更改”时:
if(com.ptc.windchill.pdmlink.change.server.impl.WorkflowProcessHelper.
isRelatedChildrenInStates(primaryBusinessObject,
new String[]{"RESOLVED"})) {
result = "Resolved";
}
请注意,更改对象关系的角色 A 被视为父对象,角色 B 被视为子对象。
4. 在“同步”和“设置状态已解决”之间添加新表达式。将其名称设置为“设置解决日期”。
5. 更新“设置解决日期”以设置更改对象的解决日期。
com.ptc.windchill.pdmlink.change.server.impl.WorkflowProcessHelper.
setResolutionDate(primaryBusinessObject);
6. 如果更改进程需要强制关闭,则可在“设置状态已解决”后添加新表达式以关闭父项或子项关联。下面的示例表达式实现可强制关联的父项更改对象在“已解决”状态下关闭。
java.util.Map<java.lang.Class, wt.lifecycle.State> parentStateMap = new
java.util.HashMap<java.lang.Class, wt.lifecycle.State>(1);
parentStateMap.put(wt.change2.FlexibleChangeItem.class,
wt.lifecycle.State.toState("RESOLVED"));
com.ptc.windchill.pdmlink.change.server.impl.WorkflowProcessHelper.
closeChangeParents(primaryBusinessObject, parentStateMap);