| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Отправка оповещений
			 
			
			Появилась необходимость отправлять оповещения не на пользователя, указанного в параметрах созданного оповещения, а пользователя, указанного в данных, для которых сгенерировано оповещение. Раскопал, что рассылка оповещений реализована в классах EventActionAlert и EventActionEMail. Изменил метод execute. Это позволило справиться с рассылкой на email, но системное оповещения так и приходят пользователю, указанному в параметрах оповещения. Не пойму, где генерируется системное оповещение (корректировка метода execute класса EventActionAlert tyt помогла). Кто-то занимался подобным? Очень нужно  
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			а версия аксапты какая?
		 
		
		
		
		
		
		
			
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А какое у вас значение UserId  в соотвествующей записи inbox ? 
		
		
		
		
		
		
			Вы в execute только получателя имейла меняете, или сразу подставляете другой UserInfo ? 
				__________________ 
		
		
		
		
	_databaseTransDelete ... bl@$ !  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Раширяли оповещения: добавляли формирование по группе пользователей, делали упрощенный интерфейс формирования оповещений из кода напрямую. Как именно модифицировали указанный метод?
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Ivanhoe as is..  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			AX 4.0.  
		
		
		
		
		
		
		
		
			В классе EventActionEmail делаю следующее: if(.............) { userInfo_Resp = SysUserInfo::find(alertBuffer.ResponsibleId); SysEmailTable::sendMail(eventParameters.AlertTemplateId,userInfo_Resp.Language,userInfo_Resp.Email,mappings,'',xmlParameters,true,userInfo_Resp.Id,true); } else SysEmailTable::sendMail(eventParameters.AlertTemplateId,userInfo.Language,userInfo.Email,mappings,'',xmlParameters,true,eventRule.UserId,true); В классе EventActionAlert: if(.......) userInfo = SysUserInfo::find(eventRule.UserId); else { alertBuffer = inbox.alertBuffer(); userInfo = SysUserInfo::find(alertBuffer.ResponsibleId); } inboxId = EventInbox::nextEventId(); inbox.initValue(); inbox.initFromEventRule(eventRule); if(...........) inbox.UserId = alertBuffer.ResponsibleId; inbox.InboxId = inboxId; ........... Последний раз редактировалось _AxDevel_; 26.05.2009 в 09:44.  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Попутный вопрос - вы поле ResponsibleId добавили во все таблицы, по которым возможно формирование оповещений (иначе, мне кажется, будут проблемы)? 
				__________________ 
		
		
		
		
	Ivanhoe as is..  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Поле не во всех таблицах, я этот момент обрабатываю. Здесь привёл упрощённый код.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Мне вообще интересно следующее, если оповещение отсылается по email, то почему ещё внутрисистемное оповещение выдаётся?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Не помогло, так и сыпятся внутрисистемные оповещения не туда.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А куда? 
		
		
		
		
		
		
			Даже интересно стало   у вас же дальше идет инсерт в таблицу EventInbox (может до инсерта или на инсерте кто-то балуется?) Если просто перед инсертом явно задать Inbox.UserId = 'admin' - тоже не сработает?  
		
				__________________ 
		
		
		
		
	Ivanhoe as is..  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Я так понимаю, все это время мы говорили про EventActionAlert.execute() - нет? Вот просто открыл метод, вставил Inbox.UserId = 'admin', запустил оповещения - получил оповещение. Не понимаю почему у вас не работает.
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Ivanhoe as is..  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Когда передо мной стояла такая задача, я просто скопировал execute к себе в класс отдельным методом и там устанавливал то что нужно, системные классы остались вообще нетронутыми. 
				__________________ 
		
		
		
		
	_databaseTransDelete ... bl@$ !  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Набросал примерчик (сильно не придирайтесь, я не программист), может кому полезно будет как отправная точка: 
		
		
		
			1. В форме создания / просмотра оповещений для админа доступна галка "Адресат в исходных данных", если ее поставить, то можно указать название поля (из АОТ) таблицы, по которой генерится оповещение, в поле "Поле с адресатом" (например, поле Id для таблицы UserInfo). 2. При формировании оповещения / почтового сообщения, если стоит эта галка и указано поле адресата, оповещение / почта генерятся на пользователя, указанного в поле "Поле с адресатом" исходной таблицы. Основные ограничения примера: нет проверки указанного поля (и лукапа по полям таблицы); нет проверки, что такой пользователь существует; Возможное развитие - снятие указанных ограничений, обработка типа поля (например для пользователей - берем значение поля в исходных данных, а для сотрудника - ищем соответствующего пользователя). DAX 4.0 SP2 EE 
				__________________ 
		
		
		
		
	Ivanhoe as is..  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: _AxDevel_ (1). | |
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от Ivanhoe
			 
 
			Набросал примерчик (сильно не придирайтесь, я не программист), может кому полезно будет как отправная точка: 
		
	1. В форме создания / просмотра оповещений для админа доступна галка "Адресат в исходных данных", если ее поставить, то можно указать название поля (из АОТ) таблицы, по которой генерится оповещение, в поле "Поле с адресатом" (например, поле Id для таблицы UserInfo). 2. При формировании оповещения / почтового сообщения, если стоит эта галка и указано поле адресата, оповещение / почта генерятся на пользователя, указанного в поле "Поле с адресатом" исходной таблицы. Основные ограничения примера: нет проверки указанного поля (и лукапа по полям таблицы); нет проверки, что такой пользователь существует; Возможное развитие - снятие указанных ограничений, обработка типа поля (например для пользователей - берем значение поля в исходных данных, а для сотрудника - ищем соответствующего пользователя). DAX 4.0 SP2 EE Делал как alertBuffer = alertInbox.alertBuffer(); Хотя на тот момент alertinbox пусть. нужно было брать параметр buffer из параметров метода execute. Всем спасибо.  | 
| 
	
 |