Fast-Track Transition to a specific status

Vivo Bandito
Contributor
November 22, 2022

Hello, 

Preface:

Currently we have a scriptrunner post function that is a workflow jumper. We currently have this at the triage step in our workflow where if we select certain teams in a screen it goes to a different workflow at a specific step. We have this in a request workflow for external and internal users. Were looking to separate the request types for each so we are looking for the triaging to occur at the create step. 

Problem:

When using the script in create step of the workflow it is failing. It is currently only happening with the teams associated in this script. I'm not sure if it is that I'm copying values of one field to another and it's not reading the "Assigned Team" or if there are other factors I'm missing all together. Any and all help is appreciated. 

(new TriageWorkflowJump()).doStuff(issue)

import com.atlassian.crowd.embedded.api.User
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.config.IssueTypeManager
import com.atlassian.jira.config.StatusManager
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.index.IssueIndexManager
import com.atlassian.jira.util.BuildUtils
import com.atlassian.jira.util.ImportUtils
import com.atlassian.jira.workflow.WorkflowManager
import com.atlassian.jira.workflow.WorkflowSchemeManager
import com.opensymphony.workflow.Workflow
import org.apache.log4j.Category
import org.ofbiz.core.entity.GenericValue
import com.atlassian.jira.security.JiraAuthenticationContext
import com.atlassian.jira.issue.index.IssueIndexingService
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.fields.CustomField

