Dynamics Axe: оповещение при изменении любой записи - PullRequest
1 голос
/ 29 ноября 2010

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

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

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

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

Ответы [ 4 ]

3 голосов
/ 21 января 2011

Я создал новый класс со статическим методом, который я могу легко вызвать из любого .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)
    "user@domain.com", //Recipient email
    this_Orig,              //Original record
    this                    //Modified record
);

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

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

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

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

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

1 голос
/ 19 января 2011

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

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

1 голос
/ 01 декабря 2010

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

Удачи!

...