Gracias Mauricio

From: Mauricio Pistiner 
Sent: Sunday, July 05, 2015 10:24 PM
To: GUFA List Member 
Subject: [GUFA] Factura Electrónica - Leer respuesta XML

Hola,

Sobre como leer la respuesta XML de Factura Electrónica una alternativa a 
STREXTRACT es trabajar con el objeto MSXML.DOMDocument
Les paso un ejemplo en como se puede hacer un objeto jerárquico que respete la 
estructura del XML y revisar sus valores

Saludos
Mauricio

*
* ejemplo en VFP de como a partir de una estructura XML
* generar un objeto jerarquico
* usando "MSXML.DOMDocument"
* Mauricio Pistiner
*
LOCAL o

o = CREATEOBJECT('RespuestaAFIP')
o.cXML = o.Mock_XML()
o.ProcesarRespuesta()

WITH 
o.soap_envelope.soap_body.fecompconsultarresponse.fecompconsultarresult.ResultGet
? 'Concepto = '+.Concepto.Valor
? 'DocTipo = '+.DocTipo.Valor
? 'ImpTotal = '+.ImpTotal.Valor
? 'ImpTotConc = '+.ImpTotConc.Valor
? 'Concepto = '+.Concepto.Valor
? 'DocTipo = '+.DocTipo.Valor
? 'DocNro = '+.DocNro.Valor
? 'CbteDesde = '+.CbteDesde.Valor
? 'CbteHasta = '+.CbteHasta.Valor
? 'CbteFch = '+.CbteFch.Valor
? 'ImpTotal = '+.ImpTotal.Valor
? 'ImpTotConc = '+.ImpTotConc.Valor
? 'ImpNeto = '+.ImpNeto.Valor
? 'ImpOpEx = '+.ImpOpEx.Valor
? 'ImpTrib = '+.ImpTrib.Valor
? 'ImpIVA = '+.ImpIVA.Valor
? 'FchServDesde = '+.FchServDesde.Valor
? 'FchServHasta = '+.FchServHasta.Valor
? 'FchVtoPago = '+.FchVtoPago.Valor
? 'MonId = '+.MonId.Valor
? 'MonCotiz = '+.MonCotiz.Valor
*
* ...
*
ENDWITH

********************
*
DEFINE CLASS RespuestaAfip AS SESSION

cXML = ''

********************
*
PROCEDURE INIT

ENDPROC

********************
*
PROCEDURE ProcesarRespuesta
LOCAL cText, oXML, cValores


oXML = CREATEOBJECT("MSXML.DOMDocument")

IF oXML.LOADXML(THIS.cXML)
THIS.ProcesaNodos(oXML.childNodes,THIS)
ENDIF

ENDPROC

********************
*
PROCEDURE ProcesaNodos
LPARAMETERS Nodos AS MSXML.IXMLDOMNodeList, oObj
LOCAL oNodo AS MSXML.IXMLDOMNode, cNombre

#DEFINE NODE_ELEMENT 1
#DEFINE NODE_ATTRIBUTE 2
#DEFINE NODE_TEXT 3

FOR EACH oNodo IN Nodos
IF oNodo.nodeType = NODE_TEXT
ADDPROPERTY(oObj,'Valor',TRANSFORM(oNodo.nodeValue))
ENDIF
IF oNodo.hasChildNodes
cNombre = STRTRAN(oNodo.nodeName,':','_')
ADDPROPERTY(oObj,cNombre,CREATEOBJECT('empty'))
THIS.ProcesaNodos( oNodo.childNodes, EVALUATE('oObj.'+cNombre))
ENDIF
ENDFOR

ENDPROC

********************
*
PROCEDURE Mock_XML
LOCAL cText

TEXT TO cText NOSHOW
<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>
      <FECompConsultarResponse xmlns="http://ar.gov.afip.dif.FEV1/";>
         <FECompConsultarResult>
            <ResultGet>
               <Concepto>2</Concepto>
               <DocTipo>80</DocTipo>
               <DocNro>30999999997</DocNro>
               <CbteDesde>1</CbteDesde>
               <CbteHasta>1</CbteHasta>
               <CbteFch>20150628</CbteFch>
               <ImpTotal>33.15</ImpTotal>
               <ImpTotConc>0</ImpTotConc>
               <ImpNeto>20</ImpNeto>
               <ImpOpEx>10</ImpOpEx>
               <ImpTrib>0</ImpTrib>
               <ImpIVA>3.15</ImpIVA>
               <FchServDesde>20150601</FchServDesde>
               <FchServHasta>20150630</FchServHasta>
               <FchVtoPago>20150630</FchVtoPago>
               <MonId>PES</MonId>
               <MonCotiz>1</MonCotiz>
               <Iva>
                  <AlicIva>
                     <Id>4</Id>
                     <BaseImp>10</BaseImp>
                     <Importe>1.05</Importe>
                  </AlicIva>
                  <AlicIva>
                     <Id>5</Id>
                     <BaseImp>10</BaseImp>
                     <Importe>2.1</Importe>
                  </AlicIva>
               </Iva>
               <Resultado>A</Resultado>
               <CodAutorizacion>99999999999999</CodAutorizacion>
               <EmisionTipo>CAE</EmisionTipo>
               <FchVto>20151212</FchVto>
               <FchProceso>20150628160914</FchProceso>
               <PtoVta>5</PtoVta>
               <CbteTipo>1</CbteTipo>
            </ResultGet>
         </FECompConsultarResult>
      </FECompConsultarResponse>
   </soap:Body>
</soap:Envelope>
ENDTEXT

RETURN cText

ENDPROC

ENDDEFINE

Responder a