Restful ABAP Programming模型系列二:Action和Validation的實現

i042416發表於2019-10-09

相信透過Jerry的前一篇文章 30分鐘用Restful ABAP Programming模型開發一個支援增刪改查的Fiori應用,想必大家對Restful ABAP Programming模型已經有了一個最基本的瞭解吧?

簡單回憶一下,我們在前一篇文章裡,在SAP雲平臺ABAP程式設計環境裡建立了一個Z表,然後基於這張自定義資料庫表建立了CDS view,基於該view建立Service Definition,把view暴露成服務,然後透過Behavior Definition實現對Z表的增刪改查。


Restful ABAP Programming模型系列二:Action和Validation的實現


第一篇文章有朋友留言,詢問透過RAP模型生成的Fiori應用如何部署到雲上。這位朋友忘記了Jerry從始至終都是在SAP雲平臺ABAP環境上操作的啊,所以這個生成的Fiori應用也直接在雲上可用了。

雙擊Service Binding裡的TravelProcessor或者右鍵選單裡選擇Open Fiori Elements App Preview, 就可以訪問Fiori應用。


Restful ABAP Programming模型系列二:Action和Validation的實現




Restful ABAP Programming模型系列二:Action和Validation的實現


稍稍有點經驗的顧問朋友們都明白,一個模型只有增刪改查的功能是不能滿足客戶實際需求的。在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欄位:


Restful ABAP Programming模型系列二:Action和Validation的實現


當然在對應的CDS view上也要透過@UI相關的註解把這個欄位配置到UI上。透過註解lineItem和identification分別把view的這個欄位顯示在搜尋結果的table控制元件和航班資訊明細頁面的欄位上。透過label指定UI上顯示的標籤,透過註解的dataAction把這個狀態欄位繫結到一個名為acceptTravel的Action上。


Restful ABAP Programming模型系列二:Action和Validation的實現


重新啟用CDS view後,我們就能在工具欄上看到CDS view裡透過label維護的標籤文字為Accept Travel了:


Restful ABAP Programming模型系列二:Action和Validation的實現


因為缺乏實現,此時點選無效果。


Restful ABAP Programming模型系列二:Action和Validation的實現


(2) 在Behavior Definition的宣告部分,新增如下三行程式碼:


Restful ABAP Programming模型系列二:Action和Validation的實現


  • 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裡的定義。


Restful ABAP Programming模型系列二:Action和Validation的實現


首先看Action的實現,位於ABAP方法SET_STATUS_COMPLETED裡:


Restful ABAP Programming模型系列二:Action和Validation的實現


將輸入引數travel_id指定的航班預訂記錄的狀態欄位置為A - Accepted.

現在我選中ID為22這條記錄,點選Accept Travel按鈕:


Restful ABAP Programming模型系列二:Action和Validation的實現


點選之後,狀態成功被置為A了:


Restful ABAP Programming模型系列二:Action和Validation的實現


再來加上對航班日期的校驗:如果航班結束日期在起始日期之前,顯然不合理,需要彈一條錯誤訊息。

第87行到第91行把輸入引數包含的航班資訊讀到內表lt_travel_result裡,然後第95行把結束日期和起始日期做比較,如果後者早於前者,進入97行開始的IF分支,彈一個錯誤資訊到UI.


Restful ABAP Programming模型系列二:Action和Validation的實現


錯誤資訊仍然和傳統的ABAP程式設計一樣,透過ABAP Message類定義:



Restful ABAP Programming模型系列二:Action和Validation的實現


現在把結束日期維護成起始日期之前,儲存的時候就看到了期望的錯誤訊息:


Restful ABAP Programming模型系列二:Action和Validation的實現


至此,我們這個SFLIGHT模型除了增刪改查之外,又增添了Action和Validation的功能。

這個系列的下一篇文章,Jerry會聊聊在SAP雲平臺ABAP程式設計環境裡對基於Restful ABAP Programming模型應用的簡單除錯,敬請期待。

要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":



Restful ABAP Programming模型系列二:Action和Validation的實現


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2659280/,如需轉載,請註明出處,否則將追究法律責任。

相關文章