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

Axapta Dynamics Ax:任何记录更改时发出警报,axapta,alerts,dynamics-ax-2009,Axapta,Alerts,Dynamics Ax 2009,当供应商表中的任何字段发生更改时(以及创建/删除记录时),我希望在Ax中发送警报 在警报中,我希望包括上一个值和当前值 但是,当表中的任何字段发生更改时,似乎无法设置警报,但需要为每个字段设置警报?!我希望我弄错了 我如何才能将此通知发送给一组人正如您所观察到的,警报系统不是针对“任何”字段更改而设计的,只是针对特定字段的更改 无论如何,这是一个虚假的请求,因为它会生成许多ALART。正确的做法是启用VendTable表的数据库日志记录,然后向感兴趣的人发送每日报告(成批) 这是在管理\设置\数

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

在警报中,我希望包括上一个值和当前值

但是,当表中的任何字段发生更改时,似乎无法设置警报,但需要为每个字段设置警报?!我希望我弄错了


我如何才能将此通知发送给一组人

正如您所观察到的,警报系统不是针对“任何”字段更改而设计的,只是针对特定字段的更改

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

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

正如您所观察到的,警报系统不是针对“任何”字段更改而设计的,只是针对特定的字段更改

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

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

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


祝你好运

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


祝你好运

我同意斯考伊的建议。你只需写信和上课,就可以发送vend表中的更改邮件。 并在vendtable的update方法上执行该类

感谢和问候,
迪帕克·库马尔(Deepak Kumar)

我确实同意斯考伊的建议。你只需写信和上课就可以发送vend表中的更改邮件。 并在vendtable的update方法上执行该类

感谢和问候,
Deepak Kumar

我用一个静态方法创建了一个新类,我可以从任何
.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()
方法轻松调用该方法,在记录发生更改时提醒我,以及记录中发生了什么更改

它还使用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);
}
我唯一想改进的是:

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

这不是“虚假请求”。保存更改后,我们希望发送一封包含更改字段及其先前值的单数电子邮件。每天发送一批太晚了。现在是2010年,我们不应该在夜间批量交付信息。供应商很少更新,但如果供应商被修改,我们的管理人员希望立即知道。好的,然后每分钟或每小时运行一次适合您的管理人员的报告。我提供的解决方案非常简单,可以提供。您不能期望AX提供任何现成的功能。您的主管请求不是常见的!如何知道重要记录何时更改不是常见的请求?通知已经在字段级别设置好了…为什么不编写软件在记录级别处理它们呢?看起来不成熟。这不是一个“虚假的要求”。保存更改后,我们希望发送一封包含更改字段及其先前值的单数电子邮件。每天发送一批太晚了。现在是2010年,我们不应该在夜间批量交付信息。供应商很少更新,但如果供应商被修改,我们的管理人员希望立即知道。好的,然后每分钟或每小时运行一次适合您的管理人员的报告。我提供的解决方案非常简单,可以提供。您不能期望AX提供任何现成的功能。您的主管请求不是常见的!如何知道重要记录何时更改不是常见的请求?通知已经在字段级别设置好了…为什么不编写软件在记录级别处理它们呢?看起来还不成熟。确保正确的人可以访问。只有两个人有编辑权限,但这并不意味着他们是唯一需要知道何时发生更改的人。我也不明白这将如何产生“大量警报”。Ve