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"를 사용해서 접근해야 합니다. 관련 링크