Jira Groovy脚本 - 检查重复的子任务



下面的代码为在 SW版本中选择的每个版本创建3个子任务自定义字段。这被放置在工作流程过渡上,作为后功能,并且可以完美工作。但是,如果重新审视了工作流过渡,它将为已经选择的版本创建重复的子任务。

示例:SW版本字段有5个选项:1、2、3、4、5

如果用户选择1和2并进行过渡,则将为每个版本创建6个子任务3。(这里都很好(

如果用户将SW版本字段更新为1、2、3和4,该字段已经具有1和2的预选,则将创建12个额外的子任务,使总计18个重复1和1的重复。

我想对这些重复项进行检查,因此,基本逻辑是,如果子任务已经存在,请转到下一个。类似于选择的每个版本,请检查子任务是否已经存在并继续进行。我尝试以多种方式做,但失败了。已经评论了下面的一些代码以获取子任务摘要,并与所有现有子任务摘要进行了比较,但行之有效。

此外,我尝试这样做是无济于事的。

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语句中的工作(

最新更新