zoukankan      html  css  js  c++  java
  • 搜索帮助归纳

    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

  • 相关阅读:
    [ERR] Node 10.211.55.8:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
    PAT A1137 Final Grading (25 分)——排序
    PAT A1136 A Delayed Palindrome (20 分)——回文,大整数
    PAT A1134 Vertex Cover (25 分)——图遍历
    PAT A1133 Splitting A Linked List (25 分)——链表
    PAT A1132 Cut Integer (20 分)——数学题
    PAT A1130 Infix Expression (25 分)——中序遍历
    PAT A1142 Maximal Clique (25 分)——图
    PAT A1141 PAT Ranking of Institutions (25 分)——排序,结构体初始化
    PAT A1140 Look-and-say Sequence (20 分)——数学题
  • 原文地址:https://www.cnblogs.com/springzt/p/4469080.html
Copyright © 2011-2022 走看看