on 07-22-2010 2:10 PM
Srs.
Preciso da ajuda de vocês em uma solução custom que estou criando via WebServices de disponibilizacao do arquivo XML gerado pelo SEFAZ.
O problema que estou tendo é que, informando um ID de uma NFe, não estou conseguindo ler todos os dados do XML que está armazenado no GRC, durante a leitura está ocorrendo salto entre os dados e não entendo ainda o que pode estar errado.
Segue abaixo o codigo da RFC que estou criando que através do ID ( como eu disse ) me retornaria o XML completo dentro de um unico campo de texto, o que nao esta ocorrendo.
FUNCTION Z_GETXML_BY_MFEID.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(I_NFEID) TYPE /XNFE/ID
*" EXPORTING
*" VALUE(E_XML) TYPE CHAR30K
*"----------------------------------------------------------------------
TYPES: begin of typ_tab_xml,
id TYPE string,
docid TYPE SDOK_DOCID,
end of typ_tab_xml.
TYPES: begin of typ_tab_string,
str TYPE Xstring,
end of typ_tab_string.
DATA: wa_xml TYPE typ_tab_xml,
wa_dokobject TYPE SDOKOBJECT,
itb_fileinfo TYPE TABLE OF SDOKFILACI,
wa_fileinfo TYPE SDOKFILACI,
itb_fileBinary TYPE TABLE OF SDOKCNTBIN,
wa_fileBinary TYPE SDOKCNTBIN,
str_xml TYPE string,
tab_string TYPE TABLE OF SDOKCNTASC.
SELECT SINGLE id
docid
FROM /XNFE/XML
INTO wa_xml
WHERE id = I_NFEID.
IF sy-subrc 0.
ENDIF.
wa_dokobject-class = '/XNFE/XML1'.
wa_dokobject-objid = wa_xml-docid.
CALL FUNCTION 'SDOK_PHIO_LOAD_CONTENT'
EXPORTING
OBJECT_ID = wa_dokobject
CLIENT = SY-MANDT
* AS_IS_MODE =
RAW_MODE = 'X'
* TEXT_AS_STREAM =
TABLES
FILE_ACCESS_INFO = itb_fileinfo
FILE_CONTENT_BINARY = itb_fileBinary
* EXCEPTIONS
* NOT_EXISTING = 1
* NOT_AUTHORIZED = 2
* NO_CONTENT = 3
* BAD_STORAGE_TYPE = 4
* OTHERS = 5
.
IF SY-SUBRC 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
READ TABLE itb_fileinfo INTO wa_fileinfo INDEX 1.
DATA: linha TYPE i,
linha2 TYPE i,
linha_fim TYPE i,
tabela TYPE TABLE OF typ_tab_string.
linha = wa_fileinfo-first_line.
linha_fim = wa_fileinfo-last_line.
Data: len TYPE i.
WHILE linha <= linha_fim.
linha2 = linha + 1.
data LXSTRING type XSTRING.
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
EXPORTING
INPUT_LENGTH = 4096
FIRST_LINE = LINHA
LAST_LINE = LINHA2
IMPORTING
BUFFER = LXSTRING
TABLES
BINARY_TAB = itb_fileBinary
* EXCEPTIONS
* FAILED = 1
* OTHERS = 2
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Data: str TYPE string.
* CALL FUNCTION 'SCMS_BINARY_TO_STRING'
* EXPORTING
* INPUT_LENGTH = 1024
* FIRST_LINE = linha
* LAST_LINE = linha2
** MIMETYPE = ' '
** ENCODING =
* IMPORTING
* TEXT_BUFFER = str
** OUTPUT_LENGTH =
* TABLES
* BINARY_TAB = itb_fileBinary
** EXCEPTIONS
** FAILED = 1
** OTHERS = 2
* .
* IF SY-SUBRC 0.
** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
** WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* ENDIF.
DATA LSTR TYPE STRING.
CALL FUNCTION '/XNFE/XML_XSTRING2STRING'
EXPORTING
INXSTRING = lXSTRING
IMPORTING
OUTSTRING = LSTR
.
* nesse momento seria concatenado os dados no parametro de
* exportacao E_XML, porem ocorrem saltos nos dados do arquivo XML
linha = linha + 1.
ENDWHILE.
ENDFUNCTION.
Edited by: Henrique Pinto on Jul 22, 2010 11:31 AM
Edited by: Fernando Ros on Jul 23, 2010 2:13 AM
Eu uso essa função para recuperar o XML:
CALL FUNCTION '/XNFE/CORE_KPRO_XML_READ'
EXPORTING
is_dokobject = ls_dokobject
IMPORTING
ev_content = EV_STRING
EXCEPTIONS
no_existing = 0
no_authorization = 0
no_content = 0
read_failure = 0
convert_failure = 0
OTHERS = 0.
Onde:
ls_dokobject-class = '/XNFE/XML1'.
ls_dokobject-objid = lv_docid .
At.,
Bernardo Braga
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
16 | |
3 | |
2 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.