ABAP中的F4帮助怎么用

ABAP中的F4帮助怎么用? 
当我们在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. 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值