【CDS】CDS Viewの登録(開発)

概要

CDS Viewの登録と登録する時にtemplateを使用するため、初期設定値の内容説明(annotation)をします。
登録については5分程度で実行結果まで確認できます。画面遷移する毎に分けているため手順が多くなっています。
最後にイメージとしてサンプルソースでどの様な事が出来るのか一部紹介しようと思います。
CDS ViewにはデータモデルがあるためサンプルソースはBasic Viewをイメージして作成しています。
データモデルなどCDS Viewの概要については以下記事で紹介しています。

CDS Viewの登録

CDS Viewの新規作成から実行までの手順を以下紹介します。5分程度でできる作業なのでお試しください。

ABAP Repository Objectの起動

ローカルオブジェクトのユーザを右クリックし、New > Other ABAP Respository Objectの順番で押下します。
もし移送を取る場合はFavorite Packagesに新規または作成済みのパッケージを追加する事ができます。追加したパッケージに対して右クリックし、New > Other ABAP Respository Objectの順番で押下します。

Data Definition(CDS View作成Object)の選択

検索ボックスにData Definitionを入力します。
Data Definitionを選択して、Nextボタンを押下します。

CDSView名と内容説の入力

NameにCDS View名、Descriptionに内容説明を入力し、Nextボタンを押下します。

以下は余談となります。CDS View名の命名について解説しています。
CDS View名について標準CDS Viewの場合、Basic ViewとComposite ViewがI始まり、Consumption ViewはC始まりが基本的となっています。
そのため、ZI_XXXやZC_XXXまたはZXXI_XXXやZXXC_XXX(Xについては任意)などが一般的な命名となりそうです。
個人的にはBasic View、Composite View、Consumption Viewの判断は中身を見ないと区別がつかないため、命名で区別できる様にZIB_XXX、ZIC_XXX、ZCC_XXXなどにすると良いかと思います。

CDS View名は最大30文字まで入力可能だが26文字を最大とするのが好ましいです。
Odata化するとサービス名にCDS View名+”_CDS”の4文字が付与されることや26文字を超えると以下警告メッセージが出力されます。
「The entity view name Z_ABCDEFGIJKABCDEFGIJKABCDEFGI exceeds the allowed length of 26 characters」

移送の選択

今回ローカルオブジェクトを指定しているため、そのままNextボタンを押下します。

移送を聞かれる場合は以下参考にしてください。
・Chose from requests in which Iam involved
 ⇒ログインユーザに紐づく移送が指定できます。
・Create a new request
 ⇒新規移送の作成ができます。
・Enter a request number
 ⇒作成済みの移送を指定できます。

Templateの選択

基本的にはDefine Viewを選択し、Nextボタンを押下します。
JoinやAssosiationが最初から定義されているTemplateもありますが後からコーディングで追加できます。

CDS Viewの入力

「sql_view_name」はSE11のテーブル名で検索する事が出来る名称となります。
今回CDS View名が「ZI_BNKA」のため「ZIBNKA」と入力します。
標準のCDS Viewを確認すると分かるが基本的にはCDS View名のアンダースコア”_”を除いた名称を入力します。
「data_source_name」に基となるCDS ViewもしくはテーブルIDを入力します。
今回銀行マスタのテーブル「BNKA」を基にするため「BNKA」を指定します。

項目を追加する時は多くの項目追加を手入力で行うのは大変なため、fromやjoinなどで定義したCDS ViewもしくはテーブルIDの後にピリオド”.”を入力するとInsert all elementsと表示されます。
Insert all elementsを選択するとCDS ViewもしくはテーブルIDの項目全てが追加されます。
特にBasic Viewは投影が基本となるためこのやり方はよく使用されます。

CDS Viewの有効化

レポートプログラムと同様に最後は保存し、チェック、エラーが無ければ有効化を行います。

CDS Viewの実行

