Показать сообщение отдельно
Старый 11.12.2009, 16:47   #2  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Готовый джоб для создания оповещения из кода 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).