Progresando Alfresco flujos de trabajo a través de secuencias de comandos web
Pregunta
Tengo una referencia de documento al aire libre; lo que estoy buscando es una manera de acceder flujo de trabajo adjunto a dicho documento y terminarlo (o progresar a la siguiente transición) a través de Javascript.
Casi todos los ejemplos en la web muestra cómo iniciar el flujo de trabajo, y desde el dashlet que podría llamar procesador de comandos de tarea (/ al aire libre / comando / tarea / final / [/ transición]) si sabía el ID de tarea, pero ¿cómo yo hago lo mismo a partir de secuencias de comandos web del lado del servidor a partir solamente de la referencia del documento?
Tiene que haber una manera de acceder a los flujos de trabajo de documentos y administrarlos mediante programación.
Solución
A partir de un documento nodeRef se puede señalar la tarea actual como esto:
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;
}
}
}
Si desea indicar la transición predeterminada puede omitir el bucle interior y simplemente hacer esto:
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);
}
Otros consejos
Bueno, yo todavía no sé cómo hacer la transición, pero hay un par de cosas que me enteré.
En primer lugar, puedo acceder a los flujos de trabajo de documentos participa y cancelarla:
for each (workflow in document.activeWorkflows) {
workflow.cancel();
}
Sin embargo, todavía no estoy muy seguro de cómo progresar tareas. Puedo llegar a la tarea y hacer algo con él:
var task = workflow.getTask(taskId);
task.endTask(transitionId);
... pero sigo sin tener ni idea de cómo llegar a taskId o transitionId, mediante programación o a través de Alfresco.
EDIT: lo descubrió, transitionId es en realidad la transición nombre como se define en el flujo de trabajo XML ProcessDefinition:
<transition name="SomeTransitionId" to="end">
Además, para obtener la lista de tareas del flujo de trabajo Se puede recorrer caminos (workflow.getPaths ()) y luego a través de tareas con path.getTasks ().