有没有办法在Alfresco的Activiti工作流程中获取启动状态的ScriptNode?我的工作流程中有一个ScriptTask,它为Start事件设置了一个Alfresco Script Listener。调用脚本时,我希望转换到工作流中ScriptTask的ScriptNode作为参数传递给定义为侦听器的函数。这可能吗?
为清晰起见编辑: 这是Eclispe与Activiti插件的截图。 http://i.imgur.com/DAKtq.jpg
此工作流程由另一个带有网页脚本的工作流程启动。
var props = new Object();
var dd = new Date();
props[EL_PROP_WORK_UNIT_NAME] = "testNode" + DateISOString( dd );
props[EL_PROP_WORK_UNIT_SOURCE_CODE] = "ROB";
props[EL_PROP_WORK_UNIT_DELIVERY_DATE] = dd;
node = getHome().createNode(name, EL_TYPE_WORK_UNIT, props);
var EL_WORKFLOW = "activiti$The-workflow";
var activeWfs = node.activeWorkflows;
if( activeWfs === null || activeWfs.length === 0 )
{
var workflowPackage = workflow.createPackage();
workflowPackage.addNode( node );
var workflowDef = workflow.getDefinitionByName(EL_WORKFLOW);
var workflowPath = workflowDef.startWorkflow( workflowPackage, new Object());
}
所以监听器调用另一个javascript方法......
function artPDFRename()
{
logger.log("==============================");
logger.log("<START> artPDFRename");
var workflowDef = workflow.getDefinitionByName(EL_WORKFLOW);
var activeInstance = workflowDef.getActiveInstances();
// ????
}
目标是让这种处理自动化。我们试图通过尽可能少的手动干预来设计它,而不是将任务分配给用户来执行。是的,可能有另一种方法来重命名PDF文件,但我似乎无法从这里列出的文档中找出如何获取指向我放入bpm_package对象的节点的指针。这是个问题。
或者我是否根据我们如何开发这个它没有任何意义?
答案 0 :(得分:1)
作为示例,请检查ScriptTaskListener
类。这里所有工作流程变量都放在地图中。
以下代码很有趣:
//将所有工作流程变量添加到模型中 Map variables = delegateTask.getExecution()。getVariables();
for (Entry<String, Object> varEntry : variables.entrySet()) { scriptModel.put(varEntry.getKey(), varEntry.getValue()); }
因此,您可以在工作流脚本任务中将bpm_package用作脚本中的对象。
因此,如果您需要运行工作流的节点,则以下代码应该可用(其中task是来自Listener的notify方法的delegateTask:
delegateTask.getVariable( “bpm_package”);
//或者像上面的例子一样 。delegateTask.getExecution()的getVariable( “bpm_package”);
这将是一个列表,所以请选择第一个,这将是您的节点。
---------更新
如果您正在使用alfresco的javascript,那么您可以直接使用父对象bpm_package。
因此,在您的情况下,最好执行以下操作:
var node = bpm_package.children [0]; //或者你可以检查一下 包不是空的 //然后将节点发送到您的
artPDFRename(节点); //或者你可以添加bpm_package代码 你的js文件