Workflow Share Form Configuration Not Rendering few Custom Properties.
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-16-2015 09:42 AM
Hi All,
I have created a customWorkFlow model and created custom workflow and configured the form in "share-config-custom.xml" with my custom properties, but still it doesn't retrive the values which I set during the workflow creation.
My custom WorkFlow Model.
Java codes where I am setting the values for my custom workflow properties,
My CustomWorkflow BPMN(its pretty Big but still I have show it completely here)
Form configuration for my custom workflow review task,
The properties
I have created a customWorkFlow model and created custom workflow and configured the form in "share-config-custom.xml" with my custom properties, but still it doesn't retrive the values which I set during the workflow creation.
My custom WorkFlow Model.
<?xml version="1.0" encoding="UTF-8"?><!– Definition of new Model –><model name="hcwf:workFlowModel" xmlns="http://www.alfresco.org/model/dictionary/1.0"> <!– Optional meta-data about the model –> <description>Custom Workflow Model</description> <author>Satheesh Kumar</author> <version>1.0</version> <!– Imports are required to allow references to definitions in other models –> <imports> <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d" /> <import uri="http://www.alfresco.org/model/bpm/1.0" prefix="bpm" /> <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d"/> </imports> <!– Introduction of new namespaces defined by this model –> <namespaces> <namespace uri="http://www.myorg.com/model/workflow/1.0" prefix="hcwf" /> </namespaces> <types> <type name="hcwf:addNewProductTask"> <parent>bpm:startTask</parent> <properties> <property name="hcwf:sourceNodeRef"> <type>d:noderef</type> <mandatory>true</mandatory> <multiple>false</multiple> </property> <property name="hcwf:destinationParentNodeRef"> <type>d:noderef</type> <mandatory>true</mandatory> <multiple>false</multiple> </property> <property name="hcwf:packageInformation"> <type>d:text</type> <mandatory>true</mandatory> <multiple>false</multiple> </property> <property name="hcwf:workDescription"> <type>d:text</type> <mandatory>true</mandatory> <multiple>false</multiple> </property> </properties> </type> <type name="hcwf:activitiReviewTask"> <parent>bpm:activitiOutcomeTask</parent> <properties> <property name="hcwf:reviewOutcome"> <type>d:text</type> <default>Reject</default> <constraints> <constraint type="LIST"> <parameter name="allowedValues"> <list> <value>Approve</value> <value>Reject</value> </list> </parameter> </constraint> </constraints> </property> </properties> <overrides> <property name="bpm:packageItemActionGroup"> <default>read_package_item_actions</default> </property> <property name="bpm:outcomePropertyName"> <default>{http://www.myorg.com/model/workflow/1.0}reviewOutcome</default> </property> </overrides> </type> <type name="hcwf:activitiReviseTask"> <parent>bpm:activitiOutcomeTask</parent> <properties> <property name="hcwf:reviseOutcome"> <type>d:text</type> <default>Abort</default> <constraints> <constraint type="LIST"> <parameter name="allowedValues"> <list> <value>Re-Submit</value> <value>Abort</value> </list> </parameter> </constraint> </constraints> </property> </properties> <overrides> <property name="bpm:packageItemActionGroup"> <default>read_package_item_actions</default> </property> <property name="bpm:outcomePropertyName"> <default>{http://www.myorg.com/model/workflow/1.0}reviseOutcome</default> </property> </overrides> </type> </types> </model>
Java codes where I am setting the values for my custom workflow properties,
public class HCCustomModel { //Model NameSpace Constants. public static final String NAMESPACE_HC_CONTENT_MODEL = "http://www.myorg.com/model/content/1.0"; public static final String NAMESPACE_HC_WORKFLOW_MODEL = "http://www.myorg.com/model/workflow/1.0"; //Workflow related tasks. public static final QName QNAME_HC_SOURCENODEREF = QName.createQName(NAMESPACE_HC_WORKFLOW_MODEL,"sourceNodeRef"); public static final QName QNAME_HC_DEST_PARENTNODEREF = QName.createQName(NAMESPACE_HC_WORKFLOW_MODEL,"destinationParentNodeRef"); public static final QName QNAME_HC_WORKDESCRIPTION = QName.createQName(NAMESPACE_HC_WORKFLOW_MODEL,"workDescription"); public static final QName QNAME_HC_PACKAGEINFORMATION = QName.createQName(NAMESPACE_HC_WORKFLOW_MODEL,"packageInformation"); }//WorkFlow Specific Codes,NodeRef wfPackage = getServiceRegistry().getWorkflowService().createPackage(destProductCodeFolderNodeRef);Map<QName, Serializable> workFlowProps = new HashMap<QName, Serializable>();ChildAssociationRef childAssoc = getServiceRegistry().getNodeService().getPrimaryParent(destProductCodeFolderNodeRef);NodeRef productRootNodeRef = HCCustomUtils.getRootNodeRef(HCConstants.PRODUCT_LIBRARY);NodeRef destinationNodeRef = HCCustomUtils.getChildFolderNodeRef(productRootNodeRef, destProductTypeFolder, false);workFlowProps.put(WorkflowModel.ASSOC_PACKAGE, wfPackage);workFlowProps.put(WorkflowModel.PROP_CONTEXT, childAssoc.getParentRef());workFlowProps.put(HCCustomModel.QNAME_HC_SOURCENODEREF, destProductCodeFolderNodeRef);workFlowProps.put(HCCustomModel.QNAME_HC_DEST_PARENTNODEREF, destinationNodeRef); workFlowProps.put(HCCustomModel.QNAME_HC_WORKDESCRIPTION, "HC workDescription");workFlowProps.put(HCCustomModel.QNAME_HC_PACKAGEINFORMATION, "HC packageInformation");workFlowProps.put(HCCustomModel.QNAME_BPM_WORK_FLOW_DESCRIPTION, "Content Added for the Product Type \""+destProductTypeFolder+"\"");workFlowProps.put(HCCustomModel.QNAME_BPM_COMMENT, "Please review the uploaded content.");workFlowProps.put(HCCustomModel.QNAME_BPM_SEND_EMAIL, true);try{ HCCommonUtils.triggerWorkFlow("activiti$addNewProduct", workFlowProps);}catch(Exception e){ throw new AlfrescoRuntimeException("There was an error while initiating workflow named \"activiti$myAddNewProduct\". "+e.getMessage());}
My CustomWorkflow BPMN(its pretty Big but still I have show it completely here)
<?xml version="1.0" encoding="UTF-8"?><definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test"> <process id="addNewProduct" name="Add New Product WorkFlow" isExecutable="true"> <startEvent id="startevent1" name="Start" activiti:formKey="hcwf:addNewProductTask"></startEvent> <userTask id="reviewTask" name="Review Product Content Task" activiti:candidateGroups="GROUP_PRODUCT_MANAGER" activiti:formKey="hcwf:activitiReviewTask"> <extensionElements> <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> <activiti:field name="script"> <activiti:string><![CDATA[if (typeof hcwf_sourceNodeRef != 'undefined') task.setVariable('hcwf_sourceNodeRef', hcwf_sourceNodeRef); if (typeof hcwf_destinationParentNodeRef != 'undefined') task.setVariable('hcwf_destinationParentNodeRef', hcwf_destinationParentNodeRef); if (typeof hcwf_workDescription != 'undefined') task.setVariable('hcwf_workDescription', hcwf_workDescription); if (typeof hcwf_packageInformation != 'undefined') task.setVariable('hcwf_packageInformation', hcwf_packageInformation); if (typeof bpm_comment != 'undefined') task.setVariable('bpm_comment', bpm_comment); logger.log("hcwf_sourceNodeRef:"+hcwf_sourceNodeRef); logger.log("hcwf_destinationParentNodeRef:"+hcwf_destinationParentNodeRef); logger.log("hcwf_workDescription:"+hcwf_workDescription); logger.log("hcwf_packageInformation:"+hcwf_packageInformation);]]></activiti:string> </activiti:field> </activiti:taskListener> <activiti:taskListener event="complete" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> <activiti:field name="script"> <activiti:string><![CDATA[if(task.getVariableLocal('hcwf_reviewOutcome') == 'Approve') { execution.setVariable('hcwf_approved', true); logger.log("task.getVariableLocal('hcwf_reviewOutcome')"+task.getVariableLocal('hcwf_reviewOutcome')); } else { execution.setVariable('hcwf_approved', false); logger.log("task.getVariableLocal('hcwf_reviewOutcome')"+task.getVariableLocal('hcwf_reviewOutcome')); } execution.setVariable('hcwf_manager',person); execution.setVariable('bpm_workflowDescription', task.getVariable('bpm_workflowDescription')); execution.setVariable('bpm_description', task.getVariable('bpm_description')); execution.setVariable('bpm_comment', task.getVariable('bpm_comment'));]]></activiti:string> </activiti:field> </activiti:taskListener> </extensionElements> </userTask> <userTask id="reviseTask" name="Revise Product Content Task" activiti:assignee="${initiator.properties.userName}" activiti:formKey="hcwf:activitiReviseTask"> <extensionElements> <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> <activiti:field name="script"> <activiti:string><![CDATA[if (typeof bpm_comment != 'undefined') task.setVariable('bpm_comment', bpm_comment); logger.log("Revise Task, Create - bpm_workflowDescription: "+ bpm_workflowDescription); logger.log("Revise Task, Create - bpm_description: "+ bpm_description);]]></activiti:string> </activiti:field> </activiti:taskListener> <activiti:taskListener event="complete" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> <activiti:field name="script"> <activiti:string><![CDATA[if(task.getVariableLocal('hcwf_reviseOutcome') == 'Re-Submit') { execution.setVariable('hcwf_resubmit', true); logger.log("task.getVariableLocal('hcwf_reviseOutcome')"+task.getVariableLocal('hcwf_reviseOutcome')); } else { execution.setVariable('hcwf_resubmit', false); logger.log("task.getVariableLocal('hcwf_reviseOutcome')"+task.getVariableLocal('hcwf_reviseOutcome')); } execution.setVariable('bpm_comment', task.getVariable('bpm_comment'));]]></activiti:string> </activiti:field> </activiti:taskListener> </extensionElements> </userTask> <endEvent id="endevent1" name="End"></endEvent> <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="reviewTask"></sequenceFlow> <sequenceFlow id="flow3" sourceRef="reviewTask" targetRef="approveTask"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${hcwf_approved == true}]]></conditionExpression> </sequenceFlow> <sequenceFlow id="flow4" sourceRef="reviewTask" targetRef="reviseTask"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${hcwf_approved == false}]]></conditionExpression> </sequenceFlow> <sequenceFlow id="flow5" sourceRef="reviseTask" targetRef="abortTask"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${hcwf_resubmit == false}]]></conditionExpression> </sequenceFlow> <sequenceFlow id="flow6" sourceRef="reviseTask" targetRef="resubmitTask"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${hcwf_resubmit == true}]]></conditionExpression> </sequenceFlow> <sequenceFlow id="flow7" sourceRef="approveTask" targetRef="endevent1"></sequenceFlow> <sequenceFlow id="flow8" sourceRef="abortTask" targetRef="endevent1"></sequenceFlow> <userTask id="resubmitTask" name="Review the Resubmitted Product Content Task" activiti:assignee="${hcwf_manager.properties.userName}" activiti:formKey="hcwf:activitiReviewTask"> <extensionElements> <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> <activiti:field name="script"> <activiti:string><![CDATA[if (typeof bpm_comment != 'undefined') task.setVariable('bpm_comment', bpm_comment);]]></activiti:string> </activiti:field> </activiti:taskListener> <activiti:taskListener event="complete" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> <activiti:field name="script"> <activiti:string><![CDATA[if(task.getVariableLocal('hcwf_reviewOutcome') == 'Approve') { execution.setVariable('hcwf_approved', true); logger.log("task.getVariableLocal('hcwf_reviewOutcome')"+task.getVariableLocal('hcwf_reviewOutcome')); } else { execution.setVariable('hcwf_approved', false); logger.log("task.getVariableLocal('hcwf_reviewOutcome')"+task.getVariableLocal('hcwf_reviewOutcome')); } execution.setVariable('bpm_workflowDescription', task.getVariable('bpm_workflowDescription')); execution.setVariable('bpm_comment', task.getVariable('bpm_comment'));]]></activiti:string> </activiti:field> </activiti:taskListener> </extensionElements> </userTask> <sequenceFlow id="flow9" sourceRef="resubmitTask" targetRef="approveTask"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${hcwf_approved == true}]]></conditionExpression> </sequenceFlow> <sequenceFlow id="flow10" sourceRef="resubmitTask" targetRef="reviseTask"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${hcwf_approved == false}]]></conditionExpression> </sequenceFlow> <serviceTask id="approveTask" name="Approve Task" activiti:class="org.hc.workflows.ApproveRejectExecution"></serviceTask> <serviceTask id="abortTask" name="Abort Task" activiti:class="org.hc.workflows.ApproveRejectExecution"></serviceTask> </process> //Removed the BPMN Diagram</definitions>
Form configuration for my custom workflow review task,
<config evaluator="task-type" condition="hcwf:activitiReviewTask"> <forms> <form> <field-visibility> <show id="packageItems" force="true" /> <show id="hcwf:workDescription" force="true" /> //This property is still retrieved with empty value, though I set in my Java class <show id="hcwf:packageInformation" force="true" /> //This property is still retrieved with empty value, though I set in my Java class <show id="hcwf:reviewOutcome" force="true" /> <show id="bpm:comment" force="true" /> <!– <show id="transitions" /> –> </field-visibility> <appearance> <set id="productPackage" appearance="title" label-id="workflow.product.package.details" /> <set id="workDesc" appearance="title" label-id="workflow.product.work.description" /> <set id="packageInfo" appearance="title" label-id="workflow.product.package.information" /> <set id="review" appearance="title" label-id="workflow.product.review" /> <set id="comment" appearance="title" label-id="workflow.product.review.comment" /> <field id="packageItems" set="productPackage" /> <filed id="hcwf:workDescription" set="workDesc"> <!– <control template="/org/alfresco/components/form/controls/info.ftl"> </control> –> </filed> <filed id="hcwf:packageInformation" set="packageInfo"> <!– <control template="/org/alfresco/components/form/controls/textarea.ftl"></control> –></filed> <field id="hcwf:reviewOutcome" set="review" /> <field id="bpm:comment" set="comment"> <control template="/org/alfresco/components/form/controls/textarea.ftl" /> </field> </appearance> </form> </forms> </config>
The properties
<show id="hcwf:workDescription" force="true" /> and <show id="hcwf:packageInformation" force="true" />
are retrieved with empty values, can you please let me know why these two property values are not showing in my review form?
Labels:
- Labels:
-
Archive
2 REPLIES 2
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-17-2015 08:12 AM
Aren't you missing the properties in type "hcwf:activitiReviewTask"? You have set them in start task but they are missing from the review task. I'm not sure if you need to define them again but I do think so. Perhaps worth of a try at least.
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-29-2015 02:21 PM
As I understood your question, you wanted to carry some values from the start workflow page to edit task pages.
If this is correct, you need a change a bit on the model. You need to group, these kind of fields into aspect and make then as mandatory aspects.
In the share-form-config.xml, just include the fields, as normal.
This way, you can share the values across tasks within the workflow.
Please let me know, if you need additional information on this.
If this is correct, you need a change a bit on the model. You need to group, these kind of fields into aspect and make then as mandatory aspects.
<type name="myCoWF:productCreationStartTask"> <title>Product Creation Start Task</title> <parent>bpm:startTask</parent> <mandatory-aspects> <aspect>myCoWF:productRequestFields</aspect> </mandatory-aspects> </type> <type name="myCoWF:productCreationReviewTask"> <title>Product Creation Review Task</title> <parent>bpm:activitiOutcomeTask</parent> <properties> <property name="myCoWF:oproductCreationReviewOutcome"> <type>d:text</type> <default>Reject</default> <constraints> <constraint ref="myCoWF:reviewOutcomeOptionConstraint" /> </constraints> </property> </properties> <overrides> <property name="bpm:packageActionGroup"> <default>add_package_item_actions</default> </property> <property name="bpm:packageItemActionGroup"> <default>edit_package_item_actions</default> </property> <property name="bpm:outcomePropertyName"> <default>{myCoWF.workflowModel}productCreationReviewOutcome</default> </property> </overrides> <mandatory-aspects> <aspect>myCoWF:productRequestFields</aspect> </mandatory-aspects> </type> ……<aspects> <aspect name="myCoWF:productRequestFields"> <properties> <property name="myCoWF:productName"> <title>Product Name</title> <type>d:text</type> <mandatory>true</mandatory> <multiple>false</multiple> </property> <property name="myCoWF:productTitle"> <title>Product Title</title> <type>d:text</type> <mandatory>false</mandatory> <multiple>false</multiple> </property> <property name="myCoWF:productDescription"> <title>Product Description</title> <type>d:text</type> <mandatory>false</mandatory> <multiple>false</multiple> </property> </aspect></aspects>
In the share-form-config.xml, just include the fields, as normal.
This way, you can share the values across tasks within the workflow.
Please let me know, if you need additional information on this.
