Forums

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

workflowTransistionUtil failing if use non 'Task' issue type

Diane Burns January 29, 2019

Trying to implement that if a sub-task moves to IN WORK that the parent also moves to IN WORK. 

I found the following code from https://community.atlassian.com/t5/Jira-Core-questions/Script-Runner-Transition-parent-issue-based-on-subtask-status/qaq-p/63722

import com.opensymphony.workflow.WorkflowContext;
import com.atlassian.jira.config.SubTaskManager;
import com.atlassian.jira.workflow.WorkflowTransitionUtil;
import com.atlassian.jira.workflow.WorkflowTransitionUtilImpl;
import com.atlassian.jira.util.JiraUtils;
import com.atlassian.jira.issue.MutableIssue;
import com.atlassian.jira.component.ComponentAccessor
import org.apache.log4j.Logger
import org.apache.log4j.Level
def log = Logger.getLogger(getClass())
log.setLevel(Level.DEBUG)

String currentUser = ((WorkflowContext) transientVars.get("context")).getCaller()
WorkflowTransitionUtil workflowTransitionUtil = (WorkflowTransitionUtil) JiraUtils.loadComponent(WorkflowTransitionUtilImpl.class)
MutableIssue parent = issue.getParentObject() as MutableIssue
def issueTypeName = issue.issueTypeObject.name
def parentTypeName = parent.issueTypeObject.name

log.debug "issue: "+issue.key
log.debug "issue id: "+issue
log.debug "issue type: "+issueTypeName
log.debug "parent: "+parent.key
log.debug "parent id: "+parent
log.debug "parent type: "+parentTypeName
log.debug "currentUser: "+currentUser

String originalParentStatus = parent.getStatus().getSimpleStatus().getName()
def isDevBacklogStatus = originalParentStatus in [ 'Open' ]
log.debug "parent status: >>"+originalParentStatus+"<<"

if (isDevBacklogStatus) {
     log.debug "In set status"
     workflowTransitionUtil.setIssue(parent)
     workflowTransitionUtil.setUserkey(currentUser)
     workflowTransitionUtil.setAction(11)
     if (workflowTransitionUtil.validate()) {
          workflowTransitionUtil.progress()
     }
}

My project has three issue types 'Task','Production Issue' and 'Sub-Task'.  All three issue types use the same workflow.

The following script works if you move a 'Sub-Task' of a task to IN WORK, it moves the parent 'Task' to IN WORK, however if the 'Sub-Task' is under the 'Production Issue' it fails with the following:

2019-01-29 13:28:45,659 DEBUG [Script58]: issue: SCR-10 
2019-01-29 13:28:45,659 DEBUG [Script58]: issue id: SCR-10
2019-01-29 13:28:45,659 DEBUG [Script58]: issue type: Sub-task
2019-01-29 13:28:45,659 DEBUG [Script58]: parent: SCR-9
2019-01-29 13:28:45,659 DEBUG [Script58]: parent id: SCR-9
2019-01-29 13:28:45,659 DEBUG [Script58]: parent type: Production Issue
2019-01-29 13:28:45,659 DEBUG [Script58]: currentUser: dburns
2019-01-29 13:28:45,660 DEBUG [Script58]: parent status: >>Open<<
2019-01-29 13:28:45,660 DEBUG [Script58]: In set status
2019-01-29 13:28:45,661 DEBUG [Script58]: has screen
2019-01-29 13:28:45,664 WARN [common.UserScriptEndpoint]: Script console script failed:
java.lang.IllegalArgumentException: Issue Type for issue with id '77232' is null.
at com.atlassian.jira.workflow.OSWorkflowManager.getWorkflow(OSWorkflowManager.java:284)
at com.atlassian.jira.permission.PermissionContextImpl.getRelevantStepDescriptor(PermissionContextImpl.java:67)
at com.atlassian.jira.permission.WorkflowPermissionFactory.getWorkflowPermissions(WorkflowPermissionFactory.java:33)
at com.atlassian.jira.security.WorkflowBasedPermissionManager.workflowPermissionCheck(WorkflowBasedPermissionManager.java:196)
at com.atlassian.jira.security.WorkflowBasedPermissionManager.workflowPermissionCheck(WorkflowBasedPermissionManager.java:172)
at com.atlassian.jira.security.WorkflowBasedPermissionManager.workflowPermissionCheck(WorkflowBasedPermissionManager.java:137)
at com.atlassian.jira.security.WorkflowBasedPermissionManager.hasPermission(WorkflowBasedPermissionManager.java:83)
at com.atlassian.jira.security.DefaultPermissionManager.hasPermission(DefaultPermissionManager.java:103)
at com.atlassian.jira.security.WorkflowBasedPermissionManager.hasPermission(WorkflowBasedPermissionManager.java:76)
at com.atlassian.jira.security.ApplicationRequiredPermissionManager.lambda$hasPermission$0(ApplicationRequiredPermissionManager.java:71)
at com.atlassian.jira.security.ApplicationRequiredPermissionManager.checkUserHasApplicationOrFalse(ApplicationRequiredPermissionManager.java:187)
at com.atlassian.jira.security.ApplicationRequiredPermissionManager.hasPermission(ApplicationRequiredPermissionManager.java:71)
at com.atlassian.jira.security.PublicAccessPermissionManager.lambda$hasPermission$0(PublicAccessPermissionManager.java:75)
at com.atlassian.jira.security.PublicAccessPermissionManager.checkPublicAccessEnabledOrDelegate(PublicAccessPermissionManager.java:193)
at com.atlassian.jira.security.PublicAccessPermissionManager.hasPermission(PublicAccessPermissionManager.java:75)
at com.atlassian.jira.config.component.SwitchingInvocationHandler.invoke(SwitchingInvocationHandler.java:22)
at com.sun.proxy.$Proxy11.hasPermission(Unknown Source)
at com.atlassian.jira.issue.fields.AbstractOrderableField.hasPermission(AbstractOrderableField.java:274)
at com.atlassian.jira.issue.fields.FixVersionsSystemField.isShown(FixVersionsSystemField.java:61)
at com.atlassian.jira.issue.fields.screen.AbstractFieldScreenLayoutItem.isShown(AbstractFieldScreenLayoutItem.java:75)
at com.atlassian.jira.issue.fields.screen.FieldScreenRenderLayoutItemImpl.isShow(FieldScreenRenderLayoutItemImpl.java:65)
at com.atlassian.jira.workflow.WorkflowTransitionUtilImpl.progress(WorkflowTransitionUtilImpl.java:341)
at com.atlassian.jira.workflow.WorkflowTransitionUtil$progress$3.call(Unknown Source)
at Script58.run(Script58.groovy:53)

 

1 answer

1 accepted

0 votes
Answer accepted
Diane Burns March 19, 2019

Scrapped the idea of trying to do this as a post-function and created a listener to move it instead and it is now working...

Suggest an answer

Log in or Sign up to answer