AVL界面根据点击行生成对应的二维码

效果如下:image.png

image.png


注意事项:通过屏幕点击事件的类不能直接获取屏幕数据,仅仅能获取行列信息,需要根据行列数据从内表中获取对应数据。

创建屏幕控件。一个放表一个放二维码。

image.png

image.pngimage.png

屏幕逻辑代码


PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
MODULE INIT_CON.

PROCESS AFTER INPUT.
MODULE USER_EXIT_0100 AT EXIT-COMMAND.

功能代码

REPORT zr_test_502.

DATA: gs_data TYPE zppcu.

DATA: gt_data LIKE TABLE OF gs_data.

DATA: g_con01 TYPE REF TO cl_gui_custom_container.

DATA: g_grid01 TYPE REF TO cl_gui_alv_grid.

DATA: gs_fieldcat TYPE lvc_s_fcat.
DATA: gt_fieldcat TYPE lvc_t_fcat.

CONSTANTS: g_cus01 TYPE scrfname VALUE 'CUS01'.

DATA: lcl_obj    TYPE REF TO cl_gui_html_viewer,
      lcl_parent TYPE REF TO cl_gui_custom_container.
DATA url(255) TYPE c.

*----------------------------------------------------------------------*
* CLASS cl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cl_event_receiver DEFINITION.
  PUBLIC SECTION.
    " 声明单击事件的方法
    METHODS handle_hotspot_click
                  FOR EVENT hotspot_click OF cl_gui_alv_grid
      IMPORTING e_row_id e_column_id.
    " 声明双击事件方法
    METHODS handle_double_click
                  FOR EVENT double_click OF cl_gui_alv_grid
      IMPORTING e_row e_column.
    " 声明Toolbar事件方法
    METHODS handle_toolbar
                  FOR EVENT toolbar OF cl_gui_alv_grid
      IMPORTING e_object e_interactive.
    " 声明USER-COMMAND 事件方法
    METHODS handle_command
                  FOR EVENT user_command OF cl_gui_alv_grid
      IMPORTING e_ucomm.
ENDCLASS. "cl_event_receiver DEFINITION

*----------------------------------------------------------------------*
* CLASS cl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cl_event_receiver IMPLEMENTATION.
  " 单击事件方法的实现
  METHOD handle_hotspot_click.
    CONDENSE e_row_id NO-GAPS.
    CONDENSE e_column_id NO-GAPS.
*    MODIFY SCREEN 100.
*    MESSAGE i001(00) WITH '单击事件->行号:' e_row_id '、列名:' e_column_id.
    FIELD-SYMBOLS: <fs> TYPE zppcu.
    READ TABLE gt_data ASSIGNING <fs> INDEX e_row_id.

    CONCATENATE 'https://www.kuaizhan.com/common/encode-png?large=true&data=' <FS>-VBELN INTO url.

    CALL METHOD lcl_obj->show_url
      EXPORTING
        url                    = url
*       FRAME                  =
*       IN_PLACE               = ' X'
      EXCEPTIONS
        cntl_error             = 1
        cnht_error_not_allowed = 2
        cnht_error_parameter   = 3
        dp_error_general       = 4
        OTHERS                 = 5.
    IF sy-subrc = 0.
* Implement suitable error handling here

    ENDIF.

  ENDMETHOD. "handle_HOTSPOT_CLICK
  " 双击事件方法的实现
  METHOD handle_double_click.
    CONDENSE e_row NO-GAPS.
    CONDENSE e_column NO-GAPS.
    MESSAGE i001(00) WITH '双击事件->行号:' e_row '、列名:' e_column.
  ENDMETHOD. "handle_double_click
  " 实现Toolbar事件方法
  METHOD handle_toolbar.
    DATA: ls_toolbar TYPE stb_button.
    CLEAR: ls_toolbar.
    ls_toolbar-butn_type = 3. " 分隔符
    APPEND ls_toolbar TO e_object->mt_toolbar.
    CLEAR: ls_toolbar.
    ls_toolbar-function = 'DISP'. " 功能码
    ls_toolbar-icon = icon_display. " 图标名称
    ls_toolbar-quickinfo = '退出'. " 图标的提示信息
    ls_toolbar-butn_type = 0. " 0表示正常按钮
    ls_toolbar-disabled = ''. " X表示灰色,不可用
    ls_toolbar-text = '退出'. " 按钮上显示的文本
    APPEND ls_toolbar TO e_object->mt_toolbar.
  ENDMETHOD. "handle_toolbar
  " 实现USER-COMMAND 事件方法
  METHOD handle_command.
    CASE e_ucomm.
      WHEN 'DISP'.
*        MESSAGE i001(00) WITH 'Toolbar事件 + USER-COMMAND事件 '.
        LEAVE PROGRAM.
    ENDCASE.
  ENDMETHOD. "HANDLE_COMMAND

ENDCLASS. "cl_event_receiver IMPLEMENTATION
DATA: event_receiver TYPE REF TO cl_event_receiver.

START-OF-SELECTION.
  PERFORM get_data.


END-OF-SELECTION.

  IF lcl_parent IS  INITIAL.
    CREATE OBJECT lcl_parent
      EXPORTING
*       PARENT                      =
        container_name              = 'BQCONTAINER'
