how to use script runner to switch project workflow scheme

BrianL November 7, 2017

how to use groovy code to change the workflow scheme for a JIRA project?

The WorkflowSchemeManager doesn't provide a method to remove or add workflow scheme from JIRA project

3 answers

4 votes
Alexey Matveev
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 7, 2017

Hello,

Suppose, you want to set workflow scheme from the template project to another project. The code would be something like that:

Project project = ComponentAccessor.getProjectManager().getProjectObjByKey("projectKey");

Project templateProject = ComponentAccessor.getProjectManager().getProjectObjByKey("projectKey");

ComponentAccessor.getWorkflowSchemeManager().addSchemeToProject(project, ComponentAccessor.getWorkflowSchemeManager().getSchemeFor(templateProject));
0 votes
BrianL November 20, 2017

hi Alex,

I want to copy a workflow scheme from a template project and assign that copied workflow scheme to a new project. i tried your code, but it doesn't work. It remove the workflow scheme from both template and target project. When i go to admin page edit the template workflow scheme, the log shows the error below. 

2017-11-21 04:04:51,206 http-nio-8080-exec-21 ERROR admin 244x10835x1 wllipk 10.209.96.235 /rest/globalconfig/latest/workflowschemeeditor/11401 [c.a.p.r.c.error.jersey.ThrowableExceptionMapper] Uncaught exception thrown by REST service: Passed List had more than one value.
java.lang.IllegalArgumentException: Passed List had more than one value.
at org.ofbiz.core.entity.EntityUtil.getOnly(EntityUtil.java:62)
at com.atlassian.jira.workflow.DefaultWorkflowSchemeManager.getSchemeForProject(DefaultWorkflowSchemeManager.java:364)
at com.atlassian.jira.workflow.DefaultWorkflowSchemeManager.getSchemeForProject(DefaultWorkflowSchemeManager.java:358)
at com.atlassian.jira.workflow.DefaultWorkflowSchemeManager.getWorkflowMap(DefaultWorkflowSchemeManager.java:315)
at sun.reflect.GeneratedMethodAccessor934.invoke(Unknown Source)
... 1 filtered

,

 

Regards

SilenceWang August 2, 2018
hi BrianL,I met same error like yours. did you fix it ?
captain1701 February 12, 2019

I had the same issue. You have to remove the current workflow scheme first (because the function name is "add..." and there shall only be one ;-)).

workflowSchemeManager.removeSchemesFromProject(project)

Result for me was that the scheme was changed properly according to the project settings page but the tickets have not been migrated to the new workflow. They still follow the old scheme.

Does anyone have a idea how to trigger this process?

Frederic Leroy July 17, 2019

I had the same problem and just found a solution.

 

You have to migrate your issues before you remove the schemes from the project.

 

Here a code extract sample i made

def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser)
def searchProvider = ComponentAccessor.getComponent(SearchProvider)
def query = jqlQueryParser.parseQuery("project = AAA")
def results = searchProvider.search(query, currentUser, PagerFilter.getUnlimitedFilter())

def issueManager = ComponentAccessor.getIssueManager()
results.getIssues().each() {
documentIssue ->
def issue = issueManager.getIssueObject(documentIssue.id)
workflowManager.migrateIssueToWorkflow(issue, newWorkflow, issue.getStatus())
0 votes
Steven F Behnke
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 7, 2017

WorkflowSchemeManager extends SchemeManager. You have a addSchemeToProject() method.

Suggest an answer

Log in or Sign up to answer