実行ボタンを押下、ABAP Applicationを選択し、OKボタンを押下します。
またはF8キーを押下します。

以下の様に実行結果が出力されます。

初期設定値解説(annotation)

まずannotationについて訳すと注記、注釈といった意味合いがあります。
もっと簡単にすると「意味を分かりやすくする」ことや「補足説明」となります。
例えば、「このCDS ViewはBasic Viewであること」や「この項目は非表示にする」、「この項目に検索ヘルプを使用可能とする」など意味を付与する事ができます。

今回Templateで定義されているアノテーションについて簡単に解説します。
自分で定義する所以外は基本デフォルトのままで良いと思います。

@AbapCatalog.sqlViewName最大16文字、CDS View名のアンダースコア”_”を除いた名称を指定する事が一般的となります。
SE11で検索できる名称だが、ABAPでは使用せずCDS View名の方を使用します。(推奨)
@AbapCatalog.compiler.compareFiltertrue:フィルタ条件を比較し一致する場合、結合式は1回だけ評価されます。
false:個別の結合式が作成され、フィルタ条件ごとに評価されます。
@AbapCatalog.preserveKeytrue:KEYで指定されたとおりに定義されます。
false:追加のKEYに関係なく、ABAP辞書のクラシックビューの場合と同様に決定されます。
@AccessControl.authorizationCheck#CHECK:CDS Viewに対してアクセス制御(権限チェック)を行う。アクセス制御はAccess Controlで定義します。
#NOT_ALLOWED:CDS Viewに対してアクセス制御(権限チェック)を行わない。
@EndUserText.labelCDS Viewの内容説明を定義します。

SAP GUIでの確認(SE11)

実際にSE11で検索すると以下図の通りとなります。
CDS ViewなのかどうかはDDLソースが表示されていることが目印となります。

サンプルソースコード

Basic Viewを意識して作成したCDS Viewとなります。
結合条件(association)やwhere条件、コメントアウト、項目の置換え(as)、annotationでBASIC Viewである事の定義を付与しました。

Basic Viewだと結合条件やwhere条件は基本不要だがテキストレベルであれば結合、要件によりますが論理削除データは必ず不要とする場合は削るなどしても良いと思います。
標準を参考にすると上記感覚が身に付きます。

@AbapCatalog.sqlViewName: 'ZIBNKA'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '銀行マスタ'

@VDM.viewType: #BASIC

define view ZI_BNKA as select from bnka
  association [0..1] to I_Country as _Country on $projection.BankCountryKey = _Country.Country
 {
//COMMENT
     key bnka.banks        as BankCountryKey,
     key bnka.bankl        as BankKeys, 
         bnka.erdat        as DateOnWhichTheRecordWasCreated, 
         bnka.ernam        as NameOfPersonWhoCreatedObject, 
         bnka.banka        as NameOfBank, 
         bnka.provz        as Region, 
         bnka.stras        as StreetAndHouseNumber, 
         bnka.ort01        as City, 
         bnka.swift        as SWIFTBICInternationalPayments, 
         bnka.bgrup        as Bankgroup, 
         bnka.xpgro        as PostOfficeBankCurrentAccount, 
         bnka.loevm        as DeletionIndicator, 
         bnka.bnklz        as BankNumber, 
         bnka.pskto        as PostOfficeBankCurAccountNumber, 
         bnka.adrnr        as AddressNumber, 
         bnka.brnch        as BankBranch, 
         bnka.chkme        as CheckDigitCalculationMethod, 
         bnka.vers         as FormatOfFileWithBankData, 
         bnka.iban_rule    as IBANRule , 
         bnka.sdd_b2b      as SupportOfSEPAB2BDirectDebit, 
         bnka.sdd_cor1     as SupportOfSEPACOR1DirectDebit, 
         bnka.sdd_rtrans   as SupportOfSEPAReturnedDebits,
         
         _Country
}
where
     loevm = ''
  or loevm = ' ';