ABAP OO ALV實(shí)操

以前一直都是使用Function ALV實(shí)現(xiàn)報(bào)表需求,最近接到個(gè)需求,說是希望可以在手持設(shè)備上也能使用(具體怎么弄暫時(shí)不清楚)玄糟,我就思索把選擇界面和ALV放在一塊顯示,如下圖:

執(zhí)行&操作界面.png

自定義Screen 100,上面放置選擇條件的子屏幕控件袄秩,下面放置展示ALV的容器控件:

屏幕制作器界面.png

子屏幕選擇界面:

SELECTION-SCREEN BEGIN OF SCREEN 101 AS SUBSCREEN.
  SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE TEXT-001.
    SELECT-OPTIONS: s_equnr FOR eqbs-equnr,    "設(shè)備號
                    s_kdauf FOR eqbs-kdauf,    "銷售訂單
                    s_kdpos FOR eqbs-kdpos.    "銷售訂單行項(xiàng)
    PARAMETERS: p_pcode TYPE zpp01-pcode, "整機(jī)序列號
                p_lgort TYPE mard-lgort.  "接收庫位
  SELECTION-SCREEN END OF BLOCK bk1.
SELECTION-SCREEN END OF SCREEN 101.

Screen 100屏幕邏輯流:

PROCESS BEFORE OUTPUT.
  MODULE display_data.
  MODULE status_0100.
  CALL SUBSCREEN subscreen INCLUDING sy-repid '101'.

PROCESS AFTER INPUT.
  CALL SUBSCREEN subscreen.
  MODULE exit_command_0100 AT EXIT-COMMAND.
  MODULE user_command_0100.

Screen 100 PBO:

MODULE display_data OUTPUT.
  IF gr_container IS INITIAL.
    CREATE OBJECT gr_container
      EXPORTING
        container_name = 'ALV_CONTAINER'.
    CREATE OBJECT gr_grid
      EXPORTING
        i_parent = gr_container.
    "設(shè)置布局
    PERFORM frm_set_layout CHANGING gs_layout.
    "獲取字段目錄
    PERFORM frm_set_fieldcat CHANGING gt_fieldcat.
    "顯示ALV
    CALL METHOD gr_grid->set_table_for_first_display
      EXPORTING
        is_layout       = gs_layout
      CHANGING
        it_outtab       = gt_outtab
        it_fieldcatalog = gt_fieldcat.
    CREATE OBJECT gr_event_handler.
    SET HANDLER gr_event_handler->handle_data_changed FOR gr_grid.
    SET HANDLER gr_event_handler->handle_toolbar      FOR gr_grid.
    SET HANDLER gr_event_handler->handle_user_command FOR gr_grid.
    CALL METHOD gr_grid->set_toolbar_interactive.
  ELSE.
    DATA: ls_layout TYPE lvc_s_layo.
    CALL METHOD gr_grid->get_frontend_layout
      IMPORTING
        es_layout = ls_layout.
    ls_layout-cwidth_opt = 'X'.    "最優(yōu)寬
    CALL METHOD gr_grid->set_frontend_layout
      EXPORTING
        is_layout = ls_layout.
    CALL METHOD gr_grid->refresh_table_display.
  ENDIF.
ENDMODULE.

Screen 100 PAI:

MODULE user_command_0100 INPUT.
 save_ok = ok_code.
 CLEAR ok_code.
 CASE save_ok.
   WHEN '&EXEC'.
     PERFORM frm_get_data.
   WHEN OTHERS.
 ENDCASE.
ENDMODULE.

OO ALV工具欄按鈕功能響應(yīng)事件處理類:

CLASS lcl_event_handler DEFINITION.
  PUBLIC SECTION.
    METHODS:
      handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid
        IMPORTING er_data_changed,
      handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
        IMPORTING e_object,
      handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm.
ENDCLASS.

