исполнитель
обращение
права доступа по умолчанию
Технические вопросы
5.x

Подскажите как реализуется сортировка обращений к исполнителям.

Для BPMonline Service Desk. Подскажите, как технически реализуется возможность сортировки и прав доступа новых обращений в зависимости от сервиса/подсервиса для конечного исполнителья. Т.е. чтобы ряд групп исполнителей мог видеть обращения исключительно указанной для нее специфики. Если возможно в качестве детальной инструкции. Спасибо!

Нравится

5 комментариев

Добрый день.

В свойствах объекта ServiceRequest укажите значение колонки Группа и опубликуйте объект.

Таким образом, группа пользователей, назначенная ответственной по инциденту/запросу на обслуживание получит права на запись.

Не совсем то, что я хотел. Допустим, что есть 10 предоставляемых видов сервисов. 2 из них делает одна группа, 2 из них другая, 2 из них третья и так далее. В разделе обращений каждая из групп может видеть только обращения предназначенные именно им(зависимость от выбранного типа сервиса при создании обращения для конкретной группы). Может быть создать несколько папок до раздела обращений и на них дать права? Тем не менее как нацелить на них необходимые сервисы? Пожалуйста, подскажите.

Если вопрос удобства, то корректнее всего было бы создать динамические группы с фильтрами по сервисам, выбранным в инциденте/запросе на обслуживание.
Если вопрос безопасности, то необходимо дописывать логику на сохранении записи. В объекте ServiceRequest, в процессе, на событии ServiceRequestInserted в задании-сценарии ServiceRequestInsertedScriptTask дописать insert, наподобие уже существующего:
[csharp]
var portalUsersSysAdminUnitUId = new Guid("f858d1b9-334b-e111-b408-00155d054c02");
Guid recordUId = Entity.PrimaryColumnValue;
int defPosition = 0;
var defaultSourceUId = new Guid("f41e0268-e324-4228-9e9e-5cb7cc906398");
var nowParameter = new QueryParameter("now", DateTime.Now, "DateTime");
var currentUserContactIdParameter = new QueryParameter("currentUserId", UserConnection.CurrentUser.ContactId);
for (int operation = 0; operation <= 2; operation++) {
var insertRight = new Insert(UserConnection)
.Into("SysServiceRequestRight")
.Set("CreatedOn", nowParameter)
.Set("CreatedById", currentUserContactIdParameter)
.Set("ModifiedOn", nowParameter)
.Set("ModifiedById", currentUserContactIdParameter)
.Set("RecordId", Column.Parameter(recordUId))
.Set("SysAdminUnitId", Column.Parameter(portalUsersSysAdminUnitUId))
.Set("Operation", Column.Parameter(operation))
.Set("RightLevel", Column.Parameter(true))
.Set("Position", Column.Parameter(defPosition))
.Set("SourceId", Column.Parameter(defaultSourceUId))
as Insert;
insertRight.Execute();
}
[/csharp]

Только вместо portalUsersSysAdminUnitUId использовать идентификатор конкретной группы, который будет присваиваться переменной в зависимости от предоставляемого сервиса.

Данный вопрос рассматривается из соображений безопасности. Не могли бы вы предоставить мне наглядный пример реализации, с необходимыми для замены значениями и комментариями?

[csharp]
Guid groupId;
Guid subserviceId = Entity.SubserviceId;
switch (subserviceId.ToString()) {
case "d79f2070-f36b-1410-f18a-0050ba5d6c38": //если такой-то подсервис
groupId = new Guid("f15d4059-e23e-4ed9-9041-88a12736c031"); //то, даем права такой-то группе
break;
case "jf75j070-f36b-1410-f18a-hr7dj45d6c38": //а если такой-то подсервис
groupId = new Guid("r45d4059-e23e-4ed9-9041-88a12736c741"); //то, даем права другой группе
break;
default: //условие по умолчанию
groupId = new Guid("6e0a1b5e-7738-4a9c-9d2d-995f62e51e26"); //даем права группе такой-то
break;
}
var defaultSource = new Guid("f41e0268-e324-4228-9e9e-5cb7cc906398");
var now = new QueryParameter("now", DateTime.Now, "DateTime");
var currentUserContactId = new QueryParameter("currentUserId", UserConnection.CurrentUser.ContactId);
for (int operation = 0; operation <= 2; operation++) {
var insertRight1 = new Insert(UserConnection)
.Into("SysServiceRequestRight")
.Set("CreatedOn", now)
.Set("CreatedById", currentUserContactId)
.Set("ModifiedOn", now)
.Set("ModifiedById", currentUserContactId)
.Set("RecordId", Column.Parameter(Entity.PrimaryColumnValue))
.Set("SysAdminUnitId", Column.Parameter(groupId))
.Set("Operation", Column.Parameter(operation))
.Set("RightLevel", Column.Parameter(true))
.Set("Position", Column.Parameter(0))
.Set("SourceId", Column.Parameter(defaultSource))
as Insert;
insertRight1.Execute();
}
[/csharp]

Показать все комментарии