SAP學習筆記 - 開發45 - RAP開發 Managed App New Service Definition,Metadata Extension

上一章講了在 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-5,@UI.hidden: true

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博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/91432.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/91432.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/91432.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

React強大且靈活hooks庫——ahooks入門實踐之高級類hook(advanced)詳解

什么是 ahooks? ahooks 是一個 React Hooks 庫,提供了大量實用的自定義 hooks,幫助開發者更高效地構建 React 應用。其中高級類 hooks 是 ahooks 的一個重要分類,專門用于處理一些高級場景,如受控值、事件發射器、性能…

計算機網絡——數據鏈路層(25王道最新版)

數據鏈路層前言數據鏈路層的功能封裝成幀(組幀)字符計數法字節填充法零比特填充法違規編碼法小節差錯控制檢錯編碼奇偶校驗碼CRC校驗碼(循環冗余校驗碼)基本思想如何構造如何檢錯糾錯糾錯編碼海明校驗碼設計思路求解步驟&#xff…

【PTA數據結構 | C語言版】字符串替換算法

本專欄持續輸出數據結構題目集,歡迎訂閱。 文章目錄題目代碼題目 請編寫程序,將給定主串 s 中的子串 sub_s 替換成另一個給定字符串 t,再輸出替換后的主串 s。 輸入格式: 輸入給出 3 個非空字符串,依次為&#xff1a…

事物生效,訂單類內部更新訂單

代碼如下以下代碼1不生效,2生效解決方案1,外層方法加注解,內層不加2,不要拆分方法,把更新訂單操作放在帶事物的大方法中3,拆方法(內部),注入自己,用代理對象調…

非對稱加密:RSA

文章目錄 非對稱加密:RSA 1、RSA 加解密 2、RSA 生成密鑰對(公鑰、私鑰)、加解密 參考資料 非對稱加密:RSA 1、RSA 加解密 <!-- RSA --><!-- 引入jsencrypt庫 --><script src="https://cdn.bootcdn.net/ajax/libs/jsencrypt/3.3.2/jsencrypt.min.js&q…

MongoDB 數據庫 啟用訪問控制

0. 最近服務器安裝了 MongoDB 被勒索了 測試服務器安裝了 MongoDB 等&#xff0c;開放了 27017 對所有 ip。 哈哈哈哈哈哈&#xff0c;問就是有點犯懶&#xff0c;之前都是只允許自己的 ip。 好家伙&#xff0c;然后沒過幾個小時&#xff0c;數據庫集合被清空&#xff0c;只留…

【Unity Sprite屬性拓展】

Unity Inspector 精靈圖預覽為 Unity 中的 Sprite 類型屬性提供了??增強版的 Inspector 顯示??&#xff0c;在保留標準精靈選擇功能的基礎上&#xff0c;添加了大型預覽圖和精靈名稱顯示功能代碼 using UnityEngine; using UnityEditor;// 1?? 告訴 Unity&#xff1a;所有…

細菌實驗入門:濃度測定與菌種鑒定技術詳解

在微生物實驗中&#xff0c;細菌濃度的精準測定和菌種的準確鑒定是兩項基礎且核心的操作。本文將詳細介紹相關技術的原理、操作步驟及注意事項&#xff0c;為新手提供系統性指導。一、細菌濃度測定方法1. 光密度法&#xff08;OD600&#xff09;&#xff1a;快速定量的首選原理…

GaussDB 數據庫架構師修煉(一)數據庫容量規劃

1、容量規劃的定義GaussDB容量規劃是指根據客戶業務系統的負載需求或歷史運行數據&#xff0c;進行合理規劃GaussDB的計算、存儲和網絡資源配置&#xff0c;以滿足業務系統正常使用和未來若干年負載增長訴求的過程。2、容量規劃活動主要步驟需求收集調研生產系統的業務特征&…

hashMap原理(一)

概念HashMap是java中一種非常常用的基于哈希表的數據結構&#xff0c;允許o(1)的時間復雜度進行元素插入&#xff0c;查找&#xff0c;和刪除。它通過”鍵-值“ 對的方式存儲數據。總的來說&#xff1a;HashMap的底層原理&#xff1a;數組鏈表紅黑樹&#xff08;jdk1.8之后還涉…

