我们知道,程序里面是不推荐使用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