1. 程式人生 > >ALV通過F4事件,實現自定義搜尋幫助F4

ALV通過F4事件,實現自定義搜尋幫助F4

ALV通過參考可以直接獲取表中搜索幫助,但是表中欄位沒有搜尋幫助或者不合要求就需要通過F4事件完成了。

1、定義OOALV類
CLASS lcl_event_receiver DEFINITION DEFERRED.

DATA:gt_fieldcat   TYPE lvc_t_fcat,
     gs_fieldcat   TYPE lvc_s_fcat,
     go_grid       TYPE REF TO cl_gui_alv_grid,
     go_event_receiver    TYPE REF TO lcl_event_receiver.

*----------------------------------------------------------------------*
*       CLASS lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS:
      handle_f4_help  FOR EVENT onf4 OF cl_gui_alv_grid
                         IMPORTING  e_fieldname
                                    es_row_no
                                    er_event_data
                                    et_bad_cells
                                    e_display.

ENDCLASS.                    "lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*       CLASS lcl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD handle_f4_help.
    FIELD-SYMBOLS:<fs_alv> TYPE gs_alv.
    CASE e_fieldname.
      WHEN 'ARKTX'.
        READ TABLE git_alv ASSIGNING <fs_alv> INDEX es_row_no-row_id.
        IF sy-subrc = 0.
          PERFORM frm_get_arktx_f4 CHANGING <fs_alv>-arktx.
        ENDIF.
*      WHEN .
      WHEN OTHERS.
    ENDCASE.
    CALL METHOD go_grid->refresh_table_display.
  ENDMETHOD.

ENDCLASS.               "lcl_event_receiver
2、定義alv-fieldcat屬性
gs_fieldcat-f4availabl = 'X'.
gs_fieldcat-edit = 'X'.

3、將F4事件註冊到ALV物件中
DATA:lt_f4             TYPE lvc_t_f4,
     ls_f4             TYPE lvc_s_f4.

CALL METHOD go_grid->set_table_for_first_display
  EXPORTING
    it_toolbar_excluding = lt_exclude
  CHANGING
    it_fieldcatalog      = git_fieldcat
    it_outtab            = git_alv[].


CLEAR:ls_f4.
ls_f4-fieldname  = 'ARKTX'.
ls_f4-register   = 'X'.
ls_f4-getbefore  = 'X'.
ls_f4-chngeafter = ''.
ls_f4-internal   = ''.
INSERT ls_f4 INTO TABLE lt_f4.

CALL METHOD go_grid->register_f4_for_fields
  EXPORTING
    it_f4 = lt_f4.

CREATE OBJECT go_event_receiver.
SET HANDLER go_event_receiver->handle_f4_help FOR go_grid .

4、自定義F4,獲取資料
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_ARKTX_F4
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_<FS_ALV>_ARKTX  text
*----------------------------------------------------------------------*
FORM frm_get_arktx_f4  USING    pc_matnr TYPE vbrp-matnr
                       CHANGING pc_arktx TYPE zfit005-maktx.
  DATA:BEGIN OF lt_zfit029 OCCURS 0,
        sub_type_m TYPE zfit029-sub_type_m,
        sub_name_m TYPE zfit029-sub_name_m,
      END OF lt_zfit029.
  DATA:lt_ret_tab TYPE TABLE OF ddshretval WITH HEADER LINE.
  DATA:lv_matnr TYPE zfit028-matnr.

  lv_matnr = pc_matnr.

  SELECT sub_type_m
         sub_name_m
  INTO TABLE lt_zfit029
  FROM zfit028
  INNER JOIN zfit029 ON zfit028~type_m = zfit029~type_m
  WHERE zfit028~matnr = lv_matnr.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'SUB_NAME_M'
      value_org       = 'S'
    TABLES
      value_tab       = lt_zfit029
      return_tab      = lt_ret_tab
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
  IF sy-subrc = 0.
    READ TABLE lt_ret_tab INDEX 1.
    IF sy-subrc = 0  AND lt_ret_tab-fieldval IS NOT INITIAL.
      pc_arktx = lt_ret_tab-fieldval.
    ENDIF.
  ENDIF.

ENDFORM.                    " FRM_GET_ARKTX_F4

5、效果


相關推薦

ALV通過F4事件實現定義搜尋幫助F4

ALV通過參考可以直接獲取表中搜索幫助,但是表中欄位沒有搜尋幫助或者不合要求就需要通過F4事件完成了。 1、定義OOALV類CLASS lcl_event_receiver DEFINITION D

通過c# 實現定義屬性改變觸發定義事件 理解定義事件及其觸發過程

以下說明可解釋自定義的事件的自定義觸發過程: 直接上程式碼,內含說明(介面是兩個文字框textbox1,textbox2,和一個button1,介面的Load事件,button的click事件) Form1 類(呼叫者端) using System; using

動態加載jar實現定義業務

讀取 bool AR sta instance snapshot pub 加載 set 在實際業務中,我們經常會遇到需要按不同用戶實現不同業務邏輯,如果按照最簡單粗暴的做法,當然是使用if else ...來實現。 不過作為一個社會人,這樣怎麽能體現出我們的戰鬥力呢,下面

呼叫微信JSSDK介面實現定義分享功能

