如何在Polarion工作流脚本中调用ALM API管理用户组
Polarion工作流脚本添加用户到全局用户组实现方案
依赖包引入方法
Polarion工作流脚本运行在平台内置的上下文环境中,com.polarion.alm.shared.api.model.usergroup、com.polarion.alm.shared.api.transaction属于平台原生核心API,对应的Jar包已经默认加载,不需要额外导入依赖文件。
如果需要显式声明包引用(用于避免类名冲突的场景),在脚本开头添加对应声明即可:
适配默认Rhino JavaScript脚本引擎的写法:
importPackage(Packages.com.polarion.alm.shared.api.model.usergroup); importPackage(Packages.com.polarion.alm.shared.api.transaction);
适配Groovy脚本引擎的写法:
import com.polarion.alm.shared.api.model.usergroup.* import com.polarion.alm.shared.api.transaction.*
功能实现代码
你提供的代码是Java 8+ lambda写法,默认的Rhino JS脚本引擎不支持lambda语法,需要改写为适配脚本的实现,同时支持传入输入参数,可直接使用的JS版本代码如下:
// 直接读取工作流配置的输入参数,参数名与你在工作流节点配置的入参key保持一致 var targetUserGroupId = input_group_id; // 传入的目标全局用户组ID var userIdList = input_user_ids; // 传入的待添加用户ID数组,格式如["user1","user2"] // 启动写事务执行修改操作 TransactionalExecutor.executeInWriteTransaction(new WriteTransactionAction() { execute: function(transaction) { // 按ID查询目标用户组,做存在性校验避免空报错 var groupHolder = transaction.userGroups().getBy().id(targetUserGroupId); if (groupHolder == null || !groupHolder.exists()) { return null; } // 获取可编辑的用户组对象 var updatableGroup = groupHolder.getUpdatable(transaction); var groupUsersField = updatableGroup.fields()._users(); // 遍历添加所有传入的用户 for (var i = 0; i < userIdList.length; i++) { var currentUserId = userIdList[i]; // 校验用户不存在于当前组时再添加,避免重复数据 if (!groupUsersField.containsUser(currentUserId)) { groupUsersField.addUser(currentUserId); } } // 保存修改 updatableGroup.save(); return null; } })
注意事项
- 确保触发该工作流的账号具备全局用户组的编辑权限,否则会抛出权限异常
- 如果运行时提示类找不到,给用到的API类名前加
Packages.前缀即可,对应全路径为Packages.com.polarion.alm.shared.api.transaction.TransactionalExecutor、Packages.com.polarion.alm.shared.api.transaction.WriteTransactionAction - 如果实例配置Groovy为脚本引擎,可直接使用你提供的lambda写法,仅需将硬编码的
groupId、用户ID替换为工作流入参变量即可 - 待添加的用户只要加入绑定了对应全局角色的全局用户组,会自动继承该组的全局角色权限,不需要额外做权限赋值操作
内容的提问来源于stack exchange,提问作者Nayudu
相关产品推荐
相关产品推荐

