ABAP DIALOG ALV

1.子屏幕代码

  IF GR_ALVGRID IS INITIAL.

    GT_FIELDCAT = VALUE #( ( FIELDNAME = 'EBELN'  COLTEXT = '采购凭证' )
                           ( FIELDNAME = 'EBELP'  COLTEXT = '行项目' )
                           ( FIELDNAME = 'MATNR'  COLTEXT = '物料号' )
                           ( FIELDNAME = 'WERKS'  COLTEXT = '工厂' )
                           ( FIELDNAME = 'LGORT'  COLTEXT = '仓库' )
                           ( FIELDNAME = 'MENGE'  COLTEXT = '数量' )
     ).

    GS_LAYOUT-ZEBRA = 'X' .
    GS_LAYOUT-GRID_TITLE = '采购信息' .
*    GS_LAYOUT-SMALLTITLE = 'X' .
*    GS_LAYOUT-NO_TOOLBAR = ' '.
    GS_LAYOUT-CWIDTH_OPT = 'X'.

    CREATE OBJECT ALV_CUSTOM_CONTAINER1
      EXPORTING
        CONTAINER_NAME = 'CONTAINER1'.   "屏幕容器名称
    CREATE OBJECT GR_ALVGRID
      EXPORTING
        I_PARENT      = ALV_CUSTOM_CONTAINER1
        I_APPL_EVENTS = 'X'.
    CONCATENATE SY-REPID SY-DYNNR 'U' INTO GS_VARIANT-REPORT.

*    CREATE OBJECT event_receiver.
*
*    SET HANDLER event_receiver->HANDLE_TOOLBAR FOR GR_ALVGRID.

    CALL METHOD GR_ALVGRID->SET_TABLE_FOR_FIRST_DISPLAY
      EXPORTING
        I_BYPASSING_BUFFER   = 'X'
        I_BUFFER_ACTIVE      = ''
        IS_LAYOUT            = GS_LAYOUT   "样式设定
        IT_TOOLBAR_EXCLUDING = GT_EXCLUDE  "排除现有功能码
        I_SAVE               = 'A'
        IS_VARIANT           = GS_VARIANT
      CHANGING
        IT_OUTTAB            = GT_EKPO[]
        IT_FIELDCATALOG      = GT_FIELDCAT[].

    SET HANDLER LCL_EVENT_RECEIVER=>HANDLE_TOOLBAR FOR GR_ALVGRID.
    SET HANDLER LCL_EVENT_RECEIVER=>HANDLE_USER_COMMAND FOR GR_ALVGRID.
    SET HANDLER LCL_EVENT_RECEIVER=>handle_double_click FOR GR_ALVGRID.
    CALL METHOD GR_ALVGRID->SET_TOOLBAR_INTERACTIVE.

  ELSE.
    CALL METHOD GR_ALVGRID->REFRESH_TABLE_DISPLAY.
  ENDIF.

追加按钮类

DATA:
  ALV_CUSTOM_CONTAINER1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER, "ALV对象
  GR_ALVGRID           TYPE REF TO CL_GUI_ALV_GRID, "ALV对象
  GS_VARIANT            TYPE DISVARIANT,
  GT_FIELDCAT          TYPE LVC_T_FCAT,
  GS_LAYOUT            TYPE LVC_S_LAYO,
  GT_EXCLUDE            TYPE UI_FUNCTIONS . "存放排除按钮的内表

*定义ALV自定义控件
CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED.

DATA:event_receiver TYPE REF TO LCL_EVENT_RECEIVER.

CLASS LCL_EVENT_RECEIVER DEFINITION.

  PUBLIC SECTION.

    CLASS-METHODS HANDLE_TOOLBAR FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
       IMPORTING E_OBJECT E_INTERACTIVE.

    CLASS-METHODS:
      handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
        IMPORTING e_row e_column,

      HANDLE_USER_COMMAND FOR EVENT user_commANd of cl_gui_alv_grid
        IMPORTING E_UCOMM,
      
      HANDLE_DATA_CHANGE FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID
        IMPORTING ER_DATA_CHANGED E_UCOMM.



ENDCLASS.

CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.

  METHOD HANDLE_TOOLBAR.

    DATA:
        LS_TOOLBAR TYPE STB_BUTTON,
        LS_BTNMNU  TYPE STB_BTNMNU.

    LS_TOOLBAR-FUNCTION = 'SELE'.
    LS_TOOLBAR-ICON = '@DH@'.
    LS_TOOLBAR-QUICKINFO = '日志记录'.
    LS_TOOLBAR-DISABLED = ''.
    LS_TOOLBAR-TEXT = '日志记录'.
    APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.

*    LS_BTNMNU-FUNCTION = 'SELE'.
*
*    APPEND LS_BTNMNU TO E_OBJECT->MT_BTNMNU.

  ENDMETHOD.


  METHOD handle_double_click.
    PERFORM handle_double_click USING e_row e_column.
  ENDMETHOD.                    "handle_double_click

  METHOD HANDLE_USER_COMMAND.
    PERFORM FRM_ALV_USER_COMMAND USING E_UCOMM.
  ENDMETHOD.


ENDCLASS.

 

### ABAP 对话模块中的刷新功能 在ABAP对话模块中实现保持刷新的功能通常涉及使用特定函数模块来创建交互式的用户界面。对于需要定期更新显示内容的情况,可以考虑通过循环调用或事件触发机制来实现实时数据刷新。 #### 使用 `CALL SCREEN` 实现动态刷新 一种常见的方式是在屏幕逻辑中加入定时器控制结构: ```abap DATA: lv_refresh_interval TYPE I VALUE 5, " 刷新间隔时间(秒) lt_events TYPE TABLE OF sdynevent. START-OF-SELECTION. PERFORM init_timer USING 'TIMER_REFRESH'. * 定义计时器处理程序 FORM handle_timer REFERENCE IS SUPPLIED BY SYSTEM-FIELD sy-ucomm. IF sy-ucomm = 'TIMER_REFRESH'. CALL FUNCTION 'TH_WAIT' EXPORTING wait_time = lv_refresh_interval * 1000. " 转换为毫秒 CLEAR gt_data[]. SELECT * FROM zyour_table INTO CORRESPONDING FIELDS OF TABLE gt_data UP TO 10 ROWS. LOOP AT screen AS ls_screen WHERE name = 'REFRESH_BUTTON'. ls_screen-active = '1'. " 设置按钮激活状态 MODIFY SCREEN ls_screen. ENDLOOP. SET SCREEN 0. " 返回到当前屏幕以强制重绘 ENDIF. ENDFORM. ``` 上述代码展示了如何设置一个简单的定时器,在指定的时间间隔内自动执行查询并重新加载数据显示[^1]。 #### 结合 SAP GUI 控件增强用户体验 为了提供更流畅的体验,还可以利用SAP GUI控件库(如 ALV Grid 或者 SmartForms)来构建更加复杂的UI组件,并配合JavaScript脚本进行前端渲染优化。不过需要注意的是,这类高级特性可能依赖于具体的开发环境配置和支持程度[^2]。 #### 关键注意事项 当设计具有持续刷新特性的应用程序时,应特别注意性能影响以及潜在的安全风险。频繁的数据请求可能会给服务器带来额外负担;因此建议合理规划轮询频率,并采用适当的技术手段减少不必要的网络传输开销。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随记随心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值