ABAP - Function ALV 08 热点和单击/双击的联动之ALV点击单号跳转

  • Function ALV可以通过单元格设置单击和双击热点进行某些功能的实现,例如点击单号跳转到前台界面。
  • 完成功能思路:先在Fieldcat将采购订单列设置为热点,然后Function ALV调用函数的传入参数i_callback_user_command子例程中处理。
    FORM frm_user_command USING r_ucomm LIKE sy-ucomm
                                rs_selfield TYPE slis_selfield.
      CASE r_ucomm.
        WHEN ''.
          
        WHEN ORTHER.
    
      ENDCASE.
    ENDFORM.

    可以看到子例程中有两个传入参数,r_ucomm(用户的命令码),rs_selfield(ALV光标所在的字段等信息),调试时可以看到两个参数的值单击双击的命令码是&IC1。



  • 完整代码 
    ** Layout  变量定义
    DATA gs_layout   TYPE lvc_s_layo.
    
    ** Fieldcat 变量定义
    DATA:gt_fieldcat TYPE lvc_t_fcat,
         gs_fieldcat LIKE LINE OF gt_fieldcat.
    
    ** FieldCat的宏
    DATA gv_pos TYPE i.
    
    DEFINE %%add_fieldcat.
      gv_pos = gv_pos + 1.
      gs_fieldcat-col_pos = gv_pos.
      gs_fieldcat-fieldname = &1.
      gs_fieldcat-scrtext_m = &2.
    
      CASE &1.
        WHEN 'EBELN'.
          gs_fieldcat-hotspot = 'X'.    "设置成热点
        WHEN OTHERS.
    
      ENDCASE.
    
      APPEND gs_fieldcat TO gt_fieldcat.CLEAR gs_fieldcat.
    END-OF-DEFINITION.
    
    START-OF-SELECTION.
    
      SELECT ekko~ebeln,  "采购订单抬头数据- 采购单号
             ekko~bukrs,  "采购订单抬头数据- 公司代码
             ekko~ekorg,  "采购订单抬头数据- 采购组织
             ekko~aedat,  "采购订单抬头数据- 订单创建日期
             ekko~ernam,  "采购订单抬头数据- 订单创建者
    
             ekpo~ebelp,  "采购订单明细数据- 采购订单行号
             ekpo~matnr,  "采购订单明细数据- 采购订单物料编码
             ekpo~menge,  "采购订单明细数据- 采购数量
             ekpo~meins,  "采购订单明细数据- 采购数量的计量单位
             ekpo~werks,  "采购订单明细数据- 收货工厂
             ekpo~lgort   "采购订单明细数据- 收货库存地点
        INTO TABLE @DATA(gt_po)
        FROM ekko
       INNER JOIN ekpo ON ekko~ebeln = ekpo~ebeln
       WHERE ekko~aedat BETWEEN '20220301' AND '20220331'.
    
    ** Fieldcat字段映射处理
      %%add_fieldcat:'EBELN'    '采购单号',  "( 前面字段值不可变 后面字段描述可变 每一行都是)
                     'EBELP'    '采购订单行号',
                     'EKORG'    '采购组织',
                     'BUKRS'    '公司代码',
                     'AEDAT'    '订单创建日期',
                     'ERNAM'    '订单创建者',
                     'MATNR'    '物料编码',
                     'MENGE'    '采购数量',
                     'MEINS'    '单位',
                     'WERKS'    '收货工厂',
                     'LGORT'    '收货库存地点'.
    
    ** Layout布局处理
      gs_layout-cwidth_opt = 'X'.     "自动优化列宽 (可以使用**在一行代码面前注释掉 看看ALV会有什么效果)
      gs_layout-zebra = 'X'.          "斑马纹输出
    
    ** 调用FunctionALV需要传入的参数:展示数据,FieldCat,Layout,Status
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
        EXPORTING
          i_callback_program       = sy-repid
          i_callback_pf_status_set = 'FRM_SET_STATUS'
          i_callback_user_command  = 'FRM_USER_COMMAND'
          is_layout_lvc            = gs_layout
          it_fieldcat_lvc          = gt_fieldcat
        TABLES
          t_outtab                 = gt_PO[]
        EXCEPTIONS
          program_error            = 1
          OTHERS                   = 2.
    
    FORM frm_set_status USING p_extab TYPE slis_t_extab.
      SET PF-STATUS 'STANDARD'.
    ENDFORM.
    
    FORM frm_user_command USING r_ucomm LIKE sy-ucomm
                                rs_selfield TYPE slis_selfield.
      CASE r_ucomm.
        WHEN '&IC1'.
          CASE rs_selfield-fieldname.
            WHEN 'EBELN'.
              SET PARAMETER ID 'BES' FIELD rs_selfield-value.
              CALL TRANSACTION 'ME23N'.
            WHEN OTHERS.
    
          ENDCASE.
    
        WHEN 'BUTTON'.
          MESSAGE  '自定的按钮功能呢' TYPE 'I'.
    
        WHEN OTHERS.
    
      ENDCASE.
    ENDFORM.
     
  • 24
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP FUNCTION ALV 中添加状态栏下拉框按钮,可以使用函数模块 `REUSE_ALV_HIERSEQ_LIST_DISPLAY`。该函数模块可以在状态栏中添加下拉框按钮,用于切换不同的层次结构。 以下是添加下拉框按钮的代码示例: ``` REPORT ztest. DATA: it_list TYPE STANDARD TABLE OF sflight, wa_list TYPE sflight. DATA: it_fieldcat TYPE slis_t_fieldcat_alv. FIELD-SYMBOLS: <fs_fieldcat> TYPE slis_fieldcat_alv. * 初始化 ALV 数据 SELECT * FROM sflight INTO TABLE it_list. * 初始化字段目录 CLEAR: it_fieldcat. wa_fieldcat-fieldname = 'CARRID'. wa_fieldcat-ref_table = 'SCARR'. wa_fieldcat-ref_field = 'CARRID'. APPEND wa_fieldcat TO it_fieldcat. wa_fieldcat-fieldname = 'CONNID'. APPEND wa_fieldcat TO it_fieldcat. wa_fieldcat-fieldname = 'FLDATE'. APPEND wa_fieldcat TO it_fieldcat. wa_fieldcat-fieldname = 'SEATSMAX'. APPEND wa_fieldcat TO it_fieldcat. wa_fieldcat-fieldname = 'SEATSOCC'. APPEND wa_fieldcat TO it_fieldcat. CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY' EXPORTING i_callback_program = sy-repid i_callback_pf_status_set = 'PF_STATUS' is_layout = VALUE #( ( hierarchy_seq = 'CARRID' ) ) TABLES t_fieldcat = it_fieldcat t_outtab = it_list. * 定义层次结构下拉框的值集合 DATA: it_hier TYPE STANDARD TABLE OF lvc_s_layo WITH HEADER LINE. it_hier-fieldname = 'HIERARCHY_SEQ'. it_hier-seltext_l = '层次结构'. it_hier-selopt = 'O'. it_hier-no_out = 'X'. APPEND it_hier. it_hier-fieldname = 'CARRID'. it_hier-seltext_l = '按航空公司'. it_hier-selopt = 'C'. it_hier-no_out = ' '. APPEND it_hier. it_hier-fieldname = 'FLDATE'. it_hier-seltext_l = '按航班日期'. it_hier-selopt = 'D'. it_hier-no_out = ' '. APPEND it_hier. it_hier-fieldname = 'SEATSMAX'. it_hier-seltext_l = '按最大座位数'. it_hier-selopt = 'S'. it_hier-no_out = ' '. APPEND it_hier. it_hier-fieldname = 'SEATSOCC'. it_hier-seltext_l = '按已占用座位数'. it_hier-selopt = 'O'. it_hier-no_out = ' '. APPEND it_hier. * 设置层次结构下拉框 SET PF-STATUS 'PF_STATUS' EXCLUDING it_hier. * PF-STATUS 事件处理程序 MODULE pf_status OUTPUT. SET PF-STATUS 'PF_STATUS'. SET TITLEBAR 'TITLE'. ENDMODULE. * AT SELECTION-SCREEN 事件处理程序 AT SELECTION-SCREEN ON HIERARCHY_SEQ. LOOP AT it_hier ASSIGNING FIELD-SYMBOL(<fs_hier>). IF <fs_hier>-fieldname = 'HIERARCHY_SEQ'. CONTINUE. ENDIF. IF <fs_hier>-selopt = 'X'. CLEAR: it_list. SELECT * FROM sflight INTO TABLE it_list ORDER BY carrid. ELSE. CLEAR: it_list. SELECT * FROM sflight INTO TABLE it_list ORDER BY ( <fs_hier>-fieldname ). ENDIF. CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY' EXPORTING i_callback_program = sy-repid i_callback_pf_status_set = 'PF_STATUS' is_layout = VALUE #( ( hierarchy_seq = <fs_hier>-fieldname ) ) TABLES t_fieldcat = it_fieldcat t_hierarchy = it_list. ENDLOOP. ``` 在代码中,使用了 `REUSE_ALV_HIERSEQ_LIST_DISPLAY` 函数模块来显示 ALV 报表,并在 `is_layout` 参数中指定默认的层次结构。在 `pf_status` 事件处理程序中设置状态栏的标题,并在 `AT SELECTION-SCREEN` 事件处理程序中根据用户选择的层次结构重新查询数据并刷新 ALV 报表。 通过在 `it_hier` 中定义层次结构下拉框的值集合,并在 `SET PF-STATUS` 语句中排除该值集合,即可在状态栏中添加下拉框按钮。在 `AT SELECTION-SCREEN` 事件处理程序中,根据用户选择的层次结构重新查询数据,并使用 `REUSE_ALV_HIERSEQ_LIST_DISPLAY` 函数模块刷新 ALV 报表显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值