我有一个 Alfresco 文档参考;我正在寻找的是一种访问附加到该文档的工作流并通过 Javascript 完成它(或将其推进到下一个转换)的方法。
几乎网络上的每个示例都显示了如何启动工作流,如果我知道任务 ID,我可以从 dashlet 调用任务命令处理器 (/alfresco/command/task/end/[/transition]),但我该怎么做仅从文档参考开始的服务器端 Web 脚本的相同内容?
必须有一种方法可以从文档访问工作流并以编程方式对其进行管理。
从文档 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);
}
好吧,我仍然不知道如何过渡,但我发现了一些事情。
首先,我可以访问工作流文档参与并取消它:
for each (workflow in document.activeWorkflows) {
workflow.cancel();
}
但是,我仍然不太确定如何进行任务。我可以完成任务并用它做点什么:
var task = workflow.getTask(taskId);
task.endTask(transitionId);
...但我仍然不知道如何以编程方式或通过 Alfresco 到达 taskId 或 transitionId。
编辑:想通了,transitionId 实际上是工作流 processdefinition XML 中定义的转换名称:
<transition name="SomeTransitionId" to="end">
此外,要从工作流中获取任务列表,您可以遍历路径 (workflow.getPaths()),然后使用 path.getTasks() 遍历任务。