Рабочий процесс Alfresco запускается несколько раз

Я столкнулся с проблемой запуска рабочего процесса.

Я применил правило к папке

Определение правила:

i) Когда элемент создан, войдите в эту папку ii) Имя заканчивается на .xml iii) Выполнить сценарий

Скрипт

function startWorkflow()
{
var workflow = actions.create("start-workflow");
workflow.parameters.workflowName = "activiti$Excel_initial_service";
workflow.parameters["bpm:workflowDescription"] = "Excel initial      service workflow for : " + document.name;
var futureDate = new Date();
futureDate.setDate(futureDate.getDate() + 1);
workflow.parameters["bpm:workflowDueDate"] = futureDate;
return workflow.execute(document);
}

function main()
{
startWorkflow();
}

main();

и мое определение рабочего процесса

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"   xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">

<process id="Excel_initial_service" name="Excel Initial Service"    isExecutable="true">
<startEvent id="startevent1" name="Start"></startEvent>
 .
 .
 .
 .

<serviceTask id="servicetask1" name="Service Task" activiti:class="*">  </serviceTask>
 .
 .
 .
 .

Проблема, с которой я столкнулся, заключается в том, что служебная задача запускается несколько раз для одного файла, введенного в папку, и ее не останавливают.

<?xml version="1.0" encoding="UTF-8"?>

<process id="***" name="Excel Generation Service" isExecutable="true">
<startEvent id="starteventexcel1" name="Start"></startEvent>

<intermediateCatchEvent id="timerintermediatecatcheventexcel1" name="TimerCatchEvent1">
  <timerEventDefinition>
    <timeDuration>PT10S</timeDuration>
  </timerEventDefinition>
</intermediateCatchEvent>

<serviceTask id="servicetaskexcel1" name="Service Task" activiti:class="***"></serviceTask>

<intermediateCatchEvent id="timerintermediatecatcheventexcel2" name="TimerCatchEvent2">
  <timerEventDefinition>
    <timeDuration>PT10S</timeDuration>
  </timerEventDefinition>
</intermediateCatchEvent>



<endEvent id="endeventexcel1" name="End"></endEvent>
<sequenceFlow id="flowexcel1" sourceRef="starteventexcel1" targetRef="timerintermediatecatcheventexcel1"></sequenceFlow>
<sequenceFlow id="flowexcel2" sourceRef="timerintermediatecatcheventexcel1" targetRef="servicetaskexcel1"></sequenceFlow>
<sequenceFlow id="flowexcel3" sourceRef="servicetaskexcel1" targetRef="timerintermediatecatcheventexcel2"></sequenceFlow>
<sequenceFlow id="flowexcel4" sourceRef="timerintermediatecatcheventexcel2" targetRef="endeventexcel1"></sequenceFlow>

</process>


person Varun Chawla    schedule 03.02.2017    source источник
comment
Вы выполняете какие-то операции в задаче скрипта??   -  person vikash    schedule 03.02.2017
comment
вы берете о служебном задании?? В моем сценарии я выполняю рабочий процесс activiti$Excel_initial_service. В сервисной задаче рабочего процесса я создаю несколько файлов Excel.   -  person Varun Chawla    schedule 03.02.2017
comment
Можете ли вы добавить полный файл BPMN к своему вопросу?   -  person izodev    schedule 04.02.2017
comment
@izodev добавил файл BPMN .. Также я анализирую, что моя служебная задача занимает некоторое время, и поведение alfresco по умолчанию заключается в запуске задачи, если она не завершена в определенный период времени ... у вас есть идеи, как переопределить это поведение по умолчанию.   -  person Varun Chawla    schedule 04.02.2017


Ответы (2)


Первый промежуточныйCatchEvent здесь будет выполнять вашу служебную задачу каждые 10 секунд. Зачем его использовать?

person izodev    schedule 04.02.2017

этот ответ может вам помочь.

Используемый класс — это ClockUtil, который изменяет внутренние часы движка.

При этом я проверил ваш тест и увидел, что вы используете

ProcessEngine eng = ProcessEngineConfiguration
       .createStandaloneInMemProcessEngineConfiguration()
       .buildProcessEngine();

Чтобы получить движок процесса. Это даст вам движок по умолчанию с отключенным исполнителем заданий. Исполнитель задания необходим для выполнения таймера. Добавьте следующую строку в сборку механизма процесса, чтобы он работал:

setJobExecutorActivate(true);

Вы можете сослаться на этот вопрос https://community.alfresco.com/thread/219801-problem-with-intermediatecatchevent

вы найдете некоторый код на github, как описано в упомянутом выше вопросе https://github.com/Activiti/Activiti/blob/master/modules/activiti-engine/src/test/java/org/activiti/engine/test/bpmn/event/timer/IntermediateTimerEventTest.java

person vikash    schedule 04.02.2017
comment
Класс, упомянутый в моем файле BPMN, реализует JavaDelegate. Я не создаю какой-либо процессный движок. Я использую ServiceRegistry для получения NodeRef. Конфигурация ProcessEngineConfigurationImpl = Context.getProcessEngineConfiguration(); Реестр ServiceRegistry = (ServiceRegistry) config.getBeans() .get(ActivitiConstants.SERVICE_REGISTRY_BEAN_KEY);` - person Varun Chawla; 06.02.2017
comment
Класс, упомянутый в моем файле BPMN, реализует JavaDelegate. Я не создаю какой-либо процессный движок. Я использую ServiceRegistry для получения NodeRef. ProcessEngineConfigurationImpl config = Context.getProcessEngineConfiguration(); ServiceRegistry registry = (ServiceRegistry) config.getBeans() .get(ActivitiConstants.SERVICE_REGISTRY_BEAN_KEY); Я не нашел, куда добавить setJobExecutorActivate(true); - person Varun Chawla; 06.02.2017