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

本文详细介绍了如何在SAP系统中使用FunctionALV和Fieldcat功能,通过设置单元格热点,实现单击和双击事件触发不同的操作,如跳转到前台界面。重点展示了如何配置FieldCat,处理数据映射和调用FunctionALV的参数传递过程。
摘要由CSDN通过智能技术生成
  • 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.
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值