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