1,你需有一個公眾號,沒有不用談自定義分享內容了; 2,公眾號上把你的域名增加到“JS介面安全域名”: 3,我這功能是基於thinkphp3.1實現的,按下圖上網下包放在對應該目錄下: 4,修改核心公共檔案:functions.php 加入程式碼: /*

二分查詢實現定義lower_bound函式、upper_bound函式

lower_bound函式 #include<iostream> #include<algorithm> using namespace std; const int M=1e5; int my_lower_bound(int *a,int n,int x){ int

使用代理模式擴充套件logback實現定義的日誌記錄功能

1:jdk動態代理:代理類和目標類實現相同的介面。 cglib代理:代理類是目標類的子類(因此cglib要代理的類不可以是final類,要代理的方法不可以是final方法)。 2:cglib代理本質上是通過動態的生成一個子類,去覆蓋所要代理類中不是final的方法,並設定好callbac

通過nsis和duilib實現定義安裝介面

nsis用於實現安裝邏輯,duilib用於實現UI介面 通過nsis呼叫duilib生成的dll庫來實現。現擷取部分duilib程式碼用於展示如何使用duilib編寫程式碼。 cpp檔案如下: #include <windows.h> #i

擴充套件Activiti流程定義檔案實現定義節點屬性

為了滿足業務需要,流程設計階段需對設計產物流程定義檔案中節點屬性進行擴充套件,譬如:任務是否支援退回、退回方式、退回的節點,任務轉派人、任務可跳轉的節點範圍等屬性資訊。為了保證擴充套件後的流程定義檔案能夠正常解析,我們採用類似<activiti:formProperty>元素的方式,模式如下:

Android ListView三級聯動實現定義地址選擇器

說到地址選擇器,好多小夥伴第一印象就是——wheelView~這玩意確實挺好用的^(* ̄(oo) ̄)^! 然而悲劇的故事發生了,傲嬌的老闆不喜歡wheelView那種選中條不動的效果 ~(⊙o⊙)! 好吧,其實是老闆不知道從哪個忘記名字的App看到這種效果,

Android定位&地圖&導航——基於百度地圖實現定義圖示繪製並點選時彈出泡泡

public class MainActivity extends Activity { private EditText txtAddr; // 定位相關 LocationClient mLocClient; LocationData locData = nul

js遮蔽滑鼠右鍵預設事件實現定義選單

2017-12-18日,2017年即將結束的日子裡。 公司做了一個專案,主要難點在於實現公司組織架構圖上,何謂組織架構圖,如下便是: 這裡的每個節點都有相應的右鍵選單,說白了就跟你用xmind的體

【SDN專欄】Mininet下編寫python實現定義的網路topo結構

Mininet虛擬機器是基於Linux系統的,所以編寫步驟與之無異 這裡插一句,mininet中有自帶的一些例子,在新建python時可以使用 cp 命令 1,開啟MIninet,輸入:即可看見例子 cd mininet/mininet/examplesls -a 2,使

10.Jmeter-二次開發實現定義函式外掛

1.前提:有時候,Jmeter自帶的函式,可能不能滿足於業務的需求,這時候,我們可以自己寫一個函式外掛;2.建立maven工程一直next,輸入GroupID,ArtifactId->finsh3.編輯pom.xml建立好maven工程後,引入Jmeter的jar包,注

窗體背景的繪制(Windows窗體每次都會重繪其窗體背景所以我們可以通過攔截窗體重繪背景的消息(WM_ERASEBKGND)定義方法來實現重繪窗體背景)

height com call 消息響應 int idt http msg mes 核心思想:由於Windows窗體每次都會重繪其窗體背景,所以我們可以通過攔截窗體重繪背景的消息(WM_ERASEBKGND),並自定義方法來實現重繪窗體背景。通過TImage組件也可以實現,

8.0通知欄新增通知渠道定義通知 響應點選事件

今天寫了下demo 發現通知在8.0後有些改變記錄下這個坑!!!! 通知的程式碼大家在網上一搜一大把,我也不廢話 直接上重點。 點擊發送通知,沒有通知顯示,程式碼如下。 日誌資訊 明明走了這行程式碼卻什麼也沒發生,what? 難道寫錯了?,後來查看了資料下才知道是8

如何通過本地化事件正確實現微服務內部強一致性事件匯流排跨微服務間最終一致性

目錄 設計重點 流程圖 虛擬碼 2.1. PublishEvent 2.2. SubscribeEvent 2.3. Publisher 2.4. Subscriber 微服務 強一致性 3.1 Publisher 3.2 Subscriber 事件匯流排 - 跨服務 最終一致性 4.

利用原生js實現定義滾動條(可點選到達拖動到達)

1.HTML檔案 div1是滾動條,div2是滾動小球,div3是文字區域容器,div4是文字區域。 <div id="div"> <div id="div1"> <div id="div2"> </div> </div&

[Xcode10 實際操作]七、檔案與資料-(6 )通過通知中心實現監聽和處理程式退出事件的功能

本文將演示通過通知中心,實現監聽和處理程式退出事件的功能。在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】 1 import UIKit 2 3 class ViewController: UIViewController { 4 5

[Xcode10 實際操作]七、文件與數據-(6 )通過通知中心實現監聽和處理程序退出事件的功能

英雄 idl ide active xcod end 控制 .sh Once 本文將演示通過通知中心,實現監聽和處理程序退出事件的功能。在項目導航區,打開視圖控制器的代碼文件【ViewController.swift】 1 import UIKit 2 3

接入微信公眾平臺開發之用戶關註(取消)事件觸發後臺定義消息體通知給用戶的實現過程

margin 返回 autowire utf-8 href 元素 觸發 tst hid 1.需求:用戶關註公眾號後回復給用戶一個字符串,字符串不能重復使用即如果a用戶關註公眾號後商戶後臺回復給用戶字符串str1後,b用戶關註就是其他字符串,且a用戶取消關註再次關註不回復消息