Jira如何通过ScriptRunner监听器获取单选自定义字段字符串值
脚本失效核心原因
你的脚本存在4类问题,会直接导致逻辑不执行:
- Groovy语法大小写敏感,代码里写的
If是错误关键字,正确写法为小写开头的if - Jira单选类型自定义字段通过
getCustomFieldValue取到的返回值是Option对象,不是普通字符串,直接和"Other"做相等判断永远返回false - 监听器未绑定正确触发事件、未做字段变更判断:自定义监听器必须绑定Issue Updated事件才能在字段修改时触发,同时要过滤非目标字段的更新操作,否则所有issue更新都会跑这段脚本,既浪费性能也不符合预期
- 监听器中直接
return字符串没有任何实际作用,必须在判断分支里写具体的业务执行逻辑(比如加评论、改字段、发通知等)
修正后可用脚本
// 导入依赖类 import com.atlassian.jira.component.ComponentAccessor // 可根据实际需求修改配置项 final String TARGET_CF_NAME = "impacted" final String TRIGGER_OPTION = "Other" def customFieldManager = ComponentAccessor.getCustomFieldManager() def commentManager = ComponentAccessor.getCommentManager() def currentUser = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser() // 先判断本次更新是否修改了目标字段,没修改直接终止执行 def fieldChange = issue.changeItems?.find { it.field == TARGET_CF_NAME } if (!fieldChange) { return } // 获取字段当前值,取Option的value属性做字符串对比,先判空避免空指针报错 def targetCf = customFieldManager.getCustomFieldObjectByName(TARGET_CF_NAME) def currentValue = issue.getCustomFieldValue(targetCf) if (currentValue && currentValue.value == TRIGGER_OPTION) { // 下方替换为你选中Other后需要执行的实际逻辑,示例为添加评论提示 commentManager.create( issue, currentUser, "检测到影响范围选择了「Other」,请在备注中补充具体的影响场景说明", false ) // 如果需要修改其他字段值,可在此处补充字段更新逻辑,注意调用对应API后要持久化保存issue }
监听器配置注意事项
- 触发事件必须勾选
Issue Updated,不要选择Issue Created、Workflow Transition这类不匹配的事件 - 生效范围只勾选需要用到该逻辑的目标项目,不要全局生效避免影响其他业务流程
- 如果实例内存在同名字段,不要用
getCustomFieldObjectByName获取字段,替换为getCustomFieldObject(自定义字段ID)更稳定,字段ID可在自定义字段配置页的URL中找到 - 上线前先用ScriptRunner自带的运行预览功能,选测试issue模拟字段变更操作,查看执行日志无报错后再正式启用
内容的提问来源于stack exchange,提问作者Asma
相关产品推荐
相关产品推荐

