Expand my Community achievements bar.

SOLVED

Workflow MetaDataMap issue

Avatar

Level 10

This question was posted today at 5:18 am EST -- however - it appears to be gone. We have re-entered as it AEM ENG has an answer that will benefit the AEM community:

 

Hi!
I've a workflow with (basically) two steps. The first step puts the userId in the workflow MetaDataMap. The second step, retrieves the userId from workflow MetaDataMap:
•    Step 1:

workflowData.getMetaDataMap().put("initiator", workItem.getWorkflow().getInitiator()); //getInitiator() returns String
•    Step 2:

String initiator = (String) workItem.getWorkflowData().getMetaDataMap().get("initiator");
When the workflow initiator is 'Administrator', I've no problems (initiator is populated with "admin"). This works fine!
But when the workflow initiator is another user, I get this error message:
    ...
    Caused by: java.lang.ClassCastException: org.apache.jackrabbit.spi.commons.value.QValueValue cannot be cast to java.lang.String
    ...
    
Any advice? Thanks in advance!

1 Accepted Solution

Avatar

Correct answer by
Employee

HI,

When retrieving values from the workflow metadata map always provide the type you wish you retrieve from the map.  ie:

String initiator = workItem.getWorkflowData().getMetaDataMap().get("initiator", String.class);

Notice you also don't need the cast.

Hope this helps,

Will

View solution in original post

7 Replies

Avatar

Correct answer by
Employee

HI,

When retrieving values from the workflow metadata map always provide the type you wish you retrieve from the map.  ie:

String initiator = workItem.getWorkflowData().getMetaDataMap().get("initiator", String.class);

Notice you also don't need the cast.

Hope this helps,

Will

Avatar

Level 10

Will,

I don't know if i am the only one facing the issue, but i see that in participant step(after transition from a process step that does a workflowData.getMetaDataMap().put) if i have the statement before returning the groupname

        workflowData.getMetaDataMap().put("principalName",principalName); // doesn't work


It just doesn't store the value infact none of values, any clue?  This happens in participant step

 workflowData.getMetaDataMap().get("groupPath")) - As i see the line returns the metadata under /etc/workflow/instances/2013-10-11/model_928290622341729/data/metaData

Regards,

Avatar

Employee

Hi,

Are you on CQ 5.6.0?  It's possible this was an issue introduced in 5.6.0 which has been resolved in 5.6.1.  

 

Will

Avatar

Level 10

Will McGauley wrote...

Hi,

Are you on CQ 5.6.0?  It's possible this was an issue introduced in 5.6.0 which has been resolved in 5.6.1.  

 

Will

 

Yes Will, am working on 5.6.0, i will let you know after checking it in 5.6.1.

Avatar

Level 10

Will McGauley wrote...

Hi,

Are you on CQ 5.6.0?  It's possible this was an issue introduced in 5.6.0 which has been resolved in 5.6.1.  

 

Will

 

Hello Will,

Now here's what I've tried on 5.6.1 and my observations are as follows.

In 5.6 i see in participant step when i set item.getMetaDataMap().put("langCode", langCode); it just does not set the value however in 5.6.1, i see it as part of workitem for the node in transition. (path :: /etc/workflow/instances/2013-10-15/model_335189573792558/history/1381866456363/workItem/metaData)

Also in 5.6.1, when i run workflowData.getMetaDataMap().put("groupPath","test") and try to replace existing groupPath (set by a prior process step) value it does not overwrite the existing value, in process step.

In case of Participant step

Now when i set         workflowData.getMetaDataMap().put("groupPath","test"); in participant step , it just does not replace the old existing metadata value for "groupPath", in /etc/workflow/instances/2013-10-15/model_335189573792558/data/metaData,  same occurs with process step if groupPath property already exists.

when i try to create a new variable group1Path instead of groupPath in participant step,  using     workflowData.getMetaDataMap().put("group1Path","test"), I don't see the property group1Path under /etc/workflow/instances/2013-10-15/model_335189573792558/data/metaData. while in process step (in my case process step follows the custom participant step) when i have workflowData.getMetaDataMap().put("group1Path","test"), it creates a property under /etc/workflow/instances/2013-10-15/model_335189573792558/data/metaData

In general my observations are in participant step i call workflowData.getMetaDataMap().put("abc","test") and it just does not work in case of creating new metadata property or replacing the value of existing property, In case of process step overwriting exisiting property value does not work, while creating new property works.

Please let me know if you happen to see the issue.

Regards,

Nicole

Avatar

Employee

Hi Nicole - Sorry I didn't see your previous reply.

I canot reproduce your inability to overwrite metadata values from a process step.  I wonder if you could share more code?

Also, I think I need some additional info on how you are building your own participant step - can you let me know how you accomplished this and why you wanted to?  

Much appreciated,

Will