Unable to Copy Issue Status on Subtask to a custom field on Issues returned by JQL

Issue #436 resolved
MEDITECH ADMIN TEAM created an issue

In attempting to create a Post Function using "Write field on issues returned by JQL query" we are encountering an error as reported in our Jira logs.

Our setup is as follows:

Select a source type: field in current issue Field is "Issue status - [Issue status]

Target field that will be set in issue returned by JQL query: "Coding Status - [Select List (single choice) ] - Note, this is a custom field that has the values associated with our issue status

JQL Query: issueFunction in parentsOf("issuekey = '%{00015}'")

When the transition is run we receive the following error in our Jira Log:

016-11-08 11:35:33,015 http-bio-8443-exec-485 ERROR ddeftos 695x352911x1 2uqyqx 172.30.190.232 /secure/WorkflowUIDispatcher.jspa [plugins.workflowToolbox.shared.ReflectionHelper] *** Object o: com.atlassian.jira.issue.managers.DefaultIssueManager@7d647e97; Method method: public abstract com.atlassian.jira.issue.Issue com.atlassian.jira.issue.IssueManager.updateIssue(com.atlassian.crowd.embedded.api.User,com.atlassian.jira.issue.MutableIssue,com.atlassian.jira.event.type.EventDispatchOption,boolean); Object... arguments: [Ljava.lang.Object;@183bdcb0; Cause: com.atlassian.jira.issue.status.StatusImpl cannot be cast to com.atlassian.jira.issue.customfields.option.Option java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at com.fca.jira.plugins.workflowToolbox.shared.ReflectionHelper.invokeMethod(ReflectionHelper.java:179) at com.fca.jira.plugins.workflowToolbox.shared.JIRACompatibilityHelper.updateIssue(JIRACompatibilityHelper.java:300) at com.fca.jira.plugins.workflowToolbox.shared.GeneralizedField.setValue(GeneralizedField.java:3798) at com.fca.jira.plugins.workflowToolbox.shared.GeneralizedField.setValue(GeneralizedField.java:3367) at com.fca.jira.plugins.workflowToolbox.shared.AbstractPostfunction.writeRemoteIssue(AbstractPostfunction.java:317) at com.fca.jira.plugins.workflowToolbox.WriteIssuesJQL.execute(WriteIssuesJQL.java:86) at com.opensymphony.workflow.AbstractWorkflow.executeFunction(AbstractWorkflow.java:1050) at com.opensymphony.workflow.AbstractWorkflow.transitionWorkflow(AbstractWorkflow.java:1446) at com.opensymphony.workflow.AbstractWorkflow.doAction(AbstractWorkflow.java:564) at com.atlassian.jira.workflow.OSWorkflowManager.doWorkflowActionInsideTxn(OSWorkflowManager.java:998) at com.atlassian.jira.workflow.OSWorkflowManager.doWorkflowAction(OSWorkflowManager.java:950) at com.atlassian.jira.bc.issue.DefaultIssueService.transition(DefaultIssueService.java:596) at com.atlassian.jira.bc.issue.DefaultIssueService.transition(DefaultIssueService.java:572) at com.atlassian.jira.web.action.workflow.SimpleWorkflowAction.doExecute(SimpleWorkflowAction.java:32) <+1> (ActionSupport.java:165) at com.atlassian.jira.action.JiraActionSupport.execute(JiraActionSupport.java:88) <+7> (DefaultInterceptorChain.java:39) (NestedInterceptorChain.java:31) (ChainedInterceptor.java:16) (DefaultInterceptorChain.java:35) (GenericDispatcher.java:225) (GenericDispatcher.java:189) (JiraWebworkActionDispatcher.java:152) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) <+2> (ApplicationFilterChain.java:303) (ApplicationFilterChain.java:208) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) <+14> (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (ChainedFilterStepRunner.java:87) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (XContentTypeOptionsNoSniffFilter.java:22) (AbstractHttpFilter.java:31) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (HeaderSanitisingFilter.java:44) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (IteratingFilterChain.java:46) (DelegatingPluginFilter.java:70) at com.atlassian.jira.onboarding.postsetup.ui.PostSetupAnnouncementsFilter.doFilter(PostSetupAnnouncementsFilter.java:61) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.jira.tzdetect.IncludeResourcesFilter.doFilter(IncludeResourcesFilter.java:40) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.jira.baseurl.IncludeResourcesFilter.doFilter(IncludeResourcesFilter.java:38) <+8> (AbstractHttpFilter.java:31) (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) (ContextFilter.java:25) (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.greenhopper.jira.filters.ClassicBoardRouter.doFilter(ClassicBoardRouter.java:59) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.mywork.client.filter.ServingRequestsFilter.doFilter(ServingRequestsFilter.java:37) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.prettyurls.filter.PrettyUrlsSiteMeshFixupFilter.doFilter(PrettyUrlsSiteMeshFixupFilter.java:36) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.prettyurls.filter.PrettyUrlsDispatcherFilter.doFilter(PrettyUrlsDispatcherFilter.java:60) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.prettyurls.filter.PrettyUrlsSiteMeshFilter.doFilter(PrettyUrlsSiteMeshFilter.java:92) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.prettyurls.filter.PrettyUrlsMatcherFilter.doFilter(PrettyUrlsMatcherFilter.java:56) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.labs.botkiller.BotKillerFilter.doFilter(BotKillerFilter.java:36) <+26> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (AccessLogFilter.java:105) (AccessLogFilter.java:89) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (XsrfTokenAdditionRequestFilter.java:54) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (SiteMeshFilter.java:181) (SiteMeshFilter.java:85) (SitemeshPageFilter.java:124) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (PageBuilderFilter.java:90) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (CommittedResponseHtmlErrorRecoveryFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (IteratingFilterChain.java:46) (DelegatingPluginFilter.java:70) at com.atlassian.prettyurls.filter.PrettyUrlsCombinedMatchDispatcherFilter.doFilter(PrettyUrlsCombinedMatchDispatcherFilter.java:61) <+22> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (SecurityFilter.java:239) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (TrustedApplicationsFilter.java:100) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (BaseLoginFilter.java:172) (JiraLoginFilter.java:70) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (IteratingFilterChain.java:46) (DelegatingPluginFilter.java:70) (OAuthFilter.java:79) (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.bonfire.web.filters.BonfireP3PFilter.doFilter(BonfireP3PFilter.java:42) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.prettyurls.filter.PrettyUrlsCombinedMatchDispatcherFilter.doFilter(PrettyUrlsCombinedMatchDispatcherFilter.java:61) <+13> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (ProfilingFilter.java:99) (JIRAProfilingFilter.java:19) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (AbstractJohnsonFilter.java:71) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176) at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) <+5> (UrlRewriteFilter.java:394) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (IteratingFilterChain.java:46) (DelegatingPluginFilter.java:70) at com.atlassian.analytics.client.filter.JiraAnalyticsFilter.doFilter(JiraAnalyticsFilter.java:40) at com.atlassian.analytics.client.filter.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:32) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.prettyurls.filter.PrettyUrlsCombinedMatchDispatcherFilter.doFilter(PrettyUrlsCombinedMatchDispatcherFilter.java:61) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:201) at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:178) at net.bull.javamelody.PluginMonitoringFilter.doFilter(PluginMonitoringFilter.java:85) at net.bull.javamelody.JiraMonitoringFilter.doFilter(JiraMonitoringFilter.java:106) <+45> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (ChainedFilterStepRunner.java:87) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (AbstractCachingFilter.java:33) (AbstractHttpFilter.java:31) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (AbstractEncodingFilter.java:41) (AbstractHttpFilter.java:31) (PathMatchingEncodingFilter.java:49) (AbstractHttpFilter.java:31) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (JiraStartupChecklistFilter.java:79) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (MultipartBoundaryCheckFilter.java:41) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (ChainedFilterStepRunner.java:87) (JiraFirstFilter.java:61) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (GzipFilter.java:121) (GzipFilter.java:92) (JiraGzipFilter.java:56) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (StandardWrapperValve.java:220) (StandardContextValve.java:122) (AuthenticatorBase.java:610) (StandardHostValve.java:171) (ErrorReportValve.java:103) (StandardEngineValve.java:116) (AccessLogValve.java:950) (CoyoteAdapter.java:408) (AbstractHttp11Processor.java:1070) (AbstractProtocol.java:611) (JIoEndpoint.java:316) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.ClassCastException: com.atlassian.jira.issue.status.StatusImpl cannot be cast to com.atlassian.jira.issue.customfields.option.Option at com.atlassian.jira.issue.customfields.impl.SelectCFType.getDbValueFromObject(SelectCFType.java:72) at com.atlassian.jira.issue.customfields.impl.AbstractSingleFieldType.createValue(AbstractSingleFieldType.java:161) at com.atlassian.jira.issue.fields.CustomFieldImpl.createValue(CustomFieldImpl.java:854) at com.atlassian.jira.issue.fields.CustomFieldImpl.updateValue(CustomFieldImpl.java:522) at com.atlassian.jira.issue.fields.CustomFieldImpl.updateValue(CustomFieldImpl.java:504) at com.atlassian.jira.issue.managers.DefaultIssueManager.updateIssue(DefaultIssueManager.java:875) at com.atlassian.jira.issue.managers.DefaultIssueManager.updateIssue(DefaultIssueManager.java:860) ... 224 more

