Проведение рабочих процессов Alfresco с помощью веб-скрипта
Вопрос
У меня есть ссылка на документ Alfresco;то, что я ищу, - это способ получить доступ к рабочему процессу, прикрепленному к этому документу, и завершить его (или перейти к следующему переходу) через Javascript.
Почти каждый пример в Интернете показывает, как запустить рабочий процесс, и из дашлета я мог бы вызвать командный процессор задачи (/alfresco/command/task/end/[/transition]), если бы знал идентификатор задачи, но как мне это сделать? то же самое с веб-скриптом на стороне сервера, начиная только со ссылки на документ?
Должен быть способ получить доступ к рабочим процессам из документа и управлять ими программно.
Решение
Из документа nodeRef вы можете указать текущую задачу следующим образом:
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;
}
}
}
Если вы хотите сигнализировать о переходе по умолчанию, вы можете пропустить внутренний цикл и просто сделать это:
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);
}
Другие советы
Ну, я до сих пор не знаю, как перейти, но есть пара вещей, которые я узнал.
Во-первых, я могу получить доступ к документу рабочих процессов, в котором участвует, и отменить его:
for each (workflow in document.activeWorkflows) {
workflow.cancel();
}
Однако я до сих пор не совсем уверен, как выполнять задания.Я могу приступить к задаче и что-то с ней сделать:
var task = workflow.getTask(taskId);
task.endTask(transitionId);
... но я до сих пор понятия не имею, как добраться до TaskId или TransitionId, программно или через Alfresco.
РЕДАКТИРОВАТЬ:разобрался,transitionId на самом деле является именем перехода, как определено в XML определения процесса рабочего процесса:
<transition name="SomeTransitionId" to="end">
Кроме того, чтобы получить список задач из рабочего процесса, вы можете перебирать пути (workflow.getPaths()), а затем — задачи с помощью path.getTasks().