2017-10-17 3 views
1

링크 된 모든 이야기와 할 일 목록이 "완료"상태 일 때 자동으로 Epic을 종료하고 싶습니다. 나는 그루비스럽지 않고 여전히 신선하고 내 발을 찾으려고 노력하고 있습니다. 그래서 나는 다음과 같은 스크립트가 :모든 이야기 전환이 완료되면 Epic을 닫습니다.

import com.atlassian.jira.component.ComponentAccessor 
import com.atlassian.jira.issue.Issue 
import com.atlassian.jira.issue.MutableIssue 
import com.onresolve.scriptrunner.runner.customisers.ContextBaseScript 
import groovy.transform.BaseScript 
import org.apache.log4j.Logger 

@BaseScript ContextBaseScript context 

def issueLinkManager = ComponentAccessor.getIssueLinkManager() 
def issueService = ComponentAccessor.getIssueService() 

def currentUser = ComponentAccessor.jiraAuthenticationContext.getLoggedInUser() 

def isEpicInProgress = {Issue epic -> 
    if (epic.issueType.name == "Epic") { 
     if (epic.statusObject.name != "Done") { 
      return true 
     } else { 
      return false 
     } 
    } 
} 

def isStoryClosed = {Issue story -> 
    if (story.statusObject.name == "Done") { 
     return true 
    } else { 
     return false 
    } 
} 

def updateEpic = {Issue epic -> 
    if (isEpicInProgress) { 
     def parameters = issueService.newIssueInputParameters() 
     def result = issueService.validateTransition(currentUser, epic.id, 31, parameters) 
     issueService.transition(currentUser, result) 
     log.warn("Epic update to " + result) 
    } 
} 

def isEpicClosable = {Issue epic -> 
    def finalResult = true 

    issueLinkManager.getOutwardLinks(epic.id).each { link -> 
     def story = link.destinationObject 
     def closedStory = isStoryClosed(story) 
     finalResult = closedStory && finalResult 
    } 
    log.warn("Final result is " + finalResult); 
    return finalResult 
} 

issueLinkManager.getInwardLinks(issue.id).each { link -> 
    def linkTypeId = link.getLinkTypeId() 
    def isEpicOfLinkType = 10300 
    if (isEpicOfLinkType == linkTypeId) { 
     def epic = link.sourceObject 
     if (isEpicInProgress(epic)) { 
      if (isEpicClosable(epic)) { 
       updateEpic(epic) 
      } 
     } 
    } 
} 
JIRA는 다음에 대해 불평

:

story.statusObject.name이되지 않습니다 것은 -하여 새

을 찾는 방법> 나도 몰라

위의 경고를 제외하고 스크립트가 오류없이 실행되지만 Epic은 자동으로 전환되지 않습니다. enter image description here 위의 이야기 유형의 워크 플로우입니다. enter image description here 위의 에픽 문제 유형입니다.

지원하십시오 :

답변

0

For your warning을 : 대신 의 getStatusObject()의 getStatus()를 사용합니다. 같은 일을하지만, 더 이상 사용되지 않습니다. 에서

는 updateEpic() 당신은 :

def result = issueService.validateTransition(currentUser, epic.id, 31, parameters) 
issueService.transition(currentUser, result) 

귀하의 결과 변수는 ServiceResult를 구현 TransitionValidationResult의 인스턴스입니다. 여기에는 경고 및 오류 콜렉션이 포함됩니다. 그것들을 확인/기록하여 전환에 정확히 무엇이 잘못되었는지 알아 내야합니다. 전환이 성공하는지 단순히 확인하려면 result.isValid()

을 사용하십시오.