之前有听同事讲关于一个客户的需求:
有一个自己的customizing的report是关于run F110相关的数据。这个report上面有两个参数选择:
PARAMETERS: p_laufd LIKE reguh-laufd, “运行日期
p_laufi LIKE reguh-laufi. ”标识
p_laufi LIKE reguh-laufi. ”标识
希望在点击参数p_laufd后面的value help的时候出来的界面和值要和F110一样。p_laufi也一样。
因为客户提到和F110一样,既然F110已经有了这样的功能,那么我们不妨直接参照F110标准程序的做法就可以了。这个就是一个很有效率以及很准确的方法。
T-code: F110->Program:SAPF110V-Screen:200.可以找到在这个200屏幕上看到标准程序的写法,直接引用过来。
test report:
DATA: BEGIN OF tlaufk OCCURS 1.
INCLUDE STRUCTURE ilaufk.
DATA: END OF tlaufk.
INCLUDE STRUCTURE ilaufk.
DATA: END OF tlaufk.
PARAMETERS: p_laufd LIKE reguh-laufd,
p_laufi LIKE reguh-laufi.
p_laufi LIKE reguh-laufi.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_laufd.
REFRESH tlaufk.
tlaufk-laufk = space.
tlaufk-sign = 'I'.
APPEND tlaufk.
CALL FUNCTION 'F4_ZAHLLAUF'
EXPORTING
f1typ = 'D'
f2nme = 'F110V-LAUFI'
IMPORTING
laufd = p_laufd
laufi = p_laufi
TABLES
laufk = tlaufk.
REFRESH tlaufk.
tlaufk-laufk = space.
tlaufk-sign = 'I'.
APPEND tlaufk.
CALL FUNCTION 'F4_ZAHLLAUF'
EXPORTING
f1typ = 'D'
f2nme = 'F110V-LAUFI'
IMPORTING
laufd = p_laufd
laufi = p_laufi
TABLES
laufk = tlaufk.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_laufi.
REFRESH tlaufk.
tlaufk-laufk = space.
tlaufk-sign = 'I'.
APPEND tlaufk.
CALL FUNCTION 'F4_ZAHLLAUF'
EXPORTING
f1typ = 'D'
f2nme = 'F110V-LAUFI'
IMPORTING
laufd = p_laufd
laufi = p_laufi
TABLES
laufk = tlaufk.
REFRESH tlaufk.
tlaufk-laufk = space.
tlaufk-sign = 'I'.
APPEND tlaufk.
CALL FUNCTION 'F4_ZAHLLAUF'
EXPORTING
f1typ = 'D'
f2nme = 'F110V-LAUFI'
IMPORTING
laufd = p_laufd
laufi = p_laufi
TABLES
laufk = tlaufk.
START-OF-SELECTION.
WRITE:/ p_laufd,p_laufi.
经测试,run出来的结果和F110一样。
这是目前已经有标准的存在,如果没有标准的话,该怎么做。也需要找相应的FM。下次blog中再记录。
上面的方法是直接copy标准程序的方法来用。
如果此时该field本身没有search help,在定义parameter或者select-option的时候,F4的时候也没有值出来。如果此时你想让它在F4的时候出来值。那么按照一下方法就可以。最主要的应用FUNCTION MODULE:F4IF_INT_TABLE_VALUE_REQUEST。
参照如下report就可以实现该功能:
DATA: BEGIN OF tlaufk OCCURS 1.
INCLUDE STRUCTURE ilaufk.
DATA: END OF tlaufk.
INCLUDE STRUCTURE ilaufk.
DATA: END OF tlaufk.
DATA: BEGIN OF ivalue_source OCCURS 0,
zterm LIKE ztest_f4-zterm,
END OF ivalue_source.
DATA: w_progname LIKE sy-repid,
w_scr_num LIKE sy-dynnr .
DATA: return_values LIKE ddshretval OCCURS 0 WITH HEADER LINE.
zterm LIKE ztest_f4-zterm,
END OF ivalue_source.
DATA: w_progname LIKE sy-repid,
w_scr_num LIKE sy-dynnr .
DATA: return_values LIKE ddshretval OCCURS 0 WITH HEADER LINE.
PARAMETERS: p_zterm LIKE reguh-laufi.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_zterm.
SELECT zterm FROM ztest_f4 INTO TABLE ivalue_source.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'ZTERM'
* PVALKEY = ' '
dynpprog = w_progname--->不能在这里直接使用SY-REPID OR SY-DYNNR.
dynpnr = w_scr_num
dynprofield = 'P_ZTERM'
value_org = 'S'------>一定要使用‘S’,如果使用‘C‘,则不会有值返回。
TABLES
value_tab = ivalue_source
return_tab = return_values.
INITIALIZATION.
w_progname = sy-repid.
w_scr_num = sy-dynnr.
w_progname = sy-repid.
w_scr_num = sy-dynnr.
START-OF-SELECTION.
write:/ p_zterm.
*******************************************
事件: INITIALIZATION.
是report开始run之前第一个事件。所以对screen上参数的初始化都可以放到该事件里面。