25.05.2009, 18:19 | #1 |
Участник
|
Отправка оповещений
Появилась необходимость отправлять оповещения не на пользователя, указанного в параметрах созданного оповещения, а пользователя, указанного в данных, для которых сгенерировано оповещение. Раскопал, что рассылка оповещений реализована в классах EventActionAlert и EventActionEMail. Изменил метод execute. Это позволило справиться с рассылкой на email, но системное оповещения так и приходят пользователю, указанному в параметрах оповещения. Не пойму, где генерируется системное оповещение (корректировка метода execute класса EventActionAlert tyt помогла). Кто-то занимался подобным? Очень нужно
|
|
25.05.2009, 19:55 | #2 |
Участник
|
а версия аксапты какая?
|
|
25.05.2009, 20:36 | #3 |
Участник
|
А какое у вас значение UserId в соотвествующей записи inbox ?
Вы в execute только получателя имейла меняете, или сразу подставляете другой UserInfo ?
__________________
_databaseTransDelete ... bl@$ ! |
|
26.05.2009, 08:44 | #4 |
Участник
|
Раширяли оповещения: добавляли формирование по группе пользователей, делали упрощенный интерфейс формирования оповещений из кода напрямую. Как именно модифицировали указанный метод?
__________________
Ivanhoe as is.. |
|
26.05.2009, 09:32 | #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. |
|
26.05.2009, 09:56 | #6 |
Участник
|
Цитата:
Попутный вопрос - вы поле ResponsibleId добавили во все таблицы, по которым возможно формирование оповещений (иначе, мне кажется, будут проблемы)?
__________________
Ivanhoe as is.. |
|
26.05.2009, 10:14 | #7 |
Участник
|
Поле не во всех таблицах, я этот момент обрабатываю. Здесь привёл упрощённый код.
|
|
26.05.2009, 10:19 | #8 |
Участник
|
Мне вообще интересно следующее, если оповещение отсылается по email, то почему ещё внутрисистемное оповещение выдаётся?
|
|
26.05.2009, 10:30 | #9 |
Участник
|
Не помогло, так и сыпятся внутрисистемные оповещения не туда.
|
|
26.05.2009, 12:02 | #10 |
Участник
|
А куда?
Даже интересно стало у вас же дальше идет инсерт в таблицу EventInbox (может до инсерта или на инсерте кто-то балуется?) Если просто перед инсертом явно задать Inbox.UserId = 'admin' - тоже не сработает?
__________________
Ivanhoe as is.. |
|
26.05.2009, 12:22 | #11 |
Участник
|
|
|
26.05.2009, 12:33 | #12 |
Участник
|
Я так понимаю, все это время мы говорили про EventActionAlert.execute() - нет? Вот просто открыл метод, вставил Inbox.UserId = 'admin', запустил оповещения - получил оповещение. Не понимаю почему у вас не работает.
__________________
Ivanhoe as is.. |
|
26.05.2009, 12:44 | #13 |
Участник
|
Цитата:
Когда передо мной стояла такая задача, я просто скопировал execute к себе в класс отдельным методом и там устанавливал то что нужно, системные классы остались вообще нетронутыми.
__________________
_databaseTransDelete ... bl@$ ! |
|
26.05.2009, 17:24 | #14 |
Участник
|
Набросал примерчик (сильно не придирайтесь, я не программист), может кому полезно будет как отправная точка:
1. В форме создания / просмотра оповещений для админа доступна галка "Адресат в исходных данных", если ее поставить, то можно указать название поля (из АОТ) таблицы, по которой генерится оповещение, в поле "Поле с адресатом" (например, поле Id для таблицы UserInfo). 2. При формировании оповещения / почтового сообщения, если стоит эта галка и указано поле адресата, оповещение / почта генерятся на пользователя, указанного в поле "Поле с адресатом" исходной таблицы. Основные ограничения примера: нет проверки указанного поля (и лукапа по полям таблицы); нет проверки, что такой пользователь существует; Возможное развитие - снятие указанных ограничений, обработка типа поля (например для пользователей - берем значение поля в исходных данных, а для сотрудника - ищем соответствующего пользователя). DAX 4.0 SP2 EE
__________________
Ivanhoe as is.. |
|
|
За это сообщение автора поблагодарили: _AxDevel_ (1). |
26.05.2009, 18:15 | #15 |
Участник
|
Цитата:
Сообщение от Ivanhoe
Набросал примерчик (сильно не придирайтесь, я не программист), может кому полезно будет как отправная точка:
1. В форме создания / просмотра оповещений для админа доступна галка "Адресат в исходных данных", если ее поставить, то можно указать название поля (из АОТ) таблицы, по которой генерится оповещение, в поле "Поле с адресатом" (например, поле Id для таблицы UserInfo). 2. При формировании оповещения / почтового сообщения, если стоит эта галка и указано поле адресата, оповещение / почта генерятся на пользователя, указанного в поле "Поле с адресатом" исходной таблицы. Основные ограничения примера: нет проверки указанного поля (и лукапа по полям таблицы); нет проверки, что такой пользователь существует; Возможное развитие - снятие указанных ограничений, обработка типа поля (например для пользователей - берем значение поля в исходных данных, а для сотрудника - ищем соответствующего пользователя). DAX 4.0 SP2 EE Делал как alertBuffer = alertInbox.alertBuffer(); Хотя на тот момент alertinbox пусть. нужно было брать параметр buffer из параметров метода execute. Всем спасибо. |
|