我们知道,程序里面是不推荐使用hard code的,所以当某个值我们经常使用的话,我们通常会把它作为一个常量存起来,但是该值可能被多个用户使用并且经常进行维护呢?
这个时候使用常量明显就不明智了。
以下是我见过的两种处理方式:
一是,创建一个database的透明表将所有类似这样的值都存在该表中,这就是通常称的soft code table。 并且允许该表进行维护。
二是,创建set去维护类似这样的值。 这里重点讨论如果使用set。
如何创建set?
通过tcode: GS01 GS02 GS03对Set进行维护,开发人员一看便知的啦,非常简单的界面。
如何读取set中的值呢?
我们可以通过function module 'G_SET_GET_ALL_VALUES'将set里面的值读取出来,当然我们也可以通过function module 'SET_VALUES' 将值push到指定的set中去。
请看实例:
***************************** INCLUDE *********************************
INCLUDE ztest_pillar_top.
************************** INITITIALIZATION ****************************
INITIALIZATION.
************************** AT SELECTION SCREEN *************************
AT SELECTION-SCREEN.
************************** START OF SELECTION **************************
START-OF-SELECTION.
* Read values from set
PERFORM sub_get_set_value CHANGING gt_set_val_list.
************************** END OF SELECTION ****************************
END-OF-SELECTION.
* Output result of set values
IF gt_set_val_list IS NOT INITIAL.
PERFORM sub_output_resut USING gt_set_val_list.
ENDIF.
*************************** SUBROUTINE *********************************
*&---------------------------------------------------------------------*
*& Form SUB_GET_SET_VALUE
*&---------------------------------------------------------------------*
* Read Set Value into Internal Table
*----------------------------------------------------------------------*
* <--PR_T_SET_VAL_LIST Value list in set
*----------------------------------------------------------------------*
FORM sub_get_set_value CHANGING pr_t_set_val_list TYPE ty_t_rgsb4.
CALL FUNCTION 'G_SET_GET_ALL_VALUES'
EXPORTING
client = sy-mandt
setnr = cn_set_nam
table = cn_set_tab_nam
class = cn_set_class
fieldname = cn_tab_fld_nam
TABLES
set_values = pr_t_set_val_list
EXCEPTIONS
set_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " SUB_GET_SET_VALUE
*&---------------------------------------------------------------------*
*& Form SUB_OUTPUT_RESUT
*&---------------------------------------------------------------------*
* Output result
*----------------------------------------------------------------------*
* -->PR_T_SET_VAL_LIST Value list of set
*----------------------------------------------------------------------*
FORM sub_output_resut USING pr_t_set_val_list TYPE ty_t_rgsb4.
DATA: lw_set_val_list TYPE rgsb4.
LOOP AT pr_t_set_val_list INTO lw_set_val_list.
WRITE:/5 lw_set_val_list-from, 30 lw_set_val_list-to.
ENDLOOP.
ENDFORM. " SUB_OUTPUT_RESUT
以下是数据声明部分ztest_pillar_top
* Typs Declaration
types: ty_t_rgsb4 type STANDARD TABLE OF RGSB4.
* Data Declaration
data: gt_set_val_list type ty_t_rgsb4.
* Constants Declaration
CONSTANTS: cn_set_nam(10) type c VALUE 'ZSET_TEST', " Name of Set
cn_set_tab_nam(30) type c VALUE 'MARA', " Table Name in Set
cn_set_class(4) type c VALUE '0000', " Class Value of Set
cn_tab_fld_nam(30) type c VALUE 'MATNR'. " Field Name in Table