*       STYLE                       =
*       LIFETIME                    = lifetime_default
*       REPID                       =
*       DYNNR                       =
*       NO_AUTODEF_PROGID_DYNNR     =
      EXCEPTIONS
        cntl_error                  = 1
        cntl_system_error           = 2
        create_error                = 3
        lifetime_error              = 4
        lifetime_dynpro_dynpro_link = 5
        OTHERS                      = 6.
    IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.


    CREATE OBJECT lcl_obj
      EXPORTING
*       SHELLSTYLE         =
        parent             = lcl_parent
*       LIFETIME           = LIFETIME_DEFAULT
*       SAPHTMLP           =
*       UIFLAG             =
*       END_SESSION_WITH_BROWSER = 0
*       NAME               =
*       SAPHTTP            =
*       QUERY_TABLE_DISABLED = ''
      EXCEPTIONS
        cntl_error         = 1
        cntl_install_error = 2
        dp_install_error   = 3
        dp_error           = 4
        OTHERS             = 5.
    IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
  ENDIF.


  CALL SCREEN 100.

*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text 获取数据
*----------------------------------------------------------------------*
FORM get_data.
  SELECT *
  INTO CORRESPONDING FIELDS OF TABLE gt_data
  UP TO 30 ROWS
  FROM zppcu.

ENDFORM. "GET_DATA

*&---------------------------------------------------------------------*
*& Form SET_FIELDCAT
*&---------------------------------------------------------------------*
* text ALV显示字段文本
*----------------------------------------------------------------------*
FORM set_fieldcat.
  CLEAR: gt_fieldcat[].
  DEFINE macro_fieldcat.
    clear gs_fieldcat.
    gs_fieldcat-fieldname = &1.
    gs_fieldcat-coltext = &2.
    gs_fieldcat-hotspot = &3.
    append gs_fieldcat to gt_fieldcat.
  END-OF-DEFINITION.

  macro_fieldcat 'VBELN' '销售凭证' 'X'.
  macro_fieldcat 'XLOEK' '删除的项目' ''.
  macro_fieldcat 'ERDAT' '创建日期' ''.
  macro_fieldcat 'ERZET' '时间' ''.
  macro_fieldcat 'ERNAM' '创建者' ''.
  macro_fieldcat 'ZGBRQ' '关闭日期' ''.
  macro_fieldcat 'ZGBSJ' '关闭时间' ''.
  macro_fieldcat 'ZGBR' '关闭人' ''.

ENDFORM. "SET_FIELDCAT

*&---------------------------------------------------------------------*
*& Form SET_LAYOUT
*&---------------------------------------------------------------------*
* text 布局
*----------------------------------------------------------------------*
* -->P_LAYOUT text
*----------------------------------------------------------------------*
FORM set_layout CHANGING p_layout TYPE lvc_s_layo.
  p_layout-cwidth_opt = 'X'. " 自动调节字段长度
  p_layout-sel_mode = 'D'. " 选择模式,可选择多行
  p_layout-zebra = 'X'. " 颜色交替显示
ENDFORM. "SET_LAYOUT

*&---------------------------------------------------------------------*
*& Module INIT_CON OUTPUT
*&---------------------------------------------------------------------*
* text 创建ALV
*----------------------------------------------------------------------*
MODULE init_con OUTPUT.

  DATA: ls_layout TYPE lvc_s_layo.

  IF g_con01 IS INITIAL.
    PERFORM set_fieldcat.
    PERFORM set_layout CHANGING ls_layout.

    " 创建SAP容器实例
    CREATE OBJECT g_con01
      EXPORTING
        container_name              = g_cus01 " 自定义控件名称
      EXCEPTIONS
        cntl_error                  = 1
        cntl_system_error           = 2
        create_error                = 3
        lifetime_error              = 4
        lifetime_dynpro_dynpro_link = 5
        OTHERS                      = 6.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    " 创建GRID实例
    CREATE OBJECT g_grid01
      EXPORTING
        i_parent          = g_con01
      EXCEPTIONS
        error_cntl_create = 1
        error_cntl_init   = 2
        error_cntl_link   = 3
        error_dp_create   = 4
        OTHERS            = 5.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    CREATE OBJECT event_receiver.
    " 注册事件handler方法
    SET HANDLER event_receiver->handle_hotspot_click FOR g_grid01.
    SET HANDLER event_receiver->handle_double_click FOR g_grid01.
    SET HANDLER event_receiver->handle_toolbar FOR g_grid01.
    SET HANDLER event_receiver->handle_command FOR g_grid01.

    " 调用ALV 显示方法
    CALL METHOD g_grid01->set_table_for_first_display
      EXPORTING
*       i_structure_name              = 'SPFLI' " 参照表结构字段显示
        is_layout                     = ls_layout " 布局
      CHANGING
        it_fieldcatalog               = gt_fieldcat " 显示字段
        it_outtab                     = gt_data[]
      EXCEPTIONS
        invalid_parameter_combination = 1
        program_error                 = 2
        too_many_lines                = 3
        OTHERS                        = 4.
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.

  ENDIF.






ENDMODULE. " INIT_CON OUTPUT

*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text 工具条
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS_BAR'.

ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_EXIT_0100 INPUT
*&---------------------------------------------------------------------*
* text 取消事件
*----------------------------------------------------------------------*
MODULE user_exit_0100 INPUT.





  CASE sy-ucomm.
    WHEN 'BACK' OR        '%EX'  OR        'RW'.
      LEAVE PROGRAM.

    WHEN OTHERS.
  ENDCASE.
ENDMODULE. " USER_EXIT_0100 INPUT


关键词: ABAP

网友评论

发表评论