Как запустить рабочий процесс Alfresco с помощью правила, включая документ
Когда какой-либо документ вставляется в папку, я пытаюсь запустить собственный рабочий процесс с прикрепленным к нему документом. Я использую Alfresco сообщество v4.2.
Wokflow работает нормально, если я выбираю документ, а затем "Запустить рабочий процесс". Документ правильно добавлен в рабочий процесс, и я могу его завершить.
Мое правило в силе и выполняет следующий скрипт, когда любой документ вставлен (код в комментариях - это то, что я пробовал):
//var workflow = actions.create("start-workflow");
var wfdef = workflow.getDefinitionByName("activiti$reviewNewFile");
//workflow.parameters["bpm:workflowDescription"] = document.name;
//workflow.parameters.workflowName = "activiti$reviewNewFile";
if(wfdef)
{
var wfparams = new Array();
wfparams["bpm:workflowDescription"] = document.name;
var wfpackage = workflow.createPackage();
//var docNode = search.findNode(document.nodeRef);
wfpackage.addNode(document);
//wfpackage.addNode(docNode);
wfdef.startWorkflow(wfpackage,wfparams);
}
//workflow.execute(document);
На данный момент сценарий хорошо выполнен, рабочий процесс создан, но документ не добавлен в рабочий процесс. Моя ссылка на документ в сценарии не является нулевой, поскольку имя документа правильно выводится в рабочем процессе.
Я уже прочитал эти два поста, но ни один из них не помог
- начать рабочий процесс, используя Java-скрипт на открытом воздухе API или через веб-скрипт
- Как запустить рабочий процесс Alfresco через Javascript, добавив ресурс
РЕДАКТИРОВАТЬ: я был в состоянии сузить это. Моя первая задача в рабочем процессе назначена группе кандидатов, а не отдельному человеку. Имя группы извлекается с помощью следующего фрагмента кода:
<extensionElements>
<activiti:executionListener event="start" class="org.alfresco.repo.workflow.activiti.listener.ScriptExecutionListener">
<activiti:field name="script">
<activiti:string>
execution.setVariable('wf_secretairesGroup', groups.getGroup('Secretaires').getFullName());
execution.setVariable('wf_responsablesGroup', groups.getGroup('Responsables').getFullName());
</activiti:string>
</activiti:field>
</activiti:executionListener>
</extensionElements>
Часть моего файла bpmn:
<startEvent id="start" name="Start" activiti:formKey="wf:reviewNewFile" />
<sequenceFlow id="flow1" name="" sourceRef="start" targetRef="addCommentTask"></sequenceFlow>
<userTask id="addCommentTask" name="Add comment Task" activiti:candidateGroups="${wf_secretairesGroup}" activiti:formKey="wf:addCommentTask">
<extensionElements>
<activiti:taskListener event="complete" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
<activiti:field name="script">
<activiti:string>
execution.setVariable('bpm_comment', task.getVariable('bpm_comment'));
execution.setVariable('wf_initiator', person);
</activiti:string>
</activiti:field>
</activiti:taskListener>
</extensionElements>
</userTask>
Я попытался изменить addCommentTask, заменивандидата GroupGue с уполномоченным, назначив его администратору, и это сработало... До сих пор не знаю, почему он работает именно так, а не другим.
1 ответ
И если вы сделаете следующее (измените массив на объект):
var wfdef = workflow.getDefinitionByName("activiti$reviewNewFile");
var wfparams = new Object();
wfparams["bpm:workflowDescription"] = document.name;
wfparams["bpm:assignee"] = people.getPerson("admin");
var wfpackage = workflow.createPackage();
wfpackage.addNode(document);
wfdef.startWorkflow(wfpackage,wfparams);