|
![]() |
#1 |
Участник
|
Workflow, ошибка, AX 2009
Всем доброго времени суток.
Настраиваю процесс утверждения заявки на покупку, столкнулся со следующей проблемой: После отправки заявки в документооборот, когда система пытается назначить задачу группе пользователей в журнале получаю ошибку: Остановлено (ошибка): Пользователь alx не обладает доступом к элементу меню PurchReqTable. У группы пользователей полные права в ветке "Расчеты с поставщиками" в правах относящихся к бизнес-правилу, в том числе и к MenuItem PurchReqTable. Процесс утверждения не стандартный, кастомизированный, но все элементы скопированы из стандартных. Пока настраивал схему - тестировал под собой - все проходило на ура. Может кто-нибудь подсказать где собака порылась? |
|
![]() |
#2 |
MCP
|
а если джобик написать, который будет дергать этот пункт меню, и запустить под пользователем alx? Не пробовали? Если повториться - значит все-таки не неастроен доступ к этому пункту меню.
|
|
![]() |
#3 |
Участник
|
К пункту меню доступ действительно есть - он отвечает за открытие формы "Заявка на закупку", выведен в меню Vend, у пользователя этот пункт есть и по нажатии на него форма открывается с полными правами.
|
|
![]() |
#4 |
Участник
|
Есть подозрение, что пользователю нужен доступ не к самому пункту меню, а доступ не ниже "чтение" на ключ Расчеты с поставщиками / Разное.
__________________
Ivanhoe as is.. |
|
|
За это сообщение автора поблагодарили: jonny (1). |
![]() |
#5 |
Участник
|
Цитата:
Так и не смог найти место где происходит данная проверка... Мне кажется это как-то криво, можно каким-то образом обойти? |
|
![]() |
#6 |
Участник
|
См. класс EventNotification.create() строка:
X++: runas(inbox.UserId,classnum(EventNotification),staticmethodstr(EventNotification,hasUserAccess),parms); Обычным дебагером найти не получится - все что выполняется в runas - черный ящик ![]() По поводу проверки, я вообще считаю, что нет смысла проверять доступ пользователя к пункту меню при создании оповещения. Т.е. я придерживаюсь подхода "раз оповещение пришло, то отсутствие доступа - ошибка настройки прав доступа". Но, по-хорошему, если и делать проверку, то на доступ к самому пункту меню, а не к его ключу.
__________________
Ivanhoe as is.. |
|
![]() |
#7 |
Участник
|
Спасибо, переделал методы create и hasUserAccess, теперь проверяет права только на конкретный пункт меню.
|
|
![]() |
#8 |
Участник
|
Цитата:
Сообщение от Ivanhoe
![]() См. класс EventNotification.create() строка:
X++: runas(inbox.UserId,classnum(EventNotification),staticmethodstr(EventNotification,hasUserAccess),parms); Обычным дебагером найти не получится - все что выполняется в runas - черный ящик ![]() По поводу проверки, я вообще считаю, что нет смысла проверять доступ пользователя к пункту меню при создании оповещения. Т.е. я придерживаюсь подхода "раз оповещение пришло, то отсутствие доступа - ошибка настройки прав доступа". Но, по-хорошему, если и делать проверку, то на доступ к самому пункту меню, а не к его ключу. ![]() |
|
|
За это сообщение автора поблагодарили: Ivanhoe (2). |
![]() |
#9 |
Участник
|
А этот макрос сработает и для оповещений? Ошибка именно в них.
__________________
Ivanhoe as is.. |
|
![]() |
#10 |
Участник
|
это для отслеживания событий ядра документооборота, где используется workflowRunAs метод, например в классе SysWorkflowEventDispatcher.
а для ошибки в данном конкретном случае обычно по тексту ошибки в журнале документооборота находим метку, потом что использует эту метку. переходим в EventNotification::hasUserAccess() и видим, что пользователю не хватает прав. |
|
![]() |
#11 |
Участник
|
Коллеги, еще вопрос - какие права нужно дать пользователям, чтобы у них была доступна кнопка "Принять" системы workflow?
P.S. Уже разобрался - нужны права на Action MenuItem WorkflowClaimWorkItem Последний раз редактировалось jonny; 12.11.2010 в 08:41. |
|
![]() |
#12 |
Участник
|
Резюме
Хочу резюмировать итоги настройки прав на workflow пользователям, потому как в справке неполные данные.
1. Метод create X++: runAsPermission.assert(); //jonny -> parms = [menuFunction.securityKey(),menuFunction.name(),menuFunction.type()]; //parms = [menuFunction.securityKey(),menuFunction.name()]; //jonny <- X++: static void hasUserAccess(container args) { int securityKeyId; ; securityKeyId = conpeek(args,1); //jonny -> if (!hasMenuItemAccess(conpeek(args,2),conpeek(args,3))) { throw error(strfmt("@SYS105269", curuserid(), conpeek(args,2))); } /*if (!hasSecuritykeyAccess(securityKeyId,AccessType::View)) { throw error(strfmt("@SYS105269", curuserid(), conpeek(args,2))); } */ //jonny <- } |
|
|
За это сообщение автора поблагодарили: Maximin (2), lev (1), Daiver (1), Ivanhoe (2), dmitro (1). |
Теги |
ax2009, workflow, оповещения, ошибка, права доступа |
|
|