ABAP 动态ALV

1、动态内表相关定义

DATA: gt_dyntb TYPE REF TO data,
      gs_dynwa TYPE REF TO data.
FIELD-SYMBOLS: <dyn_table> TYPE table, "指向动态内表 "是一个标志,可以理解为一个指针,将来创建的内表就要通过它们来访问
               <dyn_wa>    TYPE any,   "指向动态工作区
               <fs>        TYPE any.   "指向值

2、先确定好ALV列

    "以上确定好列之后,给动态alv列名称赋值
    CLEAR gs_fieldcat1.
    gs_fieldcat1-fieldname  = 'ZXM'. "项目
    gs_fieldcat1-colddictxt = 'L'.
    gs_fieldcat1-intlen = 20.
    gs_fieldcat1-scrtext_l  = '项目'.
    APPEND gs_fieldcat1 TO gt_fieldcat1.

    LOOP AT gt_zz002 INTO gs_zz002.
      CLEAR gs_fieldcat1.
      gs_fieldcat1-fieldname  = 'ZBM' && sy-tabix. "部门
      gs_fieldcat1-colddictxt = 'L'.
      gs_fieldcat1-intlen = 20.
      gs_fieldcat1-scrtext_l  = gs_zz002-zz002.
      APPEND gs_fieldcat1 TO gt_fieldcat1.
    ENDLOOP.

3、根据确定好的列去创建动态内表

  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = gt_fieldcat1
    IMPORTING
      ep_table        = gt_dyntb.

  ASSIGN gt_dyntb->* TO <dyn_table>.
  CHECK <dyn_table> IS ASSIGNED.
  CREATE DATA gs_dynwa LIKE LINE OF <dyn_table>.
  ASSIGN gs_dynwa->* TO <dyn_wa>.
*  ASSIGN gs_dynwa->* TO <dyn_wa1>.

4、根据字段名,通过动态指针给列赋值

FORM frm_process1_data  TABLES   p_tab STRUCTURE gs_bm
                        USING    VALUE(p_txt1).
  CLEAR lv_index.

  LOOP AT p_tab INTO DATA(ls_tab).

    AT NEW racct.
      ASSIGN COMPONENT 'ZXM' OF STRUCTURE <dyn_wa> TO <fs>.
      <fs> = p_txt1.
    ENDAT.

    READ TABLE gt_zz002 INTO gs_zz002 WITH KEY zz002 = ls_tab-zz002.
    IF sy-subrc = 0.
      ASSIGN COMPONENT 'ZBM' && sy-tabix OF STRUCTURE <dyn_wa> TO <fs>.
      <fs> = ls_tab-hsl.
    ENDIF.

    AT END OF racct.
      APPEND <dyn_wa> TO <dyn_table>.
      CLEAR <dyn_wa>.
    ENDAT.
  ENDLOOP.

ENDFORM.

5、最后调用Function ALV

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
      EXPORTING
        i_callback_program       = sy-cprog
        i_callback_pf_status_set = 'FRM_PF_STATUS'
*       i_callback_user_command  = 'FRM_USER_COMMAND'
*       i_grid_title             = i_grid_title
*       i_grid_settings          = gs_grid
        is_layout_lvc            = gs_layo
        it_fieldcat_lvc          = gt_fieldcat1
*       it_events                = ltd_event "必须!
        i_save                   = 'A'
      TABLES
        t_outtab                 = <dyn_table>
      EXCEPTIONS
        program_error            = 1
        OTHERS                   = 2.
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.
  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值