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