Alfresco Activiti脚本任务监听器当前scriptnode?

时间:2012-12-21 20:13:00

标签: javascript alfresco activiti

有没有办法在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对象的节点的指针。这是个问题。

或者我是否根据我们如何开发这个它没有任何意义?

1 个答案:

答案 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文件