我国古代,形容一个人武艺全面,会说他/她“十八般兵器样样精通”。所谓十八般兵器(有时也称十八般武艺),即刀、枪、剑、戟、斧、钺、钩、叉、鞭、锏、锤、抓、镋、棍、槊、棒、拐、流星锤。
![9466c6dcb3f61579f63e4e897119f421.png](https://img-blog.csdnimg.cn/img_convert/9466c6dcb3f61579f63e4e897119f421.png)
代表人物之一就是《水浒传》里的八十万禁军教头王进,原文有云:
太公道:“教头在上∶老汉祖居在这华阴县界,前面便是少华山。这村便唤做史家村,村中总有三四百家都姓史。老汉的儿子从小不务农业,只爱刺枪使棒;母亲说他不得,一气死了。老汉只得随他性子,不知使了多少钱财投师父教他;又请高手匠人与他剌了这身花绣,肩胸膛,总有九条龙。满县人口顺,都叫他做九纹龙史进。教头今日既到这里,一发成全了他亦好。老汉自当重重酬谢。”王进大喜道:“太公放心;既然如此说时,小人一发教了令郎方去。”
自当日为始,吃了酒食,留住王教头母子二人在庄上。
史进每日求王教头点拨十八般武艺,一一从头指教。
不觉荏苒光阴,早过半年之上。
史进十八般武艺,--矛,锤,弓,弩,铳,鞭,简,剑,链,挝斧,钺并戈,戟,牌,棒与枪,扒,...一一学得精熟。
多得王进尽心指教,点拨得件件都有奥妙。
史进的十八般武艺,都是王进传授的。史进后来上梁山,担任马军八虎骑兼先锋使第七名,在梁山108好汉中排第23位。徒弟尚且如此了得,师傅的实力就更加深不可测了。
![1f968bd87e61c38da119dba73e38a905.png](https://img-blog.csdnimg.cn/img_convert/1f968bd87e61c38da119dba73e38a905.png)
SAP ABAP领域也有对应的“十八般武艺”之说。
很多从事ABAP开发的朋友们,想必都阅读过这个文档的英文或中文版:
18 Techniques for Locating the Underlying Data of a Screen Field
在SAP GUI里查找一个屏幕字段对应的底层数据库表的18种方法
![20eb73202c3d3c066337c3869a79f90b.png](https://img-blog.csdnimg.cn/img_convert/20eb73202c3d3c066337c3869a79f90b.png)
作者是Dennis Barrett:
![eb6011d14dfe4491c30c26c8eee72d91.png](https://img-blog.csdnimg.cn/img_convert/eb6011d14dfe4491c30c26c8eee72d91.png)
到了Fiori时代,里面的很多办法都不再适用了。
本文介绍一种方法能找出Fiori UI上某字段对应的ABAP后台数据库存储表。虽然不一定足够通用,但确实能解决Jerry当时实际工作中遇到的一个问题。
这是SAP S/4HANA一个标准的Fiori应用: Product Master
![fe1b31fa08f48bf2748fc6a3a56175f2.png](https://img-blog.csdnimg.cn/img_convert/fe1b31fa08f48bf2748fc6a3a56175f2.png)
我的需求是,找到字段"Number of Goods Receipt"在后台是存储在哪张表里的。
下面是Jerry自己探索的详细步骤。
(1) 我们知道SAP UI5也是一个基于MVC的前端框架,框架支持双向绑定。在Chrome开发者工具里,找到这个UI字段绑定的模型字段名称:
NmbrOfGROrGISlipsToPrintQty
![8a7fedea5340851f9ebf7fc32b557693.png](https://img-blog.csdnimg.cn/img_convert/8a7fedea5340851f9ebf7fc32b557693.png)
(2) 找到该Product Master Fiori应用基于的OData服务,浏览器里输入其metadata url查看结果,找到字段NmbrOfGROrGISlipsToPrintQty的从属数据类型为:
C_ProductstorageType
![72e86fbaacba2d4749e33132b7687d43.png](https://img-blog.csdnimg.cn/img_convert/72e86fbaacba2d4749e33132b7687d43.png)
(3) 登录ABAP Development Tool,使用菜单"Open ABAP Development Object":
![3b974848e8dc4159eb43fe4977a3fdc6.png](https://img-blog.csdnimg.cn/img_convert/3b974848e8dc4159eb43fe4977a3fdc6.png)
把第二步找到的数据类型C_ProductstorageType,根据命名规范,将Type前面的值C_Productstorage作为关键字查询:
![15c09a7d6620fa8bc69eaa07355ee24a.png](https://img-blog.csdnimg.cn/img_convert/15c09a7d6620fa8bc69eaa07355ee24a.png)
排在结果列表第一位的C_PRODUCTSTORAGE, 是一个CDS view.
该视图从I_ProductStroageWD里读取数据,
![bdba2d2d84b44c8a1a112d650baa0036.png](https://img-blog.csdnimg.cn/img_convert/bdba2d2d84b44c8a1a112d650baa0036.png)
I_ProductStorageWD又从I_Productstorage里读取:
![6122164060eb879a1edd0cca69172e90.png](https://img-blog.csdnimg.cn/img_convert/6122164060eb879a1edd0cca69172e90.png)
最终,I_Productstorage从数据库表MARA里读取数据。
![79f67ba0542221685288e486234b0e43.png](https://img-blog.csdnimg.cn/img_convert/79f67ba0542221685288e486234b0e43.png)
在这个视图的源代码里,根据第二步找到的字段名称NmbrOfGROrGISlipsToPrintQty进行搜索,立即就找到了对应的数据库表MARA里的字段为wesch:
![d7291f4d43935657625039b070a5ae83.png](https://img-blog.csdnimg.cn/img_convert/d7291f4d43935657625039b070a5ae83.png)
再到SE16里打开MARA确认一下,发现Fiori UI上看到的23.671这个字段果然存储在MARA.WESCH里,任务完成。
![89eb37d3bf59f976d7571ce6e375528a.png](https://img-blog.csdnimg.cn/img_convert/89eb37d3bf59f976d7571ce6e375528a.png)