2017-02-03 24 views
0

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

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

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

я) Когда Item созданы на войти в эту папку II) Название End С .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> 

+0

Вы выполнения некоторые операции в скриптовой задаче? – vikash

+0

вы принимаете служебную задачу? В моем сценарии я выполняю рабочий процесс ** activiti $ Excel_initial_service ** В служебной задаче рабочего процесса я генерирую некоторые файлы excel –

+0

Можете ли вы добавить полный файл BPMN на свой вопрос? – izodev

ответ

0

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

0

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

Класс, который следует использовать 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

+0

Класс, указанный в моем файле BPMN, реализует JavaDelegate. Я не строю двигатель. Я использую ServiceRegistry для получения NodeRef. ProcessEngineConfigurationImpl config = Context.getProcessEngineConfiguration(); ServiceRegistry registry = (ServiceRegistry) config.getBeans() .get (ActivitiConstants.SERVICE_REGISTRY_BEAN_KEY); ' –

+0

Класс, указанный в моем файле BPMN, реализует JavaDelegate. Я не строю двигатель. Я использую ServiceRegistry для получения NodeRef. 'ProcessEngineConfigurationImpl config = Context.getProcessEngineConfiguration(); ServiceRegistry registry = (ServiceRegistry) config.getBeans() .get (ActivitiConstants.SERVICE_REGISTRY_BEAN_KEY); ' Мне не удалось добавить ** setJobExecutorActivate (true); ** –