如何以编程方式改变变量值(ABAP)

144 阅读1分钟

你好,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.

如果有任何需要改进的地方,请读者发表意见,或者指出上述博客中的任何错误。