Custom Escalation Java Function рассмотрим на примере:
Логика данного примера:package oracle.bpel.services.workflow.assignment.dynamic; import java.util.List; import java.util.Map; import oracle.bpel.services.workflow.task.model.Task; import oracle.bpel.services.workflow.assignment.dynamic.DynamicAssignmentException; import oracle.tip.pc.services.common.ServiceFactory; import oracle.tip.pc.services.identity.BPMAuthorizationService; import oracle.tip.pc.services.identity.BPMAppRole; import oracle.tip.pc.services.identity.BPMAuthorizationService; import oracle.tip.pc.services.identity.BPMGroup; import oracle.tip.pc.services.identity.BPMIdentityService; import oracle.tip.pc.services.identity.BPMUser;
/* * Обеспечивает эскалацию на владельца задачи. */
public class OwnerEscalation implements IDynamicTaskEscalationFunction { public String defaultUser; @Override public String getTaskEscalationUser(Task task) throws DynamicAssignmentException { String ownerRole = task.getOwnerRole(); String ownerGroup = task.getOwnerGroup(); String ownerUser = task.getOwnerUser(); if (ownerRole != null) { try { BPMAuthorizationService idenService = ServiceFactory.getIdentityServiceInstance(); List<BPMUser> usersInRole = idenService.getParticipantsToAppRole(ownerRole, task.getApplicationContext(), false); if (usersInRole.size() > 0) {
// Берём первого пользователя
return usersInRole.get(0).getName(); } } catch (Exception ex) { ex.printStackTrace(); } } else if (ownerGroup != null) { try { BPMAuthorizationService idenService = ServiceFactory.getIdentityServiceInstance(); List<BPMUser> usersInGroup = idenService.getParticipantsToGroup(ownerGroup, true); if (usersInGroup.size() > 0) {
// Берём первого пользователя
return usersInGroup.get(0).getName(); } } catch (Exception ex) { ex.printStackTrace(); } } else if (ownerUser != null) { return ownerUser; } return defaultUser; } @Override public String getTaskEscalationUser(String string) throws DynamicAssignmentException { return defaultUser; } @Override public void setInitParams(Map map) throws DynamicAssignmentException {
// Добавляем параметр указывающий на какого пользователя проводить эскалацию, // если владелец задачи (Owner) не указан
defaultUser=(String)map.get("DEFAULT_USER"); } @Override public String getFunctionName() { return "OWNER_ESCALATION"; } @Override public String getDescription() { return "Escalation to task owner"; } }
Если у задачи определён владелец (Owner), то эскалация будет выполняться на владельца. Иначе, на пользователя указанного в конфигурации как DEFAULT_USER
Важно:
- Класс должен быть в пакете oracle.bpel.services.workflow.assignment.dynamic.
Установка:
- Собрать JAR содержащий класс и положить его в директорию $MW_HOME\soa\soa\modules\oracle.soa.ext_11.1.1
- Запустить ant в директории $MW_HOME\soa\soa\modules\oracle.soa.ext_11.1.1 (вероятно потребуется проинициализировать переменные окружения)
- Перезагрузить soa-сервер для того, чтобы новый класс был доступен серверу (был в classpath).
- Зарегистрировать Task Escalation Function: