现在的位置: 首页 > 综合 > 正文

ABAP中的F4帮助怎么用? .

2013年03月12日 ⁄ 综合 ⁄ 共 6771字 ⁄ 字号 评论关闭

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

 

抱歉!评论已关闭.