jiraatlassian-sourcetreejira-rest-apijira-pluginatlassian-plugin-sdk

Status is not updated after performing transitionResult = issueService.transition(currentUser, transitionValidationResult)


I would like an issue to be automatically transitioned from the following statuses: 

The problem is that the status of my issue does not get updated even after executing the line 

   

def transitionResult = issueService.transition(currentUser, transitionValidationResult)

 The log.warn statement still shows the issue OPEN all the time even after executing issueService.transition, this is weird because this status should be changed to "Fixed", then "Tested" and then "Completed". I should be updated and should not always be "Opened". For example, here is what gets printed after performing the issueService.transition statement:

2022-08-13 00:54:54,877+0200 https-openssl-nio-443-exec-14 WARN mouh 54x25796x1 1uq4h23 10.248.75.214 /secure/CommentAssignIssue.jspa [c.o.scriptrunner.runner.ScriptBindingsManager] MOUNA 13 IssueConstantImpl[[GenericEntity:Status][sequence,4][statuscategory,4][name,Open][iconurl,/images/icons/statuses/open.png][description,null][id,1]]

Here is my code below. Is there anything I am doing wrong?

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
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);
  log.warn("MOUNA 101 transitionFromFixedToTested " + issue.getStatus());
  transition(transitionFromFixedToTested);
  log.warn("MOUNA 102 transitionFromTestedToCompleted " + issue.getStatus());
  transition(transitionFromTestedToCompleted);
}


void transition(int transitionToBeDone) {
  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");
  def transitionValidationResult
  log.warn("MOUNA 9 ");
  def issueInputParameters = issueService.newIssueInputParameters()
  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");
    }
  }
}

Solution

  • I found the problem and here is my solution, I needed to reload the issue inside the transition function and also set a comment.

    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
    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");
        }
      }
    }