1

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

在使用 iXML 包进行一些 XML 处理后,文件的二进制数据如下所示:

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

它需要一个字符的“标准表”。如何转换数据或将其传递给组件?

4

1 回答 1

1

如果您STRING直接将 XML 文档呈现为更容易,然后您可以将其发送到您的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 对象上设置编码,并且转换器对象允许您在创建时指定编码。

于 2012-01-06T23:42:28.883 回答