是否可通过表类型声明语法排除参考结构中的指定组件?
解决方案
方案1:ABAP 7.40及以上最简实现
直接在定义结构时通过INCLUDE STRUCTURE的EXCEPT参数排除指定字段,无需枚举所有需要的字段,原结构更新时新内表会自动同步除PRUEF外的所有字段:
* 首先定义排除PRUEF后的结构类型 TYPES: BEGIN OF ty_sel2, INCLUDE STRUCTURE zqmqnewslist EXCEPT PRUEF. TYPES: END OF ty_sel2. * 声明全局内表gt_sel2 DATA: gt_sel2 TYPE STANDARD TABLE OF ty_sel2 WITH EMPTY KEY.
方案2:ABAP 7.40以下版本兼容实现
如果系统版本不支持EXCEPT参数,可以通过RTTS动态创建符合要求的内表:
DATA: lo_structdescr TYPE REF TO cl_abap_structdescr, lt_components TYPE abap_component_tab, lo_tabledescr TYPE REF TO cl_abap_tabledescr, gt_sel2 TYPE REF TO data. FIELD-SYMBOLS: <gt_sel2> TYPE STANDARD TABLE. * 获取原结构zqmqnewslist的所有字段信息 lo_structdescr ?= cl_abap_structdescr=>describe_by_name( 'ZQMQNEWSLIST' ). lt_components = lo_structdescr->get_components( ). * 删除不需要的PRUEF字段 DELETE lt_components WHERE name = 'PRUEF'. * 生成新的表类型并创建内表 lo_structdescr = cl_abap_structdescr=>create( lt_components ). lo_tabledescr = cl_abap_tabledescr=>create( p_line_type = lo_structdescr p_table_kind = cl_abap_tabledescr=>tablekind_std p_key = VALUE #( ) ). CREATE DATA gt_sel2 TYPE HANDLE lo_tabledescr. ASSIGN gt_sel2->* TO <gt_sel2>.
后续操作直接使用字段符号<gt_sel2>即可。
数据迁移提示
如果需要把原结构类型的内表数据同步到gt_sel2,7.40及以上版本可直接用CORRESPONDING自动匹配同名字段,无需手动写映射逻辑:
<gt_sel2> = CORRESPONDING #( gt_original_zqmqnewslist ).
内容的提问来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

