繁体   English   中英

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

[英]Dynamics Ax: Alert when any record changes

当供应商表中的任何字段发生更改时(以及在创建/删除记录时),我都希望在Ax中发送警报。

在警报中,我想包括先前值和当前值。

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

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

我用静态方法创建了一个新类,可以轻松地从任何.update()方法中调用.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
);

我唯一需要改进的是:

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

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

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

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

如果确实需要此功能,则可以创建一个类,该类使用旧记录和新记录的足迹发送消息/电子邮件。 然后只需在表方法“ write” /“ update” /“ save”中添加一些代码,以确保只要编辑了vendtable便运行您的类。 但我必须同意Jan。这将产生很多警报。 如果在vendtable中进行的修改是否符合业务需求,我会花一些精力进行检查,并禁止非法修改。 这包括确保只有合适的人才有足够的机会。

祝好运!

我确实同意Skaue的建议。您只需编写类并发送更改表中的更改邮件即可。 并在vendtable的update方法上执行此类。

感谢和问候,Deepak Kumar

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM