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

C# 如何从IAxaptaRecord::Call()获取返回值?,c#,axapta,x++,ax,business-connector,C#,Axapta,X++,Ax,Business Connector,在DymanicsAX4.0中,我想在应用程序对象树(AOT)>数据字典>表>客户表>方法下运行一些方法。(可以是任何桌子) 这主要是为了得到一些自定义的计算值,也有一部分是为了处理SQL注入 我在这里找到了文档,但没有多大帮助。不确定这是否也是正确的方法。另外,就函数类型而言,方法调用的区别是什么?e、 g.公共、静态、服务器、返回值类型等 希望得到一些建议。谢谢。这些函数用于解决.NET中的不同问题,这些问题可以通过X++轻松解决: Axapta.ExecuteStmt是一种将一些SQL

在DymanicsAX4.0中,我想在应用程序对象树(AOT)>数据字典>表>客户表>方法下运行一些方法。(可以是任何桌子)

这主要是为了得到一些自定义的计算值,也有一部分是为了处理SQL注入

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


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

这些函数用于解决.NET中的不同问题,这些问题可以通过X++轻松解决:

  • Axapta.ExecuteStmt
    是一种将一些SQL(基于X++内部SQL语法)发送到数据库的方法,该数据库可以是一个select、update\u记录集等。与在X++代码中编写SQL命令的功能和结果完全相同

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

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

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

    • 有几件事需要考虑

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

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

      你的问题是什么?标题中的问题与您所说的不符。Axapta.CallStaticClassMethod()和AxaptaRecord.Call()之间有什么区别?我可以用后者来调用静态方法吗?不,不能。这就是为什么有两种方法的原因。我编辑了我的答案,其中有一个区别(顺便说一句,这很明显)。