1 背景描述

Polarion 工作项Wokflow OOTB功能,仅具备简单的工作流。当需要实现多个审批人员,完成Approval之后,该Polarion工作项的Status属性字段会发生修改。为了要实现这种复杂工作流,需要依赖JS脚本来实现。

2 环境准备

2.1 Polarion环境

此案例使用的环境为 Polarion 20R1,操作系统为CentOS 7.7

2.2 Polarion Extensions

在此案例实施中,需要安装插件 FMC Work Item Save ,可以在https://extensions.polarion.com/extensions/134-fmc-work-item-save下载

3 实现方式

3.1 工作项准备

  1. 准备需要附加该功能的工作项,此处为 TestReq
  2. 准备改工作项的工作项,此处需求为:当工作项处于审批中状态时,若所有审批项均为已批准,则自动执行工作流动作批准,将工作项的状态置为已批准

image.png

3.2 post-save脚本实现

  1. 将脚本名称修改为 [工作项ID]-post-save.js ,并存放在Polarion安装目录下 scripts\workitemsave 目录
  2. 脚本实现: ```javascript if(isApproveExist(workItem)){ //判断工作项是否存在审批状态 if(isInStatus(workItem, “reviewing”)){ //判断工作项是否处于“审批中”
    1. if(isAllApprovalStatusExist(workItem,"approved")){ //判断工作项是否所有的审批项都批准
    2. workItem.performAction(getActionID(workItem,"批准")); //执行工作流动作“批准”
    3. workItem.save();
    4. }
    } }

/*

  • @method 判断工作项workItem是否所有的审批都处于某状态statusName
  • @param workItem,statusName
  • @returns boolean */ function isAllApprovalStatusExist(workItem, statusName){ approvalList = workItem.getApprovals(); for (var i = approvalList.iterator(); i.hasNext();) {
    1. var approval = i.next();
    2. if(approval.getStatus().getId()!=statusName) {
    3. return false;
    4. }
    } return true; }

/*

  • @method 获取工作项workItem的工作流actionName的动作ID
  • @param workItem,actionName
  • @returns string */ function getActionID(workItem, actionName){ var availableActions = workItem.getAvailableActions(); var actLength = availableActions.length; for (var i = 0; i < actLength; i++) {

    1. if (availableActions[i].getActionName() == actionName) {
    2. var actId = availableActions[i].getActionId();
    3. return actId;
    4. }

    } return null; }

    /*

  • @method 是否工作项workItem处于该状态status
  • @param workItem,status
  • @returns boolean */ function isInStatus(workItem, status){ return workItem.getStatus().getId() == status; }

/*

  • @method 获取工作项workItem是否存在评审
  • @param workItem
  • @returns boolean */ function isApproveExist(workItem){ approvalList = workItem.getApprovals(); return approvalList.length > 0; }

```

4 效果演示

  1. 一个工作项处于状态“审批中”,且存在“待批准”状态的审批项;

image.png

  1. 用户在“审批中心”对该条工作项进行审批,并“保存审批”

image.png

  1. 重新查看工作项属性,状态已变为“已批准”

image.png