当供应商表中的任何字段发生更改时(以及创建/删除记录),我想在 Ax 中发送警报。
在警报中,我想包括以前的和当前的值。
但是,您似乎无法为表中的任何字段更改时设置警报,但需要为每个字段设置一个?!我希望我弄错了。
以及如何将此通知发送给一群人
当供应商表中的任何字段发生更改时(以及创建/删除记录),我想在 Ax 中发送警报。
在警报中,我想包括以前的和当前的值。
但是,您似乎无法为表中的任何字段更改时设置警报,但需要为每个字段设置一个?!我希望我弄错了。
以及如何将此通知发送给一群人
我创建了一个带有静态方法的新类,我可以轻松地从任何.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 的更新方法上执行此类。
谢谢和问候, 迪帕克库马尔