ドキュメントがAlfrescoに添付されているワークフローのリストを取得することは可能ですか?
-
30-09-2019 - |
質問
ドキュメントがAlfresco Webscriptに添付されているワークフローのリストを取得しようとしていますが、私はちょっと立ち往生しています。
私の元の問題は、私がファイルのリストを持っていることであり、現在のユーザーにはこれらのドキュメントでワークフローが彼に割り当てられている可能性があることです。そのため、現在のユーザー用にある場合は、フォルダーを表示し、そこにあるすべてのドキュメントを取得し、タスク参照と一緒にドキュメントのリストを作成するWebScriptを作成したいと思います。
現在のユーザーのワークフローのリストを提供する「ワークフロー」オブジェクトについて知っていますが、これは私の問題の解決策ではありません。
それで、特定のドキュメントが添付されているワークフローのリストを取得できますか?
解決
さて、将来の参照のために、JavaScriptからドキュメントですべてのアクティブなワークフローを取得する方法を見つけました。
var nodeR = search.findNode('workspace://SpacesStore/'+doc.nodeRef);
for each ( wf in nodeR.activeWorkflows )
{
// Do whatever here.
}
他のヒント
PackageContains Associationを使用して、ドキュメントのワークフローを見つけました。以下では、アクティブなワークフロー(Zladuricが回答したように)およびすべてのワークフローのために、Alfresco JavaScriptにコードを投稿しました。
/*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();
残念ながら、JavaScript APIはすべてのワークフロー関数を公開しません。ドキュメントに添付されているワークフローインスタンスのリストを取得すると、Java(またはJavaが裏付けられたWebscript)で機能するように見えます。
List<WorkflowInstance> workflows = workflowService.getWorkflowsForContent(node.getNodeRef(), true);
これの使用は、ドキュメントの詳細のワークフローリストにあります。 http://svn.alfresco.com/repos/alfresco--open-mirror/alfresco/hood/hood/root/projects/web-client/source/java/org/alfresco/web/ui/repo/component/uinodeworkflowinfo.java
割り当てられたタスクを持っているユーザーに到達するには、使用する必要があります getworkflowpaths と gettasksforworkflowpath ワークフローサービスの方法。