E 'possibile ottenere un elenco dei flussi di lavoro del documento viene allegato al Alfresco
-
30-09-2019 - |
Domanda
Sto cercando di ottenere un elenco di flussi di lavoro del documento viene allegato al in un webscript Alfresco, ma io sono di tipo bloccato.
Il mio problema originale è che ho un elenco di file, e l'utente corrente può avere flussi di lavoro assegnati a lui con questi documenti. Quindi, ora voglio creare un webscript che avrà un aspetto in una cartella, prendere tutti i documenti lì, e assemblare un elenco di documenti insieme con i riferimenti delle attività, se ve ne sono per l'utente corrente.
Lo so circa l'oggetto "workflow" che mi dà l'elenco dei flussi di lavoro per l'utente corrente, ma questo non è una soluzione per il mio problema.
Quindi, posso ottenere un elenco di flussi di lavoro di un documento specifico è attaccato?
Soluzione
Bene, per riferimento futuro, ho trovato un modo per ottenere tutti i flussi di lavoro attivi su di un documento da javascript:
var nodeR = search.findNode('workspace://SpacesStore/'+doc.nodeRef);
for each ( wf in nodeR.activeWorkflows )
{
// Do whatever here.
}
Altri suggerimenti
ho usato packageContains associazione per trovare flussi di lavoro per il documento. Qui di seguito ho postato il codice in Alfresco JavaScript per i flussi di lavoro attivi (come zladuric risposto) e anche per tutti i flussi di lavoro:
/*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();
Purtroppo l'API JavaScript non espone tutte le funzioni del flusso di lavoro. Sembrare ottenere l'elenco delle istanze del flusso di lavoro che sono attaccati a un documento funziona solo in Java (o Java sostenuta webscripts).
List<WorkflowInstance> workflows = workflowService.getWorkflowsForContent(node.getNodeRef(), true);
Un utilizzo di questo può essere trovato nella lista del flusso di lavoro nei dettagli del documento: http://svn.alfresco.com/repos/alfresco-open-mirror/alfresco /HEAD/root/projects/web-client/source/java/org/alfresco/web/ui/repo/component/UINodeWorkflowInfo.java
Per raggiungere gli utenti che hanno compiti assegnati si sarebbe poi bisogno di utilizzare getWorkflowPaths e getTasksForWorkflowPath i metodi della WorkflowService.