基于AMDP的BW转换专家例程

今天这给我整懵了。
原来我要加个导航属性。so easy。
结果我一看,这个属性转换里面用的专家例程来弄的。还是用的HANA runtime。
这又是我知识盲区了,我不会啊。
在这里插入图片描述
但是接都接了,又得硬着头皮来搞。哎。
不就是个SQL么,咱不信还整不会了。

1. 啥是基于HANA的BW转换

大家都说HANA是代码下移到数据库,那它怎么下移的?什么时候下移?怎么它就下移了,有啥前提条件?
跟ABAP比,就是它不在application server里面去处理open sql了,人家就是sql。不用通过application server给翻译成native SQL去数据库拿数。而且按包处理,不是一条一条的。就贼快的样子。
到这。就差不多知道就是ABAP代码和AMDP代码的区别了。其实就是为了在ABAP程序里直接调用SQL语言啊。
如果你转换里都是ABAP代码,开始结束字段或者专家例程的,那就下推不下去了。
在这里插入图片描述

2. 来看看转换里的SQL语句怎么写的

在HANA转换的DTP被执行的过程中发生了什么?
就看我这个HANA的转换的DTP,它这执行模式是部分HANA串行处理。在这个过程中,SQL语句被生成去从source拿数并且直接一步插到target里去。
在这里插入图片描述
整个的过程实际上是:转换逻辑被转化成一个calculationscenario,然后这个calcScenario内置在一个columnview里。当去从源取数的时候,DTP创建了基于这个columnview的select 语句。然后这个calcscenario的处理逻辑就被应用在源里,通过一步insert as select在HANA数据库搞定数据传输。(读起来乱七八糟的,为了能直接用SQL,SAP也是蛮拼的)不过作为一个代码渣,SQL我也不是很熟啊😂😂

在转换被激活的时候,所有的HANA运行对象就被生成了。
在这里插入图片描述

在这里插入图片描述
这个其实就是转换属性里的Analysis Process和一个Active Routine Class.仔细看就是个存储过程。
在这里插入图片描述
那接下来看看这个expert routine里面怎么写的,可得有点什么限制,才能搞到数据库那里头去。真是的,就像搞财务的非得把名字起的那么拗口。AMDP听起来好像很高大上的样子。。。
在这里插入图片描述
有入参intab和出参outtab
入参显然就是源数据包,出参就是结果数据包。

如果咱是一般ABAP的写法,那就是Loop 源数据到工作区间,然后一条一条处理。
但是AMDP是按一个block来insert as select 的处理方法。它实际上是AMDP类的一个方法。

这个AMDP class它不能在SE24或者SE80上改的,只能在BW Modeling Tools里的ABAP Development Tools里面去修改。就是ADT上弄。
这个弄起来很简单,就是ADT右键新建ABAP class。找不到就other。然后再建一个program去调用。
在这里插入图片描述
不过咱这个是在转换里,其实它自动给建好了,入参出参就是source package和target package。

如果你已经有了转换了,转换里有code了。那你再新建一个expert routine会被要求删除现有的逻辑的。也就是你开始例程,字段例程,公式,结束例程都会被删掉。
其实这个就是对AMDPclass的接口IF_AMDP_MARKER_HDB的实现。
READ ONLY shi是说只能用DML语言,不能用DELETE,UPDATE,INSERT。
看例子语法很简单。在这里插入图片描述语法是啥样的呢?看个老的例子:这个就是个1对1的转换,没做任何操作。你做了更改之后,就要激活这个方法,然后退出到转换里再激活一下转换。在这里插入图片描述
这里就遇到一个问题了,因为我们经常要去在例程里搞look up.
那其实要用到其他的表的。那我怎么在这个AMDP里面去读ABAP的表、视图,FM呢?
那肯定是要声明的。也就是要加个USING。
再来看个例子。
下面这个图里的第3个小标,是你真正去执行AMDP的时候,后台会给你的intab和outtab给建一个view,同时给你的内表也建个临时的view。这个底层的咱不管它怎么搞的。咱只需要加一个Using,就能用到DDIC的表了。
在这里插入图片描述

3. 怎么去分析、debug一个AMDP expert routine的转换

前面讲其实这个SQL是在ColumnView的CalculationScenario里被Calculation engine执行的。DTP的过滤值会被占位符传递给calc engine。所以DTP的过滤值不会像ABAP runtime那样出现在where条件里了。(这个在DTP的log里能看到的)

转换里的例程Debug,其实我到现在都是稀里糊涂的。我平时就expert mode去debug。但是这种AMDP好像不一样。它这没有generated abap啊,也不像是在program里能直接去debug。那咋整呢?
在这里插入图片描述
对于一个要去运行数据库SQL的转换,怎么debug?对于一个用SQL Script写的在AMDP 类的AMDP方法里实现的存储过程。它这各逻辑下推到数据库层去执行的时候,咋看啊?首先咱得认识下AMDP Debugger.
首先,去你转换的技术信息里:
在这里插入图片描述
点开这个A版本的:
在代码段的行上有蓝色块的地方,右击开debugger。
然后去双击打断点。
在这里插入图片描述
灰色断点:Debugger未激活
绿色断点:Debugger激活,断点确认
蓝色断点:Debugger激活,断点确认中

断点设置好了之后,去DTP里跑debug。还可以选位置。当然我不选了。
接着就进入到sql script debugger了。这里头跟ABAP的debugger有点不一样。但是功能还是靠拢的。
这个转换经常被覆盖住,这个要点下,转换到SQL debugger去。
在这里插入图片描述
接下来进入debug。
在这里插入图片描述
然后就是往下跑:
F8:下一个断点或者结束。
红方块:结束debugger
disconnect:断连
F5:单步跑
F6:跑到下一条,如果下一条是个call的method啥的,整段跑完,不进去了。
F7:把现在进去的这个method直接跑到回到caller。或者跑到底。
F8:跑到光标所在行。

在这里插入图片描述
去variable看值。就是没办法去像ABAP一样改值。因为它都跑完了。
在这里插入图片描述
双击查看intab和outtab的值。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xiaomici

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

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

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

打赏作者

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

抵扣说明:

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

余额充值