initialization事件(初始化事件)
一般在initialization事件下写什么呢?
通常在该事件下对程序设置值和屏幕元素进行初始化赋值。
业务前提:
需求多值选项字段默认值备选值过多,并且所给值是无规则散乱的。
并且如果client需要修改默认值,而源代码写成hard code,甲方公司需要进行审批,时间过长那么如果写成让client满意的需求?
特点:可以让client 自己修改默认值,极大提高业务灵活性和效率,默认值备选值存在自创建表中。
基础知识:[type range of] , into table @data(itab) / into @data(wa) ,field[ ] , sign , option , high , low , @abap_true .
事务代码:SE80 SE11 SM30 SE16N
程序代码:
SELECTION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME TITLE TEXT-T01.
SELECT-OPTIONS: S_HKONT FOR BSIS-HKONT MATCHCODE OBJECT kred ,
S_BUKRS FOR BSIS-BUKRS DEFAULT 'SY'.
SELECTION-SCREEN END OF BLOCK BK1.
注意不给S_HKONT赋默认值
INITIALIZATION.
PERFORM Init_data.
form init_data.
CONSTANTS:
IT_bt TYPE char2 VALUE 'BT',
IT_I TYPE char1 VALUE 'I'.
DATA:
lt_exvd TYPE RANGE OF BSIS-HKONT,
ls_exvd LIKE LINE OF lt_exvd,
GT_RELATE TYPE RANGE OF BSIS-HKONT.
IF S_HKONT[] IS INITIAL AND S_HKONT IS INITIAL.
SELECT
OPTION1,
HKONT_L,
HKONT_H
INTO TABLE @DATA(lt_ex)
FROM Z12_EXVD
WHERE related = @abap_true.
IF sy-subrc = 0.
LOOP AT lt_ex INTO DATA(ls_ex).
ls_exvd-sign = IT_I.
ls_exvd-low = ls_ex-HKONT_L.
ls_exvd-high = ls_ex-HKONT_H.
IF ls_exvd-high IS INITIAL.
ls_exvd-option = ls_ex-OPTION1.
ELSE.
ls_exvd-option = IT_bt.
ENDIF.
APPEND ls_exvd TO lt_exvd.
CLEAR: ls_ex,ls_exvd.
ENDLOOP.
ENDIF.
APPEND LINES OF lt_exvd[] TO S_HKONT.
APPEND LINES OF lt_exvd[] TO gt_relate.
ENDIF.
ENDFORM.
Z12_EXVD表
建好后赋权限
Utilities → Table Maintenance Generator
执行SM30,CLIENT可以在SM30中修改默认值
运行效果部分截图:
如果想要更多限制条件可在视图维护时查看status找到对应function进行代码编写