Skip to Content
0
Jul 22, 2010 at 01:10 PM

Custom de disponibilizacao do XML via WebService

46 Views

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