Mapeo de XMLs


En caso de necesitar realizar una captura de un XML, utilice el siguiente mapeo.


Busque el Tipo de Expediente para el cual va a generar el mapeo y seleccione la opción “Editar mapeo de campos”.



Cree uno nuevo.



Dentro del nuevo mapeo cargue los campos obligatorios.



Complete el campo “Ruta de origen”, con cualquier valor que le permita identificar fácilmente de que se trata el mapeo (por ejemplo “XML”).


Seleccione una plantilla. En este caso, la plantilla queda vacía, llamada Dummy.


Por último complete los campos a mapear y proceda a guardar.


Al crear el proceso de captura, indique que mapeo se debe utilizar para el XML, editando la tarea de clasificación y cargando el campo “Path de Origen del template para mapear el XML Capturado” con el nombre del “Ruta de origen” que complete en el mapeo.




Cargar las posiciones


Para obtener datos de un XML se utilizan consultas en la base de datos. Por lo tanto, para realizar los mapeos debe cargar exactamente la nomenclatura definida por SQL Server.


Por ejemplo, debe cargar los campos “Clave” y “Unidad” de nuestro Expediente “Producto”, dado el siguiente XML:


<cfdi:Comprobante xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd" LugarExpedicion="97300" MetodoPago="PUE" TipoDeComprobante="I" Total="56550.00" Moneda="MXN" Fecha="2020-01-03T10:36:32" Folio="08" Serie="A" Version="3.3" xmlns:cfdi="http://www.sat.gob.mx/cfd/3">

       <cfdi:Conceptos>

               <cfdi:Concepto>

                       <ClaveProdServ>81112005</ClaveProdServ>

<Descripcion>Tetera</Descripcion >

                       <ClaveUnidad>E48</ClaveUnidad>

               </cfdi:Concepto>

               <cfdi:Concepto>

                       <ClaveProdServ>81112006</ClaveProdServ>

<Descripcion>Parlante</Descripcion>

                       <ClaveUnidad>E47</ClaveUnidad>

               </cfdi:Concepto>

       </cfdi:Conceptos>

</cfdi:Comprobante>


Si quiere tomar los valores solamente del primer concepto y cargarlos en campos de su Expediente debe mapear de la siguiente manera:


