diff --git a/source/java/org/alfresco/repo/workflow/jscript/JscriptWorkflowDefinition.java b/source/java/org/alfresco/repo/workflow/jscript/JscriptWorkflowDefinition.java
index 3e2773d6f5..dac5e91b19 100644
--- a/source/java/org/alfresco/repo/workflow/jscript/JscriptWorkflowDefinition.java
+++ b/source/java/org/alfresco/repo/workflow/jscript/JscriptWorkflowDefinition.java
@@ -66,7 +66,10 @@ public class JscriptWorkflowDefinition implements Serializable
/** Root scripting scope for this object */
private final Scriptable scope;
-
+
+ /** Node Value Converter */
+ private ValueConverter converter = null;
+
/**
* Create a new instance of WorkflowDefinition
from a
* CMR workflow object model WorkflowDefinition instance
@@ -151,7 +154,21 @@ public class JscriptWorkflowDefinition implements Serializable
return title;
}
- /**
+ /**
+ * Gets the value converter
+ *
+ * @return the value converter
+ */
+ protected ValueConverter getValueConverter()
+ {
+ if (converter == null)
+ {
+ converter = new ValueConverter();
+ }
+ return converter;
+ }
+
+ /**
* Get value of description
property
*
* @return the description
@@ -192,26 +209,32 @@ public class JscriptWorkflowDefinition implements Serializable
// if properties object is a scriptable object, then extract property name/value pairs
// into property Map, otherwise leave property map as null
- Map props = null;
+ Map workflowParameters = null;
if (properties instanceof ScriptableObject)
{
ScriptableObject scriptableProps = (ScriptableObject)properties;
- props = new HashMap(scriptableProps.getIds().length);
- extractScriptablePropertiesToMap((ScriptableObject)properties, props);
+ workflowParameters = new HashMap(scriptableProps.getIds().length);
+ extractScriptablePropertiesToMap(scriptableProps, workflowParameters);
}
// attach given workflow package node if it is not null
if (workflowPackage != null)
{
- if (props == null)
+ if (workflowParameters == null)
{
- new HashMap(1);
+ workflowParameters = new HashMap(1);
}
- props.put(WorkflowModel.ASPECT_WORKFLOW_PACKAGE, workflowPackage);
+ workflowParameters.put(WorkflowModel.ASSOC_PACKAGE, getValueConverter().convertValueForRepo(workflowPackage));
}
-
- WorkflowPath cmrWorkflowPath =
- workflowService.startWorkflow(this.id, props);
+
+ // provide a default context, if one is not specified
+ Serializable context = workflowParameters.get(WorkflowModel.PROP_CONTEXT);
+ if (context == null)
+ {
+ workflowParameters.put(WorkflowModel.PROP_CONTEXT, workflowPackage.getNodeRef());
+ }
+
+ WorkflowPath cmrWorkflowPath = workflowService.startWorkflow(this.id, workflowParameters);
return new JscriptWorkflowPath(cmrWorkflowPath, this.serviceRegistry, this.scope);
}
@@ -233,7 +256,7 @@ public class JscriptWorkflowDefinition implements Serializable
}
Scriptable activeInstancesScriptable =
- (Scriptable)new ValueConverter().convertValueForScript(this.serviceRegistry, this.scope, null, activeInstances);
+ (Scriptable)getValueConverter().convertValueForScript(this.serviceRegistry, this.scope, null, activeInstances);
return activeInstancesScriptable;
}
@@ -283,6 +306,7 @@ public class JscriptWorkflowDefinition implements Serializable
Object value = scriptable.get(key, scriptable);
if (value instanceof Serializable)
{
+ value = getValueConverter().convertValueForRepo((Serializable)value);
map.put(createQName(key), (Serializable)value);
}
}