我正在尝试在 Alfresco webscript 中获取文档附加到的工作流列表,但我有点卡住了。
我最初的问题是我有一个文件列表,并且当前用户可能已经为他分配了这些文件的工作流。所以,现在我想创建一个 webscript,它将在一个文件夹中查找,将所有文档放在那里,并将一个文档列表与任务引用组合在一起,如果当前用户有的话。
我知道“工作流程”对象,它为我提供了当前用户的工作流程列表,但这不是我的问题的解决方案。
那么,我可以获得特定文档所附加到的工作流列表吗?
我正在尝试在 Alfresco webscript 中获取文档附加到的工作流列表,但我有点卡住了。
我最初的问题是我有一个文件列表,并且当前用户可能已经为他分配了这些文件的工作流。所以,现在我想创建一个 webscript,它将在一个文件夹中查找,将所有文档放在那里,并将一个文档列表与任务引用组合在一起,如果当前用户有的话。
我知道“工作流程”对象,它为我提供了当前用户的工作流程列表,但这不是我的问题的解决方案。
那么,我可以获得特定文档所附加到的工作流列表吗?
好吧,为了将来参考,我找到了一种从 javascript 获取文档上所有活动工作流的方法:
var nodeR = search.findNode('workspace://SpacesStore/'+doc.nodeRef);
for each ( wf in nodeR.activeWorkflows )
{
// Do whatever here.
}
不幸的是,javascript API 并没有公开所有的工作流函数。看起来获取附加到文档的工作流实例列表仅适用于 Java(或 Java 支持的 webscripts)。
List<WorkflowInstance> workflows = workflowService.getWorkflowsForContent(node.getNodeRef(), true);
可以在文档详细信息的工作流列表中找到它的用法:http: //svn.alfresco.com/repos/alfresco-open-mirror/alfresco/HEAD/root/projects/web-client/source/java/ org/alfresco/web/ui/repo/component/UINodeWorkflowInfo.java
要访问已分配任务的用户,您需要使用WorkflowService 的getWorkflowPaths和getTasksForWorkflowPath方法。
我使用 packageContains 关联来查找文档的工作流程。下面我在 Alfresco JavaScript 中为活动工作流(如 zladuric 回答)以及所有工作流发布了代码:
/*global search, logger, workflow*/
var getWorkflowsForDocument, getActiveWorkflowsForDocument;
getWorkflowsForDocument = function () {
"use strict";
var doc, parentAssocs, packages, packagesLen, i, pack, props, workflowId, instance, isActive;
//
doc = search.findNode("workspace://SpacesStore/8847ea95-108d-4e08-90ab-34114e7b3977");
parentAssocs = doc.getParentAssocs();
packages = parentAssocs["{http://www.alfresco.org/model/bpm/1.0}packageContains"];
//
if (packages) {
packagesLen = packages.length;
//
for (i = 0; i < packagesLen; i += 1) {
pack = packages[i];
props = pack.getProperties();
workflowId = props["{http://www.alfresco.org/model/bpm/1.0}workflowInstanceId"];
instance = workflow.getInstance(workflowId);
/* instance is org.alfresco.repo.workflow.jscript.JscriptWorkflowInstance */
isActive = instance.isActive();
logger.log(" + instance: " + workflowId + " (active: " + isActive + ")");
}
}
};
getActiveWorkflowsForDocument = function () {
"use strict";
var doc, activeWorkflows, activeWorkflowsLen, i, instance;
//
doc = search.findNode("workspace://SpacesStore/8847ea95-108d-4e08-90ab-34114e7b3977");
activeWorkflows = doc.activeWorkflows;
activeWorkflowsLen = activeWorkflows.length;
for (i = 0; i < activeWorkflowsLen; i += 1) {
instance = activeWorkflows[i];
/* instance is org.alfresco.repo.workflow.jscript.JscriptWorkflowInstance */
logger.log(" - instance: " + instance.getId() + " (active: " + instance.isActive() + ")");
}
}
getWorkflowsForDocument();
getActiveWorkflowsForDocument();