Message receiving
Здравствуйте
Вопрос касается обработки messages в Активити в Альфреско.
Есть процесс с определенным шагом. Смысл шага в следующем: процесс ожидает 5 минут, если в течении 5 минут сообщение не поступило, то процесс переходит в шаг "Корректировка", если же сообщение пришло, заканчивается процесс.
Описывается это следующим способом:
Так вот я никак не пойму, как именно сказать процессу, что сообщение пришло и поэтому процесс, ожидая 5 минут, всегда завершается.
Т е я не понимаю, как именно имплементируется получение сообщения : в системе должен быть зарегестрирован bean с id="resolution" или же это простой email в сабджекте которого стоит этот АйДи? Или же это какая-то локальная шина? Если бин, то какой класс я должна имплементировать? Или же это просто js local scope object?
Понимаю, что вопрос выглядит сумбурным. Но смысл его таков: что мне надо сделать, чтобы сказать процессу, что сообщение пришло?
UPD:
Удалось просигналить процессу о получении сообщения. При поднятии процесса я запоминала execution id. Сообщение (как и любые сигналы в активити) - это что-то, что имплементируется вне процесса. В моем случае был написан js scoped object и скрипт, который вызывался в по рулю на папке, куда и падал сигнальный документ. Скрипт вызывал метод notify, передавая ему execution id процесса и имя сообщения (Важно передавать именно имя, а не id сообщения!!!)
Проблемы было две:
- "откуда взять" объект Runtime Service (кстати, как оказалось, решение этого вопроса закрыло данный топик)
- как же все таки просигналить (поскольку тексты кодов в гайде самой Активити упорно сообщали, что данный процесс и в помине не имеет сигнальных ивентов)
Итак, решение следующее
1. Объект Runtime Service передается сеттеру в бине так:
Вопрос касается обработки messages в Активити в Альфреско.
Есть процесс с определенным шагом. Смысл шага в следующем: процесс ожидает 5 минут, если в течении 5 минут сообщение не поступило, то процесс переходит в шаг "Корректировка", если же сообщение пришло, заканчивается процесс.
Описывается это следующим способом:
<message id="resolution" name="resolution" /> ... <sequenceFlow sourceRef="sendWay" targetRef="waitForResponse" /> <eventBasedGateway id="waitForResponse" /> <sequenceFlow sourceRef="waitForResponse" targetRef="messageEvent" /> <sequenceFlow sourceRef="waitForResponse" targetRef="timerEvent" /> <intermediateCatchEvent id="messageEvent" name="Ожидание разрешения" > <messageEventDefinition messageRef="resolution" /> </intermediateCatchEvent> <intermediateCatchEvent id="timerEvent" name="Ожидание разрешения" > <timerEventDefinition> <timeDuration>PT5M</timeDuration> </timerEventDefinition> </intermediateCatchEvent> <sequenceFlow sourceRef="timerEvent" targetRef="edit" /> <sequenceFlow sourceRef="messageEvent" targetRef="end" /> <userTask id="edit" name="Корректировка заявления" activiti:formKey="abrw:edit" activiti:candidateGroups="${abrw_manager}" > ...
Так вот я никак не пойму, как именно сказать процессу, что сообщение пришло и поэтому процесс, ожидая 5 минут, всегда завершается.
Т е я не понимаю, как именно имплементируется получение сообщения : в системе должен быть зарегестрирован bean с id="resolution" или же это простой email в сабджекте которого стоит этот АйДи? Или же это какая-то локальная шина? Если бин, то какой класс я должна имплементировать? Или же это просто js local scope object?
Понимаю, что вопрос выглядит сумбурным. Но смысл его таков: что мне надо сделать, чтобы сказать процессу, что сообщение пришло?
UPD:
Удалось просигналить процессу о получении сообщения. При поднятии процесса я запоминала execution id. Сообщение (как и любые сигналы в активити) - это что-то, что имплементируется вне процесса. В моем случае был написан js scoped object и скрипт, который вызывался в по рулю на папке, куда и падал сигнальный документ. Скрипт вызывал метод notify, передавая ему execution id процесса и имя сообщения (Важно передавать именно имя, а не id сообщения!!!)
Проблемы было две:
- "откуда взять" объект Runtime Service (кстати, как оказалось, решение этого вопроса закрыло данный топик)
- как же все таки просигналить (поскольку тексты кодов в гайде самой Активити упорно сообщали, что данный процесс и в помине не имеет сигнальных ивентов)
Итак, решение следующее
1. Объект Runtime Service передается сеттеру в бине так:
<property name="runtimeService" ref="activitiRuntimeService" />2. Кусок кода на java выглядит так:
.... //Стандартный сеттер public void setRuntimeService(final RuntimeService rsimpl) { this.rsimpl = rsimpl; } public void notify(String messageName, String executionId) { ... Execution execution = rsimpl.createExecutionQuery().messageEventSubscriptionName(messageName).singleResult(); rsimpl.messageEventReceived(messageName, execution.getId()); ....
Комментарии
10/07/2014 - 22:01
11/07/2014 - 15:02
15/07/2014 - 11:30