ABAP Objects中`ADD-CORRESPONDING`不支持,求等效替代方案
ABAP Objects中
ADD-CORRESPONDING的替代方案 在ABAP Objects上下文(如类方法)中,传统ABAP的ADD-CORRESPONDING语句不被支持,你可以根据结构字段的数量和灵活性需求选择以下等效方案:
1. 手动赋值对应字段(推荐字段少的场景)
如果结构的对应字段数量不多且固定,直接手动计算赋值是最直观高效的方式:
struc2-number1 = struc2-number1 + struc1-number1.
修改后的完整测试代码:
REPORT. CLASS lcl_app DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT. PUBLIC SECTION. CLASS-METHODS main. ENDCLASS. CLASS lcl_app IMPLEMENTATION. METHOD main. TYPES: BEGIN OF ty_struc1, number1 TYPE i, number2 TYPE i, END OF ty_struc1, BEGIN OF ty_struc2, number1 TYPE i, number3 TYPE i, END OF ty_struc2. DATA(struc1) = VALUE ty_struc1( number1 = 1 number2 = 1 ). DATA(struc2) = VALUE ty_struc2( number1 = 1 number3 = 1 ). " 替代ADD-CORRESPONDING的手动赋值 struc2-number1 = struc2-number1 + struc1-number1. cl_abap_unit_assert=>assert_equals( act = struc2 exp = VALUE ty_struc2( number1 = 2 number3 = 1 ) ). ENDMETHOD. ENDCLASS. START-OF-SELECTION. lcl_app=>main( ).
2. 使用CORRESPONDING表达式(适合保留其他字段的场景)
通过CORRESPONDING表达式结合字段计算,既能实现对应字段的累加,又能保留目标结构其他字段的原有值:
struc2 = CORRESPONDING #( struc2 NUMBER1 = struc2-NUMBER1 + struc1-NUMBER1 ).
3. 动态处理结构字段(通用场景)
如果需要处理字段不固定的结构,可通过结构描述类动态获取共有字段并循环累加:
DATA(desc_struc1) = CL_ABAP_STRUCTDESCR=>DESCRIBE_BY_DATA( struc1 ). DATA(desc_struc2) = CL_ABAP_STRUCTDESCR=>DESCRIBE_BY_DATA( struc2 ). " 获取两个结构的共有字段名 DATA(common_fields) = VALUE string_table( FOR field IN desc_struc1->components WHERE ( name IN VALUE string_table( FOR f2 IN desc_struc2->components ( f2-name ) ) ) ( field-name ) ). LOOP AT common_fields INTO DATA(field_name). ASSIGN COMPONENT field_name OF STRUCTURE struc1 TO FIELD-SYMBOL(<fs1>). ASSIGN COMPONENT field_name OF STRUCTURE struc2 TO FIELD-SYMBOL(<fs2>). IF <fs1> IS ASSIGNED AND <fs2> IS ASSIGNED. <fs2> = <fs2> + <fs1>. ENDIF. ENDLOOP.
内容的提问来源于stack exchange,提问作者Sandra Rossi
相关产品推荐
相关产品推荐

