cancel
Showing results for 
Search instead for 
Did you mean: 

Custom de disponibilizacao do XML via WebService

former_member193386
Active Contributor
0 Kudos

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

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

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

former_member193386
Active Contributor
0 Kudos

Bernardo

O proble é que essa funcao nao volta o XML completo no String, isso acontece contigo tbem?

henrique_pinto
Active Contributor
0 Kudos

Como assim nao volta completo?

Poderia dar um exemplo?

Abs,

Henrique.

former_member193386
Active Contributor
0 Kudos

Viajei na maionese Henrique/Bernardo.

Volta sim, eu que estava vendo no debug e só me tornava disponivel os primeiros 255 chars.

valeu pela ajuda, eu ha tinha usado essa funcao, mas como estava dando erro eu parei de usar, agora bora pro PI fazer a interface dessa rfc. obrigado

Former Member
0 Kudos

No programa que tem aqui funciona....talvez não consiga ver o resultado completo do XML quando roda a função (limitação de exibição). Mas o XML é todo retornado.....tente fazer o download dele (CALL FUNCTION 'GUI_DOWNLOAD')

At.,

Bernardo Braga

Former Member
0 Kudos

Duplicado...again.

Vi seu post pós solução....blz.

Edited by: Bernardo Braga on Jul 22, 2010 4:36 PM

former_member193386
Active Contributor
0 Kudos

ok

henrique_pinto
Active Contributor
0 Kudos

Bernardo,

eu usava firefox e nao tinha problema de post duplicado.

Agora uso o Chrome e continuo nao tendo.

Talvez seja alguma coisa na sua rede (que esteja duplicando a request http, algo assim).

Abs,

Henrique.

Former Member
0 Kudos

pois é...tambem nunca tive esse problema...sempre uso o Firefox.....de um tempo pra ca começou a acontecer...vou ver se alguem olha isso aqui.

Vlw.

At.,

Bernardo Braga