JIRA 8 Version, Script 내 이슈 검색 방법 변경 사항

JIRA 8 Version, Script 내 이슈 검색 방법 변경 사항

개요


기존 사용하던 이슈 검색 Script가 JIRA 8.x Version으로 업그레이드 후 변경된 사항에 대해 설명합니다.

1. SearchProvider, SearchResults


사용법

기존 SearchProvider Class의 search method는 인자로 (Query, ApplicationUser, PagerFilter)를 사용했습니다.

JIRA 8.x  Version 업그레이드 이후 SearchProvider Class가 변경되어 search method의 인자가 (SearchQuery, PagerFilter)로 변경되어,

이전과 같이 JqlQueryParser.parseQuery(String) method를 이용하여 Query를 생성 후 사용하는 방식이 불가능해졌습니다.

신규 버전에서 사용하는 SearchQuery Class는 Query와 ApplicationUser가 합쳐져있는 형태로, SearchQuery.create(Query, ApplicationUser) method를 통하여 생성해 사용하면 됩니다.


추가적으로 SearchProvider Class의 search method의 반환 타입도 변경되었기 때문에, 아래의 소스 예제에 나온 것 처럼 SearchResults.getIssues() method가 아닌 getResults() method를 사용하는 방식으로 사용합니다.

소스 예제

기존
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.search.SearchProvider
import com.atlassian.jira.jql.parser.JqlQueryParser
import com.atlassian.jira.web.bean.PagerFilter

def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def issueManager = ComponentAccessor.getIssueManager()
def searchProvider = ComponentAccessor.getComponent(SearchProvider)
def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser)

def queryStr = "" // JQL (ex: "project = TP")
def query = jqlQueryParser.parseQuery(queryStr)

def results = searchProvider.search (query, user, PagerFilter.getUnlimitedFilter())

if(results.getTotal() > 0) {
    results.getIssues().each {
		def issueKey = it.getKey()
		def issue = issueManager.getIssueObject(issueKey)
		// 추가 수행 사항
	}
}
변경 후
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.search.SearchProvider
import com.atlassian.jira.issue.search.SearchQuery
import com.atlassian.jira.jql.parser.JqlQueryParser
import com.atlassian.jira.web.bean.PagerFilter

def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def issueManager = ComponentAccessor.getIssueManager()
def searchProvider = ComponentAccessor.getComponent(SearchProvider)
def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser)

def queryStr = "" // JQL (ex: "project = TP")
def query = jqlQueryParser.parseQuery(queryStr)
def searchQuery = SearchQuery.create(query, user)

def results = searchProvider.search(searchQuery, PagerFilter.getUnlimitedFilter())

if(results.getTotal() > 0) {
    results.getResults().each {
		def doc = it.getDocument()
		def issueKey = doc.get("key")
		def issue = issueManager.getIssueObject(issueKey)
		// 추가 수행 사항
	}
}

2. WorkflowTransitionUtilImpl


사용법

JiraUtils.loadComponent(WorkflowTransitionUtilImpl.class) 를 사용하여 워크플로 전환을 수행합니다. 그러나 릴리스 8.x 이후로 이 방법은 더 이상 사용되지 않습니다.

workflowTransitionUtil is the Class Name. But I get this error: java.lang.ClassNotFoundException: workflowTransitionUtil. 오류 메시지가 출력되고 실패 됩니다.

소스 예제


기존
import com.atlassian.jira.workflow.WorkflowTransitionUtil;
import com.atlassian.jira.workflow.WorkflowTransitionUtilImpl;
import com.atlassian.jira.util.JiraUtils;
...
WorkflowTransitionUtil workflowTransitionUtil = ( WorkflowTransitionUtil ) JiraUtils.loadComponent( WorkflowTransitionUtilImpl.class );
workflowTransitionUtil.setIssue(issue);
workflowTransitionUtil.setUsername(currentuser);
workflowTransitionUtil.setAction (transition)
// Validate and transition issue
def results = workflowTransitionUtil.validate();
if (results.validate.hasAnyErrors()) {
     log.error("Fast Track Transition ${issue} errors.validate ${errors.validate}")
}
workflowTransitionUtil.progress();
변경 후
import com.atlassian.jira.bc.issue.IssueService
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.workflow.TransitionOptions

Issue issue
Integer actionId = 61 // The transition ID

IssueService issueService = ComponentAccessor.getIssueService()
ApplicationUser currentUser = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
TransitionOptions transitionOptions = new TransitionOptions.Builder()
        .skipConditions()
        .skipPermissions()
        .skipValidators()
        .build()

IssueService.TransitionValidationResult result = issueService.validateTransition(currentUser,
        issue.getId(),
        actionId,
        issueService.newIssueInputParameters(),
        transitionOptions)

if (result.isValid()) {
    issueService.transition(currentUser, result)
} else {
    log.warn result.getErrorCollection().getErrors()
}

3. ComponentManager


사용법

"import com.atlassian.jira.ComponentManager" Class는 더 이상 사용을 할 수 없습니다. 

"ComponentAccessor"를 사용해서 접근해야 합니다. 관련 링크