class TriageWorkflowJump {
Category log = Category.getInstance(TriageWorkflowJump.class)
IssueIndexingService issueIndexingService = ComponentAccessor.getComponent(IssueIndexingService)
IssueManager issueManager = ComponentAccessor.getIssueManager()
JiraAuthenticationContext jiraAuthenticationContext = ComponentAccessor.getJiraAuthenticationContext();

public doStuff(Issue issue)
{
log.setLevel(org.apache.log4j.Level.DEBUG)
log.debug("Starting Issue Type Conversion for Traige Workflow Jump")
MutableIssue mutableIssue = (MutableIssue)issue;
IssueTypeManager issueTypeManager = ComponentAccessor.getComponentOfType(IssueTypeManager.class)
StatusManager statusManager = ComponentAccessor.getComponentOfType(StatusManager.class)
WorkflowManager workflowManager = ComponentAccessor.workflowManager
WorkflowSchemeManager workflowSchemeManager = ComponentAccessor.workflowSchemeManager
CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager();

CustomField assignedTeam = customFieldManager.getCustomFieldObject("customfield_14400"); //RequestTeam 14400
CustomField billingChange = customFieldManager.getCustomFieldObject("customfield_17000"); //Billing Change 17000
CustomField supportTeamRequest = customFieldManager.getCustomFieldObject("customfield_22100"); //Support Team Request 22100

String jirarequest = "13000"
String request = "12401"
String solsupport = "13800"
String solrequest = "13100"
String billingrequest = "14400"
String trainingRequest = "15000"

String statusVerifyPriority = "12100"
String statusCABReview = "11002"
String statusWaitingForSupport = "10000"
String statusPendingReview = "10102"
String statusSRtoReq = "14904"
String statusPendingTriage = "12801"
String statusWaitingForResource = "12101"

String requestWFname = workflowSchemeManager.getWorkflowName(issue.projectObject, request)
String jirarequestWFname = workflowSchemeManager.getWorkflowName(issue.projectObject, jirarequest)
String solsupportWFname = workflowSchemeManager.getWorkflowName(issue.projectObject, solsupport)
String solrequestWFname = workflowSchemeManager.getWorkflowName(issue.projectObject, solrequest)
String billingrequestWFname = workflowSchemeManager.getWorkflowName(issue.projectObject, billingrequest)
String trainingRequestWFname = workflowSchemeManager.getWorkflowName(issue.projectObject, trainingRequest)

log.debug("WF names: " + requestWFname + " : " + jirarequestWFname + " or " + solsupportWFname + " or " + solrequestWFname + " or " + billingrequestWFname + " or " + trainingRequestWFname)
//**** DEPRECATE
if (mutableIssue.issueType.name == "Request" && mutableIssue.getCustomFieldValue(assignedTeam).toString() == "Jira Administration")
{
mutableIssue.setIssueTypeObject(issueTypeManager.getIssueType(jirarequest))
workflowManager.migrateIssueToWorkflow(mutableIssue, workflowManager.getWorkflow(jirarequestWFname),statusManager.getStatus(statusPendingReview))
}
//*****
else if (mutableIssue.issueType.name == "Request" && mutableIssue.getCustomFieldValue(assignedTeam).toString() == "Training Department")
{
mutableIssue.setIssueTypeObject(issueTypeManager.getIssueType(trainingRequest))
workflowManager.migrateIssueToWorkflow(mutableIssue, workflowManager.getWorkflow(trainingRequestWFname),statusManager.getStatus(statusWaitingForResource))
}
else if (mutableIssue.issueType.name == "Request" && mutableIssue.getCustomFieldValue(assignedTeam).toString() == "Atlassian Administration")
{
mutableIssue.setIssueTypeObject(issueTypeManager.getIssueType(jirarequest))
workflowManager.migrateIssueToWorkflow(mutableIssue, workflowManager.getWorkflow(jirarequestWFname),statusManager.getStatus(statusPendingReview))
}
else if (mutableIssue.issueType.name == "Request" && mutableIssue.getCustomFieldValue(assignedTeam).toString() == "Model Build")
{
mutableIssue.setIssueTypeObject(issueTypeManager.getIssueType(solsupport))
workflowManager.migrateIssueToWorkflow(mutableIssue, workflowManager.getWorkflow(solsupportWFname),statusManager.getStatus(statusWaitingForResource))
}
else if (mutableIssue.issueType.name == "Request" && mutableIssue.getCustomFieldValue(assignedTeam).toString() == "Request Team")
{
mutableIssue.setIssueTypeObject(issueTypeManager.getIssueType(solrequest))
workflowManager.migrateIssueToWorkflow(mutableIssue, workflowManager.getWorkflow(solrequestWFname),statusManager.getStatus(statusSRtoReq))
}
else if (mutableIssue.issueType.name == "Request" && mutableIssue.getCustomFieldValue(assignedTeam).toString() == "Business Intelligence" && mutableIssue.getCustomFieldValue(billingChange)?.toString().contains("Yes"))
{
mutableIssue.setIssueTypeObject(issueTypeManager.getIssueType(billingrequest))
workflowManager.migrateIssueToWorkflow(mutableIssue, workflowManager.getWorkflow(billingrequestWFname),statusManager.getStatus(statusPendingTriage))
}
else
return false

issueManager.updateIssue(jiraAuthenticationContext.getLoggedInUser(),mutableIssue,EventDispatchOption.DO_NOT_DISPATCH,false)
issueIndexingService.reIndex(issueManager.getIssueObject(issue.id))

}
private def reindexIssue(IssueManager issueManager, Long issueId, Category log, IssueIndexingService issueIndexingService) {

GenericValue issue = issueManager.getIssue(issueId)
boolean wasIndexing = ImportUtils.isIndexIssues();
ImportUtils.setIndexIssues(true);
log.debug("Reindex issue ${issue.key}")
issueIndexingService.reIndex(issueManager.getIssueObject(issueId))
ImportUtils.setIndexIssues(wasIndexing)
}
}

(new TriageWorkflowJump()).doStuff(issue)

 

1 answer

0 votes
Karolina Wons_SaaSJet
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
November 23, 2022

Hi @Vivo Bandito 

Do you consider moving to another add-on, that could provide a more convenient way of time/status tracking?

Suggest an answer

Log in or Sign up to answer