diff --git a/config/alfresco/model/bpmModel.xml b/config/alfresco/model/bpmModel.xml index 318154ceed..6faf5bffcd 100644 --- a/config/alfresco/model/bpmModel.xml +++ b/config/alfresco/model/bpmModel.xml @@ -8,7 +8,7 @@ - + @@ -76,6 +76,7 @@ Task Identifier d:long true + true @@ -103,6 +104,8 @@ Status d:text true + true + Not Yet Started @@ -110,6 +113,8 @@ Priority d:int + true + 2 @@ -117,6 +122,8 @@ Percentage Complete d:int + true + 0 @@ -176,23 +183,35 @@ d:text - - Task Context d:noderef + + + Task Outcome + d:text + + d:noderef true - - - + + + + d:text + + + + + d:text + workflow_item_read_actions + diff --git a/config/alfresco/model/workflowModel.xml b/config/alfresco/model/workflowModel.xml index 244417251a..f1029ac830 100644 --- a/config/alfresco/model/workflowModel.xml +++ b/config/alfresco/model/workflowModel.xml @@ -36,6 +36,7 @@ Review Priority d:int + 2 @@ -60,6 +61,37 @@ + + + + workflow_collection_actions + + + + workflow_item_collection_actions + + + + + + + + + + + + + Review Task + bpm:workflowTask + + + + + workflow_item_edit_actions + + + + diff --git a/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java b/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java index 38d76d2267..19b45f385e 100644 --- a/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java +++ b/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngine.java @@ -20,6 +20,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.Serializable; import java.util.ArrayList; +import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -39,6 +40,7 @@ import org.alfresco.repo.workflow.WorkflowModel; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.dictionary.AspectDefinition; import org.alfresco.service.cmr.dictionary.AssociationDefinition; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.PropertyDefinition; import org.alfresco.service.cmr.dictionary.TypeDefinition; @@ -1131,10 +1133,20 @@ public class JBPMEngine extends BPMEngine } // convert property value - value = (Serializable)DefaultTypeConverter.INSTANCE.convert(propDef.getDataType(), value); - if (value instanceof NodeRef) + if (value instanceof Collection) { - value = new JBPMNode((NodeRef)value, serviceRegistry); + value = (Serializable)DefaultTypeConverter.INSTANCE.convert(propDef.getDataType(), (Collection)value); + } + else + { + value = (Serializable)DefaultTypeConverter.INSTANCE.convert(propDef.getDataType(), value); + } + + // convert NodeRefs to JBPMNodes + DataTypeDefinition dataTypeDef = propDef.getDataType(); + if (dataTypeDef.getName().equals(DataTypeDefinition.NODE_REF)) + { + value = convertNodeRefs(propDef.isMultiValued(), value); } // map property to specific jBPM task instance field @@ -1173,7 +1185,7 @@ public class JBPMEngine extends BPMEngine if (assocDef != null) { // convert association to JBPMNodes - value = convertAssociation(assocDef, value); + value = convertNodeRefs(assocDef.isTargetMany(), value); // map association to specific jBPM task instance field if (key.equals(WorkflowModel.ASSOC_POOLED_ACTORS)) @@ -1222,14 +1234,12 @@ public class JBPMEngine extends BPMEngine /** * Convert a Repository association to JBPMNodeList or JBPMNode * - * @param assocDef association definition + * @param isMany true => force conversion to list * @param value value to convert - * @return JBPMNodeList or JBPMNode + * @return JBPMNodeList or JBPMNode */ - private Serializable convertAssociation(AssociationDefinition assocDef, Serializable value) + private Serializable convertNodeRefs(boolean isMany, Serializable value) { - boolean isMany = assocDef.isTargetMany(); - if (value instanceof NodeRef) { if (isMany) @@ -1244,8 +1254,7 @@ public class JBPMEngine extends BPMEngine value = new JBPMNode((NodeRef)value, serviceRegistry); } } - - if (value instanceof List) + else if (value instanceof List) { if (isMany) { diff --git a/source/java/org/alfresco/repo/workflow/jbpm/NodeListConverter.java b/source/java/org/alfresco/repo/workflow/jbpm/NodeListConverter.java index 97f48d2460..fd94dc2d1c 100644 --- a/source/java/org/alfresco/repo/workflow/jbpm/NodeListConverter.java +++ b/source/java/org/alfresco/repo/workflow/jbpm/NodeListConverter.java @@ -21,7 +21,7 @@ import java.util.List; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.repository.NodeRef; -import org.jbpm.context.exe.Converter; +import org.jbpm.context.exe.converter.SerializableToByteArrayConverter; import org.springframework.beans.factory.access.BeanFactoryLocator; import org.springframework.beans.factory.access.BeanFactoryReference; import org.springmodules.workflow.jbpm31.JbpmFactoryLocator; @@ -32,7 +32,7 @@ import org.springmodules.workflow.jbpm31.JbpmFactoryLocator; * * @author davidc */ -public class NodeListConverter implements Converter +public class NodeListConverter extends SerializableToByteArrayConverter { private static final long serialVersionUID = 1L; @@ -65,7 +65,7 @@ public class NodeListConverter implements Converter { values.add(node.getNodeRef()); } - converted = values; + converted = super.convert(values); } return converted; } @@ -79,10 +79,10 @@ public class NodeListConverter implements Converter Object reverted = null; if (o != null) { + List nodeRefs = (List)super.revert(o); BeanFactoryReference factory = jbpmFactoryLocator.useBeanFactory(null); ServiceRegistry serviceRegistry = (ServiceRegistry)factory.getFactory().getBean(ServiceRegistry.SERVICE_REGISTRY); - List nodeRefs = (List)o; JBPMNodeList nodes = new JBPMNodeList(); for (NodeRef nodeRef : nodeRefs) { diff --git a/source/java/org/alfresco/repo/workflow/jbpm/ReviewAndApproveTest.java b/source/java/org/alfresco/repo/workflow/jbpm/ReviewAndApproveTest.java index 2d4cb38c46..8d0179e8c8 100644 --- a/source/java/org/alfresco/repo/workflow/jbpm/ReviewAndApproveTest.java +++ b/source/java/org/alfresco/repo/workflow/jbpm/ReviewAndApproveTest.java @@ -119,6 +119,34 @@ public class ReviewAndApproveTest extends BaseSpringTest assertEquals(reviewDueDate, assignedTasks.get(0).properties.get(WorkflowModel.PROP_DUE_DATE)); } + public void testCompletedItems() + { + WorkflowDefinition workflowDef = testWorkflowDef; + + List nodeRefs = new ArrayList(); + nodeRefs.add(testNodeRef); + nodeRefs.add(testNodeRef); + + Map params = new HashMap(); + params.put(WorkflowModel.ASSOC_PACKAGE, testNodeRef); + params.put(WorkflowModel.PROP_COMPLETED_ITEMS, (Serializable)nodeRefs); + Date reviewDueDate = new Date(); + params.put(QName.createQName("http://www.alfresco.org/model/workflow/1.0", "reviewDueDate"), reviewDueDate); + NodeRef reviewer = personService.getPerson("admin"); + params.put(QName.createQName("http://www.alfresco.org/model/workflow/1.0", "reviewer"), reviewer); + + WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, params); + assertNotNull(path); + List tasks1 = workflowComponent.getTasksForWorkflowPath(path.id); + assertNotNull(tasks1); + assertEquals(1, tasks1.size()); + + WorkflowTask task = tasks1.get(0); + assertTrue(task.properties.containsKey(WorkflowModel.PROP_COMPLETED_ITEMS)); + assertEquals(2, ((List)task.properties.get(WorkflowModel.PROP_COMPLETED_ITEMS)).size()); + } + + /** * Filter task list by workflow instance *