【问题标题】:Jira - Post-function to clone an issue multiple times based on issue's custom field valueJira - 根据问题的自定义字段值多次克隆问题的后功能
【发布时间】:2018-05-29 19:08:59
【问题描述】:

一个问题有一个多选自定义字段(复选框),其中至少有一个选定的选项。 我正在尝试为应该执行以下操作的工作流后期函数创建一个脚本。

简单的部分: 如果自定义字段只选择了一个选项,只需根据所选选项设置问题类型并将问题分配给当前用户。

棘手的部分(我可以使用一些帮助的部分): 如果自定义字段选择了多个选项,则问题的自定义字段应更新为第一个选定的选项,并复制与剩余选定选项数量相同的次数。之后,在每个创建的克隆中,自定义字段应分别设置为仅剩余选项之一,并根据该选择更新克隆的问题类型。 例如,问题选择了带有选项“a”、“b”和“c”的自定义字段。触发 post 函数后,它应该创建两个克隆,每个克隆都将自定义字段分别设置为“b”和“c”。原始问题将其自定义字段值设置为“a”。并且所有相应的问题都应根据选择的自定义字段选项设置其问题类型。在纸上它应该是这样的:

克隆前:

原始问题(cf = a,b,c;问题类型 = 随便)

克隆后:

原始问题(cf = a;问题类型 = 'Type A')

第一个克隆(cf = b;问题类型 = 'Type B')

第二个克隆(cf = c;问题类型 = 'Type C')

等等

代码: 这是我想出的代码:

import com.atlassian.jira.component.ComponentAccessor
def currentUser = 
ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def cf = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(13801)
def fieldMgr = ComponentAccessor.getFieldManager()
def optsMgr = ComponentAccessor.getOptionsManager()
def issueSvc = ComponentAccessor.getIssueService()
def issueTypes = 
fieldMgr.getIssueTypeField().getOptionsForIssue(issue).getAt("id")
def svcList = optsMgr.getOptions(cf.getRelevantConfig(issue))
def svcIssueTypeMap = new LinkedHashMap()
def issueCf = new ArrayList()

for (i = 0; i < issue.getCustomFieldValue(cf).size(); i++){
issueCf.add(issue.getCustomFieldValue(cf)[i])
}

for (int i = 0; i < svcList.size(); i++){
svcIssueTypeMap.put(svcList[i],issueTypes[i])
}
if (issue.getCustomFieldValue(cf).size() > 1){
for (int i = 1; i < issueCf.size(); i++){
def cfValue = new ArrayList()
cfValue.add(issueCf[i])
issue.setCustomFieldValue(cf, cfValue)
issue.setIssueTypeId(svcIssueTypeMap.get(issueCf[i]))
def issueCfMap = new HashMap()
issueCfMap.put(cf,Optional.of(true))
def cloneVld = issueSvc.validateClone(currentUser, issue, issue.getSummary(), true, false, false, issueCfMap)
issueSvc.clone(currentUser, cloneVld)
}
}
def finalCfValue = new ArrayList()
finalCfValue.add(issueCf[0])
issue.setCustomFieldValue(cf, finalCfValue)
issue.setIssueTypeId(svcIssueTypeMap.get(issueCf[0]))
issue.setAssignee(currentUser)

如您所见,我的想法是将当前问题中的自定义字段和问题类型的值设置为应该在克隆中的值,然后克隆问题,并使用值重复该过程下一个克隆等等。

创建所有克隆后,我终于将原始问题的自定义字段和问题类型设置为它们应该具有的值。

只要自定义字段只选择了一个选项(简单的部分),一切都可以正常工作。当自定义字段选择了多个选项时,会发生这种情况:

克隆前:

原始问题(cf = a,b,c;问题类型 = 随便)

克隆后:

原始问题(cf = a;问题类型 = 'Type A')(好!)

第一个克隆(cf = a,b,c;问题类型 = 'Type A')

第二个克隆(cf = a,b,c;问题类型 = 'Type A')

请指教,我在这里做错了什么?

干杯

【问题讨论】:

  • 一些建议可以更好地理解您的代码:1) 请添加缩进,2) 使用内联 Collections.singletonList/Map/whatever 进行单值集合

标签: java groovy scripting jira


【解决方案1】:

更改问题类型的唯一方法是移动问题。 我建议您创建所需类型的新问题,而不是克隆。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    相关资源
    最近更新 更多