2012-03-16 127 views
0

我在C#中的一些代码,使用AX业务连接器,它是这样的:错误执行代码:错误的参数类型,功能

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

我收到以下错误,当我尝试调用“获取“方法:

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

tableid返回一个int值175,所以它不是由于tableid为null或其他。

任何帮助,将不胜感激

+0

由querySalesLine返回的查询 - 它是一个自定义查询或提供斧默认SalesLine查询?我只是想确保查询中有一个指向InventTable的数据源 – armasanea 2012-03-16 18:27:17

回答

0

我通过使用getNo方法并将1作为参数得到了这个工作。我不知道这是否是正确的做法或没有,但它为我工作:

http://msdn.microsoft.com/en-us/library/aa612609(v=ax.50).aspx

+1

好的,所以我假设你只需要SalesLine数据源。使用getNo会做到这一点,唯一的风险是其他一些Ax解决方案可能会改变数据源的顺序,并且你可能会得到错误的数据源。如果您在原始代码中将“InventTable”替换为“SalesLine”,您将获得相同的功能。当然,这种方法取决于数据源名称,但通常您可以指望名称与数据源订单保持相同。 – armasanea 2012-03-20 02:37:02

+0

你说得对,那是行得通的,所以用我最初的方式做这件事的最好方法是什么? – CallumVass 2012-03-21 08:56:34

+0

不幸的是答案是“这取决于”。这两种方法都可以打破这是一个估计哪种方法破坏的可能性最小的问题 - 而且我没有硬数据来支持另一种方法。这是另一个线索有一些意见:https://community.dynamics.com/product/ax/f/33/p/66715/121651.aspx – armasanea 2012-03-21 16:08:13

2

如果您使用不具有数据源指向InventTable你会得到这个(困惑)错误的查询。我已验证此代码在Ax sys层的默认SalesLine查询中引发此异常。我同意,这是一个令人困惑的错误。

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