需求是这样的
DATA
: LT_IDETAILS
TYPE ABAP_COMPDESCR_TAB
WITH
HEADER
LINE
.
DATA
: LR_REF_TABLE_DES
TYPE
REF
TO CL_ABAP_STRUCTDESCR
.
“定义field变量,type any
FIELD-SYMBOLS : 《L_FIELD》
TYPE
ANY,
《L_FIELD_C》
TYPE
ANY.
IF SY-SUBRC = 0 AND IS NOT INITIAL.
ASSIGN COMPONENT LT_IDETAILS-NAME OF STRUCTURE CS_LIKP TO
《
L_FIELD_C》.
《
L_FIELD_C》
=
《
L_FIELD》
.
ENDIF.
ENDLOOP.
传入is_likp 参数,结构同likp
对比目前 cs_likp 参数,结构同 likp
如果is_likp
中某个字段赋值了,就覆盖掉 cs_likp原有值,
如果is_likp 中字段是空,不处理
**动态得到内表结构 ”全局结构
LR_REF_TABLE_DES ?=
CL_ABAP_TYPEDESCR=>DESCRIBE_BY_NAME( 'LIKP' ).
LT_IDETAILS[] = LR_REF_TABLE_DES->COMPONENTS[].
"循环判断结构每个字段
LOOP AT LT_IDETAILS.
ASSIGN COMPONENT LT_IDETAILS-NAME OF STRUCTURE is_likp TO
《
L_FIELD》
.
其中:
ASSIGN
COMPONENT
LT_IDETAILS
-
NAME
OF
STRUCTURE
is_likp
TO
.
【
LT_IDETAILS
-
NAME】:是is_likp 中的字段名称 ,
【
TO
《
L_FIELD》】这里的
《
L_FIELD》就是刚才那个字段对应的值
都是动态指定,循环的是likp的结构
其实如果两个结构不完全一样,
如果只需要修改相同字段名称的值
也可以这样处理
只是assign后判断subrc即可
另外还有两个函数
DDIF_NAMETAB_GET
LVC_FIELDCATALOG_MERGE
具体怎么用自己写代码一测便知
注:
《
L_FIELD_C》是为防止跟web编码有冲突