您的位置:首页 > 其它

动态对比两个相同结构工作区的值CL…

2014-08-14 13:32 106 查看
需求是这样的
传入is_likp 参数,结构同likp
对比目前 cs_likp 参数,结构同 likp

如果is_likp  中某个字段赋值了,就覆盖掉 cs_likp原有值,
如果is_likp 中字段是空,不处理

  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.

**动态得到内表结构  ”全局结构

  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》 
  .

    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.

其中:
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编码有冲突
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: