You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 08:33:11