0

在 Dynamics AX 4.0 中,我想在 Application Object Tree (AOT) > Data Dictionary > Tables > CustTable > Methods 下运行一些方法。(可以是任何桌子)

这主要是为了获取一些自定义的计算值,还有一部分是为了处理 SQL 注入 Axapta.ExecuteStmt - 安全吗?

我在这里找到了 AxaptaRecord.Call文档,但没有多大帮助。也不确定这是否是正确的方法。另外,就函数类型而言,方法调用有什么区别?例如公共、静态、服务器、返回值类型等。

希望给点建议。谢谢。

4

2 回答 2

1

有几件事需要考虑

  1. 看起来您正试图从 .Net 调用 Axapta 对象,因此最简单的方法是使用 Business Connectory (Microsoft.Dynamics.BusinessConnectorNet)
  2. 使用静态方法创建一个包装类,该类了解如何实例化缓冲区并进行所需的计算(静态方法意味着您没有实例化该表的记录/缓冲区)

它(可能)看起来像这样

    Axapta ax = new Axapta();
    try
    {
        //Note this is getting UserId out of web.config for a web service
        ax.LogonAs(ConfigurationManager.AppSettings["uid"], "contoso.com", null, null, null, null, ConfigurationManager.AppSettings["config"]);

        string returnString = (string)ax.CallStaticClassMethod("WrapperClassName", "StaticMethodName", _parameterPassedToMethod);
    }
于 2013-02-22T16:41:21.750 回答
0

这些函数旨在解决 .NET 中可以从 X++ 轻松解决的不同问题:

  • Axapta.ExecuteStmt是将一些 SQL(在 X++ 内部 SQL 语法上)发送到数据库的方法,可以是 select、update_recordset 等。与在 X++ 代码中编写 SQL 命令完全相同的功能和结果。

  • AxaptaRecord.Call是一个类方法。这样,使用此函数,您只能在表内运行用 X++ 编码的记录方法(可以在 AOT 的方法节点内找到的方法,如通常的 .find() 方法)。

编辑:还有第三种有趣的方法:

  • Axapta.CallStaticClassMethod 是执行保存在类上的静态方法的方式。由于方法需要是静态的,因此您不必将对象传递给函数,而只需传递类名和方法名,因为它是在新的上下文中执行的。
于 2013-02-21T20:08:47.397 回答