Custom Escalation Java Function указывается в конфигурации задачи для указания по какой логике будет ...
Custom Escalation Java Function указывается в конфигурации задачи для указания по какой логике будет выполняться эскалация для
пользователей и
групп (
для ролей не используется!).
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:
- Войти в EM (Enterprise Manager Fusion Middleware Control)
- Перейти в soa-infra -> SOA Administration -> Workflow Properties
- Перейти на закладку Task и добавить наш класс (Add function) следующим образом:
Альтернативный вариант: вместо указанных действий в п.1-2 можно положить скомпилированный класс в директорию
$MW_HOME\soa\soa\modules\oracle.soa.ext_11.1.1\classes
Наш марафон поддержали новые спонсоры и выделили замечательные призы. А призовой фонд у нас уже ...
Рекламный ролик бродвейской постановки мюзикла "Dames at Sea"
Компания Google запустила в тестовом режиме программируемую наружную рекламу, используя для этого ...