1

我试图了解如何访问动态枚举以便能够将它们传递给 BusinessConnector 调用。例如,您可以调用以下命令:

pobj = (AxaptaObject)ax.CreateAxaptaObject("PurchFormLetter", [ENUM]);

但是,我不知道如何传入 [ENUM] 的正确值。在 X++ 中,枚举是 DocumentStatus::PurchaseOrder,但我似乎无法从任何地方访问它。任何人都可以帮助找出如何传递价值吗?

不幸的是,传入枚举的数值不起作用(在这种情况下,我需要的值是 2)。它返回“函数 PurchQuantity::construct 已被错误使用”的 XPPException。

AxaptaObject pobj = (AxaptaObject)ax.CreateAxaptaObject("PurchFormLetter", 2);

如果有人可以请提供帮助,将不胜感激。

问候,史蒂夫

4

2 回答 2

1

其他人也有同样的问题。他们通过创建一个enum proxy.

于 2012-06-13T08:41:37.510 回答
1

好的,这适用于遇到此问题的其他所有人:

如果您想在不使用 X++ 的情况下完全从 .NET 访问枚举值:

string enumName = "DocumentStatus", enumValue = "PurchaseOrder";
object enumObj = (int)axa.CallStaticClassMethod("Global", "enumName2Id", enumName);
AxaptaObject dict = (AxaptaObject)axa.CreateAxaptaObject("DictEnum", enumObj);
object res = dict.Call("symbol2Value", enumValue);

如果需要重用,上面可以很容易地变成一个函数。

尽管如此,执行以下操作仍无效:

AxaptaObject pur = (AxaptaObject)axa.CreateAxaptaObject("PurchFormLetter", res);

但是,您可以这样做:

AxaptaObject pur = (AxaptaObject)axa.CallStaticClassMethod("PurchFormLetter", "construct", res);

这将允许您传入枚举的整数值(在本例中为变量“res”)。然后,您可以使用此对象过帐采购订单。

希望这可以帮助某人。

问候,史蒂夫

于 2012-06-14T00:28:12.190 回答