张伟磨刀霍霍,带着10个大杀器,就攻入了bApI的腹地,开始了正式的探宝!
进入bApI界面后,张伟开始了剖析,界面有两种查找bApI的方式,一种是层级菜单模式,一种是关键字模式,张伟准备了10个探索的诱饵,直接奔着关键字模式就去了!
首先是主数据,按照关键字往下,没滑动多少,就找到了“customer”客户主数据!毕竟是字母c开头!
进去后,张伟发现,点开后,下拉很多具体的bApI,有“create、edit、change、delete.......”等等,拉下来有几十个bApI!
目光移到了右边,张伟发现了熟悉的身影“KNA1”,非常好,自己写报表用过无数次的客户主数据的表,但是在这里这个“KNA1”的抬头名变了,变成了“object type”对象类型?
什么鬼!为什么不叫table名了?叫“object type”这是几个意思?object,对象,面相对象?
张伟想起,结出实心蓝丹时,对程序语言进行了分代,第一代面向机器如汇编语言,第二代面向过程如c语言,第三代面向对象如Java语言,第四代面向应用如张伟现在做SAp的AbAp语言,当然后面张伟对第四代又进行了细化,第四代,应该是面向特定方向的应用,张伟现在这个AbAp语言,就只能在SAp里使用,只能编辑SAp的程序,不能编辑其他需求的程序,因此应用起来很窄,但是封装非常的完善,基本上把ERp这个领域的常规处理逻辑都封装好了,直接使用即可!因此第四代会有很多种面向最终应用的语言,比如面向动画的、面向工程的......只在自己领域使用的编程语言!
而张伟结出的SAp实心蓝丹,是没有第三层面向对象程序层的,从c语言层,直接就到了AbAp层!当时张伟是有点想不通的!觉得这和自己划分的4代编程语言,有冲突,中间少了一层!
当时想如果中间加一层面向对象层,可是AbAp又不是面向对象,张伟编程时明显没有感受到,面向对象的程序思维习惯!AbAp给张伟的感觉就是简单,比Java,c#等这些正统的面向对象编程语言来说,就太简单了,而且编程效率很高,基本就是直接面向最终用户需求去的!因此张伟就把当时结出的SAp蓝丹直接把第三层定义成了AbAp程序层!
可是现在打算结第六层丹时,居然跳出了这么一个“object”的玩意,张伟就有点懵圈了!而且跳出的这个还是对“KNA1”客户主数据表!
难道是把KNA1看做一个对象,进行bApI编程?
张伟诞生了这个想法,异常的兴奋,可能第六层一开局就封层结丹了,同时好像觉得很合理,那么需要验证下了!
张伟手上准备的大杀器,探路诱饵还有很多,现在才用了一个“客户主数据”甚至都还没用完,就有收获了,现在需要抛出第二枚、第三枚诱饵了!
张伟很是兴奋啊,可以抛诱饵,代表鱼儿已经上钩了啊!可以往前猛攻了!
丢第二个探路诱饵“vendor”供应商主数据,V首字母排在最后,张伟基本上拉到了底部才找到!
张伟迫不及待的点开,心中默念这“LFA1”,这是供应商主数据的表,点击后迅速看向了右边的信息栏!
我靠!果然!熟悉的“LFA1”表出现在眼前,NNd多么熟悉的表!LFA1自己在当时的报表编写中使用了无数次,对这个表简直是如数家珍!
现在他在自己期待的位置,“object type”的后面就是“LFA1”.
该放第三个探路诱饵“material:物料主数据”了,张伟期待的点开了这个菜单,心中无比笃定,出现那个意料之中的,熟悉表名“mARA”自己写报表,用过无数次的物料主数据表!
当点开这个界面时,张伟石化了!不是期待中的“mARA”而是一个完全陌生的“object type:bUS1001”!
我靠什么情况!上面明明标注的对象名是“material”为什么对象类型不是“mARA”?
张伟有点丈二和尚摸不着头脑了!懵叉叉了!
张伟马上又抛出了,剩下的诱饵!都是那种不认识的,不熟悉的对象类型名!
张伟有点晕晃晃的了,难道前面两个自己眼花了!看错了!
于是张伟又去看了客户、供应商主数据,没有变啊!就是那两个表“KAN1和LFA1”没有错啊!
那为什么只有这两个,而其他的都不是了?张伟陷入了困惑!难道自己的推导逻辑错了么吗?张伟有点自我怀疑了!
张伟想,AbAp语言跨越了一个程序语言分代,那么中间肯定需要在某个地方补齐的,现在自己差不多找到了这个分代的补齐地方了!
那为什么,前面两个是自己认为正确的面向对象逻辑思维,设定的对象!
而后面这些都不是了?这是为什么啊!
但是他们的对象名,都是对的!物料的对象名“material”,采购订单的对象名“purchaseorder”....,但是他们的对象类型,为什么不是对应的数据表名了?
NNd!这是什么情况!张伟有点抓狂了!
对象名是和自己面向对象的认知匹配的!可是对象类型不是啊!
fuck!哪里出错了!哪里有问题?张伟想抓耳挠腮!办公室的环境有点不允许!
NNd,厕所,放点水去!换换脑子!
回来后,张伟心情有点平复了!
张伟不知道哪根筋搭错了,双击了下对象名!
我靠!暗门!居然有暗门!
跳出新的内容了!新大陆!
NNd还有暗门啊!这宝藏设计的也够精巧的!
哈哈!张伟有种柳暗花明的感觉啊!
点进去后,映入眼帘的是“business object:bUS2012 purchase order”!名字变了!变成了商业对象!或者叫业务对象,更加的贴切!
张伟现在这个对英文的翻译能力,练出来了,不过仅仅只针对这种,SAp专业的词汇翻译!而且是单词模式,不是那种整句整句的!
“业务对象”!妥了,这个命名妥了!对啊就应该叫业务对象!采购订单,就是一种业务形态的单体啊!也就是一种业务对象啊!如果用表反而不对,因为采购订单,有两个表,一个单头,一个单身!用表反而不对,用业务对象反而是对的!
但是,至少有“EKKo”这个实体的表数据对象存在吧,找找看?
张伟往下看,还有5个下拉菜单,都是合起来的,其中有一个“Key fields”关键字段!这不就是表么!
张伟兴奋的点开!我嘞个去!妥了!
“EKKo”!心心念念,梦寐以求,朝思梦想.......,张伟把所有能想到,思念一个人的词语都想了一遍!对着这个EKKo在心里默念了一通!
NNd!妥了!
张伟这才仔细看了下另外4个菜单内容,更加妥了!就是面向对象的思维啊!
他们是“Interfaces:接口,Attributes:属性,methods:方法,Events:事件”!
NNd妥妥的面向对象设计思路啊!
张伟发现与采购订单处理相关的,所有bApI都在methods:方法里!
张伟立马查看了自己准备的其他几个诱饵!
NNd!
妥了,都是这样的结构!包括最开始的供货商、客户主数据,也是一样!
张伟觉得,这个“business object:业务对象”的取名,简直是太贴切了!客户、供应商主数据为什么直接用数据表名来当业务类型名,估计是太简单了,直接就用表名了!而其他为什么不用?因为复杂了啊!业务对象需要涵盖太多的对象实体,直接用表名实体,估计涵盖不住吧!或者干脆就是那个程序当时懒!搞个简单的名字!
哈哈!张伟觉得懒这个解释是正解!基于奥卡姆剃刀推导而来的结论!
张伟为什么特别在意这个表,和对象的关联啊?以及这个business object:业务对象取名觉得很贴切啊!
张伟推导的SAp结丹,是层状的,其次是网状的!
现在张伟结出的第5层,是数据表,第五层和第四层的字段是链接的,第五层表间也是链接的,其实表间的链接张伟是基于自己写报表推导出来的,而没找到实例佐证,现在还差向上第六层和表的联系了!
现在妥了了!因为业务对象啊“business object:业务对象”,比如采购订单,有两个实体表“EKKo,EKpo”,而客户主数据,一个表就行“KNA1”,因此对采购订单这种,有多个实体对象的,如果从业务对象的角度,就不能只用一个表名,来定义对象类型了!就得重新命名了!
以采购订单为例,EKKo,EKpo,这两个实体表,组合成了一个业务实体,采购订单,也就是业务对象!
这才是,当时自己为什么只找到供应商,客户的业务对象类型,就是表名,其他的都是被重新定义了业务类型名的真正原因!
同时这也是第六层真正的联系!
每个业务对象,包裹了一个,或者几个实体的表!表和业务对象,在bApI里,基于业务逻辑融合在一起了!也就是表间关系,其实是被bApI定义的,张伟之前认为表和表之间有联系,仅仅是从结果来考虑的,因为报表取数需要他们联系在一起,才能取到正确的报表数据!
而为什么要联系,怎么联系的,张伟是不知道的!现在都知道了,因为是由bApI帮他们联系起来的啊!
第六层结丹,正式完成了!
第五层是表,第六层是bApI层!或者叫业务对象层!一个业务对象,有很多个bApI!每个bApI,定义了表间的关系!
第五层从此和第六层贯通了!
张伟把SAp的结丹道统,推向了第6层!结出了拥有1.2.3.4.5.6层的实心SAp蓝丹!