Restful ABAP Programming模型系列二:Action和Validation的實現
相信透過Jerry的前一篇文章 30分鐘用Restful ABAP Programming模型開發一個支援增刪改查的Fiori應用,想必大家對Restful ABAP Programming模型已經有了一個最基本的瞭解吧?
簡單回憶一下,我們在前一篇文章裡,在SAP雲平臺ABAP程式設計環境裡建立了一個Z表,然後基於這張自定義資料庫表建立了CDS view,基於該view建立Service Definition,把view暴露成服務,然後透過Behavior Definition實現對Z表的增刪改查。
第一篇文章有朋友留言,詢問透過RAP模型生成的Fiori應用如何部署到雲上。這位朋友忘記了Jerry從始至終都是在SAP雲平臺ABAP環境上操作的啊,所以這個生成的Fiori應用也直接在雲上可用了。
雙擊Service Binding裡的TravelProcessor或者右鍵選單裡選擇Open Fiori Elements App Preview, 就可以訪問Fiori應用。
稍稍有點經驗的顧問朋友們都明白,一個模型只有增刪改查的功能是不能滿足客戶實際需求的。在SAP Cloud for Customer裡,開發顧問可以在Cloud Application Studio裡建立beforeSave和afterModify這些指令碼檔案並實現業務邏輯,Jerry也曾經介紹過,它們相當於S/4HANA BOPF框架裡建立的determination.
除了上述在執行時特定的時間點才能觸發(beforeSave,afterModify)的邏輯外,Action機制則提供了自由度更高的業務邏輯編寫機制。體現在UI上,Action邏輯一般透過UI按鈕觸發。
Validation比較容易理解——自定義的資料校驗邏輯。
本文按照順序介紹Action和Validation.
為了介紹在Restful ABAP Programming模型下如何開發Action,Jerry需要在第一篇文章建立的SFLIGHT表增添一個表示航班預訂狀態的欄位,並開發一個Action,當其被呼叫時,修改這個狀態。
(1)在資料庫表裡增添一個OVERALL_STATUS欄位:
當然在對應的CDS view上也要透過@UI相關的註解把這個欄位配置到UI上。透過註解lineItem和identification分別把view的這個欄位顯示在搜尋結果的table控制元件和航班資訊明細頁面的欄位上。透過label指定UI上顯示的標籤,透過註解的dataAction把這個狀態欄位繫結到一個名為acceptTravel的Action上。
重新啟用CDS view後,我們就能在工具欄上看到CDS view裡透過label維護的標籤文字為Accept Travel了:
因為缺乏實現,此時點選無效果。
(2) 在Behavior Definition的宣告部分,新增如下三行程式碼:
- action ( features: instance ) acceptTravel result [1] $self;
- validation validateCustomer on save { field customer_id; }
- validation validateDates on save { field begin_date, end_date; }
上面的程式碼除了定義一個Action外,還宣告瞭兩個Validation,在特定欄位發生變化並儲存時觸發校驗邏輯,欄位名稱維護在大括號內。
剩下的就是ABAP程式設計實現了。在Behavior Definition的ABAP實現類裡,宣告下面這些ABAP類方法,來實現Behavior Definition裡的定義。
首先看Action的實現,位於ABAP方法SET_STATUS_COMPLETED裡:
將輸入引數travel_id指定的航班預訂記錄的狀態欄位置為A - Accepted.
現在我選中ID為22這條記錄,點選Accept Travel按鈕:
點選之後,狀態成功被置為A了:
再來加上對航班日期的校驗:如果航班結束日期在起始日期之前,顯然不合理,需要彈一條錯誤訊息。
第87行到第91行把輸入引數包含的航班資訊讀到內表lt_travel_result裡,然後第95行把結束日期和起始日期做比較,如果後者早於前者,進入97行開始的IF分支,彈一個錯誤資訊到UI.
錯誤資訊仍然和傳統的ABAP程式設計一樣,透過ABAP Message類定義:
現在把結束日期維護成起始日期之前,儲存的時候就看到了期望的錯誤訊息:
至此,我們這個SFLIGHT模型除了增刪改查之外,又增添了Action和Validation的功能。
這個系列的下一篇文章,Jerry會聊聊在SAP雲平臺ABAP程式設計環境裡對基於Restful ABAP Programming模型應用的簡單除錯,敬請期待。
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2659280/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SAP Restful ABAP Programming 程式設計模型的 Action 實現和雲端除錯介紹REST程式設計模型除錯
- Jerry帶您瞭解Restful ABAP Programming模型系列之三:雲端ABAP應用除錯REST模型除錯
- 30分鐘用Restful ABAP Programming模型開發一個支援增刪改查的Fiori應用REST模型
- 如何基於Restful ABAP Programming模型開發並部署一個支援增刪改查的Fiori應用REST模型
- 如何使用 Restful ABAP Programming 程式設計模型開發一個支援增刪改查的 Fiori 應用REST程式設計模型
- RESTful架構和實現級別REST架構
- SAP ABAP和Java的動態代理實現Java
- Standard ABAP Debugger 和 Classic ABAP Debugger 的實現差異
- .NET雲原生應用實踐(二):Sticker微服務RESTful API的實現微服務RESTAPI
- Spring Validation實現原理分析Spring
- structs2的action實現方式Struct
- SAP ABAP Gateway Client 的 ABAP 實現,重用 HTTP ConnectionGatewayclientHTTP
- SAP ABAP Programming Tutorials - Free Training CourseAI
- nodejs實現restful APINodeJSRESTAPI
- 使用 Flask 實現 RESTful APIFlaskRESTAPI
- ABAP面試題系列:寫一組會出現死鎖(Deadlock)的ABAP程式面試題
- SRS系列二——初步實現HLS直播
- 基於MySql和Sails.js的RESTful風格的api實現MySqlAIJSRESTAPI
- Bing每日桌布的RESTful介面實現REST
- 實現一個簡單的 RESTful APIRESTAPI
- MaterialDesgin系列文章(二)NavigationView和DrawerLayout實現側滑功能NavigationView
- 委託、Lambda表示式、事件系列06,使用Action實現觀察者模式,體驗委託和事件的區別事件模式
- Java的Covariance設計原理和SAP ABAP的模擬實現Java
- DSSM模型和tensorflow實現SSM模型
- SpringBoot Restful 介面實現Spring BootREST
- ASP.NET Core Authentication系列(二)實現認證、登入和登出ASP.NET
- MaterialDesign系列文章(二)NavigationView和DrawerLayout實現側滑功能NavigationView
- 如何使用ABAP Restful API進行程式碼的全文搜尋RESTAPI行程
- iOS 如何實現 Aspect Oriented Programming (上)iOS
- iOS 如何實現 Aspect Oriented Programming (下)iOS
- iOS 如何實現Aspect Oriented Programming (上)iOS
- iOS 如何實現Aspect Oriented Programming (下)iOS
- 保姆教程系列二、Nacos實現註冊中心
- 如何使用Node.js、TypeScript和Express實現RESTful API服務Node.jsTypeScriptExpressRESTAPI
- ABAP Development Tools的語法高亮實現原理dev
- SAP ABAP OData 服務的 $count 操作實現
- dubbo~javax.validation和jakarta.validation的介紹與排雷Java
- 利用Github Action實現Tornadofx/JavaFx打包GithubJava