JIRA Groovy脚本-检查重复的子任务
下面的代码为在SW Version自定义字段中选择的每个版本创建3个子任务。这是作为post功能放置在工作流转换上的,并且可以完美地工作。但是,如果重新访问工作流转换,它会为已选择的版本创建重复的子任务 例如: 软件版本字段有5个选项: 1,2,3,4,5 如果用户选择1和2并继续进行转换,则将为所选的每个版本创建6个子任务3。(这里一切都好) 如果用户将SW Version字段更新为1、2、3和4,其中已预先选择了1和2,则将创建12个额外的子任务,总共18个,其中有6个重复的1和2 我想检查这些重复项,因此基本逻辑是,如果子任务已经存在,则转到下一个。对于所选的每个版本,检查子任务是否已经存在并继续。我尝试了各种方法,但都失败了。注释掉下面的一些代码,以获得子任务的摘要,并与所有现有子任务摘要进行比较,但它不起作用 此外,我试图这样做,但没有任何效果JIRA Groovy脚本-检查重复的子任务,groovy,jira,Groovy,Jira,下面的代码为在SW Version自定义字段中选择的每个版本创建3个子任务。这是作为post功能放置在工作流转换上的,并且可以完美地工作。但是,如果重新访问工作流转换,它会为已选择的版本创建重复的子任务 例如: 软件版本字段有5个选项: 1,2,3,4,5 如果用户选择1和2并继续进行转换,则将为所选的每个版本创建6个子任务3。(这里一切都好) 如果用户将SW Version字段更新为1、2、3和4,其中已预先选择了1和2,则将创建12个额外的子任务,总共18个,其中有6个重复的1和2 我想检查
if(issue.getSubTaskObjects()*.summary.equals(summaryText)){
log.info("Subtask already exists")
return;
任何帮助都将不胜感激
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.util.ImportUtils
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.index.IssueIndexManager
import com.atlassian.jira.issue.link.IssueLinkManager
import com.atlassian.jira.issue.index.IssueIndexingService
import org.apache.log4j.Logger
import org.apache.log4j.Level
log.info("Processing: " + issue.key);
CustomFieldManager customFieldManager = ComponentAccessor.customFieldManager
IssueManager issueManager = ComponentAccessor.getIssueManager();
def cfM119 = customFieldManager.getCustomFieldObjectByName("SW Version")
log.info("cfM119: " + cfM119)
def m119VersionArray = issue.getCustomFieldValue(cfM119) as String[]
def reqAssignee = 'user1'
def swAssignee = 'user2'
def testAssignee = 'user3'
//collecting subtask object
//Collection allsubtasks = issue.getSubTaskObjects()
//for(Issue allsubtask: allsubtasks) {
//def subtaskSummary = allsubtask.getSummary() as String[]
//log.info("Subtask Summary" + subtaskSummary)
//if (subtaskSummary[]){
// log.info("Subtask already exists")}
//else {
m119VersionArray.each{ version ->
createSubTask("", version, "_Approved_REQ", reqAssignee)
createSubTask("", version, "_Approved_SW", swAssignee)
createSubTask("", version, "_Approved_TEST", testAssignee)
}
def createSubTask(String component, version, type, String assignee) {
def Long issueLinkType = new Long (10702)
def Long sequence = new Long (1)
//Issue issue
def summaryText = component + version + " " + type
def issueManager = ComponentAccessor.issueManager
def issueFactory = ComponentAccessor.issueFactory
def subTaskManager = ComponentAccessor.subTaskManager
def issueLinkManager = ComponentAccessor.issueLinkManager
def userManager = ComponentAccessor.userManager
def authenticationContext = ComponentAccessor.jiraAuthenticationContext
if(issue.getSubTaskObjects()*.summary.equals(summaryText)){
log.info("Subtask already exists")
return;
}
// Defining subtask
def newIssue = issueFactory.getIssue()
newIssue.setIssueTypeId("5")
newIssue.setParentId(issue.getId())
newIssue.setProjectObject(issue.getProjectObject())
newIssue.setSummary(summaryText)
newIssue.setAssignee(userManager.getUserByName(assignee))
newIssue.setDescription(issue.getDescription())
log.info("Creating subtask - " + summaryText)
def subTask = issueManager.createIssueObject(authenticationContext.getLoggedInUser(), newIssue)
subTaskManager.createSubTaskIssueLink(issue, subTask, authenticationContext.getLoggedInUser())
issueLinkManager.createIssueLink(issue.getId(), newIssue.getId(), issueLinkType, sequence, authenticationContext.getLoggedInUser())
// reindex
ImportUtils.setIndexIssues(true)
IssueIndexingService issueIndexService =
ComponentAccessor.getComponent(IssueIndexingService.class)
issueIndexService.reIndex(subTask)
ImportUtils.setIndexIssues(false)
}
因为
issue.getSubTaskObjects()*.summary
返回数组,然后尝试将此数组与.equals(summaryText)
中的字符串进行比较,所以它不起作用。但您已经很接近了,如果将此部分更改为issue.getSubTaskObjects()*.summary.contains(summaryText)
(意味着您在每个数组元素中搜索summaryText
),它将非常有效
另外,在我看来,下一个代码将更容易理解和清楚issue.getSubTaskObjects().find{it.getSummary()==summaryText}
(这也将在if
语句中工作)