2012-10-04 6 views
1

AX 2009에는지도를 반환하는 메소드가있는 클래스가 있습니다. dict가 null이 코드에서.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>; 

: С 번호에서

나는 널 (null)이있다. 왜?

.Net 측에서 AX로부터 복잡한 데이터 유형을 가져올 수 있습니까?

답변

4

X ++의 Map은 C#의 Dictionary과 같은 것이 아닙니다.

당신은 생각지도 사용할 수 있습니다

:

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

은 다음과지도 전화 : 그것을 할

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

지도하지 method "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;