我们创建了一个简单的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();
}
谢谢, 史蒂夫
答案 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();