Ubuntu24 輔助系統-屏幕鍵盤的back按鍵在網頁文本框刪除不正常的問題解決方法

Ubuntu24 輔助系統-屏幕鍵盤的back按鍵異常 問題描述ubuntu24這個屏幕鍵盤&#xff0c;只有在網頁的搜索框或者文本框&#xff0c;比如百度首頁的搜索框&#xff0c;留言的文本框&#xff0c;才會出現點擊back按鈕的時候&#xff0c;出現了先選中當前這個字符&#xff0c;刪除此…

自然語言指令驅動的工業機器人協同學習系統:大語言模型如何重塑智能體協作范式

重磅推薦專欄: 《大模型AIGC》 《課程大綱》 《知識星球》 本專欄致力于探索和討論當今最前沿的技術趨勢和應用領域,包括但不限于ChatGPT和Stable Diffusion等。我們將深入研究大型模型的開發和應用,以及與之相關的人工智能生成內容(AIGC)技術。通過深入的技術解析和實踐經…

web:js的switch語句

在js中,switch語句是一種用于根據不同的條件執行不同代碼塊的控制流語句。它類似于多個if...else if...else語句,但結構更清晰,特別是在有多個條件分支的情況下。 基本語法 switch (expression) {case value1:// 當expression的值等于value1時執行這里的代碼break;case va…

為何說分布式 AI 推理已成為下一代計算方式

2024 年&#xff0c;我們見證了人工智能創新的空前爆發。AI 的快速發展令很多人驚嘆&#xff0c;為了訓練更先進的大語言模型&#xff08;LLM&#xff09;&#xff0c;科技巨頭爭相獲取強大的 GPU。如今&#xff0c;AI 正在無縫融入我們世界的每個角落。在眾多新興 AI 公司、模…

阿里云 RabbitMQ 可觀測性最佳實踐

阿里云 RabbitMQ 阿里云 RabbitMQ 是一款高性能、高可靠的消息中間件&#xff0c;支持多種消息協議和豐富的功能特性。它提供消息隊列功能&#xff0c;能夠實現應用間的消息解耦和異步通信&#xff0c;提升系統擴展性和穩定性。其支持多種消息持久化策略&#xff0c;確保消息不…

vue-router 導航式編程 參數的設置

主要是想記錄一下this.$router.push、replace、go等方法的參數如何設置。字符串路徑router.push(/home)直接使用字符串&#xff08;或模板字符串&#xff09;路徑&#xff0c;可跳轉到相應的URL路徑。對象式路徑路徑也可以是一個對象&#xff0c;對象里以key:value的形式表示UR…

Swift實現股票圖:從基礎到高級

目錄一、核心實現方案1. 原生方案&#xff1a;使用 Core Graphics 繪制2. 使用第三方庫&#xff1a;Charts3. 跨平臺方案&#xff1a;使用 SwiftUI Canvas二、技術指標實現1. 移動平均線 (MA)2. 布林帶 (Bollinger Bands)3. MACD (Moving Average Convergence Divergence)三、…

【unitrix】 6.4 數特征(number.rs)

一、源碼 這段代碼定義了一個名為Number的trait&#xff08;特質&#xff09;以及它的實現。 use crate::sealed::Sealed; use crate::number::{V, BaseNumber, TNumber};/// 數值的統一標記特質 /// 可以是編譯時類型化數字(TNumber)或運行時變量(V<T>) pub trait Numbe…

AI治AI:大語言模型自檢新法

“以火攻火”的思路解決大語言模型(LLMs)“幻覺”問題 虛構是由于與提示無關的內部因素而不可預測地從 LLM 中出現的幻覺。作者專注于衡量 LLM 對提示響應的不確定性,使用高不確定性表示虛構的假設。他們通過計算一個稱為熵的量來估計這種不確定性**,熵可以被認為是模型生…

ESLint 配置錯誤:ReferenceError: prettier is not defined 解決方案

問題描述在使用 pnpm lint 運行 ESLint 時&#xff0c;出現以下錯誤&#xff1a;Oops! Something went wrong! :( ESLint: 9.31.0 ReferenceError: prettier is not defined該錯誤導致 ESLint 無法正確執行代碼格式檢查&#xff0c;但 不會影響項目的實際運行&#xff08;如 pn…