Показать сообщение отдельно
Старый 09.12.2010, 14:02   #1  
someOne is offline
someOne
Участник
Аватар для someOne
 
173 / 423 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Функция global::valueFromXMLNode() в Ax2009 работает не корректно
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);
    }
    // <--
Не уверен в эстетичности такого решения, но так эта функция работает корректно.