技术开发 频道

Jazz平台的扩展实践—EasyInspect插件

5.WorkItem与工作流

    WorkItem可以用来跟踪开发过程中的问题和任务,并且是评估项目健康状况的重要因素。Rational Team Concert预定义了多个WorkItem类型,涵盖了计划、需求、用例、任务、构建和缺陷等方面。你还可以通过定义新的WorkItem类型以满足团队特别的流程需要。每一种WorkItem类型都会关联一个状态转移模型,在其中定义了该WorkItem类型可能的状态,在某一状态时用户可以采取的行为以及该行为所引起的状态的变迁。

    你可以通过以下步骤添加新的WorkItem类型:

    (1)在Team Artifacts视图中,右键Project Area,选择Open。选择Process Configuration,展开Project Configuration->Configuration Data->Work Items->Types and Attributes。

    (2)在Work Item Types区域中,点击add,在弹出的窗口中输入Name和ID。然后在Custom Attributes区域中,点击add,在弹出的窗口中输入Name和Type创建该work item类型的属性。

    添加新的WorkFlow:

    (1)在Team Artifacts视图中,右键Project Area,选择Open。选择Process Configuration,展开Project Configuration->Configuration Data->Work Items->Workflows。

    (2)点击Add,添加新的workflow.

    (3)在States区域中,添加该workflow所拥有的状态。在Actions区域中,添加用户可以采取的Action。

    (4)在Transition矩阵中,对于每一种状态的转移,在新老状态所对应的格子里选择合适的Action.

    建立WorkItem类型与WorkFlow的关联,完成状态转移模型的配置。

    (1)在Team Artifacts视图中,右键Project Area,选择Open。选择Process Configuration,展开Project Configuration->Configuration Data->Work Items->Workflow bindings。

    (2)选择WorkItem类型,选择WorkFlow,点击Save保存配置。

    此外,你可以通过编程方式得到WorkItem的状态,以及可采取的Action:

    IWorkItemClient client= (IWorkItemClient) repository.getClientLibrary(IWorkItemClient.class);
    IWorkflowInfo workflowInfo = workflowInfo = client.findWorkflowInfo(workItem, null);
    Identifier<IState> state= workItem.getState2();
    if (state != null) {
        Identifier<IWorkflowAction>[] actionIds= workflowInfo.getActionIds(state);
        if (actionIds.length > 0) {
            for (int i= 0; i < actionIds.length; i++) {
                Identifier<IWorkflowAction> actionId= actionIds[i];
                ChangeWorkItemStateAction action= new ChangeWorkItemStateAction(workflowInfo.getActionName(actionId), workItem, actionId,this);
                URL url= workflowInfo.getActionIconName(actionId);
                if (url != null) {
                    ImageDescriptor descriptor= WorkItemUI.getImageDescriptor(url);
                    if (descriptor != null)
                    action.setImageDescriptor(descriptor);
                }
            }
        }
    }

    在EasyInspect中,我们便采用了编程的方式来获取可进行的操作。

0
相关文章