Tem um problema nesse esquema, que no começo funcionou, mas tive problema com alguns clientes. Como a estrutura era standard na montagem do XML para envio o SAP automaticamente coloca o namespace nas tags e isso em alguns casos começaram a dar erro. Quebrei a cabeça por um bom tempo e percebi que eu poderia manter o WSDL original do SEFAZ e montar manualmente o XML antes de enviar o proxy. No caso do ES eu tive que fazer uma modificação no WSDL para poder funcionar, mas sem criar campos.
Falando na prática.
no WSDL no exemplo abaixo. o duaEmissao é a tag principal e abaixo vai as outras tags de valores, quando eu fiz a primeira vez criei todos os campos manualmente no WSDL, no caso abaixo ficou com um elemento <S:ANY>. Quando importado esse WSDL esse elemento é criado no SAP com typo RAWSTRING.
<s:element name="duaEmissao">
<s:complexType mixed="true">
<s:sequence>
<s:any />
</s:sequence>
</s:complexType>
</s:element>
No programa. criei um campo tipo string e concatenei todo o meu XML.
DATA: l_xml TYPE string.
CONCATENATE
'<duaDadosMsg xmlns="http://www.sefaz.es.gov.br/duae">'
'<emisDua versao="1.01">'
'<tpAmb>1</tpAmb>'
'<cnpjEmi>07592315000114</cnpjEmi>'
'<cnpjOrg>27080571000130</cnpjOrg>'
'<cArea>4</cArea>'
'<cServ>1384</cServ>'
'<cnpjPes>28614242000194</cnpjPes>'
'<dRef>2018-08</dRef>'
'<dVen>2018-09-30</dVen>'
'<dPag>2018-09-30</dPag>'
'<cMun>57053</cMun>'
'<xInf>teste</xInf>'
'<vRec>119.06</vRec>'
'<qtde>1</qtde>'
'</emisDua>'
'</duaDadosMsg>'
INTO l_xml.
converto para uma variável tipo XTRING.
DATA: l_xstr TYPE xstring.
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = l_xml
IMPORTING
buffer = l_xstr
EXCEPTIONS
failed = 1
OTHERS = 2.
Atribuo esse valor convertido ao meu campo ANY.
lw_emi_in-any = l_xstr.
E chamo proxy.
CALL METHOD lo_proxy->dua_emissao
EXPORTING
input = lw_emi_in
IMPORTING
output = lw_emi_out.
EXPORTING
input = lw_emi_in
IMPORTING
output = lw_emi_out.
================================
Para ver como ficou montado o XML, pode usar a função abaixo, q convert o xtring em uma tabela XML. Eu utilizo para verificar o retorno que para mim também vem com um campo tipo RAWSTRING.
CALL FUNCTION 'SMUM_XML_PARSE'
EXPORTING
xml_input = l_xstr
TABLES
xml_table = lt_xml
return = t_ret.
EXPORTING
xml_input = l_xstr
TABLES
xml_table = lt_xml
return = t_ret.
Nenhum comentário:
Postar um comentário