动态Ax:任何记录更改时发出警报

时间:2010-11-29 14:55:25

标签: axapta alerts dynamics-ax-2009

我想在供应商表格中的任何字段发生变化时(以及创建/删除记录时)在Ax中发送警报。

在警报中,我想包含之前和当前的值。

但是,似乎您无法在表格中的任何字段更改时设置警报,但是需要为每个字段设置一个警报?!我希望我错了。

如何将此通知发送给一群人

4 个答案:

答案 0 :(得分: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)
    "user@domain.com", //Recipient email
    this_Orig,              //Original record
    this                    //Modified record
);

我唯一想要改进的是:

  • 将模板名称和收件人移动到表格中,以便于维护
  • 更改列表的更好格式,我不知道如何模板化(请参阅:here

答案 1 :(得分:2)

如您所见,警报系统不是为“任何”字段更改而设计的,只有特定的字段更改。

这是一个虚假的请求,因为它会产生许多alarts。正确的做法是启用VendTable表的数据库日志记录,然后向感兴趣的人发送每日报告(批量)。

这在Administration \ Setup \ Database日志记录中完成。 Administration \ Reports中有一个报告。您需要知道表号才能选择表格。 此解决方案需要“数据库日志记录”许可证密钥。

答案 2 :(得分:1)

如果您确实需要此功能,那么您可以创建一个类,该类发送一条消息/电子邮件,其中包含旧记录的足迹与新记录的对比。然后只需在表方法“write”/“update”/“save”中添加一些代码,以确保在编辑vendtable时运行类。 但我不得不同意Jan.这会产生很多警报。如果在vendtable中进行的修改是根据业务需要进行的,我会花一些精力检查,并禁止非法修改。这包括确保只有合适的人才有足够的访问权限。

祝你好运!

答案 3 :(得分:1)

我同意Skaue的建议。您只需编写并发送电子邮件来发送vend表中的更改邮件。 并在vendtable的更新方法上执行此类。

谢谢和问候, 迪帕克库马尔