高级自定义 > 业务逻辑自定义 > 自定义工作流管理 > 自定义更改活动工作流分配
自定义更改活动工作流分配
可以自定义更改活动工作流模板,以便将返工活动分配给实际完成原活动的用户,而不是简单地重新分配给整个团队。
Windchill 预设 (OOTB) 更改活动工作流模板会将返工活动分配给“工作负责人”角色中指定的所有用户,而不管其是否为实际完成原始分配的用户。虽然这适用于常规预设工作流模板,但是,当客户分配几组人员来更改活动并允许组中任何人来完成任务时,这种方法可能无法迎合客户需求。在这种情况下,可以将返工活动分配给实际执行原始任务的人员,以便其及时对工作进行纠正,而不是将返工活动分配给整个团队,让不熟悉原始工作的人员接手。此外,您可能还需要使用不同的团队角色来执行返工活动,例如,“返工负责人”。
* 
此进程假设您熟悉更改对象和工作流自定义的工作流进程。本文档中所述的方法仅限于更改对象工作流模板。
预期结果
假设以下用例:使用预设更改活动工作流模板创建包含三个已分配参与者的更改任务。最初创建更改任务时,其进程页面如下所示。
如果用户 2 实际接受该任务并完成,则“针对更改进程的任务”表将会更新,以显示已完成的工作任务和审阅任务。
如果在审阅过程中发现问题,并且发送任务以进行返工,则会为每个原始工作负责人创建新的返工任务。现在任何一个原始工作负责人都可以接受返工任务。
针对所有原始团队成员创建返工任务可能会与公司标准更改进程不符。例如,更改进程可能规定:只能将最初执行此工作的用户 2 分配为特定“返工”角色。而且用户 2 应该是分配至返工任务的唯一人员。预期进程页面应显示如下内容。使用预设更改活动工作流模板时,这只能通过手动编辑进程来实现。要自动遵循此更改进程,需要自定义模板。
解决方案
自定义更改活动工作流模板,以自动确定完成工作任务的人员,并仅为该人员 (或这些人员) 分配返工角色。
必备知识
要应用此最佳做法,需要了解以下内容:
更改对象的工作流进程
工作流模板管理和自定义
生命周期模板管理和自定义
对象初始化规则管理和自定义
枚举类型自定义
基本 Java 编程
自定义点
创建自定义返工角色
使用 enumCustomize 工具将新的返工角色添加到 wt.project.RoleRB.rbInfo。有关使用此工具的详细信息,请参阅枚举类型自定义实用程序
在此进程中将使用自定义角色“返工负责人”。如果不需要新角色,则可以跳过此步骤。
自定义更改活动工作流模板
1. “站点”“组织”“产品”“存储库”上下文的“实用程序”页面中选择“工作流模板管理”
2. 针对 "Change Activity Workflow" 模板选择“另存为”操作,以创建自定义的副本。为此文档中使用的自定义工作流选择合适的名称 (例如,"Custom Change Activity Workflow")。始终在更改之前复制工作流模板;始终避免自定义预设工作流模板。
3. 针对 Custom Change Activity Workflow 模板选择“编辑”操作,更改活动工作流图随即显示在“工作流模板编辑器”中。此自定义的感兴趣区域是位于右上方的返工循环。
4. 双击 Rework Change Notice Task 以打开编辑器,然后选择“参与者”选项卡。添加“返工负责人”角色并移除“工作负责人”角色。如果不需要新角色,则可以跳过此步骤。
5. 在工作流中的 Set State ImplementationRework Change Notice Task 步骤之间创建一个新的表达式步骤,并为其提供一个有意义的名称,例如 Set Rework Assignee。
6. 将 Java 代码添加到 Set Rework Assignee 步骤,以自动获取完成先前工作任务的用户并将其分配给更改项团队以执行返工任务。有关此处可调用的帮助程序方法的信息,请参阅“Java 帮助程序方法”一节。
示例:
wt.project.Role reworkRole = wt.project.Role.toRole("REWORK_ASSIGNEE");
wt.project.Role participantsRole = reworkRole;
java.util.Map<wt.project.Role, wt.fc.collections.WTSet> roleToParticipantMap;
// Try to get participants from the rework activity.
roleToParticipantMap = com.ptc.windchill.pdmlink.change.server.
impl.WorkflowProcessHelper.getActivityParticipants(
(wt.change2.VersionableChangeItem) primaryBusinessObject,
"Rework Change Notice Task");
// If the map is null then the rework activity has not executed yet.
if (roleToParticipantMap == null) {
participantsRole = wt.project.Role.toRole("ASSIGNEE");
// Try to get participants from the original activity.
roleToParticipantMap = com.ptc.windchill.pdmlink.change.server.impl.
WorkflowProcessHelper.getActivityParticipants(
(wt.change2.VersionableChangeItem) primaryBusinessObject,
"Complete Change Notice Task");
}
// Assign participants from original or rework activity to the
rework role on the change team.
// By doing so only those participants will get the next
rework tasks.
wt.fc.collections.WTSet participants = roleToParticipantMap.
get(participantsRole);
com.ptc.windchill.pdmlink.change.server.impl.WorkflowProcessHelper.
setChangeItemParticipants(
(wt.change2.VersionableChangeItem) primaryBusinessObject,
reworkRole, participants);
7. Java 代码完成后,选择“检查语法”按钮检查错误。请确保在使用自定义工作流模板之前更正所有错误。
8. 保存对 "Custom Change Activity Workflow" 模板所做的更改,然后将其检入。
自定义更改活动生命周期
使用“生命周期模板管理”实用程序创建自定义 "Change Activity Life Cycle" 模板。指定在上一节中创建的自定义工作流模板:
自定义更改活动对象初始化规则
使用“对象初始化规则管理”实用程序和模板创建自定义“更改活动”对象初始化规则 (OIR)。指定在上一节中创建的自定义生命周期模板:
Java 帮助程序方法
提供了几种 Java 帮助程序方法,旨在简化用于自动进行返工分配的代码。这些方法位于以下类中:com.ptc.windchill.pdmlink.change.server.impl.WorkflowProcessHelper
帮助程序方法 getActivityParticipants
/**
* Get participants of a completed work activity for a change item.
* If the work activity was executed multiple times
* (e.g., a rework activity was run several times), then only
* the participants from the latest completed execution are returned.
*
* Supported API: true
*
* @param changeItem Work flow primary business object.
* @param activityName Work flow activity name.
*
* @return Map of activity roles to the participants for that role,
* or null if an activity with the specified name has not been
* executed for the change item.
*
* @throws WTException
*/
public static Map<Role, WTSet>
getActivityParticipants(VersionableChangeItem changeItem,
String activityName) throws WTException
帮助程序方法 getChangeItemParticipants
/**
* Get all participants of a change item team.
*
* Supported API: true
*
* @param changeItem Change item object.
*
* @return Map of change item roles to the
* participants for that role.
*
* @throws WTException
*/
public static Map<Role,WTSet> getChangeItemParticipants
(VersionableChangeItem changeItem)
throws WTException {
帮助程序方法 setChangeItemParticipants
/**
* Set the participants for a role of a change item team.
* The old participants of the role, if any, will be
* replaced with the new participants.
*
* Supported API: true
*
* @param changeItem Work flow primary business object.
* @param role Change item team role to be set.
*
* @param participants Collection of new participants for the role.
* Pass an empty set to remove all participants
* from the role. Pass null to remove the
* entire role.
* @throws WTException
*/
public static void setChangeItemParticipants(VersionableChangeItem changeItem,
Role role,
WTCollection participants) throws WTException {
这对您有帮助吗?