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

Jira Data Center 8.13.5:更新多问题选择器字段监听脚本报错

Jira双向关联监听器脚本错误修复

错误根源

你遇到的ClassCastException是因为多问题选择器类型的自定义字段要求值为Collection<Issue>类型,但你的代码把Issue key拼接成了字符串selectedIssues2,直接传给字段更新方法,系统无法将String转换为Collection,导致报错。

修正代码示例

添加关联的正确逻辑

要维护Issue对象的集合,而不是字符串拼接,以下是可运行的代码片段:

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.issue.changehistory.DefaultChangeHolder

def customFieldManager = ComponentAccessor.getCustomFieldManager()
def issueManager = ComponentAccessor.getIssueManager()
def user = ComponentAccessor.jiraAuthenticationContext.loggedInUser
def changeHolder = new DefaultChangeHolder()

// 目标多问题选择器字段(Field B)
def targetField = customFieldManager.getCustomFieldObject("customfield_14434")
// 获取当前字段已关联的Issue集合,为空时初始化空集合
def existingIssues = currentIssue.getCustomFieldValue(targetField) ?: [] as Collection<MutableIssue>

// 根据key获取要添加的Issue对象
def issueToAdd = issueManager.getIssueObject(issue.getKey())

// 避免重复添加
if (!existingIssues.contains(issueToAdd)) {
    def updatedIssues = new ArrayList<>(existingIssues)
    updatedIssues.add(issueToAdd)
    
    // 方式1:使用updateValue更新字段
    targetField.updateValue(null, currentIssue, new ModifiedValue(existingIssues, updatedIssues), changeHolder)
    
    // 方式2:使用issueManager更新(二选一即可)
    // MutableIssue mutableIssue = currentIssue as MutableIssue
    // mutableIssue.setCustomFieldValue(targetField, updatedIssues)
    // issueManager.updateIssue(user, mutableIssue, EventDispatchOption.ISSUE_UPDATED, false)
}

移除关联的逻辑

当需要同步移除关联时,从集合中删除对应Issue对象即可:

// 获取已有关联集合
def existingIssues = currentIssue.getCustomFieldValue(targetField) ?: [] as Collection<MutableIssue>
def issueToRemove = issueManager.getIssueObject(issue.getKey())

if (existingIssues.contains(issueToRemove)) {
    def updatedIssues = new ArrayList<>(existingIssues)
    updatedIssues.remove(issueToRemove)
    
    targetField.updateValue(null, currentIssue, new ModifiedValue(existingIssues, updatedIssues), changeHolder)
}

核心注意事项

  • 多问题选择器字段仅接受Issue对象的集合,不能传入字符串、Issue key列表等其他类型。
  • 更新前必须获取已有值,避免覆盖用户手动添加的其他关联;同时检查重复,防止同一Issue被多次添加。
  • 双向关联时要注意避免循环触发监听器(可通过判断事件来源或添加锁机制处理)。

内容的提问来源于stack exchange,提问作者ערן ברלינר

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:20:35