2012-10-04 26 views
1

在AX 2009中,我有返回Map的方法。在.Net應用程序中獲取地圖(類型:字符串,類型:字符串)

在С#我有空:

using (Axapta Ax = new Axapta()) 
{ 
    Ax.Logon(null, null, null, null); 
    AxaptaObject ax = Ax.CreateAxaptaObject("SomeClass"); 
    object obj = ax.Call("getMapData",1); 
    Dictionary<String, String> dict = obj as Dictionary<String, String>; 

在這段代碼dict爲空。爲什麼?

是否可以在.Net端從AX獲得複雜的數據類型?

回答

4

對不起,但X ++中的Map與C#中的Dictionary不一樣。

可以使用地圖,但:

AxaptaObject map = ax.Call("getMapData",1); 

然後調用與地圖:

String val = map.call("lookup", "key"); 
+0

地圖沒有方法「currentValue」...但方向很明確 - 謝謝! – ABarto

+0

不是,它來自'MapEnumerator',已更正。 –

+0

不,你沒有,在這裏閱讀:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

2

完整的代碼做(讓詞典):

Dictionary<String,String> dict = new Dictionary<String,String>(); 
String key, value; 

using (Axapta Ax = new Axapta()) 
{ 
    Ax.Logon(null, null, null, null); 

    AxaptaObject someClass= Ax.CreateAxaptaObject("SomeClass"); 

    AxaptaObject map = someClass.Call("getMapData",1) as AxaptaObject; 
    AxaptaObject mapIterator = Ax.CreateAxaptaObject("MapIterator", map); 

    while ((bool)mapIterator.Call("more")) 
    { 
      key = mapIterator.Call("key").ToString(); 
      value = mapIterator.Call("value").ToString(); 

      dict.Add(key,value); 

      mapIterator.Call("next"); 
    } 

} 
return dict;