昨天说了再往下来看,其实有一点我觉得不应该。
为啥在最底层数据获取那里搞了这么多逻辑。
不合理啊。
不管了,下一层,数据准备层,被弄了个export routine。
例程就是用来帮助定义复杂的转换规则的。
从下面这个图就一眼看出来了。
其实例程就是本地的ABAP类,包括预定义的定义区域和实现区域。
类这个东西么,我都忘了哈哈哈。反正是有定义,有方法,然后有什么global定义,private定义啥的。C语言的时候学的。类的实例是对象。
这个ABAP的类么,就那么个意思。装了一些定义的数据类型,还有操作的传值的函数。就是说我有这些东西要用,然后要这么个用法。
入栈和出栈的参数类型,例程(ABAP方法)的文字说明都存储在定义区域。实体在实现区域。
开始例程
开始例程呢,是转换开始的时候,每个数据包都走一遍开始例程。开始历程用跟source的结构一样的表来存输入输出参数。这里又有一个我不能明晰的概念:结构和表。。。
反正表是照着这个结构来定义的。
开始例程就是用来执行初步的计算的,一般来改掉这个包里的数据,或者删掉一些数据。以遍后续执行其他操作。
字段例程
这个就是对于关键值或者特性字段,直接在转换上定义一个routine,输入输出值得在selected fields里面先加上。这个我之前写过。
结束例程
这个和开始差不多,也会有个跟target的结构一样的表,来储存输入输出参数,一般都是后处理了。删除不需要的数据,执行数据检查,或者和前一篇一样,从别的表join下数据来。
专家例程
特殊情况下适用的。标准例程如果可以实现,干啥要用专家例程。
有了专家例程,就看不到转换规则拉的线了,就是都是你写的。系统会给你删掉你的线。
如果创建转换后,你选了export routine,然后就会跳出来个对话框,告诉你是否要删掉转换,就是默认连好的线。
进到这个expert routine我就懵了,这是啥玩意啊。啥也没有就直接procedure了。
这个Procedure我知道是程序的意思。怎么直接类进来就给我展示程序了呢,不应该是一大串代码么,然后包括定义和实现么?
procedure
procedure是用脚本写的一个小程序,一般是SQL脚本?我真是不知道。
我依稀记得有个stored procedure,是个存储结构,也就是个可以复用的SQL脚本。保存在数据字典里,那不就跟结构很像,不行了,我脑子不够用了,要晕了。
那这个procedure是啥?是HANA数据库的小过程?我真是不知道该怎么翻译这个词。
AMDP
我刚才看到这个词,是ABAP managed database procedure.
ABAP来管的,管个啥啊?是存在ABAP repository里,并且由ABAP传输来传输的。所以叫个AMDP。
具体咱也不知道,说啥就是啥吧。
反正意思就是,这个AMDP的实现呢,是以HANA SQL 脚本语言来写的,在HANA数据库上执行的。
然后是HANA数据库上推荐的ABAP代码优化模式之一,下推到HANA。
说的牛哄哄的。
那它具体咋实现呢?原话是这么说的:
AMDP is implemented as method of a global ABAP class.
嗯,行吧。
可是我还是不知道这玩意怎么弄的。
AMDP开发环境
这个开发,我真是以前没听过。唉,经验少。
现在我知道了,这个只在基于Eclipse的开发环境中才能开发,不是在se24那边弄。那就是在HANA studio咯,我来看看:
说是这个ABAP Development Tools.
我看了下我装了这个。
在HANA Studio里面还真能打开。
但是这个在se24里面也是能看见的。打开了也就是这个样子,和双击专家例程一样的。
根据之前那段英文,就是说AMDP是作为ABAP global class的一个方法来实现的。那这个global class我没看见啊。代码里面我只看到了一个interfaces 我不懂是啥玩意的。
而且上面这个图,也是这个接口 。
这个接口和类又是啥意思啊?
这个global class,哦~难道他俩是一个意思?Class/Interface 这个标题这里,难道暗示了这个?
这个类,包含了这个接口 : IF_AMDP_MARKER_HDB 这是AMDP类?
行吧,这个就是AMDP类。
来看看method:
这里也还挺规范的,写了谁开发的,开发的功能。
BY Database Procedure就说明了是个AMDP method
FOR 说明了AMDP运行的数据库系统,HDB就是HANA database
LANGUAGE就说明了数据库执行语言,这里是SQL
OPTIONS 只能READ-ONLY。数据库表给存储过程就只能读。
有时候还有个USING 就是用的哪个透明表或数据字典视图。
大型SQL语句现场。数据库是HANA Database。
这个上层实现的逻辑呢,是因为它这个值有两个currency货币。
一个是本地货币,一个是凭证货币。
它先把值用两个select语句分隔开,分别配上不同的货币单位。
然后再union下。
但是看了这个程序,我还是不懂。。。😂
我不懂它这个逻辑,我就只看到把所有的source分成货币类型是00和10的两部分,然后再Union。
这是什么鬼逻辑。
不管了,我来执行下看看:
乱写两条
执行一下
得到四条
行吧,就是这个逻辑😂
后续有空再看。