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
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