Передача перечисления Dynamics в.NET вызову BusinessConnector
Я пытаюсь понять, как получить доступ к динамическим перечислениям, чтобы иметь возможность передавать их в вызовы BusinessConnector. Например, вы можете позвонить по следующему адресу:
pobj = (AxaptaObject)ax.CreateAxaptaObject("PurchFormLetter", [ENUM]);
Но я понятия не имею, как передать правильное значение [ENUM]. В X++ перечислением является DocumentStatus::PurchaseOrder, но я, кажется, не могу получить к нему доступ из любого места. Может ли кто-нибудь помочь выяснить, как передать значение?
К сожалению, передача числового значения перечисления не работает (в данном случае мне нужно значение 2). Он возвращает XPPException "Функция PurchaseQuantity:: конструкция была использована неправильно."
AxaptaObject pobj = (AxaptaObject)ax.CreateAxaptaObject("PurchFormLetter", 2);
Если кто-нибудь может быть полезным, это будет очень ценно.
С уважением, Стив
2 ответа
Хорошо, это для всех, кто сталкивается с этой проблемой:
Если вы хотите получить доступ к значениям перечисления из.NET исключительно без использования X++:
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'). Затем вы можете использовать этот объект для публикации заказа на покупку.
Надеюсь, это кому-нибудь поможет.
С уважением, Стив