Простая обработка событий процесса
Материал из BiTel WiKi
Zavndw (Обсуждение | вклад) (→События плагина mobile) |
|||
(5 промежуточных версий не показаны.) | |||
Строка 1: | Строка 1: | ||
+ | == Общие события == | ||
Разрешение на правку процесса в различных статусах различным группам, исполнителю либо администратору и запрет правки закрытого процесса. | Разрешение на правку процесса в различных статусах различным группам, исполнителю либо администратору и запрет правки закрытого процесса. | ||
<source lang="bash"> | <source lang="bash"> | ||
Строка 66: | Строка 67: | ||
dao = new("ru.bgcrm.dao.ParamValueDAO", conSet.getConnection()); | dao = new("ru.bgcrm.dao.ParamValueDAO", conSet.getConnection()); | ||
dao.updateParamList(process.getId(), 63, {1}); | dao.updateParamList(process.getId(), 63, {1}); | ||
+ | END | ||
+ | </source> | ||
+ | |||
+ | Удаление из процесса исполнителя с кодом 2 и группы с кодом 37. | ||
+ | <source lang="bash"> | ||
+ | onProcessEvent.3.doExpression=<<END | ||
+ | deleteExecutors({2}); | ||
+ | deleteGroups({37}); | ||
+ | END | ||
+ | </source> | ||
+ | |||
+ | После изменения статуса если списковый параметр процесса 63 не содержит значений с кодами 1, 2 и 3 | ||
+ | установка значения 1 в этот параметр. | ||
+ | <source lang="bash"> | ||
+ | onProcessEvent.1.events=statusChanged | ||
+ | onProcessEvent.1.ifExpression=empty(cu.intersection(processParam.listValueIds(63), {1,2,3})) | ||
+ | onProcessEvent.1.doExpression=<<END | ||
+ | dao = new("ru.bgcrm.dao.ParamValueDAO", conSet.getConnection()); | ||
+ | dao.updateParamList(process.getId(), 63, {1}); | ||
+ | END | ||
+ | </source> | ||
+ | |||
+ | При создании процесса внесение в параметр типа "date" с кодом 51 значения текущей даты + два дня, | ||
+ | не учитывая вторников. | ||
+ | <source lang="bash"> | ||
+ | onProcessEvent.1.events=created | ||
+ | onProcessEvent.1.doExpression=<<END | ||
+ | dao = new("ru.bgcrm.dao.ParamValueDAO", conSet.getConnection()); | ||
+ | cal = new("java.util.GregorianCalendar"); | ||
+ | addDays = 2; | ||
+ | while (addDays > 0) { | ||
+ | var dw = cal.get(cal.DAY_OF_WEEK); | ||
+ | if (dw != cal.TUESDAY) | ||
+ | addDays = addDays - 1; | ||
+ | cal.add(cal.DAY_OF_YEAR, 1); | ||
+ | } | ||
+ | dao.updateParamDate(process.getId(), 51, cal.getTime()); | ||
+ | END | ||
+ | </source> | ||
+ | |||
+ | Пример проверки класса события: | ||
+ | <source lang="bash"> | ||
+ | if (event.getClass().getName() == "ru.bgcrm.event.process.ProcessMessageAddedEvent") { | ||
+ | text += '<b>Сообщение</b>: ' + u.maskNull(event.getMessage().getText()) + ';'; | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | Поиск процесса, к которому привязан текущий процесс и если он найден - смена его статуса. | ||
+ | <source lang="bash"> | ||
+ | onProcessEvent.3.events=statusChanged | ||
+ | onProcessEvent.3.doExpression=<<END | ||
+ | pld = new("ru.bgcrm.dao.process.ProcessLinkDAO", conSet.getConnection()); | ||
+ | linked = u.getFirst(pld.getLinkedProcessList(process.getId(), null, false, {1})); | ||
+ | if (linked != null) { | ||
+ | change = new("ru.bgcrm.model.process.StatusChange"); | ||
+ | change.setDate(new("java.util.Date")); | ||
+ | change.setProcessId(linked.getId()); | ||
+ | change.setUserId(event.getUser().getId()); | ||
+ | change.setStatusId(9); | ||
+ | change.setComment("Автоматическая смена статуса"); | ||
+ | |||
+ | pa = ru.bgcrm.struts.action.ProcessAction; | ||
+ | pa.processStatusUpdate(event.getForm(), conSet.getConnection(), linked, change); | ||
+ | } | ||
+ | END | ||
+ | </source> | ||
+ | |||
+ | == События плагина mobile == | ||
+ | |||
+ | Отправляем уведомление с параметрами процесса диспетчеру аварийной бригады. Установлена проверка типа работ из параметра list id 26, передаются номер процесса, адрес, телефоны, тип работ, дата и время приема, комментарий | ||
+ | <source lang="bash"> | ||
+ | onProcessEvent.5.events=createFinished | ||
+ | onProcessEvent.5.ifExpression=cu.intersection(processParam.listValueIds(26), {2,3,7}).size() > 0 | ||
+ | onProcessEvent.5.doExpression=<<END | ||
+ | body=process.getTypeTitle(); | ||
+ | text="№ " + process.getId().toString() + " Адрес: " + processParam.addressValues(1).toString() + " т. " + processParam.getValue(20) + " " + processParam.listValueTitles(26) + " Принята: " + process.getCreateTime() + " Комментарий: " + process.getDescription() + user.; | ||
+ | mobile.sendMessageToUsers(body, text, {5}); | ||
END | END | ||
</source> | </source> |
Текущая версия на 02:08, 29 октября 2017
Общие события
Разрешение на правку процесса в различных статусах различным группам, исполнителю либо администратору и запрет правки закрытого процесса.
onProcessEvent.1.checkExpression=process.getStatusId() !~ [9, 13, 36,39] or 8 =~ user.getGroupIds() onProcessEvent.1.checkErrorMessage=В этом статусе разрешена правка только сотрудникам КС onProcessEvent.2.checkExpression=process.getStatusId() != 9 or user.getId() =~ process.getExecutorIds() or 33 =~ user.getPermsetIds() onProcessEvent.2.checkErrorMessage=В этом статусе разрешена правка только исполнителем процесса либо администратором КС onProcessEvent.3.checkExpression=empty process.getCloseTime() onProcessEvent.3.checkErrorMessage=Запрещена правка закрытого процесса
Добавление текущего пользователя в исполнители и установка в статус с кодом 40, если процесс создан как привязанный к другому процессу.
onProcessEvent.1.events=createdAsLink onProcessEvent.1.commands=addExecutors:{@ctxUserId};setStatus:40
Изменение статуса процесса на 3 при получении в него нового сообщения. При привязке договора - копирование значений параметров с кодами 27 и 12 в описание процесса.
onProcessEvent.1.events=messageAdded onProcessEvent.1.ifExpression=process.getStatusId() != 3 onProcessEvent.1.commands=setStatus:3 # onProcessEvent.2.events=linkAdded onProcessEvent.2.commands=bgbilling:linkedContractParamToDescription:bg:27;bgbilling:linkedContractParamToDescription:bg:12
Отправка EMail по появлению нового сообщения в процессе.
onProcessEvent.1.events=messageAdded onProcessEvent.1.commands=emailNotifyExecutors:21:Новые сообщения в процессе
Команда может быть предварена префиксом, изменяющим изменяемый процесс.
linkedProcess:<typeId> - процесс с типом <typeId>, к которому привязан данный процесс, пример: # # закрытие БП, если закрыты три процесса "Контроль возврата", "Изготовение бух. акт", "Знакомстов с аккаунт менеджером" onProcessEvent.{@inc:cnt}.events=statusChanged:3 onProcessEvent.{@cnt}.ifExpression=processLink.getStatusProcessLinkedForSame( 6, 30 ) == 3 && processLink.getStatusProcessLinkedForSame( 6, 31 ) == 3 && processLink.getStatusProcessLinkedForSame( 6, 32 ) == 3 onProcessEvent.{@cnt}.commands=linkedProcess:6:setStatus:3
Отправка СМС сообщения по созданию процесса, в случае наличия в значениях спискового параметра с кодом 26 1, 2 или 3. Используется операция пересечения множеств. Номер для СМС получается из параметра с кодом 20 типа Phone.
onProcessEvent.1.events=createFinished onProcessEvent.1.ifExpression=cu.intersection(processParam.listValueIds(26), {1,2,3}).size() > 0 onProcessEvent.1.doExpression=<<END phone=processParam.getParamPhoneNoFormat(20); if(phone) { mtsc.sendSms(phone, "Заявка №".concat( process.getId().toString() ).concat( " принята" )); } END
Установка значения параметра типа text.
onProcessEvent.2.doExpression=<<END dao = new("ru.bgcrm.dao.ParamValueDAO", conSet.getConnection()); dao.updateParamText(process.getId(), 63, "тест"); END
Установка значения параметра типа list.
onProcessEvent.2.doExpression=<<END dao = new("ru.bgcrm.dao.ParamValueDAO", conSet.getConnection()); dao.updateParamList(process.getId(), 63, {1}); END
Удаление из процесса исполнителя с кодом 2 и группы с кодом 37.
onProcessEvent.3.doExpression=<<END deleteExecutors({2}); deleteGroups({37}); END
После изменения статуса если списковый параметр процесса 63 не содержит значений с кодами 1, 2 и 3 установка значения 1 в этот параметр.
onProcessEvent.1.events=statusChanged onProcessEvent.1.ifExpression=empty(cu.intersection(processParam.listValueIds(63), {1,2,3})) onProcessEvent.1.doExpression=<<END dao = new("ru.bgcrm.dao.ParamValueDAO", conSet.getConnection()); dao.updateParamList(process.getId(), 63, {1}); END
При создании процесса внесение в параметр типа "date" с кодом 51 значения текущей даты + два дня, не учитывая вторников.
onProcessEvent.1.events=created onProcessEvent.1.doExpression=<<END dao = new("ru.bgcrm.dao.ParamValueDAO", conSet.getConnection()); cal = new("java.util.GregorianCalendar"); addDays = 2; while (addDays > 0) { var dw = cal.get(cal.DAY_OF_WEEK); if (dw != cal.TUESDAY) addDays = addDays - 1; cal.add(cal.DAY_OF_YEAR, 1); } dao.updateParamDate(process.getId(), 51, cal.getTime()); END
Пример проверки класса события:
if (event.getClass().getName() == "ru.bgcrm.event.process.ProcessMessageAddedEvent") { text += '<b>Сообщение</b>: ' + u.maskNull(event.getMessage().getText()) + ';'; }
Поиск процесса, к которому привязан текущий процесс и если он найден - смена его статуса.
onProcessEvent.3.events=statusChanged onProcessEvent.3.doExpression=<<END pld = new("ru.bgcrm.dao.process.ProcessLinkDAO", conSet.getConnection()); linked = u.getFirst(pld.getLinkedProcessList(process.getId(), null, false, {1})); if (linked != null) { change = new("ru.bgcrm.model.process.StatusChange"); change.setDate(new("java.util.Date")); change.setProcessId(linked.getId()); change.setUserId(event.getUser().getId()); change.setStatusId(9); change.setComment("Автоматическая смена статуса"); pa = ru.bgcrm.struts.action.ProcessAction; pa.processStatusUpdate(event.getForm(), conSet.getConnection(), linked, change); } END
События плагина mobile
Отправляем уведомление с параметрами процесса диспетчеру аварийной бригады. Установлена проверка типа работ из параметра list id 26, передаются номер процесса, адрес, телефоны, тип работ, дата и время приема, комментарий
onProcessEvent.5.events=createFinished onProcessEvent.5.ifExpression=cu.intersection(processParam.listValueIds(26), {2,3,7}).size() > 0 onProcessEvent.5.doExpression=<<END body=process.getTypeTitle(); text="№ " + process.getId().toString() + " Адрес: " + processParam.addressValues(1).toString() + " т. " + processParam.getValue(20) + " " + processParam.listValueTitles(26) + " Принята: " + process.getCreateTime() + " Комментарий: " + process.getDescription() + user.; mobile.sendMessageToUsers(body, text, {5}); END