03.12.2009, 19:33 | #1 |
Участник
|
Программное создание оповещения.
Прежде всего: поиск использовал. Понял, что копать нужно в сторону EventActionAlert.
Вопрос 1: у метода execute упомянутого класса каков смысл 3ьего аргумента Common buffer ? (это на случай если мы изменяем какую-либо таблицу и настроено правило оповещения в случае оного?) Вопрос 2: если я правильно заполню и передам все нужные методу аргументы, он отработает и заполнит EventInbox и EventInboxData буфера, приведет ли это к автоматическому инвокейшену алерта? Подозреваю, что да, что EventAlertInbox форма сканит наличие новых рекордов в EventInbox и выбрасывает оповещения в случае наличия оных. Но все-таки, хотелось бы уточнить полный фреймворк для создания\отработки алертов. Если вдруг кто-то сможет вкратце рассказать или ткнет носом в ссылку, буду очень признателен! UPD: кажется, уже нашел то, что нужно, но все же, если кто-то сможет в деталях объяснить сам фреймворк или же поделиться ссылкой, буду рад.
__________________
Axapta has seduced me deadly! Последний раз редактировалось HorrR; 03.12.2009 в 19:53. |
|
11.12.2009, 16:47 | #2 |
Участник
|
Готовый джоб для создания оповещения из кода DAX 4.0, для 2009 понадобятся модификации в полях EventInbox и contextInfo - 2 версия отличается по составу:
X++: static void Ivanhoe_CreateAlert(Args _args) { LedgerTable lt; Args args; Query q = new Query(); QueryBuildDataSource qbds; Common record; str name; EventInbox ei; EventInboxData eid; EventType eventType; EventContextInfo contextInfo; EventTypeValue typeValue; container cont; List list; ; ttsbegin; ei.clear(); ei.initValue(); ei.InboxId = EventInbox::nextEventId(); ei.UserId = "Admin"; // пользователь ei.Subject = "Тема!!!"; // тема ei.Message = "Сообщение"; // сообщение ei.AlertedFor = "В связи с событием"; // в связи с чем оповещение ei.AlertCreatedDate = systemdateget(); ei.AlertCreateTime = timenow(); ei.TypeId = classnum(EventTypeCUD); ei.AlertTableId = tableNum(LedgerTable); // таблица записи ei.AlertFieldId = fieldNum(LedgerTable, AccountName); // поле которое изменилось ei.AlertFieldLabel = "Наименование"; ei.ParentTableId = ei.AlertTableId; ei.TypeTrigger = EventTypeTrigger::FieldChanged; ei.ShowPopup = NoYes::Yes; // показывать оповещение ei.SendEmail = NoYes::No; // отсылать почту. ei.EmailRecipient = ""; //Почтовый адрес. select firstonly lt where lt.AccountNum == '01.000'; // запись которую будем потом показывать list = SysDictTable::getUniqueIndexFields(lt.TableId); if (list) { ei.KeyFieldList = list.pack(); ei.KeyFieldData = SysDictTable::mapFieldIds2Values(list, lt).pack(); } ei.insert(); eid.clear(); eid.InboxId = ei.InboxId; eid.DataType = EventInboxDataType::Context; qbds = q.addDataSource(ei.AlertTableId); cont = q.pack(); contextInfo = [1, //version, DAX 4.0 - 1 formstr(LedgerTable), //formname "", //designname 0, //dataset 0, //parmenumType 0, //parmItemName "", //например, "FavQuery:Статус" - favourite query MenuItemType::Display, //menuitemtype menuitemdisplaystr(LedgerTable), //menuitemname ei.TypeId, //typeid EventTypeTrigger::FieldChanged, //typetrigger ei.AlertTableId, //alerttableid 1, //alertformDSNo номер датасорса по которому потом искать будем. true, //alertFdsIsTop 1, //alertQbdsNo "", //control name cont //filterQueryCon ]; eid.Data = contextInfo; eid.insert(); eid.clear(); eid.InboxId = ei.InboxId; eid.DataType = EventInboxDataType::TypeData; eventType = EventType::construct(ei.TypeId, ei.TypeTrigger); eventType.parmOriginalValue(""); eventType.parmCurrentValue(""); eid.Data = eventType.pack(); eid.insert(); ttscommit; }
__________________
Ivanhoe as is.. Последний раз редактировалось Ivanhoe; 11.12.2009 в 16:51. |
|
|
За это сообщение автора поблагодарили: EVGL (5), HorrR (1). |
13.01.2010, 12:41 | #3 |
Участник
|
Выложил проект, включающий этот джоб + отдельный класс для создания оповещений, включая почтовые: Проект расширения стандартных оповещений AX 4.0
__________________
Ivanhoe as is.. |
|