ABAP TIPS (1) -- F4检索功能的实现
为了规范画面输入数据,有的时候需要对自建画面输入项目(不能参照系统项目)附加自检索帮助功能(系统的F4功能)。
此功能的实现,大体上分两部分。第一,可选画面的调用,按下F4后可弹出约定可输入项目的列表;第二,用户选定的值能够返回到输入项目中。
另外,我提供的这个程序事例可自己添加选可选数据,而不仅仅局限于R/3系统内已创建的表数据作为数据源,先前在网上寻找能自定义的此类功能,几乎没有,所以我把我后来研究出的这个放到这里,以飨大家:)下面是该功能事例代码,请大家参考,欢迎讨论。
************************************************************************ * プログラム : ZZF4HELP
* 名称 : 入力項目選択ヘルプ用サンプル
* 機能概要 : 独自検索ヘルプ.
* 作成者 : KONGXIANGSHUAI
* 作成日 : 2005/09/30
*----------------------------------------------------------------------*
REPORT ZZF4HELP.
* 入力項目選択ヘルプ用
TYPES: BEGIN OF TY_VALUES,
VALUE TYPE SETHEADERT-SETNAME,
DESCRIPT TYPE SETHEADERT-DESCRIPT,
END OF TY_VALUES.
CONSTANTS:
CNS_TITLE(8) TYPE C VALUE 'ソート区分'. "入力項目選択ヘルプ用タイトル
DATA:
IT_VALUES TYPE TABLE OF TY_VALUES,
TW_VALUES LIKE LINE OF IT_VALUES.
DATA:
IT_DYNPFIELDS TYPE TABLE OF DYNPREAD,
TW_DYNPFIELDS LIKE LINE OF IT_DYNPFIELDS.
*----------------------------------------------------------------------*
* パラメータ定義
*----------------------------------------------------------------------*
* 出力区分定義
PARAMETERS:PA_OUTYP(1) TYPE C OBLIGATORY.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN
*----------------------------------------------------------------------*
* 入力項目選択ヘルプ用
AT SELECTION-SCREEN ON VALUE-REQUEST FOR PA_OUTYP.
PERFORM FRM_F4_HELP_OUTYP.
AT SELECTION-SCREEN.
* 出力区分のチェック
IF NOT ( PA_OUTYP = '1' OR PA_OUTYP = '2' OR PA_OUTYP = '3' ).
SET CURSOR FIELD 'PA_OUTYP'.
MESSAGE E001(ZFI0) WITH TEXT-M06 PA_OUTYP.
ENDIF.
*----------------------------------------------------------------------*
* START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
WRITE: '出力区分:',
PA_OUTYP.
*&---------------------------------------------------------------------*
*& Form FRM_F4_HELP_OUTYP
*&---------------------------------------------------------------------*
* 出力区分項目の入力選択ヘルプ
*----------------------------------------------------------------------*
FORM FRM_F4_HELP_OUTYP.
CLEAR: TW_VALUES.
REFRESH: IT_VALUES.
TW_VALUES-VALUE = '1'.
TW_VALUES-DESCRIPT = '社員番号'.
APPEND TW_VALUES TO IT_VALUES.
TW_VALUES-VALUE = '2'.
TW_VALUES-DESCRIPT = '部門番号'.
APPEND TW_VALUES TO IT_VALUES.
TW_VALUES-VALUE = '3'.
TW_VALUES-DESCRIPT = '年齢'.
APPEND TW_VALUES TO IT_VALUES.
PERFORM FRM_F4_HELP USING 'PA_OUTYP'
CNS_TITLE.
ENDFORM. " FRM_F4_HELP_OUTYP
*&---------------------------------------------------------------------*
*& Form FRM_F4_HELP
*&---------------------------------------------------------------------*
* 項目の入力選択ヘルプ
*----------------------------------------------------------------------*
* --> P_PARAM 項目名
* --> P_TITLE タイトル
*----------------------------------------------------------------------*
FORM FRM_F4_HELP USING P_PARAM
P_TITLE.
DATA: LIT_DDSHRETVAL TYPE STANDARD TABLE OF DDSHRETVAL,
LTW_DDSHRETVAL LIKE LINE OF LIT_DDSHRETVAL.
SORT IT_VALUES BY VALUE.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'VALUE'
DYNPPROG = SY-CPROG
DYNPNR = SY-DYNNR
WINDOW_TITLE = P_TITLE
VALUE_ORG = 'S'
TABLES
VALUE_TAB = IT_VALUES
RETURN_TAB = LIT_DDSHRETVAL
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE E005(ZCA0) WITH TEXT-M01. "'値がありません。'
ENDIF.
CLEAR: TW_DYNPFIELDS.
REFRESH: IT_DYNPFIELDS.
READ TABLE LIT_DDSHRETVAL INTO LTW_DDSHRETVAL INDEX 1.
CASE SY-DYNNR.
WHEN '1000'.
TW_DYNPFIELDS-FIELDNAME = P_PARAM.
ENDCASE.
TW_DYNPFIELDS-FIELDVALUE = LTW_DDSHRETVAL-FIELDVAL.
APPEND TW_DYNPFIELDS TO IT_DYNPFIELDS.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
DYNAME = SY-CPROG
DYNUMB = SY-DYNNR
TABLES
DYNPFIELDS = IT_DYNPFIELDS
EXCEPTIONS
OTHERS = 1.
ENDFORM. " FRM_F4_HELP
|