专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > SAP

ABAP CDS 替代对象(Replacement Objects)引起的数据异常

发布时间:2010-06-06 17:04:00 文章来源:www.iduyao.cn 采编人员:星星草
ABAP CDS 替代对象(Replacement Objects)引起的数据错误

 

最近遇到了一个诡异的问题:从CDS视图中取得的数据,和从透明表中取得的数据,会有不同的值。在这里记录下问题的表现和解决方案,以供参考。

系统版本:S/4HANA OP1610

涉及表:MCHB

 

本文链接:http://www.cnblogs.com/hhelibeb/p/7346984.html

 

最近写了一个CDS视图:

@AbapCatalog.sqlViewName: 'ZCI_TEST'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'QAQ'
define view ZTEST001_11 as select from mchb
{
matnr,
charg,
lgort,
werks,
clabs
}
where clabs > 0

一段简单得不能再简单的代码。但是在测试系统上使用时,问题发生了:无法从这个CDS view中查询到任何数据。

无论是通过Open SQL代码查询也好、在SE16中查询也好、将CDS view替换为CDS entity也好,通通查不到任何数据..

测试系统中毫无疑问是有着相应的数据的,怎么会取不到呢。难道是条件语句出错?抱着试试看的态度,我去掉了DDL代码中的where条件。

@AbapCatalog.sqlViewName: 'ZCI_TEST'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'QAQ'
define view ZTEST001_11 as select from mchb
{
matnr,
charg,
lgort,
werks,
clabs
}

 

这下子数据出现了,之前查不出数据的原因也出现了:在这个视图中,所有行的clabs值均为初始值0。但在表MCHB中是存在clabs > 0 的记录的,为什么会仅仅因为通过CDS视图查询便得不到正确的clabs值呢?

为了进一步证明二者查询结果的不一致,我写下了以下的SQL:

SELECT matnr, charg, lgort, werks, clabs FROM mchb 
INTO TABLE @DATA(gt_mchb)

通过调试器观察数据,可以得到:

如图所示,表MHCB至少存在多个clabs > 0的行。

接着,把SQL变成:

SELECT matnr, charg, lgort, werks, clabs FROM zci_test 
INTO TABLE @DATA(gt_mchb) 

结果中的clabs全部 = 0:

这下可头疼了...百思不得其解之下,前往了SCN提问。

在热心网友的提示下,我使用事务ST05追踪了这两个SQL,意外地发现了原因。以下是第一段Open SQL语句的追踪结果:

 

注意红框内的部分。虽然我的Open SQL中的FROM的目标是表MCHB,但ST05的记录表明,实际上目标被重定向(Redirected)到了视图“NSDM_V_MCHB”。

那么,什么是重定向呢?查阅文档可以得知:

A CDS view can be assigned to a transparent database table and classic database view in ABAP Dictionary as a replacement object using the name of its CDS entity. A prerequisite is that the structure type defined by the CDS view matches the structure of the database table or classic view ...

也就是说,在系统支持替代对象的情况下,我们在ABAP Dictionary看到的表或者视图,和在程序中通过Open SQL访问到的对象,未必是一个东西。SAP可以将一个替代对象(Replacement Objects)分配给标准的表和视图。如这个词的字面所示,当替代对象存在时,大部分对数据库表的查询访问会被重定向到替代对象之上。具体内容可以查阅文档。

开发者也可以自己建立替代对象,但只能分配给自定义表或视图。

这一功能的存在和应用似乎和SAP对数据模型的调整有关。

相关note: 2206980 - Material Inventory Managment: change of data model in S/4HANA

      2242679 - Redirect inconsistency - Proxy Substitution

 

作为开发者,在创建CDS视图的时候,我们需要意识到替代对象存在的可能性...如果一个数据库表或视图存在替代对象,而我们在写DDL代码的时候没有注意这一点,便有可能从不准确的数据源获取数据,从而产生错误。

 

要如何得知一个数据库表或者视图是否存在代理对象呢?以表MCHB为例,可以进入事务SE11,点击菜单栏的 附加——代理对象,在弹出窗口中查看:

进入Eclipse查看该对象:

 

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

  • :安装MINI SAP失败

    求救:安装MINI SAP失败! 如题。 怎么办啊? 安装之前已经把SQL2000 2005 VS.NET05 08全都卸载了的。 安装CD1的时候就开始报错...

  • 哪位高手有abap eclipse editor

    谁有abap eclipse editor? 那位哥们有,可以进行资料交换。 ------解决方案-------------------- 这个现在只支持460,好像不支持640...

  • ,关于t-code:sgen的有关问题!

    求助,关于t-code:sgen的问题!急~~~ 昨天刚把sap ecc6装好了 。为了能够快速运行,事先准备用sgen编译一下 非常郁闷的是,在还没有开始...

  • sql查询语句中WHERE条件后面AND的个数解决方案

    sql查询语句中WHERE条件后面AND的个数 sql查询语句中WHERE条件后面AND的个数有没有限制啊! ------解决方案-------------------- ...

  • SAP模块,学哪个模块未来发展比较顺利

    【求助】SAP模块,学哪个模块未来发展比较顺利? 各位大侠,我是SAP新人。最近公司在培训,3周培训后要我们从PS,FI,CO,MM等中选择一个模...

  • 站在十字路口,该怎么处理

    站在十字路口 本人在一个快消公司做IT程序员,主要负责内部系统开发、报表开发、数据库维护等工作。现在公司要上SAP了,我也有幸参与...

  • alv field 是否可以进行日期选择解决方法

    alv field 是否可以进行日期选择 哪位达人知道怎么在ALV报表中实现 日期的选择,就像调整系统日期一样,不用手动收入 ------解决方...

  • 在sap中怎样获取字段所属的表解决思路

    在sap中怎样获取字段所属的表 小弟是SAP初学者,在这里遇到一个问题,由于对sap内部表结构不是很了解,现在要根据一些字段获取所属的表...

  • ABAP list report 输出有关问题

    ABAP list report 输出问题 小弟初学ABAP,苦难重重,望大侠门指点。两个问题: 第一,我做了一个list report,输出deliveray item 和invoi...

  • 在SAP中如何截取字符串

    在SAP中怎么截取字符串 在SAP中怎么截取字符串 比如 DATA:STR(10) LIKE C VALUE '1234567890', STR1(4) LIKE C. 我要取...

热门推荐: