Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

WorkflowTransitionUtil.progress() does not change issue status

Himanshu Agarwal June 7, 2019

Hi,
My requirement is to change issue status as per one of my business logic. I am using below code in issue event listener.

WorkflowTransitionUtil workflowTransitionUtil = (WorkflowTransitionUtil) JiraUtils.loadComponent(WorkflowTransitionUtilImpl.class);
String oldStatusId = changeHistoryManager.getChangeItemsForField(issue, "status").get(changeHistoryManager.getChangeItemsForField(issue, "status").size() - 1).getFrom();
MutableIssue mutableIssue = issueManager.getIssueByCurrentKey(issue.getKey());
mutableIssue.setStatusId(oldStatusId);
Map params = new HashMap();
params.put(IssueFieldConstants.STATUS, oldStatusId);

try {
workflowTransitionUtil.setIssue(mutableIssue);
workflowTransitionUtil.setUserkey(issueEvent.getUser().getUsername());
workflowTransitionUtil.setAction(actionId);
workflowTransitionUtil.setParams(params);
ErrorCollection errorCollection = workflowTransitionUtil.validate();
if (!errorCollection.hasAnyErrors()){
workflowTransitionUtil.progress();
}
}catch (Exception e){
log.error(e.getMessage());
}

I am getting below exception while running this code.

2019-06-07 13:34:39,208 http-nio-8081-exec-13 ERROR agarwal.himanshu 812x1504x1 1j9npzr 0:0:0:0:0:0:0:1 /secure/WorkflowUIDispatcher.jspa [c.a.jira.workflow.OSWorkflowManager] Caught exception while attempting to perform action 31 from workflow 10101 on issue 'TA-5'
com.atlassian.jira.transaction.TransactionRuntimeException: org.ofbiz.core.entity.GenericTransactionException: Commit failed, rollback previously requested by nested transaction.
at com.atlassian.jira.transaction.TransactionSupportImpl$TransactionImpl.commit(TransactionSupportImpl.java:91)
at com.atlassian.jira.workflow.OSWorkflowManager.doWorkflowActionInsideTxn(OSWorkflowManager.java:837)
at com.atlassian.jira.workflow.OSWorkflowManager.doWorkflowAction(OSWorkflowManager.java:787)
at com.atlassian.jira.bc.issue.DefaultIssueService.transition(DefaultIssueService.java:492)
at com.atlassian.jira.web.action.workflow.SimpleWorkflowAction.doExecute(SimpleWorkflowAction.java:28)
... 1 filtered
at com.atlassian.jira.action.JiraActionSupport.execute(JiraActionSupport.java:63)
... 7 filtered
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
... 48 filtered
at com.atlassian.greenhopper.jira.filters.ClassicBoardRouter.doFilter(ClassicBoardRouter.java:62)
... 12 filtered
at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
... 58 filtered
at com.atlassian.jira.security.JiraSecurityFilter.lambda$doFilter$0(JiraSecurityFilter.java:66)
... 1 filtered
at com.atlassian.jira.security.JiraSecurityFilter.doFilter(JiraSecurityFilter.java:64)
... 39 filtered
at com.atlassian.jira.servermetrics.CorrelationIdPopulatorFilter.doFilter(CorrelationIdPopulatorFilter.java:30)
... 10 filtered
at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
... 4 filtered
at com.atlassian.web.servlet.plugin.LocationCleanerFilter.doFilter(LocationCleanerFilter.java:36)
... 26 filtered
at com.atlassian.jira.servermetrics.MetricsCollectorFilter.doFilter(MetricsCollectorFilter.java:25)
... 23 filtered
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.ofbiz.core.entity.GenericTransactionException: Commit failed, rollback previously requested by nested transaction.
at org.ofbiz.core.entity.TransactionUtil.commitLocalTransaction(TransactionUtil.java:345)
at com.atlassian.core.ofbiz.util.CoreTransactionUtil.commit(CoreTransactionUtil.java:62)
at com.atlassian.jira.transaction.TransactionSupportImpl$TransactionImpl.commit(TransactionSupportImpl.java:86)

Please help me out of this problem.

1 answer

0 votes
Tarun Sapra
Community Champion
June 7, 2019

Hello @Himanshu Agarwal 

I suggest you to use "IssueService" for issue transition.

Here's an example of working code.

https://gist.github.com/tarunsapra/e2f2e5de899c7c52a39fbee2630ef343#file-transition_linkedissue-groovy

Himanshu Agarwal June 7, 2019

Hello Tarun,

Thanks for the reply.

I am getting same exception using this also. This is my code.

 

IssueManager issueManager = ComponentAccessor.getIssueManager();
IssueService issueService = ComponentAccessor.getIssueService();
IssueWorkflowManager issueWorkflowManager = ComponentAccessor.getComponent(IssueWorkflowManager.class);
ChangeHistoryManager changeHistoryManager = ComponentAccessor.getChangeHistoryManager();
ApplicationUser user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser();

CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager();
/*CustomField parentLink = customFieldManager.getCustomFieldObject('Parent Link');

Object customFieldValue = issue.getCustomFieldValue(parentLink);*/
MutableIssue parentIssue = issueManager.getIssueByCurrentKey(issue.getKey());
Collection<ActionDescriptor> actions = issueWorkflowManager.getAvailableActions(issue, user);
int actionId = 0;
for (ActionDescriptor actionDescriptor : actions) {
if (actionDescriptor.getName().equalsIgnoreCase("Done")) {
actionId = actionDescriptor.getId();
break;
}
}
IssueInputParameters inputParams = issueService.newIssueInputParameters();
Map param = new HashMap<>();
String oldStatusId = changeHistoryManager.getChangeItemsForField(issue, "status").get(changeHistoryManager.getChangeItemsForField(issue, "status").size() - 1).getFrom();
param.put("status",oldStatusId);
IssueService.TransitionValidationResult validationResult = issueService.validateTransition(user, parentIssue.getId(), actionId, inputParams);
if (validationResult.isValid()){
IssueService.IssueResult issueResult = issueService.transition(user, validationResult);
}

Suggest an answer

Log in or Sign up to answer