上一章講了在 Data Model View ( CDS View for BO Structure )基礎上創建 Projection View ( CDS View for BO Projection )。
SAP學習筆記 - 開發44 - RAP開發 Managed App 建 Projection View,Provider Contract,用 redirected to 設定父子關系-CSDN博客
本章繼續學習RAP相關的知識 -?New Service Definition,Metadata Extension。
- New Service Definition,Metadata Extension 里面的內容
- 基本上之前講的,lineItem,selectionField,Search,ObjectModel,Value Help,headerInfo 等等,這些內容都重新復習了一遍。
- 代碼的寫法上也有更為靈活的方案
目錄
1,New Service Definition
1-1,Z04_PV_Travel_M 修改
a),追加字段
b),@Metadata.allowExtensions: true - 允許Metadata放到單獨文件
1-2,New Metadata Extension -?Z04_PV_Travel_M_MD
1-3,New Service Definition -?Z04_SD_Travel_M
1-4,New Service Binding -?Z04_UI_Travel_M_V4
1-5,實驗一下
2,Metadata Extension -?Z04_PV_Travel_M_MD
2-1,加 lineItem,selectionField - 列對象,檢索條件對象
2-2,加?@Search.searchable: true - 搜索框
2-3,@ObjectModel.text - 顯示Code對應的Name/Text值
2-4,@Consumption.valueHelpDefinition - Value Help
2-6,@UI.identification /?@UI.facet - 顯示詳細頁面(Object Page)
2-7,@UI.headerInfo - Header
下面是詳細內容。
1,New Service Definition
Projection View建好了,下面該做 Service Definition了。
1-1,Z04_PV_Travel_M 修改
a),追加字段
-? _Agency.Name as AgencyName,? =》顯示代理店名稱
- _Customer.LastName as CustomerName,? =》顯示客戶名稱
- _Status._Text.Text as OverallStatusText :localized,? =》顯示總體狀態名稱,localized:本地化
b),@Metadata.allowExtensions: true - 允許Metadata放到單獨文件
因為咱們想要將Metadata單獨到一個文件當中,需要設置該annotation 為True
1-2,New Metadata Extension -?Z04_PV_Travel_M_MD
輸入Name,Description,Extended Entity,點Next
選模板,annotateView,然后點Finish
?
Ctrl + Space,然后選 Insert All,這樣就不用挨個輸入了哈👍
?
本來想先不加,然后再慢慢挨個加,結果直接報個錯,說至少得有一個😓,好吧
>No annotations defined. At least one annotation must be defined for 'Z04_PV_Travel_M'
?
先搞成這樣,Ctrl+F3,激活
1-3,New Service Definition -?Z04_SD_Travel_M
輸入Name,Description,點Next
選模板,只有一個:),點Finish
?
咱們把?Z04_PV_Booking_M,Z04_PV_BookSuppl_M 都給加上,然后激活
?
1-4,New Service Binding -?Z04_UI_Travel_M_V4
輸入Name,Description,Binding Type,點 Next
點Finish
Ctrl + F3,激活,然后點 Publish
?
1-5,實驗一下
就是這樣的哈
其實也可以查詢,點Settings,然后把想看的字段給調出來,就可以看啦,參照如下文章
SAP學習筆記 - 開發40 - RAP開發 Annotation的作用 @UI.headerInfo /@UI.lineItem/ @UI.selectionField/ @UI.facet等-CSDN博客
?
就像這樣,數據是可以檢索出來的。
但是這樣畢竟不方便嘛,下面咱們就讓畫面默認顯示這些字段
2,Metadata Extension -?Z04_PV_Travel_M_MD
2-1,加 lineItem,selectionField - 列對象,檢索條件對象
都是以前講過的,其中UI 有多個annotation的話,寫法上可以合并成下面這樣:
- @UI:{ lineItem:[{ position: 70 }],
? ? ? ? ? ? selectionField: [{ position: 70 }]
? ? ? }
刷新頁面,默認就顯示成這樣了
2-2,加?@Search.searchable: true - 搜索框
-?@Search.searchable: true
-?@Search.defaultSearchElement: true
TODO:好像沒好用,之前還是好用的啊,不知道差哪兒,以后再說
SAP學習筆記 - 開發42 - RAP開發 Annotation的作用3: @Search.searchable - 檢索功能,@Search.fuzzinessThreshold - 模糊查詢-CSDN博客
2-3,@ObjectModel.text - 顯示Code對應的Name/Text值
這里面需要注意幾點:
-?@ObjectModel.text 屬于 ABAP Level 的association,所以不能寫在 Metadata 文件中
- 下面的寫法是OK的,如果也可以簡寫成:@ObjectModel.text.element: [ 'AgencyName' ]
@ObjectModel.text: {
? ? element: [ 'AgencyName' ]
}
完整的代碼如下:AgencyName,CustomerName,OverallStatusText 都寫上
?
Agency ID,Customer ID 都好用
TODO:但是 Overall Status 好像不好用哈
好像不是不好用,而是沒有語言 JA 的文本吧
?
只有 E (English)的文本😓,好吧,代碼應該沒問題
?
把JA 的數據給加上
這樣就能顯示出來了
2-4,@Consumption.valueHelpDefinition - Value Help
對以下幾個字段添加 Value Help:
- AgencyId -?Table:/DMO/I_Agency Field:AgencyID
- CustomerId?-?Table:/DMO/I_Customer Field:CustomerID
- CurrencyCode?-?Table:I_Currency Field:Currency
- OverallStatus?-?Table:/DMO/I_Overall_Status_VH Field:OverallStatus
到目前這一步的 Metadata 文件的內容:
@Metadata.layer: #CORE
@Search.searchable: true
annotate view Z04_PV_Travel_M with
{@UI.lineItem: [{ position: 10 }]@Search.defaultSearchElement: trueTravelId;@UI:{ lineItem:[{ position: 20 }],selectionField: [{ position: 20 }]}@Search.defaultSearchElement: true@Consumption.valueHelpDefinition: [{ entity: {name: '/DMO/I_Agency',element: 'AgencyID'},label: 'Agency'}]AgencyId;// AgencyName;@UI:{ lineItem:[{ position: 30 }],selectionField: [{ position: 30 }]}@Search.defaultSearchElement: true@Consumption.valueHelpDefinition: [{entity: {name: '/DMO/I_Customer',element: 'CustomerID'},label: 'Customer'}]CustomerId;// CustomerName;@UI.lineItem: [{ position: 40 }]BeginDate;@UI.lineItem: [{ position: 50 }]EndDate;// BookingFee;@UI.lineItem: [{ position: 60 }]TotalPrice;@Consumption.valueHelpDefinition: [{entity: {name: 'I_Currency',element: 'Currency'},label: 'Currency'}]CurrencyCode;// Description;@UI:{ lineItem:[{ position: 70 }],selectionField: [{ position: 70 }]}@Search.defaultSearchElement: true@Consumption.valueHelpDefinition: [{entity: {name: '/DMO/I_Overall_Status_VH',element: 'OverallStatus'},label: 'Overall Status'}]OverallStatus;// OverallStatusText;// CreatedBy;// CreatedAt;// LastChangedBy;// LastChangedAt;// /* Associations */// _Agency;// _Booking;// _Currency;// _Customer;// _Status;}
刷新看效果:
- Agency ID:
?
- Customer ID:
- Overall Status:
2-5,@UI.hidden: true
雖然在畫面端存在,但是不顯示,設為 hidden:true
2-6,@UI.identification /?@UI.facet - 顯示詳細頁面(Object Page)
-?@UI.facet:在 Metadata里面添加,這個是詳細頁面的塊(字段顯示在其中)
-?@UI.identification:這是詳細頁面的字段
@Metadata.layer: #CORE
@Search.searchable: true
annotate view Z04_PV_Travel_M with
{@UI.facet: [{id: 'TravelDetail',purpose: #STANDARD,parentId: '',position: 10,label: 'Travel Detail',type: #IDENTIFICATION_REFERENCE}]@UI:{ lineItem:[{ position: 10 }],identification: [{ position: 10 }]}@Search.defaultSearchElement: trueTravelId;@UI:{ lineItem:[{ position: 20 }],selectionField: [{ position: 20 }],identification: [{ position: 20 }]}@Search.defaultSearchElement: true@Consumption.valueHelpDefinition: [{ entity: {name: '/DMO/I_Agency',element: 'AgencyID'},label: 'Agency'}]AgencyId;// AgencyName;@UI:{ lineItem:[{ position: 30 }],selectionField: [{ position: 30 }],identification: [{ position: 30 }]}@Search.defaultSearchElement: true@Consumption.valueHelpDefinition: [{entity: {name: '/DMO/I_Customer',element: 'CustomerID'},label: 'Customer'}]CustomerId;// CustomerName;@UI:{ lineItem:[{ position: 40 }],identification: [{ position: 40 }]}BeginDate;@UI:{ lineItem:[{ position: 50 }],identification: [{ position: 50 }]}EndDate;@UI:{identification: [{ position: 55 }]}BookingFee;@UI:{ lineItem:[{ position: 60 }],identification: [{ position: 60 }]}TotalPrice;@Consumption.valueHelpDefinition: [{entity: {name: 'I_Currency',element: 'Currency'},label: 'Currency'}]CurrencyCode;@UI:{identification: [{ position: 65 }]}Description;@UI:{ lineItem:[{ position: 70 }],selectionField: [{ position: 70 }],identification: [{ position: 70 }]}@Search.defaultSearchElement: true@Consumption.valueHelpDefinition: [{entity: {name: '/DMO/I_Overall_Status_VH',element: 'OverallStatus'},label: 'Overall Status'}]OverallStatus;// OverallStatusText;// CreatedBy;// CreatedAt;// LastChangedBy;@UI.hidden: trueLastChangedAt;// /* Associations */// _Agency;// _Booking;// _Currency;// _Customer;// _Status;}
看一下效果:
List Report 頁面,任意點一條
Object Page 顯示的沒啥問題,title 好像默認顯示了 Travel ID了哈
2-7,@UI.headerInfo - Header
到目前為止的代碼:?
@Metadata.layer: #CORE
@Search.searchable: true
@UI.headerInfo: {typeName: 'Travel',typeNamePlural: 'Travels',title: {type: #STANDARD,label: 'Travel',value: 'TravelId'}
}
annotate view Z04_PV_Travel_M with
{@UI.facet: [{id: 'TravelDetail',purpose: #STANDARD,parentId: '',position: 10,label: 'Travel Detail',type: #IDENTIFICATION_REFERENCE}]@UI:{ lineItem:[{ position: 10 }],identification: [{ position: 10 }]}@Search.defaultSearchElement: trueTravelId;@UI:{ lineItem:[{ position: 20 }],selectionField: [{ position: 20 }],identification: [{ position: 20 }]}@Search.defaultSearchElement: true@Consumption.valueHelpDefinition: [{ entity: {name: '/DMO/I_Agency',element: 'AgencyID'},label: 'Agency'}]AgencyId;// AgencyName;@UI:{ lineItem:[{ position: 30 }],selectionField: [{ position: 30 }],identification: [{ position: 30 }]}@Search.defaultSearchElement: true@Consumption.valueHelpDefinition: [{entity: {name: '/DMO/I_Customer',element: 'CustomerID'},label: 'Customer'}]CustomerId;// CustomerName;@UI:{ lineItem:[{ position: 40 }],identification: [{ position: 40 }]}BeginDate;@UI:{ lineItem:[{ position: 50 }],identification: [{ position: 50 }]}EndDate;@UI:{identification: [{ position: 55 }]}BookingFee;@UI:{ lineItem:[{ position: 60 }],identification: [{ position: 60 }]}TotalPrice;@Consumption.valueHelpDefinition: [{entity: {name: 'I_Currency',element: 'Currency'},label: 'Currency'}]CurrencyCode;@UI:{identification: [{ position: 65 }]}Description;@UI:{ lineItem:[{ position: 70 }],selectionField: [{ position: 70 }],identification: [{ position: 70 }]}@Search.defaultSearchElement: true@Consumption.valueHelpDefinition: [{entity: {name: '/DMO/I_Overall_Status_VH',element: 'OverallStatus'},label: 'Overall Status'}]OverallStatus;// OverallStatusText;// CreatedBy;// CreatedAt;// LastChangedBy;@UI.hidden: trueLastChangedAt;// /* Associations */// _Agency;// _Booking;// _Currency;// _Customer;// _Status;}
這樣就顯示了 Header
?
以上就是本篇的全部內容。
更多SAP顧問業務知識請點擊下面目錄鏈接或東京老樹根的博客主頁
https://blog.csdn.net/shi_ly/category_12216766.html
東京老樹根-CSDN博客