1.表替换对象的基本原理
- HNAN 可使用此表替代功能(Table Replacement Objects).
- 可以将CDS视图定义为ABAP词典中数据库表或经典数据库视图的替换对象。
- 如果已分配了替换对象,则通过Open SQL语句SELECT进行的任何读取访问都将重定向到替换对象。
- 标准替换对像可查看表:MCHB,使用了替换对像NSDM_E_MCHB
- 当使用有替换对像的(比如MCHB)的SELECT,时其中调用的是替换对像的内容(比如调用的结果其中是 NSDM_E_MCHB),所以在使用此表做新的CDS时,注意结果差异。
2.替换对象的先决条件
匹配结构类型
- 相同数量的组件
- 相同的组件名称(例外:客户字段)
- 相同的技术类型,包括长度和小数
注意:组件的顺序可以不同
CDS视图的限制
没有输入参数
客户系统的限制
- 仅用于(自己的)词典视图的替换对象
- 没有表的替换对象
3.分配替换对象
为了使CDS视图成为表或经典Dictionary视图的替换对象,请按照下列步骤操作:
- 打开表定义或“词典”视图(事务SE11,SE80)。
- 从菜单中,选择附加–>代理对象。
- 在对话框上,输入CDS视图的名称。
- 选择应用。
如果是第一次定义替换对象,系统将检查指定的CDS视图是否满足前提条件。如果稍后更改用作替换对象的CDS视图并且不再满足先决条件,则在数据库表或数据库视图上执行Open SQL读取时,将发生运行时错误DBSQL_REDIRECT_INCONSISTENCY。
4.替换对象的应用方案
消除汇总表
- 替换汇总表(填写后台作业)
- 替换的CDS视图实时聚合数据。
效益
轻松集中地重定向所有读取访问。
支持重新设计数据模型
新数据模型替代旧数据模型
替换旧数据库表
替换的CDS视图将访问新表并重建旧表的内容。
效益:
轻松集中地重定向所有读取访问
注意:必须手动调整所有写访问权限!
5.问题
一开始,我在SAP GUI中SE11,创建表(ZTUSER),并在HANA STUDIO中创建了对应的CDS,然后我在SE11中,想把表的替换对像修改为自己的CDS,但发现替换对像位置是灰色的,不能修改,找个很多方法在SAP GUI中也修改不了。
最后发现,只能在HANA Studio中打开表定义,并在其中加入“@AbapCatalog.replacementObject : ‘你需要替换的CDS名’”,激活后,SE11打开,就会发现替换对像已修改为了,自己指定的了。
比如以下是我的表ZTUSER,使用替换对像zuser_i_proxy。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
@EndUserText.label : '用户' @AbapCatalog.enhancementCategory : #NOT_CLASSIFIED @AbapCatalog.tableCategory : #TRANSPARENT @AbapCatalog.deliveryClass : #A @AbapCatalog.dataMaintenance : #LIMITED @AbapCatalog.replacementObject : 'zuser_i_proxy' define table ztuser { key mandt : mandt not null; key bname : xubname not null; name_text : ad_namtext; zpwod : zpwod; ztel : ztel; zutyp : zutyp; @AbapCatalog.foreignKey.screenCheck : true zstcod : zstcod with foreign key ztmenu where mandt = ztuser.mandt and zstcod = ztuser.zstcod; menue : xumenue; spld : rspopname; hdest : xuhdest; hname : xuhname; @AbapCatalog.textLanguage langu : xulangu; zlaip : zlaip; crea_date_time : timestampl; crea_uname : uname; lchg_date_time : timestampl; lchg_uname : uname; } |