11.11.2010, 08:09 | #1 |
Участник
|
Workflow, ошибка, AX 2009
Всем доброго времени суток.
Настраиваю процесс утверждения заявки на покупку, столкнулся со следующей проблемой: После отправки заявки в документооборот, когда система пытается назначить задачу группе пользователей в журнале получаю ошибку: Остановлено (ошибка): Пользователь alx не обладает доступом к элементу меню PurchReqTable. У группы пользователей полные права в ветке "Расчеты с поставщиками" в правах относящихся к бизнес-правилу, в том числе и к MenuItem PurchReqTable. Процесс утверждения не стандартный, кастомизированный, но все элементы скопированы из стандартных. Пока настраивал схему - тестировал под собой - все проходило на ура. Может кто-нибудь подсказать где собака порылась? |
|
11.11.2010, 11:04 | #2 |
MCP
|
а если джобик написать, который будет дергать этот пункт меню, и запустить под пользователем alx? Не пробовали? Если повториться - значит все-таки не неастроен доступ к этому пункту меню.
|
|
11.11.2010, 11:14 | #3 |
Участник
|
Есть подозрение, что пользователю нужен доступ не к самому пункту меню, а доступ не ниже "чтение" на ключ Расчеты с поставщиками / Разное.
__________________
Ivanhoe as is.. |
|
|
За это сообщение автора поблагодарили: jonny (1). |
11.11.2010, 11:36 | #4 |
Участник
|
К пункту меню доступ действительно есть - он отвечает за открытие формы "Заявка на закупку", выведен в меню Vend, у пользователя этот пункт есть и по нажатии на него форма открывается с полными правами.
|
|
11.11.2010, 11:39 | #5 |
Участник
|
Цитата:
Так и не смог найти место где происходит данная проверка... Мне кажется это как-то криво, можно каким-то образом обойти? |
|
11.11.2010, 11:47 | #6 |
Участник
|
См. класс EventNotification.create() строка:
X++: runas(inbox.UserId,classnum(EventNotification),staticmethodstr(EventNotification,hasUserAccess),parms); Обычным дебагером найти не получится - все что выполняется в runas - черный ящик По поводу проверки, я вообще считаю, что нет смысла проверять доступ пользователя к пункту меню при создании оповещения. Т.е. я придерживаюсь подхода "раз оповещение пришло, то отсутствие доступа - ошибка настройки прав доступа". Но, по-хорошему, если и делать проверку, то на доступ к самому пункту меню, а не к его ключу.
__________________
Ivanhoe as is.. |
|
11.11.2010, 14:22 | #7 |
Участник
|
Спасибо, переделал методы create и hasUserAccess, теперь проверяет права только на конкретный пункт меню.
|
|
11.11.2010, 16:08 | #8 |
Участник
|
Цитата:
Сообщение от Ivanhoe
См. класс EventNotification.create() строка:
X++: runas(inbox.UserId,classnum(EventNotification),staticmethodstr(EventNotification,hasUserAccess),parms); Обычным дебагером найти не получится - все что выполняется в runas - черный ящик По поводу проверки, я вообще считаю, что нет смысла проверять доступ пользователя к пункту меню при создании оповещения. Т.е. я придерживаюсь подхода "раз оповещение пришло, то отсутствие доступа - ошибка настройки прав доступа". Но, по-хорошему, если и делать проверку, то на доступ к самому пункту меню, а не к его ключу. |
|
|
За это сообщение автора поблагодарили: Ivanhoe (2). |
11.11.2010, 17:12 | #9 |
Участник
|
А этот макрос сработает и для оповещений? Ошибка именно в них.
__________________
Ivanhoe as is.. |
|
11.11.2010, 19:36 | #10 |
Участник
|
это для отслеживания событий ядра документооборота, где используется workflowRunAs метод, например в классе SysWorkflowEventDispatcher.
а для ошибки в данном конкретном случае обычно по тексту ошибки в журнале документооборота находим метку, потом что использует эту метку. переходим в EventNotification::hasUserAccess() и видим, что пользователю не хватает прав. |
|
12.11.2010, 07:13 | #11 |
Участник
|
Коллеги, еще вопрос - какие права нужно дать пользователям, чтобы у них была доступна кнопка "Принять" системы workflow?
P.S. Уже разобрался - нужны права на Action MenuItem WorkflowClaimWorkItem Последний раз редактировалось jonny; 12.11.2010 в 08:41. |
|
12.11.2010, 12:08 | #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, оповещения, ошибка, права доступа |
|
|