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 选择屏幕

<!--StartFragment -->REPORTz_ljc_078LINE-SIZE200.


parameters:mama(18)typec.



INITIALIZATION.


ATSELECTION-SCREENonvalue-requestformama.

DATA:v_mamaLIKEhelp_info-dynprofld.
v_mama='MAMA'.
CALLFUNCTION'F4IF_FIELD_VALUE_REQUEST'
EXPORTING
tabname=''
fieldname=''
SEARCHHELP='ZFI_CRC_001'

DYNPPROG=SY-REPID
DYNPNR=SY-DYNNR
DYNPROFIELD=v_mama

.



start-OF-SELECTION.

writemama.

2 dynpro screen

流逻辑:

<!--StartFragment -->PROCESSBEFOREOUTPUT.
MODULEINIT.
PROCESSAFTERINPUT.


PROCESSONVALUE-REQUEST.
FIELDmatnrMODULEVALUE_matnr.

report :

<!--StartFragment -->MODULEinitOUTPUT.
progname=sy-repid.
dynnum=sy-dynnr.
ENDMODULE.

<!--StartFragment --> MODULEvalue_matnrINPUT.


CALLFUNCTION'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 挂接的搜素偶帮助。

CALLFUNCTION'F4IF_FIELD_VALUE_REQUEST'
EXPORTING
tabname='mara'
fieldname='matnr'
*SEARCHHELP=''

DYNPPROG=SY-REPID
DYNPNR=SY-DYNNR
DYNPROFIELD='MATNR'

二, 用内表生成f4帮助

<!--StartFragment -->

1 选择屏幕
TYPES:BEGINOFty_aenr,
aennrtypeaenr-aennr,
datuvtypeaenr-datuv,
aenamtypeaenr-aenam,
aegrutypeaenr-aegru,
ccarttypeaenr-ccart,
aetxttypeaenr-aetxt,
ENDOFty_aenr.

<!--StartFragment -->DATA:gt_aenrTYPETABLEOFty_aenr,
gs_aenrTYPEty_aenr.

<!--StartFragment -->
INITIALIZATION.

PERFORMfrm_read_aenr.

<!--StartFragment -->*获得图幅的f4帮助
ATSELECTION-SCREENONVALUE-REQUESTFORso_aennr-low.
PERFORMfrm_search_help_file.

<!--StartFragment -->FORMfrm_read_aenr.
DATAl_objnrTYPEjest-objnr.
DATAl_lineTYPEbsvx-sttxt."订单状态

SELECTa~aennra~datuva~aenama~aegrua~ccarta~aetxt
INTOTABLEgt_aenr
FROMaenrasa
innerjoinUSGRP_USERasc
ona~annam=c~bname
wherec~usergroup='CCCAR'.
loopatgt_aenrintogs_aenr.
CLEAR:l_objnr,l_line.
***组建更改编号对象号
CONCATENATE'CD'gs_aenr-aennrINTOl_objnr.
***获得系统状态,调用函数
CALLFUNCTION'STATUS_TEXT_EDIT'
EXPORTING
objnr=l_objnr
spras=sy-langu
IMPORTING
line=l_line
EXCEPTIONS
object_not_found=1
OTHERS=2.
***判断该更改单是否批准
IFsy-subrc=0.
SEARCHl_lineFOR'ECOR'.
IFsy-subrc<>0.
DELETEgt_aenr."没有下达的就删掉
ENDIF.
ENDIF.
endloop.
.
ENDFORM."frm_read_proj

<!--StartFragment -->FORMfrm_search_help_file.
DATA:v_aennrLIKEhelp_info-dynprofld.
v_aennr='SO_aennr'.

CALLFUNCTION'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.
*IFsy-subrc<>0.
*WRITE:'error'.
*ENDIF.

ENDFORM."frm_search_help_file

2 dynpro screen:

流逻辑:

<!--StartFragment -->PROCESSBEFOREOUTPUT.
MODULEINIT.
PROCESSAFTERINPUT.

PROCESSONVALUE-REQUEST.
FIELDaenamMODULEVALUE_aenam.

report:

<!--StartFragment -->TYPES:BEGINOFvalues,
aenamTYPEmara-aenam,
matnrTYPEmara-matnr,

ENDOFvalues.

DATA:matnr(18)TYPEc,
aenam(12)TYPEc.

DATA:prognameTYPEsy-repid,
dynnumTYPEsy-dynnr
.


CALLSCREEN100.

MODULEinitOUTPUT.
progname=sy-repid.
dynnum=sy-dynnr.
ENDMODULE.


MODULEvalue_aenamINPUT.


selectaenammatnrintotablevalues_tabfrommarawherematnrBETWEEN'000000000000001199'and'000000000000001250'.

CALLFUNCTION'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 中的例子。

在选择屏幕上就不给出例子了。实现的方法都差不多。甚至更简单。

流逻辑:

<!--StartFragment --><!--StartFragment --> PROCESSBEFOREOUTPUT.
*MODULESTATUS_0100.
*
MODULEINIT.
PROCESSAFTERINPUT.
*MODULEUSER_COMMAND_0100.
MODULECANCELATEXIT-COMMAND.

PROCESSONVALUE-REQUEST.
FIELDmatnrMODULEVALUE_matnr.
FIELDaenamMODULEVALUE_aenam.
report:

<!--StartFragment --><!--StartFragment --> *&

TYPES:BEGINOFvalues,
aenamTYPEmara-aenam,
matnrTYPEmara-matnr,

ENDOFvalues.

DATA:matnr(18)TYPEc,
aenam(12)TYPEc.

DATA:prognameTYPEsy-repid,
dynnumTYPEsy-dynnr,
dynpro_valuesTYPETABLEOFdynpread,
field_valueLIKELINEOFdynpro_values,
values_tabTYPETABLEOFvalues.


CALLSCREEN100.

MODULEinitOUTPUT.
progname=sy-repid.
dynnum=sy-dynnr.
CLEAR:field_value,dynpro_values.
field_value-fieldname='AENAM'.
APPENDfield_valueTOdynpro_values.
ENDMODULE.

MODULEcancelINPUT.
LEAVEPROGRAM.
ENDMODULE.

MODULEvalue_aenamINPUT.


selectaenammatnrintotablevalues_tabfrommarawherematnrBETWEEN'000000000000001199'and'000000000000001250'.

CALLFUNCTION'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield='AENAM'
dynpprog=progname
dynpnr=dynnum
dynprofield='AENAM'
value_org='S'
TABLES
value_tab=values_tab.



ENDMODULE.

MODULEvalue_matnrINPUT.

CALLFUNCTION'DYNP_VALUES_READ'
EXPORTING
dyname=progname
dynumb=dynnum
translate_to_upper='X'
TABLES
dynpfields=dynpro_values.

READTABLEdynpro_valuesINDEX1INTOfield_value.

SELECTAENAMMATNR
FROMMARA
INTOCORRESPONDINGFIELDSOFTABLEvalues_tab
WHEREAENAM=field_value-fieldvalue.

CALLFUNCTION'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没有关系,只是用来搜索数据,并不进行数据的检查!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值