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.
Hello @Himanshu Agarwal
I suggest you to use "IssueService" for issue transition.
Here's an example of working code.
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);
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.