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 工作项准备
- 准备需要附加该功能的工作项,此处为
TestReq
- 准备改工作项的工作项,此处需求为:当工作项处于审批中状态时,若所有审批项均为已批准,则自动执行工作流动作批准,将工作项的状态置为已批准
3.2 post-save脚本实现
- 将脚本名称修改为
[工作项ID]-post-save.js
,并存放在Polarion安装目录下scripts\workitemsave
目录 - 脚本实现:
```javascript
if(isApproveExist(workItem)){ //判断工作项是否存在审批状态
if(isInStatus(workItem, “reviewing”)){ //判断工作项是否处于“审批中”
} }if(isAllApprovalStatusExist(workItem,"approved")){ //判断工作项是否所有的审批项都批准
workItem.performAction(getActionID(workItem,"批准")); //执行工作流动作“批准”
workItem.save();
}
/*
- @method 判断工作项workItem是否所有的审批都处于某状态statusName
- @param workItem,statusName
- @returns boolean
*/
function isAllApprovalStatusExist(workItem, statusName){
approvalList = workItem.getApprovals();
for (var i = approvalList.iterator(); i.hasNext();) {
} return true; }var approval = i.next();
if(approval.getStatus().getId()!=statusName) {
return false;
}
/*
- @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++) {
if (availableActions[i].getActionName() == actionName) {
var actId = availableActions[i].getActionId();
return actId;
}
} 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 效果演示
- 一个工作项处于状态“审批中”,且存在“待批准”状态的审批项;
- 用户在“审批中心”对该条工作项进行审批,并“保存审批”
- 重新查看工作项属性,状态已变为“已批准”