你好,ABAP人。
这是我的第一个关于ABAP开发的博客,我想与你分享我的经验肯定会帮助到别人。
请关注这个博客,了解更多关于ABAP的内容。
要求。基于Program1中的一些条件,改变Program2中所有变体的值。
对于这个测试方案,我有两个程序2的变体ZSAT_TEST_VARIANT。
变体1:ZSAT

变体2:ZSAT1

例如,在执行程序1后,我需要删除所有变体的第4个值,即D10000和D2000将在这种情况下被删除。
执行程序1后,我们可以看到预期的结果。


你可以看到变量的值D10000和D2000从程序2的所有变量中被删除。
完整的代码供您参考。
REPORT zsat_test_variant1.
DATA : gt_cat TYPE rsvcat,
gt_valutab TYPE TABLE OF rsparams,
gs_vari_desc TYPE varid.
***Read all variants for program ZSAT_TEST_VARIANT
CALL FUNCTION 'RS_ALL_VARIANTS_4_1_REPORT'
EXPORTING
program = 'ZSAT_TEST_VARIANT'
IMPORTING
cat = gt_cat
EXCEPTIONS
report_not_existent = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSE.
***DELETE 4th row of each variant value
LOOP AT gt_cat-cat INTO DATA(gw_cat).
WRITE : / gw_cat-variant.
REFRESH : gt_valutab.
CALL FUNCTION 'RS_VARIANT_CONTENTS'
EXPORTING
report = 'ZSAT_TEST_VARIANT'
variant = gw_cat-variant
move_or_write = 'M'
TABLES
valutab = gt_valutab
EXCEPTIONS
variant_non_existent = 1
variant_obsolete = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSE.
* LOOP AT gt_valutab ASSIGNING FIELD-SYMBOL(<fs_tab>).
*You can write your own logic here, for Demo purpose I'm just deleting 4th value from all variants
DELETE gt_valutab INDEX 4.
* ENDLOOP.
IF sy-subrc IS INITIAL.
***Update the variant
CALL FUNCTION 'RS_CHANGE_CREATED_VARIANT'
EXPORTING
curr_report = 'ZSAT_TEST_VARIANT'
curr_variant = gw_cat-variant
vari_desc = gs_vari_desc
TABLES
vari_contents = gt_valutab
EXCEPTIONS
illegal_report_or_variant = 1
illegal_variantname = 2
not_authorized = 3
not_executed = 4
report_not_existent = 5
report_not_supplied = 6
variant_doesnt_exist = 7
variant_locked = 8
selections_no_match = 9
OTHERS = 10.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
如果有任何需要改进的地方,请读者发表意见,或者指出上述博客中的任何错误。