abap - 通过 GUI 调用的分层 ALV 报告有 18 列,但通过 RFC 只有 6 列。为什么?
问题描述
我想导出报告RM07MLBS
(tcode mb52)。如果我通过 SAP-GUI 调用此报告,它有 18 列,如果我使用以下代码调用它,它只返回maktx, werks, matkl, matnr, name1, mtart
列:
cl_salv_bs_runtime_info=>set(
EXPORTING
display = abap_false
metadata = abap_false
data = abap_true
).
SUBMIT (IV_REPORT_NAME)
WITH SELECTION-TABLE selection_table
AND RETURN.
DATA: lo_data TYPE REF TO data.
cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data = lo_data ).
IF lo_data IS NOT BOUND.
ev_result_json = '[]'.
EXIT.
ENDIF.
field-SYMBOLS <lv_data> type any table.
ASSIGN lo_data->* TO <lv_data>.
ev_result_json = /ui2/cl_json=>serialize( data = <lv_data> pretty_name = /ui2/cl_json=>pretty_mode-low_case ).
cl_salv_bs_runtime_info=>clear_all( ).
如何获取所有列?
解决方案
用户 JozsefSzikszai 给了我解决这个问题所需的提示。
这样我可以从分层 ALV 中读取所有列
SUBMIT (IV_REPORT_NAME)
WITH SELECTION-TABLE selection_table
AND RETURN.
FIELD-SYMBOLS <lt_data> TYPE ANY TABLE.
FIELD-SYMBOLS <lt_data_line> TYPE ANY TABLE.
DATA lr_data TYPE REF TO data.
DATA lr_data_line TYPE REF TO data.
cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data_descr = DATA(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>
).
IF <lt_data> IS INITIAL.
ev_result_json = '[]'.
EXIT.
ENDIF.
ev_result_json = /ui2/cl_json=>serialize( data = <lt_data_line> pretty_name = /ui2/cl_json=>pretty_mode-low_case ).
cl_salv_bs_runtime_info=>clear_all( ).
ENDFUNCTION.
欢迎提供反馈和提示如何改进这一点。
推荐阅读
- regex - 从 AWS Cloudwatch 洞察中提取日期
- javascript - 将浮点字节转换为字符串
- r - 使用 dplyr::mutate() 获取选定列的滚动平均值
- php - 如何将证书添加到 PhpStorm?
- python - 如何使用熊猫数据框作为其他数据框的条件
- python - Pandas:从交叉表到计数表
- java - RSA 加密在 Java 中导致 IllegalBlockSizeException
- css - 通过单击并拖动来选择 div flex 框
- php - 如何在 macOS Catalina 上的 PHP 7.3 下安装 intl 扩展?
- react-native - 使用 Image.getSize 函数反应本机问题