| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Workflow, ошибка, AX 2009
			 
			
			Всем доброго времени суток. 
		
		
		
		
		
		
		
	Настраиваю процесс утверждения заявки на покупку, столкнулся со следующей проблемой: После отправки заявки в документооборот, когда система пытается назначить задачу группе пользователей в журнале получаю ошибку: Остановлено (ошибка): Пользователь alx не обладает доступом к элементу меню PurchReqTable. У группы пользователей полные права в ветке "Расчеты с поставщиками" в правах относящихся к бизнес-правилу, в том числе и к MenuItem PurchReqTable. Процесс утверждения не стандартный, кастомизированный, но все элементы скопированы из стандартных. Пока настраивал схему - тестировал под собой - все проходило на ура. Может кто-нибудь подсказать где собака порылась?  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 MCP 
		
			
	 | 
	
	
	
		
		
		
		 
			
			а если джобик написать, который будет дергать этот пункт меню, и запустить под пользователем alx? Не пробовали? Если повториться - значит все-таки не неастроен доступ к этому пункту меню.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Есть подозрение, что пользователю нужен доступ не к самому пункту меню, а доступ не ниже "чтение" на ключ Расчеты с поставщиками / Разное.
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Ivanhoe as is..  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: jonny (1). | |
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			К пункту меню доступ действительно есть - он отвечает за открытие формы "Заявка на закупку", выведен в меню Vend,  у пользователя этот пункт есть и по нажатии на него форма открывается с полными правами.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#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, оповещения, ошибка, права доступа | 
| 
	
	 | 
	
		
  |