C# 执行代码时出错:函数的参数类型错误

C# 执行代码时出错:函数的参数类型错误,c#,axapta,ax,C#,Axapta,Ax,我在c#中有一些代码,它使用AX Business connector,如下所示: AxaptaRecord OrderRecord = (AxaptaRecord)ax.CallStaticClassMethod("BTNOnlineOrder", "getSalesOrder", salesRef); if (OrderRecord.Found) { AxaptaObject Lines = (AxaptaObject)OrderRecord.Call("querySalesLi

我在c#中有一些代码,它使用AX Business connector,如下所示:

AxaptaRecord OrderRecord = (AxaptaRecord)ax.CallStaticClassMethod("BTNOnlineOrder", "getSalesOrder", salesRef);

if (OrderRecord.Found)
{
     AxaptaObject Lines = (AxaptaObject)OrderRecord.Call("querySalesLine");
     AxaptaObject qrLines = (AxaptaObject)ax.CreateAxaptaObject("QueryRun", Lines);

     while ((bool)qrLines.Call("next"))
     {
          int tableid = (int)ax.CallStaticClassMethod("Global", "tableName2Id", "InventTable");
          AxaptaRecord r = (AxaptaRecord)qrLines.Call("get", tableid);
     }  
}
当我尝试调用“get”方法时,出现以下错误:

执行代码时出错:函数的参数类型错误

tableid返回一个int值175,所以这不是由于tableid为null或其他原因造成的


如果您使用的查询没有指向InventTable的数据源,您将得到此(令人困惑的)错误,我们将不胜感激。我已经验证了这段代码在axsys层的默认SalesLine查询中引发了此异常。我同意,这是一个令人困惑的错误


如果在消费代码中需要InventTable,则需要定义一个自定义查询,并从querySalesLine方法返回该查询。

我通过使用
getNo
方法并将1作为参数来实现这一点。我不确定这是不是正确的方法,但它对我很有效:


querySalesLine返回的查询-是自定义查询还是Ax提供的默认SalesLine查询?我只是想确保查询中有一个指向InventTableOk的数据源,所以我假设您只需要SalesLine数据源。使用getNo可以做到这一点,唯一的风险是其他Ax解决方案可能会更改数据源顺序,并且您可能会得到错误的数据源。如果您在原始代码中将“InventTable”替换为“SalesLine”,您将获得相同的功能。当然,这种方法取决于数据源的名称,但通常情况下,你可以指望名称保持不变,而不是数据源的顺序。你是对的,这是有效的,那么使用我原来的方法是最好的方法吗?不幸的是,答案是“视情况而定”。这两种方法都可能失败。这是一个估计哪种方法破坏的可能性最小的问题——我没有可靠的数据支持其中一种方法胜过另一种方法。下面是另一个有一些观点的线程:是的,我认为数据源的名称可能会保持不变。我必须自己更正:如果您注意到“get”方法的第一个参数是tableId,那么这不是数据源名称,而是来自查询的这种类型的第一个表。但我也认为,在查询中添加重复表的可能性较小。