2012-03-16 85 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方法返回該查詢。