JIRA Groovy Script - проверка дубликатов подзадач - PullRequest
0 голосов
/ 27 апреля 2018

Приведенный ниже код создает 3 подзадачи для каждой версии, выбранной в пользовательском поле Версия ПО . Это помещается на переход рабочего процесса как функция поста и работает отлично. Однако, если переход к рабочему процессу пересматривается, он создает дублированные подзадачи для уже выбранных версий.

Пример: Поле «Версия ПО» имеет 5 опций: 1, 2, 3, 4, 5

Если пользователь выбрал 1 и 2 и продолжит переход, он создаст 6 подзадач 3 для каждой выбранной версии. (Все хорошо здесь)

если пользователь обновляет поле «Версия ПО» на 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)
}   

1 Ответ

0 голосов
/ 08 июля 2018

Это не работает только потому, что issue.getSubTaskObjects()*.summary возвращает массив, а затем вы пытаетесь сравнить этот массив со строкой в ​​.equals(summaryText). Но вы были близки, и если изменить эту часть на issue.getSubTaskObjects()*.summary.contains(summaryText) (значит, вы ищете summaryText в каждом элементе массива), это будет работать довольно хорошо.

Также, на мой взгляд, следующий код будет более понятным и понятным issue.getSubTaskObjects().find{it.getSummary() == summaryText} (это также будет работать внутри if оператора)

...