Готовый джоб для создания оповещения из кода 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;
}