我们知道variant是ABAP Report程序自带的功能,但是我们怎样在D程序中用到这个功能呢,其实可以查看到部分dialog程序也是可以用到这个功能的,但是可以适用的条件是dialog上的条件是使用select-screen的subscreen。
其实整个过程没有想象的那么复杂,其本上只要了解以下下面的几个function就可以,
function group:SVAR,
其实我们对varaint的操作其实无非SAVE,display,delete;
Save功能:1、将需要保存varaint的screen上面的条件控件取出;
CALL FUNCTION 'RS_ISOLATE_1_SELSCREEN'
EXPORTING
program = w_report
dynnr = t_dynnr-dynnr
* TABIX = 0
* IMPORTING
* LAST_TABIX = LAST_TABIX
TABLES
screen_sscr = t_selctab
* GLOBAL_SSCR = GLOBAL_SSCR
EXCEPTIONS
no_objects = 1
OTHERS = 2.
2、保存varaint 信息,并且设定varaint名,
CALL FUNCTION 'RS_VARIANT_SAVE_FROM_SELSCREEN'
EXPORTING
curr_report = w_report
vari_report = w_report
IMPORTING
variant = w_variant
TABLES
p_sscr = t_selctab_all
p_vari = t_vari
p_varivdat = t_varivdat
p_varidyn = t_varidyn
p_vdatdyn = t_vdatdyn
p_dynsfields = t_dynsfields
p_screens = gt_screens
EXCEPTIONS
illegal_variant_name = 1
not_authorized = 2
no_report = 3
report_not_existent = 4
report_not_supplied = 5
OTHERS = 6.
CALL FUNCTION 'RS_VARIANT_VALUE_SAVE'
EXPORTING
rkey = t_rkey
TABLES
selctab = t_selctab_all
p_vari = t_vari
p_varivdat = t_varivdat
p_varidyn = t_varidyn
p_vdatdyn = t_vdatdyn
p_dynsfields = t_dynsfields
p_variscreens = t_dynnr.
Display功能:
获取variant并更新到screen上:
CALL FUNCTION 'RS_VARIANT_FETCH'
EXPORTING
function = 'GET'
report = w_report
rkey = t_rkey
* dynnr = t_dynnr-dynnr
submode = space
* internal_call = 'X'
IMPORTING
variant = l_sel_variant
TABLES
selctab = t_selctab_all
p_vari = t_vari
p_varivdat = t_varivdat
p_varidyn = t_varidyn
p_vdatdyn = t_vdatdyn
EXCEPTIONS
variant_name = 1
no_variants = 2
variant_inconsistent = 3
only_background = 4
OTHERS = 5.
CALL FUNCTION 'RS_SUPPORT_SELECTIONS'
EXPORTING
report = w_report
variant = sel_variant
EXCEPTIONS
variant_not_existent = 1
variant_obsolete = 2
OTHERS = 3.
Delete功能:
CALL FUNCTION 'RS_VARIANT_DELETE'
EXPORTING
report = w_report
variant = sel_variant
* flag_confirmscreen = 'X'
* flag_delallclient = 'X'
EXCEPTIONS
not_authorized = 1
not_executed = 2
no_report = 3
report_not_existent = 4
report_not_supplied = 5
variant_locked = 6
variant_not_existent = 7
no_corr_insert = 8
variant_protected = 9
OTHERS = 10.