检查报表是否使用分层ALV.如何



在这个问题的帮助下,我找到了一种导出层次ALV的方法。不幸的是,我不知道报告是否使用分层ALV。

如果我将上面答案的代码应用于报告RFSKPL00,那么我在cl_salv_bs_runtime_info=>get_data()中得到一个异常:

if t_data_line is requested.
import t_data_line to t_data_line from memory id cl_salv_bs_runtime_info=>c_memid_data_line.
if sy-subrc ne 0.
raise exception type cx_salv_bs_sc_runtime_info  <=========
exporting
textid = 'ERROR'.
endif.
endif.

如果报表是否使用层次ALV,我如何在ABAP中进行检查?

您可以使用TRY/CATCH/ENDTRY来防止基于可捕获的基于类的异常的转储:

DATA lx_runtime_info TYPE REF TO cx_salv_bs_sc_runtime_info.
TRY.
cl_salv_bs_runtime_info=>get_data(
IMPORTING
t_data      = <lt_data>
t_data_line = <lt_data_line>
).
CATCH cx_salv_bs_sc_runtime_info INTO lx_runtime_info.
DATA(lv_result) = lx_runtime_info->if_message~get_text( ).
DATA(lv_result_long) = lx_runtime_info->if_message~get_longtext( ).
ENDTRY.

(ST22总是告诉你必须使用哪个异常类。(

由于所有异常类都是CX_ROOT的子类(子类、子子类等(,因此您可以使用get_text和get_longtext方法来获取有关该问题的更多信息(通过接口if_message实现(。

要确定ALV是经典ALV还是层次顺序列表:

IF cl_salv_bs_runtime_info=>get( )-structure_line IS INITIAL.
"---------------------
" classic ALV
"---------------------
cl_salv_bs_runtime_info=>get_data_ref(
IMPORTING r_data = DATA(lr_data) ).
ELSE.
"---------------------
" hierarchical-sequential list 
"---------------------
cl_salv_bs_runtime_info=>get_data_ref(
IMPORTING r_data      = lr_data
r_data_line = DATA(lr_data_line) ).
ENDIF.

我想要同样的信息,Sandra的回答对我没有帮助/不起作用,因为参数无法填充。但是cl_salv_bs_runtime_info还有另一个解决我问题的功能,get_metadata。它有一个参数is_hierseq,按预期填充。

DATA: lr_data            TYPE REF TO data,
lr_data_line       TYPE REF TO data.
FIELD-SYMBOLS: <lt_data>      TYPE ANY TABLE,
<lt_data_line> TYPE ANY TABLE.
" initialising runtime analysis
cl_salv_bs_runtime_info=>set( EXPORTING display  = abap_false
metadata = abap_true
data     = abap_true ).
* ALV grid / hierarchical output:
CALL TRANSACTION 'MB51'.
* Testing output mode using metadata
DATA(runtime_metadata) = cl_salv_bs_runtime_info=>get_metadata( ).
IF runtime_metadata-is_hierseq IS INITIAL.
cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data_descr = DATA(lr_data_descr) ).
CREATE DATA lr_data TYPE HANDLE lr_data_descr.
ASSIGN lr_data->* TO <lt_data>.
cl_salv_bs_runtime_info=>get_data( IMPORTING t_data = <lt_data> ).
ELSE. " hierarchical
cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data_descr      = lr_data_descr
r_data_line_descr = DATA(lr_data_line_descr) ).
CREATE DATA lr_data      TYPE HANDLE lr_data_descr.
CREATE DATA lr_data_line TYPE HANDLE lr_data_line_descr.
ASSIGN lr_data->* TO <lt_data>.
ASSIGN lr_data_line->* TO <lt_data_line>.
cl_salv_bs_runtime_info=>get_data( IMPORTING t_data      = <lt_data>
t_data_line = <lt_data_line> ).
ENDIF.

在简单SALV网格的情况下,<lt_data>var包含输出,而在层次ALV列表的情况下结果将在<lt_data_line>中。

最新更新