• 搜索帮助归纳


    1、              选择屏中的搜索帮助

    2、              Alv 中的搜索帮助

    3、              Tabcontrol中的搜索帮助

    4、              自定义搜索帮助   

    1、选择屏中的搜索帮助  

    AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_lifnr-low.
      PERFORM frm_f4_xxx.

    AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_lifnr-high.
      PERFORM frm_f4_xxx.

    FORM frm_f4_lifnr .
      DATA: BEGIN OF lt_lifnr OCCURS 0,
              lifnr TYPE lfa1-lifnr,
              name1 TYPE lfa1-name1,
            END OF lt_lifnr.
      if r_lifnr[] is INITIAL.
        MESSAGE s000(zmm01) WITH '未发现值'.
        return.
      ENDIF.
       SELECT lifnr name1
         INTO TABLE lt_lifnr
         FROM lfa1.
       sort lt_lifnr.
     DELETE ADJACENT DUPLICATES FROM lt_lifnr COMPARING ALL FIELDS. delete lt_lifnr WHERE lifnr not in r_lifnr."过滤无权限查看lifnr
      CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
          retfield        = 'LIFNR'
          dynpprog        = sy-repid
          dynpnr          = sy-dynnr
          dynprofield     = 'S_LIFNR'
          value_org       = 'S'
        TABLES
          value_tab       = lt_LIFNR
        EXCEPTIONS
          parameter_error = 1
          no_values_found = 2
          OTHERS          = 3.
    ENDFORM.                    " FRM_F4_LIFNR

      
    *  *****取屏幕输入值****
      DATA: lt_dynpread TYPE STANDARD TABLE OF dynpread .
      DATA: lw_dynpread TYPE dynpread .


      lw_dynpread-fieldname 'P_UMWRK'.
      APPEND lw_dynpread TO lt_dynpread .

      CALL FUNCTION 'DYNP_VALUES_READ'
        EXPORTING
          dyname               = sy-repid
          dynumb               = sy-dynnr
        TABLES
          dynpfields           = lt_dynpread
        EXCEPTIONS
          invalid_abapworkarea 1
          invalid_dynprofield  2
          invalid_dynproname   3
          invalid_dynpronummer 4
          invalid_request      5
          no_fielddescription  6
          invalid_parameter    7
          undefind_error       8
          double_conversion    9
          stepl_not_found      10
          OTHERS               11.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.

     LOOP AT lt_dynpread INTO lw_dynpread .
      SELECT lgort lgobe
        INTO TABLE lt_umlgo
        FROM t001l WHERE werks = lW_dynpread-fieldvalue.
     ENDLOOP.

    2、ALV 内搜索帮助

    OO ALV

     SET HANDLER lc_evt_receiver->handle_lifnr_f4 FOR gc_grid_imp.

    "设置供应商f4帮助
        CLEAR lt_f4.
        lt_f4-fieldname = 'LIFNR'.
        lt_f4-register = 'X'.
        lt_f4-chngeafter = 'X'.
        APPEND lt_f4.
        CALL METHOD gc_grid_imp->register_f4_for_fields
          EXPORTING
            it_f4 = lt_f4[].

    CALL METHOD gc_grid_imp->set_table_for_first_display

    CLASS cl_evt_receiver DEFINITION.
           PUBLIC SECTION.
          "修改事件定义
            METHODS handle_lifnr_f4 FOR EVENT onf4 OF cl_gui_alv_grid
            IMPORTING e_fieldname e_fieldvalue es_row_no er_event_data et                  _bad_cells e_display.
     
           ENDCLASS."cl_evt_receiver DEFINITION

    METHOD handle_lifnr_f4.
        DATA: ls_modi TYPE lvc_s_modi.
        DATA: lt_retab TYPE TABLE OF ddshretval.
        DATA: ls_retab TYPE ddshretval.
        DATA: BEGIN OF ls_data,
                lifnr TYPE lfa1-lifnr,
                name1 TYPE lfa1-name1,
              END OF ls_data,
              lt_data LIKE TABLE OF ls_data.
        FIELD-SYMBOLS: <fs_mod> TYPE STANDARD TABLE.
        CHECK e_fieldname = 'LIFNR'.
        SELECT a~lifnr b~name1
          INTO TABLE lt_data
          FROM ztfc_mm024b AS a
          LEFT JOIN lfa1 AS b ON a~lifnr = b~lifnr
          WHERE brand = p_brand.

        CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
          EXPORTING
            retfield        = 'LIFNR'
            value_org       = 'S'
    *       dynpprog        = sy-repid
    *       dynpnr          = sy-dynnr
          TABLES
            value_tab       = lt_data
            return_tab      = lt_retab
          EXCEPTIONS
            parameter_error = 1
            no_values_found = 2
            OTHERS          = 3.
        READ TABLE lt_retab INDEX 1 INTO ls_retab.
        IF sy-subrc = 0.
          ls_modi-row_id = es_row_no-row_id.
          ls_modi-fieldname = e_fieldname.
          ls_modi-value = ls_retab-fieldval.
          ASSIGN er_event_data->m_data->* TO <fs_mod>.
          APPEND ls_modi TO <fs_mod>.
        ENDIF.
        er_event_data->m_event_handled = 'X'.
      ENDMETHOD.                    "handle_lifnr_f4

    3、tabcontrol中的搜索帮助

    *搜索帮助
       PROCESS ON VALUE-REQUEST.
       FIELD IT_DATA-MATNR_I  MODULE VALUE_MATNR_I.

    4、自定义搜索帮助

    VALUE CHECK 、 fixed Values 、 Value Table

    PARAMETERS p_1 TYPE zmy_dm_200 VALUE CHECK . " 注: SELECT-OPTIONS 没有此选项

    如果选择屏幕字段参考数据元素所对应的 Domaim 设置了 固定值 ( fixed Values )或 值表 ( Value Table )时,使用 VALUE CHECK 选项后,会验证输入值是否在固定值或值表( 若要使值表检查生效 ,则首先需要将此 Domain 引用到表字段,再对此表字段通过 按钮进行外键分配,并且外键一定是来自的值表的主键,最后使用 PARAMETERS 定义屏幕参数时要参照此表字段,否则如果只是直接参照所对应的 DataElement 是不起作用, 即 Value Table 一定要经过转换为 Check Table 后再起作用 )范围之内

    注: 如果要使用 VALUE CHECK 选项,则 Domain 的类型只能是 C 或者 N 类型 , 否则运行会抛异常。另外, 如果未使用该选项,但 F4 Help 还是会出现 (有固定值或检查表的情况下),但不进行有效性检查了

     

     检查表 Check Table --- Value Table

    也可以在 Domain 中指定一个值表( Value Table )作为字段取值范围的限制,但是与指定 固定值 的方式不同的是:为一个 Domain 简单地指定一个取值表不会导致用户的输入被自动校验,也不会自动出现 F4 Help 。 只有 通过表外键 按钮将该 Value Table 指定为主表之后,一个值表才能真正成为 Check Table 。所以要想成为真正有效的 Check Table ,必须要做两个操作:

    一是 要为字段对应的 Domain 设置 Value Table (即主表 ,其实这一步不是必须的,在通过 按钮指定主表时,可以不用指定为字段所参照的元素所对应 Domain 所设置的 Value Table ,而是指定其他的主表也是可以的—— 但最好不要这样做 , Value Check 时会出其他问题) ,二是 要为表字段通过 为它设置外键 。

       

     

    搜索帮助创建函数

    在屏幕的 ON VALUE-REQUEST 事件里可以通过下面几个函数来创建搜索帮助:

    F4IF_ FIELD _VALUE_REQUEST : 函数的作用是在运行时,可以 动态 的为某个屏幕字段 指定 Search Help ,这个被引用的 Help 来自某个表(或结构)字段上绑定的 Help

    F4IF_ INT_TABLE _VALUE_REQUEST : 在程序运行时, 将某个内表动态的用作 Search help 的数据来源 ,即使用该函数可以将某个内表转换为 Search help ,可实现联动效果

    TR_F4_HELP : 简单实现 Search Help ,数据来源于内表

     

    老式ALV添加OO事件

    REUSE_ALV_GRID_DISPLAY_LVC

    参考程序名 ZMME0010

      DATA: lt_events TYPE slis_t_event WITH HEADER LINE.
      CLEAR: lt_events,lt_events[].
      lt_events-name 'CALLER_EXIT'.
      lt_events-form 'FRM_SET_EVENT'.
      APPEND lt_events.

      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
        EXPORTING
          i_callback_program       = sy-repid       " report id
          i_callback_user_command  'USER_COMMAND'
          i_callback_pf_status_set 'PF'           " 'STANDARD_STATUS'
          is_layout_lvc            = wa_layout      " for layout
          it_fieldcat_lvc          = it_field       " field catalog
          i_save                   'X'
          it_events                = lt_events[]
        TABLES
          t_outtab                 = it_mard      " internal table
        EXCEPTIONS
          program_error            1
          OTHERS                   2.
      IF sy-subrc <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.

    FORM frm_set_event USING e_grid TYPE slis_data_caller_exit.
      DATA: lc_evt_receiver TYPE REF TO cl_evt_receiver.
      DATA: alv_grid  TYPE REF TO cl_gui_alv_grid.
      DATA: lt_f4 TYPE lvc_t_f4 WITH HEADER LINE.


      lt_f4-fieldname 'ZMASKID'.
      lt_f4-register 'X'.
      lt_f4-getbefore 'X'.
      lt_f4-chngeafter 'X'.
      APPEND lt_f4.

      CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
        IMPORTING
          e_grid = alv_grid.
      CREATE OBJECT lc_evt_receiver.
      CALL METHOD alv_grid->register_edit_event
        EXPORTING
          i_event_id = cl_gui_alv_grid=>mc_evt_modified.

      CALL METHOD alv_grid->register_f4_for_fields
        EXPORTING
          it_f4 = lt_f4[].

      SET HANDLER lc_evt_receiver->handle_data_changed  FOR alv_grid.
      SET HANDLER lc_evt_receiver->handle_data_changed_finished  FOR alv_grid.
      SET HANDLER lc_evt_receiver->handle_onf4 FOR alv_grid.
    ENDFORM.                    " FRM_SET_EVENT

    *&---------------------------------------------------------------------*
    *&  °üº¬                ZFC_MM002_D_CLASS
    *&---------------------------------------------------------------------*
    CLASS cl_evt_receiver DEFINITION.
      PUBLIC SECTION.
        METHODS handle_data_changed   FOR EVENT data_changed  OF cl_gui_alv_grid
          IMPORTING er_data_changed e_onf4 e_onf4_before e_ucomm.
        METHODS handle_data_changed_finished  FOR EVENT data_changed_finished OF cl_gui_alv_grid
          IMPORTING e_modified et_good_cells.
        METHODS handle_onf4  FOR EVENT onf4 OF cl_gui_alv_grid
          IMPORTING
              e_fieldname e_fieldvalue es_row_no er_event_data et_bad_cells e_display .
    ENDCLASS"cl_event_receiver DEFINITION

     

    *----------------------------------------------------------------------*
    *       CLASS cl_evt_receiver IMPLEMENTATION
    *----------------------------------------------------------------------*
    *
    *----------------------------------------------------------------------*
    CLASS cl_evt_receiver IMPLEMENTATION.
      METHOD handle_onf4.
        DATABEGIN OF ls_data,
                zmaskid TYPE  zmasktype-zmaskid,
                device  TYPE  zmasktype-device,
              END OF ls_data.
        DATA: lt_data LIKE TABLE OF ls_data.
        FIELD-SYMBOLS:<fs_data> TYPE ty_mard.
        DATA: lt_return TYPE STANDARD TABLE OF ddshretval.
        DATA: ls_return TYPE ddshretval.

        FIELD-SYMBOLS: <fs_modi> TYPE lvc_t_modi.
        DATA: ls_modi TYPE lvc_s_modi.


        CHECK e_fieldname 'ZMASKID'.

        READ TABLE it_mard INDEX es_row_no-row_id ASSIGNING <fs_data>.

        CHECK sy-subrc 0.

        SELECT zmaskid device
          INTO TABLE lt_data
          FROM zmasktype
          WHERE kunnr    = <fs_data>-zkunnr
            AND maktx    = <fs_data>-maktx
             .

        CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
          EXPORTING
            retfield         'ZMASKID'            "ltÄÚ±íÀïÃæµÄ×Ö¶Î
            dynpprog         = sy-repid
            dynpnr           = sy-dynnr
            dynprofield      'ZMASKID'            "»­ÃæÉÏ°ó¶¨×Ö¶Î
            value_org        'S'
            callback_program = sy-repid
          TABLES
            value_tab        = lt_data        "ÐèÒªÏÔʾ°ïÖúµÄÖµÄÚ±í
            return_tab       = lt_return          "·µ»ØÖµ
          EXCEPTIONS
            parameter_error  1
            no_values_found  2
            OTHERS           3.

        IF sy-subrc 0.
          READ TABLE lt_return INDEX INTO ls_return.
          IF sy-subrc 0.
            CLEAR ls_modi.
            ls_modi-row_id = es_row_no-row_id.
            ls_modi-fieldname = e_fieldname.
            ls_modi-value = ls_return-fieldval.

            ASSIGN er_event_data->m_data->* TO <fs_modi>.
            APPEND ls_modi TO <fs_modi>.
          ENDIF.
        ENDIF.

        er_event_data->m_event_handled 'X'."¸æÖªalvµ±Ç°f4ʼþÒÑ´¥·¢
      ENDMETHOD.                    "handle_onf4

      METHOD handle_data_changed .
        DATA: lv_modi TYPE lvc_s_modi.
        DATA: alv_grid  TYPE REF TO cl_gui_alv_grid.
        FIELD-SYMBOLS: <fs_data> TYPE ty_mard.
        CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
          IMPORTING
            e_grid = alv_grid.



        LOOP AT er_data_changed->mt_mod_cells INTO lv_modi.

          IF lv_modi-fieldname 'ZMASKID'.
            READ TABLE it_mard INDEX lv_modi-row_id ASSIGNING <fs_data>.

            SELECT SINGLE device
            INTO  <fs_data>-device
            FROM zmasktype
            WHERE kunnr    = <fs_data>-zkunnr
              AND maktx    = <fs_data>-maktx
              AND zmaskid  = <fs_data>-zmaskid
               .
          ENDIF.
    *
        ENDLOOP.

    *    CALL METHOD alv_grid->refresh_table_display
    *      EXPORTING
    *        is_stable = stbl.
      ENDMETHOD.

      METHOD handle_data_changed_finished.
        DATA: lx_mod_cells TYPE lvc_s_modi.
        DATA: lv_modi TYPE lvc_s_modi.  "»ñÈ¡¸ü¸Äºóµ¥Ôª¸ñµÄÊý¾Ý ¶ÔÊý¾Ý½øÐиü¸Ä
        DATA: lt_modi TYPE lvc_t_modi.
        FIELD-SYMBOLS: <fs_data> TYPE ty_mard.
        DATA: gv_msg  .
        DATA: alv_grid  TYPE REF TO cl_gui_alv_grid.
        lt_modi = et_good_cells.
        CHECK lt_modi IS NOT INITIAL.
        CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
          IMPORTING
            e_grid = alv_grid.

        SORT lt_modi BY row_id.

        LOOP AT lt_modi INTO lv_modi.
          AT NEW row_id.

            READ TABLE it_mard  ASSIGNING <fs_data> INDEX lv_modi-row_id.
          ENDAT.
          CASE lv_modi-fieldname.
            WHEN 'ZMASKID'.
              SELECT SINGLE device
               INTO  <fs_data>-device
                FROM zmasktype
                WHERE kunnr    = <fs_data>-zkunnr
                AND maktx    = <fs_data>-maktx
                AND zmaskid  = <fs_data>-zmaskid
               .

          ENDCASE.
          AT END OF row_id.

          ENDAT.
        ENDLOOP.

        CALL METHOD alv_grid->refresh_table_display
          EXPORTING
            is_stable = stbl.
      ENDMETHOD.                    "handle_data_changed_finished

    ENDCLASS"cl_evt_receiver IMPLEMENTATION

     

     部分参考 http://www.cnblogs.com/jiangzhengjun/p/4265212.html

  • 相关阅读:
    Wannafly挑战赛29-A/B
    hdu-4819-线段树套线段树
    CF-877E-线段树+哈希
    CF-413E-线段树
    CF-787D-线段树建图+最短路
    CF-339D-线段树
    2017.4.26 慕课网--Java 高并发秒杀API配置文件(持续更新)
    2017.4.26 慕课网--Java 高并发秒杀API(一)
    2017.4.19 慕课网-通过自动回复机器人学习mybatis
    2017.4.18 linux中执行某文件提示权限不够
  • 原文地址:https://www.cnblogs.com/springzt/p/4469080.html
Copyright © 2020-2023  润新知