En la posición de su campo “Clave” iría (//*:Comprobante/*:Conceptos/*:Concepto/*:ClaveProdServ/text())[1]


Como el valor que se toma es el del tag del xml, se llega al él, a través de la ruta “//*:Comprobante/*:Conceptos/*:Concepto/ClaveProdServ”. Luego indique que desea tomar el texto del tag con la función “text()”.


Como solo quiere la primera ocurrencia encierre la expresión en paréntesis e indique la fila entre corchetes “[1]”.


Ahora, suponga que nuestro XML es de la siguiente forma:


<cfdi:Comprobante xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd" LugarExpedicion="97300" MetodoPago="PUE" TipoDeComprobante="I" Total="56550.00" Moneda="MXN" Fecha="2020-01-03T10:36:32" Folio="08" Serie="A" Version="3.3" xmlns:cfdi="http://www.sat.gob.mx/cfd/3">

       <cfdi:Conceptos>

               <cfdi:Concepto ClaveProdServ=”81112005” Descripcion=”Parlante” ClaveUnidad=”E48” />

               <cfdi:Concepto ClaveProdServ=”81112006” Descripcion=”Tetera” ClaveUnidad=”E47” />

       </cfdi:Conceptos>

</cfdi:Comprobante>


Como puede ver, los valores se presentan como atributos y no como texto del tag.


Para poder tomar el atributo de la primera ocurrencia de “ClaveProdServ” hay que utilizar la siguiente nomenclatura:


(//*:Comprobante/*:Conceptos/*:Concepto/@ClaveProdServ)[1]


Similar a la anterior pero una vez que lleue al tag, indique con “@” y el nombre del atributo que quiere tomar. Nuevamente con la posición entre paréntesis indique la ocurrencia a tomar con corchetes.





Grillas


Si lo que quiere es capturar el conjunto de ocurrencias debe utilizar una grilla.


Para ello se mapea de la siguiente manera, utilizando el mismo XML.



En la posición indique el path hasta el tag que se repite. Luego las columnas separadas por coma (“,”).


Al igual que antes, si el valor es un atributo se antepondrá el “@” al nombre del mismo y si es un tag se coloca el nombre del tag más “/text()”, todo entre paréntesis. En ambos casosse indica la ocurrencia con [1].


Ejemplo:


Atributo @ClaveUnidad[1]


Texto del Tag (ClaveUnidad/text())[1]


También en estos casos, debe concatenar con “|” el nombre de la columna en netcontent. Como se ve en la imagen, “@Descripcion[1]” usted quiere que se cargue en la columna “Apellido” (“@Descripcion[1]|Apellido”) y “ClaveUnidad” en “Nombre” (“@ClaveUnidad[1]|Nombre”).




Obtener datos del email


Cuando se reciben los archivos a procesar por mail, puede tomar los valores propios del mail.


Todos los valores de los mails son subidos en formato “xml” por lo tanto, puede aplicar las mismas técnicas de mapeo vistas en este documento pero en la tarea de clasificación del proceso de captura llene el campo “Path de Origen del template para mapear el XML del Mail”, con el root del mapeo creado.


El xml de los mails siempre es como se muestra a continuación:


<mail>

<from><a href = 'mailto:info@netcontent.tech>Netcontent</a></from>

<subject>Fwd: Test captura emial</subject>

<sentdate>07-Apr-22 2:50:42 PM</sentdate>

<body>Este es el Mensaje del mail</body>

</mail>


Para obtener del from el email utilizar:

(//*:mail/from/a/@href)[1]


Si queremos el nombre:

(//*:mail/from/a/text())[1]


Si queremos el subject:

(//*:mail/subject/text())[1]


Si queremos el sentdate:

(//*:mail/sentdate/text())[1]


Si queremos el body:

(//*:mail/body/text())[1]




Obtener datos del código de barras o QR


Para la captura de los códigos de barra, Netcontent obtiene dos valores con las palabras reservadas Data y BC_TEXT.


    • Data es el valor del código de barras.
    • BC_TEXT es el contenido en bruto tal cual viene luego de leerlo del archivo.


Ejemplo:

Data: 44fe5c3037e4b44d723c272818809cd9d723028a

BC_TEXT: {"state":null,"BarCodes":[{"Page":1,"Type":"CODE_128","Data":"44fe5c3037e4b44d723c272818809cd9d723028a","Points":[{"X":"643.5","Y":"534.0"},{"X":"1626.5","Y":"534.0"}]}]}


Los QR devuelven una URL, de la cual se pueden obtener valores en formato JSON.


Por ejemplo: https://www.afip.gob.ar/fe/qr/?p=eyJ2ZXIiOjEsImZlY2hhIjoiMjAyMC0xMC0xMyIsImN1 aXQiOjMwMDAwMDAwMDA3LCJwdG9WdGEiOjEwLCJ0aXBvQ21wIjoxLCJucm9DbXAiO jk0LCJpbXBvcnRlIjoxMjEwMCwibW9uZWRhIjoiRE9MIiwiY3R6Ijo2NSwidGlwb0RvY1JlYyI 6ODAsIm5yb0RvY1JlYyI6MjAwMDAwMDAwMDEsInRpcG9Db2RBdXQiOiJFIiwiY29kQXV 0Ijo3MDQxNzA1NDM2NzQ3Nn0=


Para indicarle al proceso de captura de Netcontent que debe tomar el hash del parámetro “p”, edite en la tarea de clasificación el campo “Parámetro donde encontrar el Json del QrCode”.



El contenido del hash tomado del parámetro seleccionado, luego de decodificarlo, contiene el objeto JSON.


Siguiendo el ejemplo:


{"ver":1,"fecha":"2020-10- 13","cuit":30000000007,"ptoVta":10,"tipoCmp":1,"nroCmp":94,"importe":12100,"mon eda":"DOL","ctz":65,"tipoDocRec":80,"nroDocRec":20000000001,"tipoCodAut":"E","co dAut":70417054367476"}


Con este objeto se pueden llenar los campos del Expediente dado un mapeo.


QR_TEXT aloja todo el Json formado con las coordenadas, el cual es luego analizado para obtener datos individuales del mapeo:


{"state":null,"BarCodes":[{"Page":1,"Type":"QR_CODE","Data":"https://www.afip.gob.ar/fe/qr/?p=eyJ2ZXIiOjEsImZlY2hhIjoiMjAyMC0xMC0xMyIsImN1 aXQiOjMwMDAwMDAwMDA3LCJwdG9WdGEiOjEwLCJ0aXBvQ21wIjoxLCJucm9DbXAiO jk0LCJpbXBvcnRlIjoxMjEwMCwibW9uZWRhIjoiRE9MIiwiY3R6Ijo2NSwidGlwb0RvY1JlYyI 6ODAsIm5yb0RvY1JlYyI6MjAwMDAwMDAwMDEsInRpcG9Db2RBdXQiOiJFIiwiY29kQXV 0Ijo3MDQxNzA1NDM2NzQ3Nn0=","Points":[{"X":"126.5","Y":"3360.0"},{"X":"126.5","Y":"2952.0"},{"X":"534.0","Y":"2952.0"},{"X":"514.0","Y":"3340.0"}]}]}


Nota:

En un mismo mapeo se pueden combinar tags del árbol de ABBYY, json de QR o BAR Codes, xml de captura y de mail ya que Netcontent realiza el procesamiento de todo y luego carga los valores del Expediente con la captura.


Es importante tener en cuenta, que si tenemos diferentes mapeos para cada tipo de captura y hay campos que se utilizan en más de un mapeo, el campo quedará con el valor que tome el último reemplazo donde el orden será lo capturado por ABBYY, QR/bar codes, xml y por último mail.


Ejemplo de MSSQL XML Query


https://www.youtube.com/watch?v=JscynQHUs5U


Creado con el Personal Edition de HelpNDoc: Guía paso a paso: cómo convertir su documento de Word en un libro electrónico