您的位置:首页 > 其它

DIALOG开发中的ALV

2013-11-10 20:29 218 查看
第一步:alv需要的内表

 TYPES: BEGIN OF ty_alv,

                 vbeln TYPE vbeln,

                 posnr TYPE posnr,

                 matnr TYPE matnr,

                 kwmeng TYPE kwmeng,

                 meins  TYPE meins,

                 box    TYPE c,

             END OF ty_alv.

DATA:  it_alv TYPE STANDARD TABLE OF ty_alv,"定义内表

            wa_alv TYPE ty_alv.                                     "定义与内表结构相同的工作区

第二步:定义alv框架变量

DATA: i_fieldcat_alv TYPE STANDARD TABLE OF lvc_s_fcat, “定义内表存放alv field 的信息

           w_fieldcat_alv TYPE lvc_s_fcat.                                       "定义工作区

DATA: grid TYPE REF TO cl_gui_alv_grid,

           g_custom_container TYPE REF TO cl_gui_custom_container,

           g_container TYPE scrfname VALUE 'ABC'.

 

第三步:从数据库表中取出所需的数据放入内表 it_alv 

为了提高程序可读性,创建form get_data 

FORM get_data .

  SELECT

    vbeln

    posnr

    matnr

    kwmeng

    meins

    INTO TABLE it_alv FROM vbap WHERE vbeln IN s_vbeln.

ENDFORM.                    

第四步:创建alv架构,也就是给alv添加与内表相应的字段以及字段的描述

FORM fieldcat_build .

  w_fieldcat_alv-fieldname = 'VBELN'.  ”这里我们需要注意 w_fieldcat_alv-fieldname = 'VBELN'.必须是大写的,小写alv是不会显示数据的。

  w_fieldcat_alv-ref_table = 'VBAP'.

  w_fieldcat_alv-scrtext_s = 'Sale Order No'.

  APPEND w_fieldcat_alv TO i_fieldcat_alv.

  CLEAR w_fieldcat_alv.

  w_fieldcat_alv-fieldname = 'POSNR'.

  w_fieldcat_alv-ref_table = 'VBAP'.

  w_fieldcat_alv-scrtext_s = 'Item'.

  APPEND w_fieldcat_alv TO i_fieldcat_alv.

  CLEAR w_fieldcat_alv.

  w_fieldcat_alv-fieldname = 'MATNR'.

  w_fieldcat_alv-ref_table = 'VBAP'.

  w_fieldcat_alv-scrtext_s = 'Material'.

  APPEND w_fieldcat_alv TO i_fieldcat_alv.

  CLEAR w_fieldcat_alv.

  w_fieldcat_alv-fieldname = 'KWMENG'.

  w_fieldcat_alv-ref_table = 'VBAP'.

  w_fieldcat_alv-scrtext_s = 'Quantity'.

  w_fieldcat_alv-edit = 'X'.

  APPEND w_fieldcat_alv TO i_fieldcat_alv.

  CLEAR w_fieldcat_alv.

  w_fieldcat_alv-fieldname = 'MEINS'.

  w_fieldcat_alv-ref_table = 'VBAP'.

  w_fieldcat_alv-scrtext_s = 'Unit'.

  APPEND w_fieldcat_alv TO i_fieldcat_alv.

  CLEAR w_fieldcat_alv.

  w_fieldcat_alv-scrtext_s = 'CheckBox'.

  w_fieldcat_alv-checkbox = 'X'.

  w_fieldcat_alv-edit = 'X'.

  APPEND w_fieldcat_alv TO i_fieldcat_alv.

  CLEAR w_fieldcat_alv.

ENDFORM.   

第五步:调用form get_data  和 FORM fieldcat_build .(点击screen 9001里的某个按钮call screen 9002 并在9002中显示出alv)

MODULE user_command_9001 INPUT.

  save_code = ok_code.

  CLEAR ok_code.

  CASE save_code.
      WHEN 'GO'.

      PERFORM get_data.

      PERFORM fieldcat_build.

      CALL SCREEN 9002.
    WHEN OTHERS.

  ENDCASE.

ENDMODULE.                 

第六步:创建放alv的容器custom control

比如在screen 9002里创建custom control 在界面的左边找到custom control 拖过来。

NAME:ABC这里name 很重要,要和我们之前定义的grid
关联。

第七步:创建MODULE ALV_SHOW

MODULE ALV_SHOW 语句应该写在screen 9002 的flow logic 里面的 PBO 下面。

如下代码

PROCESS BEFORE OUTPUT.

 MODULE STATUS_9002.

   MODULE ALV_SHOW.

然后双击ALV_SHOW 在main program 中创建 MODULE alv_show OUTPUT.

MODULE alv_show OUTPUT.

  IF g_custom_container IS INITIAL.

    CREATE OBJECT g_custom_container

      EXPORTING

        container_name = g_container.

    CREATE OBJECT grid

      EXPORTING

        i_parent = g_custom_container.

    CALL METHOD grid->set_table_for_first_display

      CHANGING

        it_outtab       = it_alv

        it_fieldcatalog = i_fieldcat_alv.

  ELSE.

    CALL METHOD grid->refresh_table_display.

  ENDIF.

ENDMODULE. 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: