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,提问作者ערן ברלינר
相关产品推荐
相关产品推荐

