2010-11-29 2 views
1

Я хочу отправить предупреждение в Ax, когда изменяется какое-либо поле в таблице поставщика (и при создании/удалении записи).Динамический топор: предупреждение при любых изменениях записей

В предупреждении я хотел бы включить предыдущее и текущее значение.

Но, похоже, вы не можете устанавливать оповещения, если какое-либо поле в таблице изменяется, но нужно установить его для КАЖДОГО ПОЛЯ ?! Надеюсь, я ошибаюсь.

И как я могу отправить это уведомление группы людей

ответ

3

Я создал новый класс со статическим методом, который я легко могу позвонить с любого .update() способом, чтобы предупредить меня, когда запись изменений, и что изменилось в записи.

Он использует встроенные шаблоны электронной почты Ax.

static void CompareAndEmail(str emailTemplateName, str nameField, str recipient, Common original, Common modified) 
{ 
    UserInfo userInfo; 
    Map   emailParameterMap = new Map(Types::String, Types::String); 
    str   changes; 
    int   i, fieldId;  
    DictTable dictTable = new DictTable(original.TableId); 
    DictField dictField; 
; 

    for (i=1; i<=dictTable.fieldCnt(); i++) 
    { 
     fieldId = dictTable.fieldCnt2Id(i); 
     dictField = dictTable.fieldObject(fieldId); 

     if (dictField.isSystem()) 
      continue; 

     if (original.(fieldId) != modified.(fieldId)) 
     { 
      changes += strfmt("%1: %2 -> %3 \n\r", 
       dictField.name(), 
       original.(fieldId), 
       modified.(fieldId) 
      ); 
     } 
    } 

    //Send Notification Email 
    select Name from UserInfo where userInfo.id == curUserId(); 
    emailParameterMap.insert("modifiedBy", userInfo.Name); 
    emailParameterMap.insert("tableName", dictTable.name()); 
    emailParameterMap.insert("recordName", original.(dictTable.fieldName2Id(nameField))); 
    emailParameterMap.insert("recordChanges", changes); 

    SysEmailTable::sendMail(emailTemplateName, "en-us", recipient, emailParameterMap); 
} 

Затем в методе .update() я просто добавить одну строку

//Compare and email differences 
RecordChangeNotification::CompareAndEmail(
    "RecChange",   //Template to use 
    "Name",     //Name field of the record (MUST BE VALID) 
    "[email protected]", //Recipient email 
    this_Orig,    //Original record 
    this     //Modified record 
); 

Единственное, что я хочу, чтобы улучшить являются:

  • переместив имя шаблона и получателя в таблицу , для упрощения обслуживания
  • лучшее форматирование для списка изменений, я не знаю, как шаблон (см.: here)
2

Как вы наблюдали систему оповещения не предназначен для «любых» изменений поля, только определенных изменений поля.

Это фиктивный запрос в любом случае, поскольку он будет генерировать много алартов. Правильная вещь - включить ведение журнала базы данных таблицы VendTable, а затем отправить ежедневный отчет (в пакетном режиме) заинтересованным.

Это делается в Administration \ Setup \ Logging. В Administration \ Reports есть отчет. Вам нужно будет узнать номер таблицы, чтобы выбрать таблицу. Для этого решения требуется лицензионный ключ «Регистрация базы данных».

+0

Это не «фиктивный запрос». Когда изменения сохраняются, мы хотим отправить уникальную электронную почту с измененными полями и их предыдущими значениями. Слишком поздно отправлять ежедневную партию.Это 2010 год, мы не должны работать с ночными партиями для доставки информации. Продавцы редко обновляются, но если они изменены, наши руководители хотят знать НЕМЕДЛЕННО. – CaffGeek 2010-11-30 16:47:02

+0

Итак, запустите отчет каждую минуту или час, что подходит вашим руководителям. – 2010-12-01 19:37:29

1

Если вам действительно нужна эта функция, вы можете создать класс, который отправляет сообщение/электронное письмо с отпечатком старой записи по сравнению с новой записью. Затем просто добавьте некоторый код в метод таблицы «write»/«update»/«save», чтобы убедиться, что ваш класс запущен всякий раз, когда редактируется сборщик. Но я должен согласиться с Яном. Это создаст много предупреждений. Я бы потратил некоторую проверку энергии, если изменения, внесенные в вендоры, соответствуют потребностям бизнеса и запрещают незаконные изменения. Это включает в себя обеспечение достаточного доступа только к нужным людям.

Удачи вам!

1

Я согласен с предложением Skaue.you просто напишите и класс, чтобы отправить письмо об изменениях в таблице поставщиков. и выполнить этот класс по методу обновления для вендинга.

спасибо и С уважением, Дипак Кумар

Смежные вопросы