您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何分析SAP ABAP關鍵字語法圖和ABAP代碼自動生成工具Code Composer,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
小編做SAP CRM Fiori應用開發時,在學習JavaScript時,讀過這本書:
書中使用這種語法圖講解JavaScript的語法:
其實ABAP幫助文檔里也存在類似的語法圖,只是藏在一個不起眼的角落,不為大家所熟知:
以關鍵字APPEND為例,查看其語法圖:
單擊超鏈接,語法圖就展示出來了,我覺得比幫助文檔里的文字描述直觀得多:
點擊問號,可以查看圖里每個組成部分的詳細說明:
我們有時候發現編寫的ABAP代碼,運行時不能按照自己的期望工作,往往是因為對ABAP幫助文檔里描述的ABAP關鍵字的功能理解得似是而非。如果你閱讀有的關鍵字幫助文檔時,感到晦澀難懂時,不妨換個角度,看一看它的語法圖,說不定能夠豁然開朗。
Jerry之前學習過SAP Commerce,在搭建開發環境執行ant all命令行進行項目構建時,發現會自動生成大量的.java文件。我的同事告訴我,這些Java文件的內容,是基于一個叫做Velocity的Java模板引擎生成的。
這些位于Hybris安裝包內,以.vm結尾的文件,即Velocity的模板文件:
打開這些模板文件,發現由下圖藍色區域所示的靜態內容和紅色區域所示的變量組成。
在基于這些模板文件生成Java文件時,以$開頭的變量會被運行時計算出的實際值替換,例如$currentDateTime被替換成實際執行ant all命令行構建項目的時間戳。
一個基于上圖模板文件生成的Java文件的例子:
那么ABAP里有沒有類似Java Velocity這種模板引擎呢?
和JavaScript一樣,ABAP里也有字符串模板(String Template)的概念:
ABAP字符串模板定義在兩根豎線之內,如上圖第14行代碼所示。字符串模板里包含靜態的字符串文本和ABAP變量名。在運行時,這些充當占位符的ABAP變量會被其實際包含的值所取代。
下圖是JavaScript里的字符串模板的一個例子,只不過分隔符從ABAP的豎線換成了單引號:
使用ABAP的字符串模板,我們同樣可以實現類似Java Velocity動態生成代碼的需求。Jerry之前的文章 淺談Java和SAP ABAP的靜態代理和動態代理,以及ABAP面向切面編程的嘗試 曾經介紹過。
將需要動態創建的ABAP類的源代碼用字符串模板拼湊好,存儲到內表lt_source中,然后調用關鍵字GENERATE SUBROUTINE POOL,創建生命周期只存在于當前會話期間內的臨時ABAP類。
如果想生成全局ABAP類,即生成之后能夠持久化在ABAP服務器上,并且能夠通過SE24和SE80打開,則將拼湊好的包含ABAP類實現源代碼的內表傳給ABAP類的創建API,即函數SEO_CLASS_CREATE_COMPLETE.
下圖代碼根據內表mt_sourcecode里存儲的內容,在$TMP包下創建了一個新的ABAP類。
以上就是ABAP最常用的兩種自動生成代碼的方式。
其實還有第三種方式,應用在SAP一些框架比如BRFplus自動生成ABAP類的場景里:
可以通過關鍵字ABAP CODE COMPOSER找到幫助文檔。
下面Jerry就通過一個實際的例子介紹如何使用ABAP Code Composer自動生成代碼。
和Java Velocity思路一樣,我們基于一個ABAP模板自動生成新的代碼。創建一個ABAP Include充當模板,取名ZSINGLETON:
模板代碼如下,定義了一個用單例設計模式(Singleton)實現的ABAP類的基本骨架。
這個ABAP模板里以$開頭和$結尾的變量,作用和Java Velocity里的變量類似,充當占位符的角色,運行時被模板的調用者傳入的實際值替換。
而@if和@end, 和Velocity的#if與#end一樣,在根據模板生成實際代碼時,提供了簡單的條件分支處理和控制功能。
我的ZSINGLETON模板里總共定義了4個變量:
$I_PARAM-class$
$I_PARAM-global$
$I_PARAM-interface$
$I_PARAM-exception$
最后寫一個ABAP程序,使用Code Composer消費ZSINGLETON模板,將上述4個變量的實際值傳入,生成一個可以持久化保存的ABAP單例類,名稱為第18行代碼指定的ZCL_JERRY.
下圖是通過ABAP模板和ABAP Code Composer生成的ABAP類的源代碼,可以看到之前模板里通過$定義的變量,已經被調用模板生成ABAP類時傳入的實際值替換了。
關于如何分析SAP ABAP關鍵字語法圖和ABAP代碼自動生成工具Code Composer就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。