Здравствуйте
Есть задача скрыть редактирование поля страны в детали по организационным ролям(супервайзер, руководители, менеджеры), закрыть право на редактирование для менеджеров.
Пробывал разные варианты через конфигурацию и добавления правил, все равно не работает.
Версия bpm7.6.
Как лучше мне это сделать?
Нравится
Здравствуйте, Сергей!
Вы можете видимость поля задать бизнес правилом. Параметр видимости будет определяться в момент открытия страницы редактирования (Вам необходимо переопределить метод onEntityItialized()). Замещенный метод onEntityItialized() должен вызывать родительский, а также проверять вхождение пользователя в роли (используйте ESQ по объекту SysAdminUnitInRole). Обратите внимание, что один пользователь может входить в несколько ролей.
Сформировал запрос к таблице SysAdminUnitInRole по своей Id
SELECT * FROM dbo.SysAdminUnit sa LEFT JOIN dbo.SysAdminUnitInRole saur ON sa.Id = saur.SysAdminUnitId WHERE sa.Id = 'мой Id'
Вернуло 3 строки - это означает, что в меня есть 3 роли?
Да, это значит что Администратор с sa.Id = 'мой Id' входит в три роли
Если вы выполните
SELECT saur.SysAdminUnitId, saur.SysAdminUnitRoleId FROM dbo.SysAdminUnitInRole saur Where saur.SysAdminUnitId = 'мой Id'
То увидите айдишники ролей
Спасибо за подсказку, пытался вывести название ролей:
SELECT saur.SysAdminUnitId, saur.SysAdminUnitRoleId, s.Name FROM dbo.SysAdminUnitInRole saur Left JOIN dbo.SysAdminUnit s ON saur.SysAdminUnitId = s.Id WHERE saur.SysAdminUnitId = 'мой Id'
Результат имя моего контакта. Может я неправильно делаю?
так ваш запрос и выводит имя контакта из s.Name (SysAdminUnit)
можно сделать так
select s.Name from SysAdminUnit s where s.id in ( select saur.SysAdminUnitRoleId from dbo.SysAdminUnitInRole saur where saur.SysAdminUnitId = 'мой Id' )
Вот только одна запись похоже тоже будет вашим контактом, т.к. есть соответствие одинаковых id в SysAdminUnitInRole