Comments (18)

  1. Fidel Castro Armario repo owner

    Hi,

    Could you, please, tell me the version of JIRA and of JIRA Workflow Toolbox you are using?

  2. MEDITECH ADMIN TEAM reporter

    We are running 6.4.14 and Jira Workflow Toolbox 2.2.19. Where we are at with this problem is we can write the value to a new field when it is defined as a single line free text field. However we are unable to write the value to the custom field when it is a select list field. We have verified that the values we are attempting to write to the field match exactly an available choice for the field. Is there a reason we cannot write to a select list field?

  3. MEDITECH ADMIN TEAM reporter

    I wanted to add, the custom field is of type Select List, single choice. And have added a screen shot of the field.

  4. Fidel Castro Armario repo owner

    The problem is that source field has type Issue Status, and it's not automatically cast to Option.

    You can fix the problem doing the following changes in your post-function configuration:

    1. Source type: parsed text (basic mode)
    2. Source value:
    %{00016}
    

    note that %{00016} is field code for Issue status.

    In this solution we are composing a text value with the name of the status. Text values are automatically cast to option by the plugin when setting a Select List custom field.

  5. MEDITECH ADMIN TEAM reporter

    That worked. Thanks for your help.

    One final issue we are now having with this is that we are attempting to Create subtasks automatically and when doing this we cannot get this post function to execute. It does work when we manually create the subtask but not when we create the subtask based on a post function from another issue. Have you seen this type of issue before?

  6. Fidel Castro Armario repo owner

    Can you, please, attach an XML export of your workflow? It will be useful to see the way you are using the post-function.

  7. MEDITECH ADMIN TEAM reporter

    I have attached an XML export of the PD Coding Sub-Task Workflow which is using your post function on each transition. The problem that we are having is specifically with the Create transition.

    When we manually create a coding sub-task, the post function is doing exactly what we want.

    However, when the coding sub-task is auto-created using the Bob Swift Create on Transition Plugin, the post function appears to not be executed.

  8. MEDITECH ADMIN TEAM reporter

    Since we originally sent you that screen shot we discovered that the target field could be "Parent's ..... " so we modified the JQL to only return the current issue rather than use a JQL function that was a bit less efficient. From the this new screen shot you can see our target field is the parent of the subtask we are applying this post function to. So our issue is when a post function on a parent transition automates the creation of the subtask, the subtask's workflow has an "On Create" post function to copy the subtask's issue status back to it's parent. It does not work when the subtask is automatically created however it does work when the subtask is manually created.

  9. Fidel Castro Armario repo owner

    I think that the problem is that indexes are not yet updated just after subtask creation, and the JQL query is not returning the subtask. Anyway, you can do it simpler:

    Replace "Write field on issues returned by JQL query" with "Copy a parsed text to a field" post-function using the following configuration:

    • Target field: Parent's Coding Status
    • Parsing mode: basic
    • Text to be parsed...:
    %{00016}
    

    I have implemented successfully the same use case as yours, but using post-function "Create issues or subtasks" post-function (available in version 2.2.24_beta_3 which is almost ready to be released), and "Copy a parsed text to a field" post-function.

  10. MEDITECH ADMIN TEAM reporter

    We are already using another post function to create issues or sub-tasks and do not wish to switch at this time. In addition you state that you achieved this using a beta version which is not released. We were able to write the value to the parent during the initial creation by using a post function on the parent so we have solved our problem. Thank you for following up on this. This issue can be closed/resolved.

  11. Log in to comment