Загрузить файл из AS в cl_gui_textedit с переносами строк - PullRequest
1 голос
/ 06 января 2012

Я хочу отобразить файл внутри cl_gui_textedit компонента с разрывами строк, который вызывает у меня проблемы.

Я использую следующий код для инициализации компонента

  DATA: lo_c_errorviewer TYPE REF TO cl_gui_custom_container.

  CREATE OBJECT lo_c_errorviewer
    EXPORTING
        container_name = 'C_ERROR_MSG'.

  CREATE OBJECT go_error_textedit
    EXPORTING parent = lo_c_errorviewer.

  go_error_textedit->set_toolbar_mode( 0 ).
  go_error_textedit->set_statusbar_mode( 0 ).

После некоторой обработки XML с помощью пакета iXML двоичные данные файла становятся такими:

types: begin of xml_line,
        data(256) type x,
       end of xml_line.

data:  xml_table type table of xml_line,
       xml_size  type i.

ostream = streamFactory->create_ostream_itable( xml_table ).
document->render( ostream = ostream  recursive = 'X' ).
xml_size = ostream->get_num_written_raw( ).

Это должно содержать разрывы строк, если я прав. Для объекта ostream по умолчанию включена функция «симпатичная печать».

Я искал ссылку, и единственный способ передать информацию через

call method <c_textedit_control> - > set_text_as_stream

, которая ожидает "стандартную таблицу" символов. Как преобразовать данные или передать их компоненту?

1 Ответ

1 голос
/ 07 января 2012

Проще сделать ваш XML-документ в STRING сразу, который затем вы можете отправить в CL_GUI_TEXTEDIT элемент управления:

data xmlstring type string.
data ostream type ref to if_ixml_ostream.
ostream = streamfactory->create_ostream_cstring( xmlstring ).
document->render( ostream = ostream recursive = 'X' ).
...
data textedit type ref to cl_gui_textedit.
create object textedit
  exporting
    parent = container.
textedit->set_textstream( xmlstring ).



Если вам необходимо выполнить рендерингв двоичные данные, тогда я предлагаю вам использовать XSTRING для этого:

data xmlxstring type xstring.
data ostream type ref to if_ixml_ostream.
ostream = streamfactory->create_ostream_xstring( xmlxstring ).
document->render( ostream = ostream recursive = 'X' ).

Затем вы можете преобразовать двоичные данные в строку, используя класс CL_ABAP_CONV_IN_CE, предоставленный SAP:

data converter type ref to cl_abap_conv_in_ce.
converter = cl_abap_conv_in_ce=>create( input = xmlxstring ).
data xmlstring type string.
converter->read( importing data = xmlstring ).

Который вы можете отправить на свой CL_GUI_TEXTEDIT элемент управления:

data textedit type ref to cl_gui_textedit.
create object textedit
  exporting
    parent = container.
textedit->set_textstream( xmlstring ).



Обратите внимание, что в случае проблем с кодировкой вы можете установить кодировку для объекта ostreamперед рендерингом, и объект конвертера позволяет указать кодировку при его создании.

...