通过Web脚本推进Alfresco工作流程

时间:2010-03-16 15:07:41

标签: workflow alfresco

我有Alfresco文件参考;我正在寻找的是一种访问附加到该文档的工作流程并通过Javascript完成它(或将其推进到下一个转换)的方法。

网上几乎每个例子都显示了如何启动工作流程,如果我知道任务ID,我可以从dashlet调用任务命令处理器(/ alfresco / command / task / end / [/ transition]),但是如何做我从服务器端的Web脚本开始,只从文档引用开始做同样的事情吗?

必须有一种方法可以从文档访问工作流并以编程方式管理它们。

2 个答案:

答案 0 :(得分:1)

从文档nodeRef中,您可以发出如下信号:

var docNodeRef = "workspace://SpacesStore/<GUID HERE>";
var transitionId = "some action";
var theDocument = search.findNode(docNodeRef);
foreach  (currWorkflow in theDocument.activeWorkflows)
{
    var path = currWorkflow.paths[currWorkflow.paths.length-1];
    var task = path.tasks[0];
    for (var transitionKey in task.transitions)
    {
        if (task.transitions[transitionKey] == transitionId)
        {
            path.signal(transitionId);
            break;
        }
    }
}

如果要发出默认转换信号,可以跳过内循环,然后执行此操作:

var docNodeRef = "workspace://SpacesStore/<GUID HERE>";
var transitionId = "some action";
var theDocument = search.findNode(docNodeRef);
foreach  (currWorkflow in theDocument.activeWorkflows)
{
    var path = currWorkflow.paths[currWorkflow.paths.length-1];
    var task = path.tasks[0];
    // Signal default transition
    path.signal(null);
}

答案 1 :(得分:0)

好吧,我仍然不知道如何过渡,但我发现了一些事情。

首先,我可以访问工作流文档参与并取消它:

for each (workflow in document.activeWorkflows) {
    workflow.cancel();
}

但是,我仍然不太确定如何推进任务。我可以完成任务并用它做点什么:

var task = workflow.getTask(taskId);
task.endTask(transitionId);

...但我仍然不知道如何以编程方式或通过Alfresco获取taskId或transitionId。

编辑:想通了,transitionId实际上是工作流程定义XML中定义的转换名称:

<transition name="SomeTransitionId" to="end">

此外,要从工作流中获取任务列表,您可以遍历路径(workflow.getPaths()),然后遍历使用path.getTasks()的任务。