AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Администрирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.11.2010, 08:09   #1  
jonny is offline
jonny
Участник
Аватар для jonny
Самостоятельные клиенты AX
 
217 / 124 (5) +++++
Регистрация: 10.02.2006
Адрес: СПб-Екб-?
Workflow, ошибка, AX 2009
Всем доброго времени суток.
Настраиваю процесс утверждения заявки на покупку, столкнулся со следующей проблемой:
После отправки заявки в документооборот, когда система пытается назначить задачу группе пользователей в журнале получаю ошибку:
Остановлено (ошибка): Пользователь alx не обладает доступом к элементу меню PurchReqTable.

У группы пользователей полные права в ветке "Расчеты с поставщиками" в правах относящихся к бизнес-правилу, в том числе и к MenuItem PurchReqTable.

Процесс утверждения не стандартный, кастомизированный, но все элементы скопированы из стандартных.
Пока настраивал схему - тестировал под собой - все проходило на ура.

Может кто-нибудь подсказать где собака порылась?
Старый 11.11.2010, 11:04   #2  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
а если джобик написать, который будет дергать этот пункт меню, и запустить под пользователем alx? Не пробовали? Если повториться - значит все-таки не неастроен доступ к этому пункту меню.
Старый 11.11.2010, 11:14   #3  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Есть подозрение, что пользователю нужен доступ не к самому пункту меню, а доступ не ниже "чтение" на ключ Расчеты с поставщиками / Разное.
__________________
Ivanhoe as is..
За это сообщение автора поблагодарили: jonny (1).
Старый 11.11.2010, 11:36   #4  
jonny is offline
jonny
Участник
Аватар для jonny
Самостоятельные клиенты AX
 
217 / 124 (5) +++++
Регистрация: 10.02.2006
Адрес: СПб-Екб-?
Цитата:
Сообщение от kornix Посмотреть сообщение
а если джобик написать, который будет дергать этот пункт меню, и запустить под пользователем alx? Не пробовали? Если повториться - значит все-таки не неастроен доступ к этому пункту меню.
К пункту меню доступ действительно есть - он отвечает за открытие формы "Заявка на закупку", выведен в меню Vend, у пользователя этот пункт есть и по нажатии на него форма открывается с полными правами.
Старый 11.11.2010, 11:39   #5  
jonny is offline
jonny
Участник
Аватар для jonny
Самостоятельные клиенты AX
 
217 / 124 (5) +++++
Регистрация: 10.02.2006
Адрес: СПб-Екб-?
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Есть подозрение, что пользователю нужен доступ не к самому пункту меню, а доступ не ниже "чтение" на ключ Расчеты с поставщиками / Разное.
Это помогло, спасибо.
Так и не смог найти место где происходит данная проверка...
Мне кажется это как-то криво, можно каким-то образом обойти?
Старый 11.11.2010, 11:47   #6  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
См. класс EventNotification.create() строка:
X++:
runas(inbox.UserId,classnum(EventNotification),staticmethodstr(EventNotification,hasUserAccess),parms);
Ну и, соответственно, в том же классе метод hasUserAccess.

Обычным дебагером найти не получится - все что выполняется в runas - черный ящик

По поводу проверки, я вообще считаю, что нет смысла проверять доступ пользователя к пункту меню при создании оповещения. Т.е. я придерживаюсь подхода "раз оповещение пришло, то отсутствие доступа - ошибка настройки прав доступа".

Но, по-хорошему, если и делать проверку, то на доступ к самому пункту меню, а не к его ключу.
__________________
Ivanhoe as is..
Старый 11.11.2010, 14:22   #7  
jonny is offline
jonny
Участник
Аватар для jonny
Самостоятельные клиенты AX
 
217 / 124 (5) +++++
Регистрация: 10.02.2006
Адрес: СПб-Екб-?
Спасибо, переделал методы create и hasUserAccess, теперь проверяет права только на конкретный пункт меню.
Старый 11.11.2010, 16:08   #8  
dmitro is offline
dmitro
Участник
 
