martes, 2 de febrero de 2010

Importar y exportar data en formato XML usando clases Axd

Hola, en este artículo se explicará cómo utilizar AXD-clases con el fin de importar los archivos XML en Dynamics AX y Data Dynamics AX a la exportación en archivos XML. Este metodo está orientado más a los desarrolladores debido por la forma de ejecución.
Otra cosa importante es que funciona tanto en dynamics AX 4.0 como en el 2009.

Partes de configuración
Para importar o exportar data desde dynamics AX en formato XML, es necesario que existan los siguientes objetos:
a) Tabla: donde se encuentre la data que será importada o exportada.
b) Clase AxBC: que es un contenedor para la tabla y es utilizado por AXD-Framework por la data por 
    defecto en los campos de la tabla y actualizar las tablas relacionadas.
c) Query: es usado por Axd-framework para la selección de data de la tabla o del archive XML.
d) Clase Axd: representa el documento XML y es usado por Axd-framework para importar o exportar data
    desde ó hacia Dynamics AX.

Todos los objetos mencionados excepto la tabla ó el query pueden ser generados automáticamente usando el asistente Axd.

En si lo que vamos hacder es crear una tabla MiTabla, insertamos algunos registros dentro de la tabla y generamos todos los objetos mencionados arriba usando el asistente Axd. Después, en la parte de ejecución, se exportará los registros de la tabla creada (MiTabla) dentro de un archivo XML e importaremos la data de un archivo XML dentro de la tabla creada (MiTabla).
1) Crear una nueva tabla (MiTabla)
Fig.1: Nueva tabla MiTabla
2) Usando el buscador de tablas, inserter 2 registros en la table MiTabla. Después estos registros serán exportados al archivo XML.

Fig. 2: Ruta de acceso al elemento de menú del navegador de la tabla
Fig. 3: Insertando 2 nuevos registros a la tabla creada
3) Creamos un nuevo query que sera usado para exportar la data de MiTabla al archivo XML e importar la data del archivo XML a la tabla MiTabla. El nombre del query debe empezar con Axd en orden de facilitar la distinción entre los queries estandars y los queries Axd.
Fig. 4: Nuevo query AxdMiTabla
4) Ir a herramientas – Herramientas de desarrollo - Asistente – y seleccionar Axd Asistente.
Fig. 5: Ruta de acceso al elemento de menú Asistente Axd.

5) El asistente de Axd empezará. En la página de bienvenida, hacer clic en el botón siguiente.

Fig. 6: Ventana de bienvenida del asistente Axd.


6) Seleccionar el query AxdMiTabla creado en el paso 3 y dar clic en el boton continuar.

Fig. 7: Ventana de selección del query

7) Seleccionamos todas las acciones para poder importar y exportar varios registros del documento.Especifique una descripción del documento en el campo de etiqueta y haga clic en el botón Siguiente.

Fig. 8: Selección de etiqueta y métodos

8) Clic en generar clases AxBC en la parte Generación AxBC.
Fig. 9: Ventana para generar los cúdigos Axd.

9) Después de haber realizado todos los pasos anteriores, darclic en Generar.

Fig. 10: Ventana de resumen de los objetos que se van a generar


Fig. 11: Ventana final del Asistente

10) Si nos fijamos en la ventana de salida del compilador, muy probablemente encontrará varios errores en
       la clase AxMiTabla.

Fig. 12: Ventana del compilador después de que el asistente Axd se ha completado.

11) Para arreglar los errors que ha botado el compilador necesitamos ir al proyecto creado
      AxdMiTabla, borrar los 2 metodos cacheObject y cacheRecordRecord de la clase AxdMitabla y
      compilar el proyecto entero.
Fig. 13: Proyecto AxdMitabla generado por el asistente Axd.

Fig. 14: Borrando los métodos fallidos cacheObject y cacheRecordRecord.

Fig. 15: Compilando el proyecto entero
 
Ahora todos los objetos necesarios han sido creados por axd Asistente y estamos listos para exportar e importar los datos en formato XML.


Parte de ejecución:

1) Exportar data desde la table MiTabla al archive XML usando la clase AxdMiTabla
    El job exporta los registros de la tabla MiTabla en XML archivo C: \ Temp \ AxdMiTabla_Salida.xml.
    Por favor, asegúrese de que el directorio C: \ Temp existe antes de ejecutar este job.


    static void exportarAxdMiTabla(Args _args)
   {
        MiTabla miTabla;
        AxdMiTabla axdMiTabla = AxdBase::newClassId(classnum(AxdMiTabla));
        AifEntityKeyList aifEntiryKeyList = new AifEntityKeyList();
        AifDocumentXml aifDocumentXml;
        XmlDocument xmlDocument;

        // convertir un registro a la clave de entidad
        AifEntityKey getEntityKey(Common _record)
        {
              AifEntityKey aifEntityKey = AifEntityKey::construct();
              List keyFields = SysDictTable::getUniqueIndexFields(_record.TableId);
              Map keyMap = SysDictTable::mapFieldIds2Values(keyFields,_record);
              ;

              aifEntityKey.parmKeyDataMap(keyMap);
              aifEntityKey.parmTableId(_record.TableId);
              aifEntityKey.parmRecId(_record.RecId);
              return aifEntityKey;
         }
         ;
         // añadir los registros destinados a la exportación en la entidad lista de claves
         while select miTabla
         {
              aifEntiryKeyList.addEntityKey(getEntityKey(miTabla));
         }

         // creando el documento XML conteniendo los registros
         aifDocumentXml = axdMiTabla.readList(aifEntiryKeyList, null, new AifEndpointActionPolicyInfo(),
                                                                        new AifConstraintListCollection(), connull());
         xmlDocument = XMLDocument::newXML(aifDocumentXML);

         // guardando el documento XML en el disco
         xmlDocument.save('C:\\Temp\\AxdMiTabla_salida.xml');
   }
   
    Y el resultado de correr este método sería:

2) Importar data de un archivo XML a la tabla MiTabla usando la lcase AxdMiTabla.

    Para probar este metodo puedes usar el archivo XML generado AxdMitabla_Salida.xml y renombrarlo 
    como axdMitabla_Entrada.xml.

    static void importarAxdMiTabla(Args _args)
    {
         AxdMiTabla axdMiTabla;
         AifDocumentXml xml;
         XmlDocument xmlDocument;
         ;

         // crear un documento XML de un archivo
         xmlDocument = XmlDocument::newFile("C:\\Temp\\axdMiTabla_Entrada.xml");
         xml = xmlDocument.xml();
         axdMiTabla = AxdBase::newClassId(classnum(AxdMiTabla));

         // insertar datos desde el docuemnto XML dentro de Dynamics AX
         axdMiTabla.createList(xml, new AifEndpointActionPolicyInfo(), new AifConstraintListCollection());
}

Saludos.

No hay comentarios:

Publicar un comentario