Progredendo Alfresco flussi di lavoro tramite lo script web
Domanda
Ho un riferimento del documento Alfresco; quello che sto cercando è un modo per accedere flusso di lavoro collegato a quel documento e finire (o progredire alla transizione successiva) tramite Javascript.
Quasi tutti gli esempi sul web mostra come avviare il flusso di lavoro, e dal dashlet ho potuto chiamare processore dei comandi compito (/ all'aperto / comando / funzione / fine / [/ transizione]) se sapessi l'ID attività, ma come faccio faccio la stessa cosa dallo script web lato server a partire solo dal riferimento al documento?
Ci deve essere un modo per accedere flussi di lavoro da un documento e gestire programmaticamente.
Soluzione
Da un documento nodeRef è possibile segnalare l'attività corrente in questo modo:
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;
}
}
}
Se si vuole segnalare la transizione predefinita è possibile saltare il ciclo interno e solo fare questo:
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);
}
Altri suggerimenti
Beh, io ancora non so come la transizione, ma ci sono un paio di cose che ho scoperto.
In primo luogo, posso accedere flussi di lavoro documento partecipa e annullarla:
for each (workflow in document.activeWorkflows) {
workflow.cancel();
}
Tuttavia, non sono ancora del tutto sicuro di come progredire compiti. Posso ottenere al compito e fare qualcosa con esso:
var task = workflow.getTask(taskId);
task.endTask(transitionId);
... ma non ho ancora idea di come raggiungere taskId o transitionId, livello di programmazione o tramite Alfresco.
EDIT: capito, transitionId è in realtà la transizione nome come definito in XML del flusso di lavoro processdefinition:
<transition name="SomeTransitionId" to="end">
Inoltre, per ottenere l'elenco dei compiti del flusso di lavoro è possibile scorrere i percorsi (workflow.getPaths ()) e poi attraverso attività con path.getTasks ().