Ax2009 RU5
Для примера кода
X++:
static void test(Args _args)
{
xmlNode xmlNode;
xmlDocument xmlDocument;
struct content;
SalesType SalesType;
;
xmlDocument = new xmlDocument();
xmlNode = xmlDocument.createNode(xmlNodeType::Element, "test", "");
xmlNode.text(int2str(enum2int(SalesType::Sales)));
SalesType = global::valueFromXMLNode(Types::Enum, xmlNode).value("value");
info(strFmt("%1", SalesType));
}
Вне зависимости от входного значения enum функция всегда возвращает "Предложение" (значение enum : 1). (или возвращает ноль)
Дело в ошибке конвертации enum - она умеет возвращать только 0 или 1.
Ошибку решил исправить так:
X++:
static Struct valueFromXMLNode (Types t, XmlNode n)
{
#define.value('value')
Struct retval;
int enum; //было boolean enum
;
//validate arguments befor using them
if (n == null)
return null;
// -->
if (t == types::ENUM)
{
retval = new struct(types::Integer, #value);
}
else
{
retval = new struct(t, #value);
}
// <--
Не уверен в эстетичности такого решения, но так эта функция работает корректно.