Search code examples
jiraatlassian-sourcetreejira-rest-apijira-pluginscriptrunner-for-jira

Cannot transition to another status in Jira Custom script post-function


I am using a Custom script post-function [ScriptRunner] that is triggered after clicking on the transition "MounaCompleted" located in my menu item (last item in the menu). enter image description here

I am using the following code to transition an issue after clicking on the "Completed" menu item.

Initially, my issue is in the status "Open" and I would like to transition my issue from "Open" to "Fixed". I am using the following code which does not work. My problem  is that 

if (validationResult.isValid())

 evaluates to false and I end up printing 

Failed to transition subtask 7 com.atlassian.jira.bc.issue.IssueService$TransitionValidationResult@105aff4d

import com.atlassian.jira.issue.Issue;

import com.atlassian.jira.workflow.WorkflowManager

import org.apache.log4j.Logger

import com.atlassian.jira.component.ComponentAccessor

def log = Logger.getLogger("atlassian-jira.log")

log.warn("This is the last action ")

WorkflowManager workflowManager = ComponentAccessor.getWorkflowManager();

def issueService = ComponentAccessor.getIssueService()

def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()

    if (issue.status.name == "Open") {

     log.warn("Failed to transition subtask 1"+issue.status.name)

        def issueInputParameters = issueService.newIssueInputParameters()

        issueInputParameters.with {

            log.warn("Failed to transition subtask 2")

            setResolutionId("10001") // resolution of "Fixed"

            setComment("*Resolving* as a result of the *Resolve* action being applied to the parent.")

            setSkipScreenCheck(true)

        }

        // validate and transition subtask

                    log.warn("Failed to transition subtask 10 "+ user+" "+ issue.getId()+" "+ 10001+" "+ issueInputParameters)

    

     def validationResult = null

    try{

         validationResult = issueService.validateTransition(user, issue.getId(), 10001, issueInputParameters)

    }

    catch(Exception e){

    log.warn("Failed to transition subtask 3 "+e)

    }

        

        if (validationResult.isValid()) {

            def issueResult = issueService.transition(user, validationResult)

            log.warn("Failed to transition subtask 4")

            if (!issueResult.isValid()) {

            log.warn("Failed to transition subtask 5")

                log.warn("Failed to transition subtask ${issue.getId()}, errors: ${issueResult.errorCollection}")

            }else{

                     log.warn("Failed to transition subtask 6")

                     log.warn("success")

            }

        } else {

                 log.warn("Failed to transition subtask 7 "+validationResult)

            log.warn("Could not transition subtask ${issue.getId()}, errors: ${validationResult.errorCollection}")

        }

    }else {

                    log.warn("Failed to transition subtask 8")

                    log.warn("Failed to transition subtask ")

            log.warn("Failed to transition subtask3333 "+issue.getId())

    }

Solution

  • import com.atlassian.jira.user.ApplicationUser
    import com.atlassian.jira.issue.MutableIssue;
    import com.atlassian.jira.issue.Issue;
    import java.util.HashMap;
    import java.util.List;
    import com.atlassian.jira.component.ComponentAccessor;
    import com.atlassian.jira.issue.Issue;
    import com.atlassian.jira.workflow.JiraWorkflow
    import com.atlassian.jira.workflow.WorkflowManager
    import org.apache.log4j.Logger
    import com.atlassian.jira.component.ComponentAccessor
    import com.atlassian.jira.issue.changehistory.ChangeHistoryItem
    import com.atlassian.jira.bc.issue.IssueService
    import com.atlassian.jira.issue.IssueInputParametersImpl
    import com.atlassian.jira.bc.issue.IssueService.IssueValidationResult
    import com.atlassian.jira.user.ApplicationUser
    import com.opensymphony.module.propertyset.PropertySet;
    import com.opensymphony.workflow.WorkflowException;
    import com.opensymphony.workflow.loader.ActionDescriptor;
    import com.opensymphony.workflow.loader.StepDescriptor;
    import com.opensymphony.workflow.spi.SimpleStep;
    import com.atlassian.jira.component.ComponentAccessor
    import com.atlassian.jira.config.ConstantsManager
    def log = Logger.getLogger("atlassian-jira.log")
    if (issue.getStatus().getSimpleStatus().getId().equals("1")) {
      log.warn("MOUNA 1");
      int transitionFromOpentoFixed = 71;
      int transitionFromFixedToTested = 111;
      int transitionFromTestedToCompleted = 131;
      log.warn("MOUNA 100 transitionFromOpentoFixed " + issue.getStatus());
      transition(transitionFromOpentoFixed, "Fixed");
      log.warn("MOUNA 101 transitionFromFixedToTested " + issue.getStatus());
      transition(transitionFromFixedToTested, "Tested");
      log.warn("MOUNA 102 transitionFromTestedToCompleted " + issue.getStatus());
      transition(transitionFromTestedToCompleted, "Completed");
    }
    
    
    void transition(int transitionToBeDone, String destinationStatus) {
      issue = ComponentAccessor.getIssueManager().getIssueObject(issue.id)
    
      def currentUser = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
      log.warn("MOUNA 5 STATUS " + issue.getStatus());
      log.warn("MOUNA 6 ");
      String issueKey = issue.getKey()
      log.warn("MOUNA 7 ");
      IssueService issueService = ComponentAccessor.getIssueService()
      log.warn("MOUNA 8");
      log.warn("MOUNA 9 ");
      def issueInputParameters = issueService.newIssueInputParameters()
      issueInputParameters.setComment("Transitioning issue from status "+ issue.getStatus().getName()+" to status "+ destinationStatus );
      transitionValidationResult = issueService.validateTransition(currentUser, issue.id, transitionToBeDone, issueInputParameters)
      log.warn("MOUNA 10");
      if (transitionValidationResult.isValid()) {
        log.warn("MOUNA 11 transition is valid");
        def transitionResult = issueService.transition(currentUser, transitionValidationResult)
        log.warn("MOUNA 12 ");
        if (transitionResult.isValid()) {
          log.warn("MOUNA 13 " + issue.getStatus());
        } else {
          log.warn("MOUNA 14 transitionResult not valid");
        }
      }
    }