En este caso, yo necesito leer un XML que es la respuesta de consumir un servicio, y tengo dos casos, uno cuando el XML es una respuesta correcta (en ese caso no se presenta nada al usuario) y la otra cuando viene especificado el error, en ese caso se requiere presentar al usuario el código de error y el mensaje de error.
Aquí los dos XML.
1. Cuando el proceso es correcto
2. Cuando el proceso es incorrecto
<soap:Envelope xmlns:soap=" http://www.w3.org/2003/05/soap-envelope " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
         <actualizarCatalogosResult>
            <Resultado xmlns="">
               <Proceso>Incorrecto</Proceso>
               <Mensaje>El campo Tipo de Dimensión no es válido (Sólo admite valores: 1, 2, 3).</Mensaje>
               <Codigo>E001</Codigo>
            </Resultado>
         </actualizarCatalogosResult>
      </actualizarCatalogosResponse>
   </soap:Body>
</soap:Envelope>
Y el código en ax, para leer la cadena que me responde el servicio.
public static void showMessageXML( str _sourceXMLFile)
{
    str                 proceso, mensaje, codigoError;
    XmlDocument         xmlDocument;
    XmlNodeList         nodeList;
    XmlNode             node;
    XMLNodeListIterator xmlNodeListIterator;
    Counter             counter;
    xmlDocument = XmlDocument::newXml(_sourceXMLFile);
    nodeList = xmlDocument.selectNodes( '//Resultado'); // Nombre del nodo padre que quiero iterar
    xmlNodeListIterator = new xmlNodeListIterator(nodeList);
    while(xmlNodeListIterator.moreValues())   // Comenzando a iterar el nodo padre
    {
        counter++;
        node = xmlNodeListIterator.value();
        if(node.selectSingleNode('Proceso' ))    // Nombre del nodo que queremos leer 
            proceso = node.selectSingleNode( 'Proceso').text(); // Asignando valor del nodo
        if(node.selectSingleNode('Mensaje' ))
            mensaje = node.selectSingleNode( 'Mensaje').text();
        if(node.selectSingleNode('Codigo' ))
            codigoError = node.selectSingleNode( 'Codigo').text();
        // Si existe un mensaje de error, se presenta al usuario junto con el mensaje de error
        if (node.selectSingleNode('Mensaje' ) && node.selectSingleNode('Codigo')) 
        {
            Box::warning( strFmt("Error: %1 - %2" , codigoError, mensaje), "Interfaz Ax");
        }
        xmlNodeListIterator.nextValue();
    }
}
Post relacionados:
Escribir XML por código
Leer excel por código
Crear documentos asociados a un registro
Y por cierto, acuérdate de darle click a algún anuncio si el post te sirvió de algo.
No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma.
No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma.

 
 
Gracias, por el aporte, muy bueno y la explicación muy clarita!
ResponderBorrar