传输出错 CMP警告

最近真的是被这个传输出错搞得烦的。
唉,本质原因就是渣渣看不懂这个传输出错的问题所在。

就是这个传输log…
我今天就来好好研究下这个传输log到底怎么看。

场景

故事是这样的:
我去激活一个CP,这个CP下面union了5个ADSO。也就是5个事实表的union。
在这里插入图片描述
在target里面最终要展示的一些对象呢,有些只来自于其中的某些ADSO。
那事情到这里不是很正常的么。

没办法关联到那么多表,那这个对象就从其中一个或几个ADSO中出来。
这个CMP警告是个啥问题呢?

CMP警告

问题就在这里了, CMP是compounding 是说这个字段的组合字段有问题?
就拿我上面的那个字段为例。
在这里插入图片描述
是的,它是组合了一个client。

那我再看看其他的:
在这里插入图片描述
都组了client来明确是哪个集团的这个字段。
那这个CMP问题的详细描述是啥呢,我得知道到底是哪个,因为还有的组了Controlling Area.

在这里插入图片描述
在这里插入图片描述

好的接下来来看CMP问题的明细:
那就来看那个还组了controlling area的字段,看到底是哪个compound info object的问题:
在这里插入图片描述
这里说了一大串,只说了一个client的组件问题:

这个client在所有ADSO中都有,那组合它的字段,只在其中一些ADSO中有。
然后上面说了SID的问题。说啥有组件的情况下,组合起来的也会有一个SID啥的。
难道意思是,你有组件了,我是把你看成是一个统一的整体的?所以有一个SID的。然后啥。。。我还是有点晕的。

再往下看,详细的例子这样的:
在这里插入图片描述
难道是说,这个字段,由于它本来就是有组件的,所以它主数据表,SID其实是和组件关联后的。。?
再往下看:
这一大串,好复杂,看不下去。。。
在这里插入图片描述
在这里插入图片描述
然而我还是没有理解这个CMP的问题,SID啥的,到底是什么意思呢?

Compounding attribute

从组件属性来分析:

先来简化这个例子:
假设我们这个CP里面只有两个ADSO。
ADSO1 里面有A 和 B。
ADSO2 里面有A 。

这个警告是由于组件属性,A 是 B的组件属性,也就是说client是 business area的组合属性,其实从另外一个角度讲,我们组合的这个client,其实可以称之为 business area的父特性。 而现在ADSO2 里面只有client 而没有 business area。那这里联系了个实际,就是说只有这个父特性。那我们去跑报表的时候,这个business area也就是只会从ADSO1 里取出来。

上面SAP给出的解决方案是:在ADSO2 里面给加上 business area,即使没有任何的mapping也行。不用给值。
这个CMP问题会导致query的性能问题。

SAP Note

唉,来看看note上给的操作:
1038604
给Info Provider设置特性常量 CHACONST: 在一个有物理数据的infoprovider里,数据已经是发布的了,但你想回过头来设置这个特性为一个常量。
那这个维护对话框不给你设置的,为了数据的一致性。也就是这个字段是不会给你输入的,输入那里就是灰的。或者压根就不给你改。
那咋办:SE16->RSDODSOIOBJPRO,然后是info provider的名称,版本M,infoobject的名字,要赋给的常数。
但是这样的话,这个常数就相当于一个全局过滤器了。。。

1045683
query不使用层级聚集,从叶子层级读层级。

这个情形也就是上面讲的,如果B在ADSO2中没有被提供,也就是说这个B没有在ADSO2中进行分配。而且这个B是组合到A上面的。而A在ADSO2 中还和其他的特性组合了。也许是C,C把这个A给定下来分配了,那这个B就有一个CMP的问题了。
那对应的,C在ADSO1中也会有这个CMP问题,也就是如果和A组合的特性在任意一个ADSO中没有被分配,都会对应出现这个问题。
在这里插入图片描述
这个情况呢,数据管理器就不能用主数据ID了(SID),至少就是在ADSO2里面不能用B的master data ID ,因为B的初始SID=0 和(C B)的初始组合键值不能匹配了。也就是当ADSO2中C 有值的情况下,这个SID用不了了。

原来我在query里面找B,由于B只从ADSO1里面出来,其实我是用事实表连接的它的SID去找主数据的,由于B有A这个组件,等于这个SID绑定了A和B,是确定这两个的值的。而在ADSO2里面,我这个B没有值,未分配。而A被另外一个C分配了,绑定确定了。而通过Union呢,A是大家都有的,是通过A来连接的,而咱都知道,既然是组件,那query展示的时候,是默认带上A的,就是你就算只看B,A也会出来的。这时候呢,我C就会被动和B组合了。A/B本来SID是0, A/C 的SID是1,我其实是没办法组合的。

以上是我猜的。。。
要是能自己弄个例子来看就好了。。。
这得需要点时间来弄。。。
也许以上是错的。。。

因此,B的层级需要在叶子层级读取,层级聚集也不能用了。
当然,如果C的值是个确定常量值,那我们能直接给C设置成常量。这个没做过。。。

浅显一点

再降低一点,就是我们以前在multi provider里面加对象的时候,你得分配到下面的信息提供者。如果在其中一个信息提供者里没给分配,那这个信息提供者就只能返回这个对象的初始键值。初始键值的master data ID 是0.
更复杂一点的情况就是这个对象有组件。

传输出错

讲了这么多,还是很模糊,还是没理解。
然而我开头讲的是传输的log问题。
好了接下来入正题了:
先讲个TLOGO:要不然有时候不知道
在这里插入图片描述
然后来看我的传输log:
在这里插入图片描述
我是如何处理这个传输错误的呢?

我的做法其实没问题的,有时候传输就是会出一些奇奇怪怪的错。

我的修复方法是把里面的信息对象和CP分开到两个TR里面再传。唉,至于这个错,暂时不纠结了。
其实整篇,是个CMP的问题。

还要写一篇。看看这个CMP警告真正导致的错误问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaomici

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值