ABAP TIPS (1) -- F4检索功能的实现

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

posted @ 2010-03-10 18:11  飞扬跋扈  阅读(688)  评论(3编辑  收藏  举报