如何从IAxaptaRecord :: Call()获取返回值?

时间:2013-02-20 17:12:07

标签: c# axapta x++ ax business-connector

在Dymanics AX 4.0中,我想在应用程序对象树(AOT)>下运行一些方法。数据字典>表> CustTable >方法。 (可以是任何表格)

这主要是为了获得一些自定义计算值,还部分用于处理SQL注入 Axapta.ExecuteStmt - Is it safe?

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

希望得到一些建议。感谢。

2 个答案:

答案 0 :(得分:1)

有几件事需要考虑

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

        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);
        }
    

答案 1 :(得分:0)

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

  • Axapta.ExecuteStmt是将一些SQL(基于X ++内部SQL语法)发送到数据库的方法,该数据库可以是select,update_recordset等。如果编写SQL,则完全相同的函数和结果X ++代码中的命令。

  • AxaptaRecord.Call是一种类方法。这样,使用此函数,您只能在表中运行以X ++编码的记录方法(可以在AOT上的 Methods 节点内找到的那些,就像通常的.find()方法一样)。 / p>

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

  • Axapta.CallStaticClassMethod是执行保存在类上的静态方法的方法。由于该方法需要是静态的,因此不会将对象传递给函数,而只传递类名和方法名,因为它是在新的上下文中执行的。