アソシエーションビューの編集

2. アソシエーションビューの編集

アソシエーションビュー編集の流れ

① アノテーションの編集を行います。

アノテーションの種類 内容
@AbapCatalog.sqlViewName ABAPディクショナリに登録される、CDSビュー名となる ZIYYMMnnn_s4_3
@AbapCatalog.compiler.compareFilter フィルターの評価の仕方
  • TRUE: The filter conditions are compared and, if they match, the associated join expression is evaluated only once.
  • FALSE: A separate join expression is created and evaluated for each filter condition.
true
@AbapCatalog.preserveKey 参照するテーブルのKeyをCDSビューのKeyとする true
@AccessControl.authorizationCheck ABAPから呼ばれた場合の権限チェック #NOT_REQUIRED
@EndUserText.label CDSビューの内容説明(60文字) 任意

② 定義部分(データ取得元テーブル、項目定義)の編集を行います。

変更概要 変更箇所 変更値
data_source_name define view ZIYYMMnnn_SAMP4_3
as select from data_source_name
define view ZIYYMMnnn_SAMP4_3 as select from ZIYYMMnnn_SAMP4_1
Association[] association [1] association [1..1]
target_data_source_name to
target_data_source_name
as _association_name
to
ZIYYMMnnn_SAMP4_2
as _table1
結合条件 on
$projection.element_name =
_association_name.target_element_name
on
$projection. student_id = _table1.student_id
項目 {

}
{
//ZIYYMMnnn_SAMP4_1
key student_id,_table1.class,
first_name,last_name,
birthday,region,city,street,
location,created_at,changed_at
}

アノテーションの編集にもあった、Associationとは何かについてみてみましょう。

Association[] association [1] association [1..1]

Associationとは?

Association は、CDS (Core Data Services) で 「テーブル同士のつながり (リレーション) を定義するもの」 です。
例えば、SD(販売管理)モジュールで使われる2つのテーブル、販売伝票 (VBAK) と販売伝票明細 (VBAP) は、
VBELN (販売伝票)いう項目を使って関連しています。
このような関連をAssociationで表現することで、CDSビュー内で簡単にデータを取得できます。

AssociationとJOINの違い

関連する複数のテーブルからデータを取得する、という観点でAssociationとJOINは似ていますが、いくつかの違いがあります。

主な違いは、「データを取得するタイミング」にある為、
すぐにデータを取得したいならJOIN,
データの関連を定義しつつ、必要なときにデータを取得したいなら Associationを使う形で使い分けていきましょう。

Associationを使う目的

Associationを使うことにより、以下のメリットが考えられます。

すべての関連データを取得できる

  • 通常の Association では、取得したデータから最初の1件のレコーダー」しか取れないことがありました。Association[] を使えば、「取得したレコードの全件」を取得することができます。

SQL のパフォーマンスを最適化できる

  • Association[] を使うと、CDS レベルでデータの関連付けを設定できます。
  • 必要なときにデータをJ結合(JOIN)して取得できるため、SQLのパフォーマンスを向上できます。

可読性が向上する

  • Association[] を使えば、CDS 内で明細データを簡単に扱えます。
  • SQLクエリを書く際にJOINを意識せずに済むので、CDSの設計がシンプルになります。

Association[]の、[min..max]のパターンについて

Associationを使う際に、[]の括弧の中には、
[min..max] という形式で 「この関連がいくつのデータを持つか」 を指定できます。

[min..max]の定義を明示的に指定しない場合は、暗黙的に[0..1]のパターンが指定されます。
Association[]の記述によって取得結果が変わるので、定義する際には注意しましょう。

[min..max]指定による出力例

ここでは、書籍情報のBooksテーブルと、作者情報のAuthorsテーブルの関係を例に、
各 [min..max] の各出力結果の違いについて紹介します。

前提として、以下を意識しておきましょう。

  • 1冊の本には1人、または複数の著者がいます。
  • ただし、著者が不明な本もあります。

[min..max]指定による出力イメージ(1/4)

著者が不明 (NULL) の場合と複数の作者を持つ場合はエラーになるので、
必ず著者が1人いる前提のときだけ使う必要があります。

[min..max]指定による出力イメージ(2/4)

[1..1] と違い、著者がいなくてもエラーにならずにデータが取得できます。
ただ、この場合、著者が複数いる場合はエラーになるため注意が必要です。
(例えば、共著者がいる場合、どちらか1人だけを取ることはできず、エラーになる)

[min..max]指定による出力イメージ(3/4)

著者が複数いても、すべて取得できるパターンがこちらです。
そして著者がいない場合も、本のデータは消えずにNULLで表示されます。
ただし、minの設定は0であり、「少なくとも1人はいる」 という保証がないため、空データ (NULL) になる可能性があります。

[min..max]指定による出力イメージ(4/4)

著者がいる本だけを取得したい場合に最適なパターンです。
ただ、著者がいない本は表示されないため、本の一覧を見たい場合は [0..*] のほうがよいです。

(チェック Ctrl + F2) を押下します。
(有効化 Ctrl + F3) を押下します。

これで、アソシエーションビューが編集されました。


NEXT>> 3. アソシエーションビューの実行

研修の詳細はこちら