AX2012从汇编中迭代列表

时间:2014-05-19 07:54:18

标签: .net-assembly dynamics-ax-2012

我们创建了一个简单的dll,它在搜索后返回一个集合(List)。 在AX中,我们引用了这个dll。现在我想迭代结果并将其发布到网格中。

我有一个(inMemory)表,它是网格的数据源。如果我通过在x ++中手动插入记录来伪造数据,那么这是很好的填充。但是,我想得到汇编的结果,但我不知道如何迭代它。

我已经尝试过查看迭代器,但我不能让它以这种方式工作。

实例化搜索程序集并调用搜索方法: (似乎工作,没有错误)

static public List Search()
  {
   NORISKWarehouseConnect.Client warehouseClient;
   List warehouseProductResultSet;
   ListIterator resultIterator;
   InteropPermission permission;
   ;

   try {
    permission = new InteropPermission(InteropKind::DllInterop);
    permission.assert();
    warehouseClient = new NORISKWarehouseConnect.Client();
    warehouseProductResultSet = warehouseClient.Search("search term");
    return warehouseProductResultSet;

   }catch{
    error("Error retrieving data");
    return null;
  }

} 

从我的表格中我称之为静态:

void clicked()
{
   List result = AARWarehouseConnect::Search();

   // iterate the result here?
   tempData.Code = "1234";
   tempData.Name = "blabla";
   tempData.insert();

   AARWarehouseProductDataSource.setTmpData(tempData);
   AARWarehouseProductDataSource_DS.research();


   super();
}

谢谢, 史蒂夫

2 个答案:

答案 0 :(得分:1)

目前尚不清楚wareClient.Search确实返回的确切类型。

如果是.NET列表,请将变量声明为System.Collections.IEnumerable并使用GetEnumerator进行迭代。

.NET正则表达式的示例:

 System.Text.RegularExpressions.MatchCollection  matches = regEx.Matches(_source);
 System.Text.RegularExpressions.Match            m;
 System.Text.RegularExpressions.GroupCollection  groups;
 System.Text.RegularExpressions.Group            g;
 System.Collections.IEnumerator                  matchesEnum, groupsEnum;
 ...
 matchesCount = matches.get_Count();
 matchesEnum = matches.GetEnumerator();
 while (matchesEnum.MoveNext())
 {
    m = matchesEnum.get_Current();

答案 1 :(得分:1)

在回复的帮助下,我按照以下方式开始工作:

调用dll的类返回IEnumerable:

static public System.Collections.IEnumerable Search()
{
 NORISKWarehouseConnect.Client warehouseClient;
 System.Collections.IEnumerable warehouseProductResultSet;
 ListIterator resultIterator;
 InteropPermission permission;
 ;

 try {
    permission = new InteropPermission(InteropKind::DllInterop);
    permission.assert();
    warehouseClient = new NORISKWarehouseConnect.Client();
    warehouseProductResultSet = warehouseClient.Search("search term");
    return warehouseProductResultSet.GetEnumerator();
 }catch {
    error("Error retrieving data");
    return null;
 }
}

解析结果:

NORISKWarehouseConnect.Product product;
System.Collections.IEnumerator result = AARWarehouseConnect::Search();

while (result.MoveNext()) {
    product = result.get_Current();
    tempData.Code = product.get_Code();
    tempData.Name = product.get_Name();
    tempData.insert();        
}

AARWarehouseProductDataSource.setTmpData(tempData);
AARWarehouseProductDataSource_DS.research();