- Kernel
- Create a process and link int to the existing one
- Add customer link to a created process
- Разрешение на правку процесса при различных условиях
- Добавление пользователя в исполнители и смена статуса
- Установка статуса
- Установка значения параметра типа text
- Установка значения параметра типа list
- Удаление из процесса исполнителей и групп решения
- При создании процесса установка параметра типа date
- Смена статуса привязанного процесса
- Изменение приоритета процесса при смене статуса
- Проверка класса события
- Добавление текста в описание процесса при смене статуса
- Плагин BGBilling
- Плагин SMS
- Плагин Mobile
STATUS_IDS=1,4
PARAM_LIST_ID=49
PROCESS_TYPE_ID=8
onProcessEvent.{@inc:cnt}.events=statusChanged:{@STATUS_IDS}
onProcessEvent.{@cnt}.doExpression=<<END
processId = event.getProcess().getId();
dao = new("org.bgerp.dao.param.ParamValueDAO", conSet.getConnection());
listValue = u.getFirst(dao.getParamList(processId,{@PARAM_LIST_ID}));
log.debug("listValue: " + listValue);
// if the list parameter value is 1
if (listValue == 1) {
// create a new process
dao = new("ru.bgcrm.dao.process.ProcessDAO", conSet.getConnection());
process = new("ru.bgcrm.model.process.Process");
process.setTypeId({@PROCESS_TYPE_ID});
process.setDescription("Created automatically");
action = ru.bgcrm.struts.action.ProcessAction;
action.processCreate(event.getForm(), conSet.getConnection(), process);
log.debug("Created process: " + process.getId());
// link it to the current one with relation type 'link'
dao = new("ru.bgcrm.dao.process.ProcessLinkDAO", conSet.getConnection());
link = new("org.bgerp.model.process.link.ProcessLinkProcess", processId, "processLink", process.getId());
dao.addLink(link);
}
END
onProcessEvent.{@inc:cnt}.events=created
onProcessEvent.{@cnt}.doExpression=<<END
customerId = 1;
customerTitle = "Customer Title";
dao=new("ru.bgcrm.dao.process.ProcessLinkDAO", conSet.getConnection());
link=new("ru.bgcrm.model.CommonObjectLink", "process", process.getId(), "customer", customerId, customerTitle);
dao.addLink(link);
END
В различных статусах различным группам, исполнителю либо администратору и запрет правки закрытого процесса.
onProcessEvent.{@inc:cnt}.checkExpression=process.getStatusId() !~ [9, 13, 36,39] or 8 =~ user.getGroupIds()
onProcessEvent.{@cnt}.checkErrorMessage=В этом статусе разрешена правка только сотрудникам КС
onProcessEvent.{@inc:cnt}.checkExpression=process.getStatusId() != 9 or user.getId() =~ process.getExecutorIds() or 33 =~ user.getPermsetIds()
onProcessEvent.{@cnt}.checkErrorMessage=В этом статусе разрешена правка только исполнителем процесса либо администратором КС
onProcessEvent.{@inc:cnt}.checkExpression=process.getCloseTime() == null
onProcessEvent.{@cnt}.checkErrorMessage=Запрещена правка закрытого процесса
Добавление текущего пользователя в исполнители и установка в статус с кодом 40, если процесс создан как привязанный к другому процессу.
onProcessEvent.{@inc:cnt}.events=createdAsLink
onProcessEvent.{@cnt}.doExpression=addExecutors({user.getId()});setStatus(40, "")
Изменение статуса процесса на 3 при получении в него нового сообщения.
onProcessEvent.{@inc:cnt}.events=messageAdded
onProcessEvent.{@cnt}.ifExpression=process.getStatusId() != 3
onProcessEvent.{@cnt}.doExpression=setStatus(3, "")
onProcessEvent.{@inc:cnt}.doExpression=<<END
dao = new("org.bgerp.dao.param.ParamValueDAO", conSet.getConnection());
dao.updateParamText(process.getId(), 63, "тест");
END
onProcessEvent.{@inc:cnt}.doExpression=<<END
dao = new("org.bgerp.dao.param.ParamValueDAO", conSet.getConnection());
dao.updateParamList(process.getId(), 63, {1});
END
После изменения статуса если списковый параметр процесса 63 не содержит значений с кодами 1, 2 и 3 установка значения 1 в этот параметр.
onProcessEvent.{@inc:cnt}.events=statusChanged
onProcessEvent.{@cnt}.ifExpression=empty(cu.intersection(processParam.listValueIds(63), {1,2,3}))
onProcessEvent.{@cnt}.doExpression=<<END
dao = new("org.bgerp.dao.param.ParamValueDAO", conSet.getConnection());
dao.updateParamList(process.getId(), 63, {1});
END
C кодом 2 и группы с кодом 37.
onProcessEvent.{@inc:cnt}.doExpression=<<END
deleteExecutors({2});
deleteGroups({37});
END
При создании процесса внесение в параметр типа "date" с кодом 51 значения текущей даты + два дня, не учитывая вторников.
onProcessEvent.{@inc:cnt}.events=created
onProcessEvent.{@cnt}.doExpression=<<END
dao = new("org.bgerp.dao.param.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
Поиск процесса, к которому привязан текущий процесс и если он найден - смена его статуса.
onProcessEvent.{@inc:cnt}.events=statusChanged
onProcessEvent.{@cnt}.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
При смене статуса на 10 или 12 установка приоритета 5.
onProcessEvent.{@inc:cnt}.events=statusChanged:10,12 onProcessEvent.{@cnt}.doExpression=setPriority(5);
if (event.getClass().getName() == "ru.bgcrm.event.process.ProcessMessageAddedEvent") {
text += '<b>Сообщение</b>: ' + u.maskNull(event.getMessage().getText()) + ';';
}
onProcessEvent.{@inc:cnt}.events=statusChanging
onProcessEvent.{@cnt}.doExpression=<<END
dao = new("ru.bgcrm.dao.process.ProcessDAO", conSet.getConnection());
change = event.getStatusChange();
change = ctxUserMap[change.getUserId()].getTitle() + " => " + ctxProcessStatusMap[change.getStatusId()].getTitle() + " [" + change.getComment() + "]";
process.setDescription(process.getDescription() + NEW_LINE + change);
dao.updateProcess(process);
END
Плагин BGBilling
Копирование параметра адрес с кодом 8 из привязанного договора в параметр процесса с кодом 4. Пример может быть легко расширен для переноса любых параметров.
COPY_BGBILLING_PARAMS=<<END
paramDao = new("org.bgerp.dao.param.ParamValueDAO", conSet.getConnection());
linkDao = new("ru.bgcrm.dao.process.ProcessLinkDAO", conSet.getConnection());
contractLink = u.getFirst(linkDao.getObjectLinksWithType(process.getId(),"%contract%"));
if (contractLink != null) {
contractId = contractLink.getLinkedObjectId();
billingId = su.substringAfter(contractLink.getLinkedObjectType(), ":");
contractParamDao = new("ru.bgcrm.plugin.bgbilling.proto.dao.ContractParamDAO", ctxUser, billingId);
address = contractParamDao.getAddressParam(contractId, 8);
if (address != null)
paramDao.updateParamAddress(process.getId(), 4, 1, address.toParameterAddressValue(conSet.getConnection()));
// копирование других параметров
}
END
onProcessEvent.{@inc:cnt}.events=linkAdded;createdAsLink
onProcessEvent.{@cnt}.doExpression={@COPY_BGBILLING_PARAMS}
При привязке договора - копирование значений параметров с кодами 27 и 12 в описание процесса.
onProcessEvent.{@inc:cnt}.events=linkAdded
onProcessEvent.{@cnt}.commands=bgbilling:linkedContractParamToDescription:bg:27;bgbilling:linkedContractParamToDescription:bg:12
Плагин SMS
Отправка СМС сообщения по созданию процесса, в случае наличия в значениях спискового параметра с кодом 26 1, 2 или 3. Используется операция пересечения множеств. Номер для СМС получается из параметра с кодом 20 типа Phone.
onProcessEvent.{@inc:cnt}.events=createFinished
onProcessEvent.{@cnt}.ifExpression=cu.intersection(processParam.listValueIds(26), {1,2,3}).size() > 0
onProcessEvent.{@cnt}.doExpression=<<END
phone=processParam.getParamPhoneNoFormat(20);
if (phone) {
sms.sendSms(phone, "Заявка №".concat( process.getId().toString() ).concat(" принята"));
}
END
Плагин Mobile
Отправлка уведомление с параметрами процесса диспетчеру аварийной бригады. Установлена проверка типа работ из параметра list id 26, передаются номер процесса, адрес, телефоны, тип работ, дата и время приема, комментарий.
onProcessEvent.{@inc:cnt}.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.getValue(1) + " т. " + processParam.getValue(20) + " " + processParam.getValue(26) + " Принята: " + process.getCreateTime() + " Комментарий: " + process.getDescription();
mobile.sendMessageToUsers(body, text, {5});
END