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

时间:2012-01-06 16:23:11

标签: textarea binaryfiles abap dynpro

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

期望字符的“标准表”。如何转换数据或将其传递给组件?

1 个答案:

答案 0 :(得分:1)

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