LT_VARIANT_LOAD
http://scnblogs.techweb.com.cn/hellohainiao/archives/17.html
1 FM说明
AVL显示数据,标准状态栏可以基本满足我的需要。但是,有些个别需求难以满足,需要自己定制ALV状态栏,将标准ALV的status复制到自己的status,然后通过设置屏蔽掉原有的功能,再增加新的按钮,按照自己的需求设计程序。比如现在,ALV标准导出功能使用有限制,当导出数据列数太多会自动折行,这时需要重新定义导出功能。如图,我将原来的导出功能屏蔽掉,客户定制新的导出功能。
但是,自己定义时,如果不进行特殊处理,就没有办法导出修改布局之后的数据。这时就要通过FM:LT_VARIANT_LOAD,获得修改之后的布局。这样有一个弊端,就是必须先保存布局,否则无法按照这个格局导出数据。
输入参数:
importing:
* I_TOOL = ‘LT’
i_tabname = ‘1′ ”必输项,但是一般输入1即可
i_tabname_slave = space
* I_DIALOG = ‘X’ ”若为X,则会弹出交互对话框,让客户选择布局,否则,需要在程序中指定
i_user_specific = ‘A’ ”若为A,则为客户指定;若为U,则为标准
i_default = ‘ ‘
i_via_grid = ‘X’
i_no_reptext_optimize = ‘X’
changing
cs_variant = ls_variant ”指定ALV布局变式
cs_layout = ls_layout_kkblo “格式
ct_default_fieldcat = lt_fieldcat_def_kkblo “标题列
输出参数:
et_fieldcat = lt_fieldcat_kkblo
2 DEMO
l_itab_rst = g_itab_result.
* 1 获取当前布局
LOOP AT fieldcat_alv.
MOVE-CORRESPONDING fieldcat_alv TO lw_fieldcat_def_kkblo.
APPEND lw_fieldcat_def_kkblo TO lt_fieldcat_def_kkblo.
ENDLOOP.
ls_variant-report = sy-cprog.
CALL FUNCTION ‘LT_VARIANT_LOAD’
EXPORTING
* I_TOOL = ‘LT’
i_tabname = ‘1′
i_tabname_slave = space
* I_DIALOG = ‘X’
i_user_specific = ‘A’
i_default = ‘ ‘
i_via_grid = ‘X’
i_no_reptext_optimize = ‘X’
IMPORTING
e_exit = l_exit
et_fieldcat = lt_fieldcat_kkblo
et_sort = lt_sort_kkblo
et_filter = lt_filter_kkblo
CHANGING
cs_variant = ls_variant
cs_layout = ls_layout_kkblo
ct_default_fieldcat = lt_fieldcat_def_kkblo
EXCEPTIONS
wrong_input = 1
fc_not_complete = 2
not_found = 3
OTHERS = 4.
IF l_exit IS NOT INITIAL.
EXIT.
ENDIF.
执行结果:
如果SO号和SO行号,两列不输出,现在保存布局为/SAVE_TEST1.
当选择/SAVE_TEST1时,输出参数lt_fieldcat_kkblo 中so号和SO行号两行数据的no_out属性会被打上X。
然后可以在自己实现的导出功能中,根据此特性进行特殊处理,比如导出时,将此数据过滤掉,不再进行导出。