我想在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
期望字符的“标准表”。如何转换数据或将其传递给组件?
答案 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对象上设置编码,转换器对象允许您在创建时指定编码。