当我们在sap的界面上,焦点放到一个字段上的时候,按F4,会出现选择或者搜索的界面,这就是abap中的f4帮助。
有多种实现f4帮助的方法,现在就把我指导的一点点说出来:
1, 固定值。 我们在Domain 中可以定义 value range ,在 value range 中定义的值,就可以出现在f4帮助中。这是最简单的实现f4帮助的方法。
2,数据类型关联。 加入我们在选择屏幕上定义一个 dats 类型的 参数,她就自动调用了日期类型的f4帮助。
3, se11 创建 f4帮助。
(
将se11创建的搜索帮助挂到表上的时候,又可以分为以下三种类型:
用检查表实现输入帮助
字段的外部搜索帮助附件
数据元素的明确搜索帮助附件
她们之间有啥区别,我也不知道。等我知道了再补充。
)
用 se11 创建 的 f4 帮助 可以分为两类:
基本搜索帮助
集中搜索帮助
基本搜索帮助是搜索帮助的最小单元,集中搜索帮助还可以包括集中搜索帮助,也可以包括基本搜索帮助。
在基本搜索帮助中 可以定义 数据来源,但是集中搜索帮助不可以定义数据来源 。
无论是基本搜素偶帮助还是集中搜索帮助 都包含输出输出字段定义,并可以定义搜索帮助exit,用于调用一个远程的 function module 来对数据进行 过滤和处理。
如果将这些搜索帮助与表挂上之后,我们在使用的时候就会自动出现该搜索帮助。
在 synpro 程序中。也可以通过属性(属性名叫 搜索帮助)为字段 重新指定自定义的搜索帮助
也可以在 选择屏幕或者 screen 中重新指定搜索帮助,下面举几个例子来说明使用的方法
一, 根据搜索帮助的名字 来指定搜索帮助
1 选择屏幕
REPORT z_ljc_078 LINE-SIZE 200.
parameters: mama(18) type c.
INITIALIZATION.
AT SELECTION-SCREEN on value-request for mama.
DATA:v_mama LIKE help_info-dynprofld.
v_mama = 'MAMA'.
CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
EXPORTING
tabname = ''
fieldname = ''
SEARCHHELP = 'ZFI_CRC_001'
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = v_mama
.
start-OF-SELECTION.
write mama.
2 dynpro screen
流逻辑:
PROCESS BEFORE OUTPUT.
MODULE INIT.
PROCESS AFTER INPUT.
PROCESS ON VALUE-REQUEST.
FIELD matnr MODULE VALUE_matnr.
report :
MODULE init OUTPUT.
progname = sy-repid.
dynnum = sy-dynnr.
ENDMODULE.
MODULE value_matnr INPUT.
CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
EXPORTING
tabname = ''
fieldname = ''
SEARCHHELP = 'MAT1'
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = 'MATNR'
ENDMODULE.
无论是在选择屏幕或者是dynpro中,如果指定了searchhelp 属性,则 tabname 和 fieldname 属性就不起作用了。
当不指定 searchhelp 属性,而制定 了 tabname 和 fieldname 属性,则会调用 tabname-fieldname 挂接的搜素偶帮助。
CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
EXPORTING
tabname = 'mara'
fieldname = 'matnr'
* SEARCHHELP = ''
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = 'MATNR'
二, 用内表生成f4帮助
1 选择屏幕
TYPES: BEGIN OF ty_aenr,
aennr type aenr-aennr,
datuv type aenr-datuv,
aenam type aenr-aenam,
aegru type aenr-aegru,
ccart type aenr-ccart,
aetxt type aenr-aetxt,
END OF ty_aenr.
DATA: gt_aenr TYPE TABLE OF ty_aenr,
gs_aenr TYPE ty_aenr.
INITIALIZATION.
PERFORM frm_read_aenr.
*获得图幅的f4帮助
AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_aennr-low.
PERFORM frm_search_help_file.
FORM frm_read_aenr .
DATA l_objnr TYPE jest-objnr.
DATA l_line TYPE bsvx-sttxt. "订单状态
SELECT a~aennr a~datuv a~aenam a~aegru a~ccart a~aetxt
INTO TABLE gt_aenr
FROM aenr as a
inner join USGRP_USER as c
on a~annam = c~bname
where c~usergroup = 'CCCAR'.
loop at gt_aenr into gs_aenr.
CLEAR:l_objnr,l_line.
***组建更改编号对象号
CONCATENATE 'CD' gs_aenr-aennr INTO l_objnr.
***获得系统状态,调用函数
CALL FUNCTION 'STATUS_TEXT_EDIT'
EXPORTING
objnr = l_objnr
spras = sy-langu
IMPORTING
line = l_line
EXCEPTIONS
object_not_found = 1
OTHERS = 2.
***判断该更改单是否批准
IF sy-subrc = 0.
SEARCH l_line FOR 'ECOR'.
IF sy-subrc <> 0.
DELETE gt_aenr. "没有下达的就删掉
ENDIF.
ENDIF.
endloop.
.
ENDFORM. " frm_read_proj
FORM frm_search_help_file .
DATA:v_aennr LIKE help_info-dynprofld.
v_aennr = 'SO_aennr'.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'AENNR'
value_org = 'S'
dynprofield = v_aennr
dynpprog = sy-repid
dynpnr = sy-dynnr
TABLES
value_tab = gt_aenr
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
* IF sy-subrc <> 0.
* WRITE: 'error'.
* ENDIF.
ENDFORM. " frm_search_help_file
2 dynpro screen:
流逻辑:
PROCESS BEFORE OUTPUT.
MODULE INIT.
PROCESS AFTER INPUT.
PROCESS ON VALUE-REQUEST.
FIELD aenam MODULE VALUE_aenam.
report:
TYPES: BEGIN OF values,
aenam TYPE mara-aenam,
matnr TYPE mara-matnr,
END OF values.
DATA: matnr(18) TYPE c,
aenam(12) TYPE c.
DATA: progname TYPE sy-repid,
dynnum TYPE sy-dynnr
.
CALL SCREEN 100.
MODULE init OUTPUT.
progname = sy-repid.
dynnum = sy-dynnr.
ENDMODULE.
MODULE value_aenam INPUT.
select aenam matnr into table values_tab from mara where matnr BETWEEN '000000000000001199' and '000000000000001250'.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'AENAM'
dynpprog = progname
dynpnr = dynnum
dynprofield = 'AENAM'
value_org = 'S'
TABLES
value_tab = values_tab.
ENDMODULE.
当然,也可以 根据一个 字段的选择 过滤另一个字段的f4帮助的 数据。下面给出一个在 dynpro screen 中的例子。
在选择屏幕上就不给出例子了。实现的方法都差不多。甚至更简单。
流逻辑:
PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
*
MODULE INIT.
PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0100.
MODULE CANCEL AT EXIT-COMMAND.
PROCESS ON VALUE-REQUEST.
FIELD matnr MODULE VALUE_matnr.
FIELD aenam MODULE VALUE_aenam. report:
*&
TYPES: BEGIN OF values,
aenam TYPE mara-aenam,
matnr TYPE mara-matnr,
END OF values.
DATA: matnr(18) TYPE c,
aenam(12) TYPE c.
DATA: progname TYPE sy-repid,
dynnum TYPE sy-dynnr,
dynpro_values TYPE TABLE OF dynpread,
field_value LIKE LINE OF dynpro_values,
values_tab TYPE TABLE OF values.
CALL SCREEN 100.
MODULE init OUTPUT.
progname = sy-repid.
dynnum = sy-dynnr.
CLEAR: field_value, dynpro_values.
field_value-fieldname = 'AENAM'.
APPEND field_value TO dynpro_values.
ENDMODULE.
MODULE cancel INPUT.
LEAVE PROGRAM.
ENDMODULE.
MODULE value_aenam INPUT.
select aenam matnr into table values_tab from mara where matnr BETWEEN '000000000000001199' and '000000000000001250'.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'AENAM'
dynpprog = progname
dynpnr = dynnum
dynprofield = 'AENAM'
value_org = 'S'
TABLES
value_tab = values_tab.
ENDMODULE.
MODULE value_matnr INPUT.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = progname
dynumb = dynnum
translate_to_upper = 'X'
TABLES
dynpfields = dynpro_values.
READ TABLE dynpro_values INDEX 1 INTO field_value.
SELECT AENAM MATNR
FROM MARA
INTO CORRESPONDING FIELDS OF TABLE values_tab
WHERE AENAM = field_value-fieldvalue.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'AENAM'
dynpprog = progname
dynpnr = dynnum
dynprofield = 'MATNR'
value_org = 'S'
TABLES
value_tab = values_tab.
ENDMODULE.
好了,关于f4帮助,目前就知道这么一点点。就讲这么多吧。
f4帮助与check没有关系,只是用来搜索数据,并不进行数据的检查!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/precipitant/archive/2009/01/17/3796484.aspx