CLASS lcl_event_handler IMPLEMENTATION.
  METHOD handle_data_changed.
    PERFORM frm_handle_data_changed USING er_data_changed.
  ENDMETHOD.
  METHOD handle_toolbar.
    PERFORM frm_set_toolbar CHANGING e_object.
  ENDMETHOD.
  METHOD handle_user_command.
    PERFORM frm_user_command USING e_ucomm.
  ENDMETHOD.
ENDCLASS.
DATA gr_event_handler TYPE REF TO lcl_event_handler.

設(shè)置工具欄按鈕及響應(yīng)按鈕功能:

FORM frm_set_toolbar  CHANGING e_object TYPE REF TO cl_alv_event_toolbar_set.
  DATA ls_button TYPE stb_button.
  CLEAR e_object->mt_toolbar.
  CLEAR ls_button.
  ls_button-function  = '&ALL1'.
  ls_button-quickinfo = '全選'.
  ls_button-text      = '全選'.
  APPEND ls_button TO e_object->mt_toolbar.
  CLEAR ls_button.
  ls_button-function  = '&SAL1'.
  ls_button-quickinfo = '取消全選'.
  ls_button-text      = '取消全選'.
  APPEND ls_button TO e_object->mt_toolbar.
  CLEAR ls_button.
  ls_button-function  = '&POST'.
  ls_button-quickinfo = '移庫過賬'.
  ls_button-text      = '移庫過賬'.
  APPEND ls_button TO e_object->mt_toolbar.
ENDFORM.

FORM frm_user_command  USING    e_ucomm TYPE sy-ucomm.
  CASE e_ucomm.
    WHEN '&ALL1'.
      LOOP AT gt_outtab ASSIGNING FIELD-SYMBOL(<lfs_outtab>).
        <lfs_outtab>-check = 'X'.
      ENDLOOP.
    WHEN '&SAL1'.
      LOOP AT gt_outtab ASSIGNING <lfs_outtab>.
        <lfs_outtab>-check = ''.
      ENDLOOP.
    WHEN '&POST'.
      PERFORM frm_post.
    WHEN OTHERS.
  ENDCASE.
  DATA: ls_layout TYPE lvc_s_layo.
  CALL METHOD gr_grid->get_frontend_layout
    IMPORTING
      es_layout = ls_layout.
  ls_layout-cwidth_opt = 'X'.    "最優(yōu)寬
  CALL METHOD gr_grid->set_frontend_layout
    EXPORTING
      is_layout = ls_layout.
  CALL METHOD gr_grid->check_changed_data.
  CALL METHOD gr_grid->refresh_table_display.
ENDFORM.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末阵翎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子之剧,更是在濱河造成了極大的恐慌郭卫,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件背稼,死亡現(xiàn)場離奇詭異贰军,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蟹肘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門词疼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人帘腹,你說我怎么就攤上這事贰盗。” “怎么了阳欲?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵舵盈,是天一觀的道長。 經(jīng)常有香客問我胸完,道長书释,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任赊窥,我火速辦了婚禮爆惧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锨能。我一直安慰自己扯再,他們只是感情好芍耘,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著熄阻,像睡著了一般斋竞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上秃殉,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天坝初,我揣著相機(jī)與錄音,去河邊找鬼钾军。 笑死鳄袍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吏恭。 我是一名探鬼主播拗小,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼樱哼!你這毒婦竟也來了哀九?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤搅幅,失蹤者是張志新(化名)和其女友劉穎阅束,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盏筐,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡围俘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了琢融。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片界牡。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖漾抬,靈堂內(nèi)的尸體忽然破棺而出宿亡,到底是詐尸還是另有隱情,我是刑警寧澤纳令,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布挽荠,位于F島的核電站,受9級特大地震影響平绩,放射性物質(zhì)發(fā)生泄漏圈匆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一捏雌、第九天 我趴在偏房一處隱蔽的房頂上張望跃赚。 院中可真熱鬧,春花似錦、人聲如沸纬傲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叹括。三九已至算墨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間汁雷,已是汗流浹背净嘀。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留摔竿,地道東北人面粮。 一個(gè)月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像继低,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子稍走,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容