ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ABAP随笔-动态内表添加颜色控制列

2022-07-25 18:33:41  阅读:157  来源: 互联网

标签:内表 cl color abap ABAP dy table 随笔 type


当我们做动态内表相关开发时,有种方法时根据Filedcat生成内表,如果想往内表中加入颜色/可编辑等控制型的字段,是不好直接加的,因为Fieldcat无法指定表类型字段。

这是我们可以通过指针的方式向动态内表里增加表结构类型的字段

1.通过指定类型,指定字段名的方式增加字段

  DATA:dy_table    TYPE REF TO data,
       dy_line     TYPE REF TO data,
       itab_type   TYPE REF TO cl_abap_tabledescr,
       struct_type TYPE REF TO cl_abap_structdescr,
       comp_tab    TYPE cl_abap_structdescr=>component_table WITH HEADER LINE.
  "#根据Fieldcat创建动态内表
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = gt_fieldcat
    IMPORTING
      ep_table        = dy_table.
  ASSIGN dy_table->* TO <dyn_table>.
  CREATE DATA dy_line LIKE LINE OF <dyn_table>.
  ASSIGN dy_line->* TO <dyn_wa>.
  IF dy_table IS BOUND.
    ASSIGN dy_table->* TO <dyn_table>.
    itab_type ?= cl_abap_tabledescr=>describe_by_data( <dyn_table> ).
    struct_type ?= itab_type->get_table_line_type( ).
    comp_tab[] = struct_type->get_components( ).
    comp_tab-name = 'COLOR'.
    struct_type ?= cl_abap_typedescr=>describe_by_name( 'LVC_S_SCOL' ).
    comp_tab-type = cl_abap_tabledescr=>create( struct_type ).
    INSERT comp_tab INTO comp_tab INDEX 1.
    struct_type = cl_abap_structdescr=>create( p_components = comp_tab[] p_strict = abap_false ).
    itab_type = cl_abap_tabledescr=>create( struct_type ).
    CREATE DATA dy_table TYPE HANDLE itab_type.
    ASSIGN dy_table->* TO <dyn_table>.
    CREATE DATA dy_line LIKE LINE OF <dyn_table>.
    ASSIGN dy_line->* TO <dyn_wa>.
  ENDIF.

 

2.向内表中相应控制字段赋值

      "#当日产能盈余
      lv_fieldname = |DAY{ lv_index }-LEFT|.
      ASSIGN COMPONENT lv_fieldname OF STRUCTURE <dyn_wa> TO <fs_field>.
      IF sy-subrc EQ 0.
        <fs_field> = gs_alv-zdaily_capacity - gs_data_collect-zso_qty.
        ls_color-fname = lv_fieldname.
        IF <fs_field> GT 0.
          ls_color-color = VALUE #( col = '5' int = '0' inv = '0' ).
        ELSEIF <fs_field> LT 0.
          ls_color-color = VALUE #( col = '6' int = '0' inv = '0' ).
        ELSE.
          ls_color-color = VALUE #( col = '3' int = '0' inv = '0' ).
        ENDIF.
        INSERT ls_color INTO TABLE lt_color.
        ASSIGN COMPONENT 'COLOR' OF STRUCTURE <dyn_wa> TO FIELD-SYMBOL(<fs_color>).
        IF sy-subrc EQ 0.
          <fs_color> = lt_color.
        ENDIF.

3.同样要设定Layout里控制字段名

gs_layout-ctab_fname = 'COLOR'.

 

标签:内表,cl,color,abap,ABAP,dy,table,随笔,type
来源: https://www.cnblogs.com/xiajiqiang/p/16518381.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有