Fluxos de trabalho do Alfresco Progressing através do Script da Web
Pergunta
Eu tenho uma referência de documento ao ar livre; O que estou procurando é uma maneira de acessar o fluxo de trabalho anexado a esse documento e finalizá -lo (ou progredir na próxima transição) através do JavaScript.
Quase todos os exemplos na web mostram como iniciar o fluxo de trabalho e, a partir do Dashlet, eu poderia chamar o Processador de Comando de Tarefa (/Alfresco/Command/Task/End/[/Transition]) se soubesse o ID da tarefa, mas como faço o A mesma coisa do script da web do lado do servidor, começando apenas a partir da referência do documento?
Deve haver uma maneira de acessar fluxos de trabalho no documento e gerenciá -los programaticamente.
Solução
De um documento noderef, você pode sinalizar a tarefa atual como esta:
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 você quiser sinalizar a transição padrão, pode pular o loop interno e fazer isso:
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);
}
Outras dicas
Bem, ainda não sei como fazer a transição, mas há algumas coisas que descobri.
Primeiro, posso acessar os fluxos de trabalho que o documento participa e cancelá -lo:
for each (workflow in document.activeWorkflows) {
workflow.cancel();
}
No entanto, ainda não tenho muita certeza de como progredir nas tarefas. Eu posso chegar à tarefa e fazer algo com ela:
var task = workflow.getTask(taskId);
task.endTask(transitionId);
... mas ainda não tenho idéia de como chegar ao TaskId ou ao TransitionID, programaticamente ou através do Alfresco.
EDIT: Descobri que o TransitionId é na verdade o nome de transição, conforme definido no ProcessDefinition XML do fluxo de trabalho XML:
<transition name="SomeTransitionId" to="end">
Além disso, para obter a lista de tarefas do fluxo de trabalho, você pode iterar através de caminhos (Workflow.getPaths ()) e, em seguida, através de tarefas com path.gettasks ().