Hi,
After a transition, I want the script to look to see if another ticket is resolved. If the ticket is resolved, it will perform the next transition. I have written a postfunction to look for the resolved ticket and it is found. But for some reason, it still doesn't perform the transition. I even put some debugger logs to make sure that the script is performing as it should. I believe my problem lies in either my issueService.validateTransition() function or maybe the order of when the post function has been executed. I have tried to make this postfunction run as the second, third, forth or last postfunction and that hasn't worker. I have also checked the permissions and I am able to transition the issue. My script can be seen below:
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.IssueManager;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.crowd.embedded.api.User;
import com.atlassian.jira.user.ApplicationUser;
import com.atlassian.jira.bc.issue.search.SearchService;
import com.atlassian.jira.web.bean.PagerFilter;
import java.lang.Object
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.fields.CustomField
import org.apache.log4j.Logger
import org.apache.log4j.Level
//create debugger
def log = Logger.getLogger("com.acme.CreateSubtask")
log.setLevel(Level.DEBUG)
String projectName = issue.getProjectObject().name
boolean check = 0;
def issueService = ComponentAccessor.getIssueService()
def issueInputParameters = issueService.newIssueInputParameters()
issueInputParameters.with {}
String jql = 'project = ' + projectName + ' AND status = Resolved';
log.debug("Project = " + projectName)
def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
log.debug("User = " + user.getName())
SearchService searchService = ComponentAccessor.getComponent(SearchService.class)
SearchService.ParseResult parseResult = searchService.parseQuery(user, jql)
def issuesList;
if(parseResult.isValid()){
issuesList = (searchService.search(user, parseResult.getQuery(), PagerFilter.getUnlimitedFilter()).getIssues())
log.debug("Valid Parse")
}
else{
check = 1;
}
if(issuesList.size() >= 0){
for (int i =0; i<issuesList.size();i++){
if(issuesList.get(i).summary == "Marketing BLOG"){
log.debug("Found the Marketing BLOG ticket")
def validationResult = issueService.validateTransition(user, issue.getId(), 21, issueInputParameters)
def issueResult = issueService.transition(user, validationResult)
}
}
}
Also, my log results can be seen below:
2017-08-21 10:20:15,730 DEBUG [acme.CreateSubtask]: Project = Test 2017-08-21 10:20:15,730 DEBUG [acme.CreateSubtask]: Project = Test 2017-08-21 10:20:15,730 DEBUG [acme.CreateSubtask]: User = alonardelli 2017-08-21 10:20:15,730 DEBUG [acme.CreateSubtask]: User = alonardelli 2017-08-21 10:20:15,773 DEBUG [acme.CreateSubtask]: Valid Parse 2017-08-21 10:20:15,773 DEBUG [acme.CreateSubtask]: Valid Parse 2017-08-21 10:20:15,773 DEBUG [acme.CreateSubtask]: Found the Marketing BLOG ticket 2017-08-21 10:20:15,773 DEBUG [acme.CreateSubtask]: Found the Marketing BLOG ticket
I would try two things:
1) use the isValid() method to validate the transition
2) get the error collection in case the transition fails
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.IssueManager;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.crowd.embedded.api.User;
import com.atlassian.jira.user.ApplicationUser;
import com.atlassian.jira.bc.issue.search.SearchService;
import com.atlassian.jira.web.bean.PagerFilter;
import java.lang.Object
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.fields.CustomField
import org.apache.log4j.Logger
import org.apache.log4j.Level
//create debugger
def log = Logger.getLogger("com.acme.CreateSubtask")
log.setLevel(Level.DEBUG)
String projectName = issue.getProjectObject().name
boolean check = 0;
def issueService = ComponentAccessor.getIssueService()
def issueInputParameters = issueService.newIssueInputParameters()
issueInputParameters.with {}
String jql = 'project = ' + projectName + ' AND status = Resolved';
log.debug("Project = " + projectName)
def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
log.debug("User = " + user.getName())
SearchService searchService = ComponentAccessor.getComponent(SearchService.class)
SearchService.ParseResult parseResult = searchService.parseQuery(user, jql)
def issuesList;
if(parseResult.isValid()){
issuesList = (searchService.search(user, parseResult.getQuery(), PagerFilter.getUnlimitedFilter()).getIssues())
log.debug("Valid Parse")
}
else{
check = 1;
}
if(issuesList.size() >= 0){
for (int i =0; i<issuesList.size();i++){
if(issuesList.get(i).summary == "Marketing BLOG"){
log.debug("Found the Marketing BLOG ticket")
def validationResult = issueService.validateTransition(user, issue.getId(), 21, issueInputParameters)
if (validationResult.isValid()) {
def transitionResult = issueService.transition(user, validationResult)
if (transitionResult.isValid()) {
log.debug("Transitioned issue ${issue.key}")
}
else {
log.debug("Transition result is not valid")
log.debug(transitionResult.getErrorCollection())
}
}
else {
log.debug("The transitionValidation is not valid")
log.debug(validationResult.getErrorCollection())
}
}
}
}
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.