CE PLUS - Nota 012811

Módulo: CÂMBIO FINANCEIRO

Funcionalidade: SISCOSERV

Data/Hora da Publicação: 01/04/2013 15:31:37

Data/Hora Última Alteração: 01/04/2013 15:31:37

Descrição da Nota: SISCOSERV

Sintoma

Em ambientes SAP Unicode, o XML estava sendo criado no formato hexadecimal

 

 

Solução

Para ambientes Unicode, foi inserida uma rotina de conversão de hexadecimal para caracter

 

Versões Tratadas

9.0


Pré-Requisitos

Produto:

Nota

Descrição

VERIFICAÇÃO CODE INSPECTOR

Informações Complementares

----------------------------------------------------------------------------------------------------

Nota Número 12811 Data: 20/02/2013 Hora: 13:46:28

----------------------------------------------------------------------------------------------------

 

----------------------------------------------------------------------------------------------------

Nota Número              : 12811

Categoria                : Erro de Programa

Prioridade               : Média

Versão PW.CE             : 9.0

Pacote                   : 00003

Agrupamento              : 00148

----------------------------------------------------------------------------------------------------

Referência às notas relacionadas:

Número - Ordem - Versão - Pacote - Descrição Breve

 

----------------------------------------------------------------------------------------------------

SISCOSERV

----------------------------------------------------------------------------------------------------

Palavras Chave:

SISCOSERV - XML

 

----------------------------------------------------------------------------------------------------

Objetos da nota:

FUNC /PWS/ZYCA_GERA_XML_SISCOSERV

REPS /PWS/LZYCAGFF01

 

----------------------------------------------------------------------------------------------------

Modificações efetuadas em FUNC /PWS/ZYCA_GERA_XML_SISCOSERV

 

...

 

  data: wa_xml type char256,

        v_split    type string,

        v_split1   type string,

        v_split2   type string,

        v_lines    type i,

* >> Início da inclusão: FUNCTION /PWS/ZYCA_GERA_XML_SISCOSERV

        v_len_spl  type i,

        v_len_xml  type i,

* >> Fim da inclusão:

        it_xml_aux type standard table of char256.

 

  clear ixml.

 

  refresh: it_xml, it_xml_aux.

 

  if i_processo ne 'ERVS' and

     i_processo ne 'ERAS' and

     i_processo ne 'EARVS' and

     i_processo ne 'EARAS'.

 

...

            rval  = stream.

    CALL METHOD ixml->create_renderer

         EXPORTING

            document = document

            ostream  = stream

         RECEIVING

            rval     = renderer.

    CALL METHOD renderer->render

         RECEIVING

            rval   = ret_code.

* >> Início da inclusão: FUNCTION /PWS/ZYCA_GERA_XML_SISCOSERV

    PERFORM converte_it_xml.

* << Fim da inclusão

    DESCRIBE TABLE it_xml LINES v_lines.

    it_xml_aux[] = it_xml[].

    REFRESH it_xml.

    LOOP AT it_xml_aux INTO wa_xml.

      IF sy-tabix < v_lines.

        APPEND wa_xml TO it_xml.

      ELSE.

* >> Início da inclusão: FUNCTION /PWS/ZYCA_GERA_XML_SISCOSERV

        v_len_spl = strlen( v_split ).

        v_len_xml = strlen( wa_xml ).

        if v_len_xml < v_len_spl.

          v_len_spl = v_len_spl - v_len_xml.

          v_split = v_split+v_len_spl(v_len_xml).

        endif.

* << Fim da inclusão

        SPLIT wa_xml AT v_split INTO v_split1 v_split2.

        CLEAR wa_xml.

        CONCATENATE v_split1 v_split INTO wa_xml.

...

 

 

----------------------------------------------------------------------------------------------------

Modificações efetuadas em REPS /PWS/LZYCAGFF01

 

...

    wa_erro-fatura   = p_zycat039-fatura.

    wa_erro-campo = text-026.

    wa_erro-msg   = text-e02.

    APPEND wa_erro TO p_erro.

    p_v_erro = 'X'.

  ENDIF.

  IF NOT p_v_erro IS INITIAL.

    PERFORM desbloqueia_registros USING p_zycat039.

  ENDIF.

ENDFORM.

* >> Início da inclusão:

FORM converte_it_xml.

  DATA: itab_prog(72) TYPE c OCCURS 0,

        wa_prog(72)   TYPE c,

        v_program     TYPE trdir-name,

        v_mess(100)   TYPE c.

  CHECK sy-saprl(3) GE '620' OR sy-saprl(2) EQ '47'.      "#EC PORTABLE

  CLEAR: itab_prog.

  REFRESH itab_prog.

  CLEAR wa_prog.

  MOVE 'report sy-repid.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'DATA: conversor  TYPE REF TO cl_abap_conv_in_ce.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'DATA: xml_line type char256,' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'str        TYPE string,' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'it_xml_aux TYPE STANDARD TABLE OF char256,'  TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'wa_xml TYPE char256,'  TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'v_strlen   TYPE i.'  TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'FIELD-SYMBOLS: <xml_fs> TYPE x.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'form converte_xml TABLES it_xml TYPE STANDARD TABLE .' TO

wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'CALL METHOD cl_abap_conv_in_ce=>create' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'RECEIVING conv = conversor.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'LOOP AT it_xml INTO wa_xml.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'ASSIGN wa_xml TO <xml_fs> CASTING.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'TRY.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'CALL METHOD conversor->convert' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'EXPORTING input = <xml_fs>' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'IMPORTING data  = str.'  TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'CATCH cx_sy_conversion_codepage .' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'CATCH cx_sy_codepage_converter_init .' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'CATCH cx_parameter_invalid_type .' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'ENDTRY.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'v_strlen = STRLEN( str ).' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'IF v_strlen > 256.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'MOVE str(256) TO xml_line.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'APPEND xml_line TO it_xml_aux. ' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'clear xml_line.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  clear wa_prog.

  move 'v_strlen = v_strlen - 256.' to wa_prog.

  append wa_prog to itab_prog.

  CLEAR wa_prog.

  MOVE 'MOVE str+256(v_strlen) TO xml_line.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'IF NOT xml_line IS INITIAL.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'APPEND xml_line TO it_xml_aux.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'ENDIF.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'CLEAR xml_line.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'ELSE.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'MOVE str TO xml_line.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'APPEND xml_line TO it_xml_aux.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'CLEAR xml_line.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'ENDIF.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'ENDLOOP.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'REFRESH it_xml.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'it_xml[] = it_xml_aux.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  CLEAR wa_prog.

  MOVE 'endform.' TO wa_prog.

  APPEND wa_prog TO itab_prog.

  GENERATE SUBROUTINE POOL itab_prog NAME v_program MESSAGE v_mess.

  IF sy-subrc EQ 0 AND NOT v_program IS INITIAL.

    PERFORM converte_xml IN PROGRAM (v_program) TABLES it_xml.

  ENDIF.

ENDFORM.

* << Fim da inclusão