48 / 19 (1) ++
Регистрация: 18.07.2008
Адрес: Москва, РФ
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
См. класс EventNotification.create() строка:
X++:
runas(inbox.UserId,classnum(EventNotification),staticmethodstr(EventNotification,hasUserAccess),parms);
Ну и, соответственно, в том же классе метод hasUserAccess.

Обычным дебагером найти не получится - все что выполняется в runas - черный ящик

По поводу проверки, я вообще считаю, что нет смысла проверять доступ пользователя к пункту меню при создании оповещения. Т.е. я придерживаюсь подхода "раз оповещение пришло, то отсутствие доступа - ошибка настройки прав доступа".

Но, по-хорошему, если и делать проверку, то на доступ к самому пункту меню, а не к его ключу.
не совсем. если в макросе Workflow переписать WorkflowRunAsDebug(false) в true и перекомпилировать класс SysWorkflowHelper, то можно дебажить
За это сообщение автора поблагодарили: Ivanhoe (2).
Старый 11.11.2010, 17:12   #9  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
А этот макрос сработает и для оповещений? Ошибка именно в них.
__________________
Ivanhoe as is..
Старый 11.11.2010, 19:36   #10  
dmitro is offline
dmitro
Участник
 
48 / 19 (1) ++
Регистрация: 18.07.2008
Адрес: Москва, РФ
это для отслеживания событий ядра документооборота, где используется workflowRunAs метод, например в классе SysWorkflowEventDispatcher.

а для ошибки в данном конкретном случае обычно по тексту ошибки в журнале документооборота находим метку, потом что использует эту метку. переходим в EventNotification::hasUserAccess() и видим, что пользователю не хватает прав.
Старый 12.11.2010, 07:13   #11  
jonny is offline
jonny
Участник
Аватар для jonny
Самостоятельные клиенты AX
 
217 / 124 (5) +++++
Регистрация: 10.02.2006
Адрес: СПб-Екб-?
Коллеги, еще вопрос - какие права нужно дать пользователям, чтобы у них была доступна кнопка "Принять" системы workflow?

P.S. Уже разобрался - нужны права на Action MenuItem WorkflowClaimWorkItem

Последний раз редактировалось jonny; 12.11.2010 в 08:41.
Старый 12.11.2010, 12:08   #12  
jonny is offline
jonny
Участник
Аватар для jonny
Самостоятельные клиенты AX
 
217 / 124 (5) +++++
Регистрация: 10.02.2006
Адрес: СПб-Екб-?
Резюме
Хочу резюмировать итоги настройки прав на workflow пользователям, потому как в справке неполные данные.
  • Права в ветке “Бизнес-правило” (это описано в справке)
  • Администрирование-таблицы-Пользовательские связи
  • Основное-разное:
    • Просмотр журнала
    • Принять
    • Инструкции
    • Текст сообщения
  • Основное-таблицы
    • SysWorkflowInstanceTable (тоже из справки)
    • Таблица сообщений документа
Помимо этого пришлось внести следующие модификации в класс EventNotification:
1. Метод create

X++:
  runAsPermission.assert();
        //jonny ->
        parms = [menuFunction.securityKey(),menuFunction.name(),menuFunction.type()];
        //parms = [menuFunction.securityKey(),menuFunction.name()];
        //jonny <-
2. метод hasUserAccess

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, оповещения, ошибка, права доступа

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: List of fixes that improve performance of certain features in Dynamics AX 2009 Blog bot DAX Blogs 0 13.10.2009 19:06
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05
Solutions Monkey: Using Microsoft Dynamics Ax 2009 Workflow controls in EP Blog bot DAX Blogs 0 30.07.2008 10:05
Arijit Basu: AX 2009 Workflows: A Quick overview Blog bot DAX Blogs 0 19.06.2008 02:07
Arijit Basu: AX 2009 - Quick Overview Blog bot DAX Blogs 4 19.05.2008 14:47

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:21.