2012-11-05 61 views
1

作爲我們軟件業務的一部分,我們爲開發人員提供開發套件,以將我們的軟件集成到他們的軟件中。我們通常嘗試迎合許多不同的語言/環境。如何將數組作爲方法結果傳遞給Microsoft NAV?

最近,我們從一些使用Microsoft Dynamics NAV的潛在客戶那裏得到了一些諮詢。我們的SDK的其中一個口味是COM可調用的dll,可以在NAV中引用。

現在,我們的API中的一個方法返回一個String數組。其中一名開發人員正在運行一個試點項目,並報告了使用該方法的問題,他無法找到解決方法。我們必須給他一個解決方法,它只返回數組的第一個索引(這對於他的特定目的來說足夠了),但這顯然不是解決方案。

不幸的是,我們手邊沒有Navision體驗,也沒有Navision的許可副本(試用版似乎無法讓您修補代碼),而且我無法在此找到任何信息任何地方在線

有誰知道這是可能的嗎?如果是這樣,那麼執行該操作的正確方法是什麼?

回答

2

「維度」固定在數組的NAV中,這使得難以接受和發送來自COM的基於數組的數據。

雖然我沒有遇到同樣的問題,但我已經有了相反的結果(向COM傳遞一個字符串數組),最簡單的方法之一是使用循環和函數將字符串發送到COM/DLL一次一個,然後用一個標誌或類似信號完成信號。無限數組在.NET中會很有用,因爲您可以根據需要繼續添加字符串。我將假設該DLL是基於.NET的;

所以從.NET到C/AL;

  • 一個標誌或功能,讓C/AL知道數組循環完成
  • C/AL可以使用一個循環,直到該標誌被設置
  • .NET將抓取每個「元素」需要逐個饋送數組項目

所以從C/AL到.NET;

與.NET到C/AL類似,除了.NET有無限數組,這使事情變得更容易一些。

DotNetArray.ClearArray; 

REPEAT   
    DotNetArray.Add(Customer.Name);   
UNTIL 

DotNetArray.EndOfArray; 

注意事項;

  • C/AL中的數組索引是基於1的,.NET基於0。
  • 一種替代的方法是通過對x倍

以下文章也可能是有用的計數和環; http://dynamicsuser.net/blogs/waldo/archive/2011/03/21/nav-2009-r2-net-interop-using-arrays-collections.aspx