我有一个 MS Dynamics AX 2012 项目,我正在使用 .Net 互操作。在名为 Database
的 static class
中有一个 C# 方法:
public static List<String> GetAllDatabases(string dataSource)
引用此程序集后,我可以在 X++ 中执行:
ADOMD.ADOMD.Model.Database::GetAllDatabases();
但我无法读取它返回的字符串列表。我想使用类似的东西:
List databaNameCollection = new List( Types::String );
;
databaNameCollection = ADOMD.ADOMD.Model.Database::GetAllDatabases();
但它抛出了一个错误:
Error executing code: (object) has no valid runable code in method 'GetSID'.
我该怎么做?
--------已编辑--------
我找到了这篇文章:
http://blogs.msdn.com/b/x/archive/2010/01/19/traversing-elements-in-an-ienumerable-from-x.aspx
但那是在 2010 年,可能是为了 AX 2009,我尝试分配:
ClrObject enumerator;
str theValue;
;
enumerator = ADOMD.ADOMD.Model.Database::GetAllDatabases();
while (enumerator.MoveNext())
{
theValue = enumerator.get_Current();
print theValue;
}
GetallDatabases 方法正在与另一个 .Net 项目一起使用,它返回 10 个对象,但在 X++ 代码中,没有返回任何内容。
谢谢
要回答有关 X++ 中的 .NET 类型以及 get_{x}
和 set_{x}
的问题:
.NET 属性在 X++ 中显示为方法。比如下面C#中的get & set属性
string Name {get;set;}
将在 X++ 中显示为
string get_Name();
void set_Name(str value);
基本上,C# 属性只是语法糖。 C# 编译器将为每个 get 属性创建一个 get_{x} 方法,为每个 set 属性创建一个 set_{x}。
在你的例子中,如果你想访问 cubeDef 对象中的 Name
属性,你必须在 X++ 中编写如下内容:
info(cubeDef.get_Name());
我是一名优秀的程序员,十分优秀!