使用换行符将文件从AS加载到cl_gui_textedit



我想在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

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

如果您直接将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' ).

然后,您可以使用SAP提供的CL_ABAP_CONV_IN_CE类将二进制数据转换为字符串:

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对象上设置编码,转换器对象允许您在创建它时指定编码。

相关内容

  • 没有找到相关文章

最新更新