CAPとSAP Fiori toolsでコーディングなしのプロトタイプを作る(2)CAPプロジェクトの作成
はじめに
この記事は、SAP Inside Track 2021で発表した「CAPとSAP Fiori toolsでコーディングなしのプロトタイプを作る」に関する補足資料のパート2です。
ステップ
- SAP Business Application Stuidoのセットアップ
- CAPプロジェクトの作成(今回の記事)
- Fioriプロジェクトの作成
準備
Gitリポジトリからサンプルデータをダウンロードします。
https://github.com/miyasuta/InsideTrack-cap-fiori/tree/main/data
CAPプロジェクトの作成
SAP Business Application Studio(BAS)のスペースに入り、プロジェクトを作成します。
1. テンプレートからCAPプロジェクトを生成
- File>New Project from Templateをクリック
- CAP Projectを選択し、Startをクリック
- プロジェクト名を入力し、Basic Sample Filesにチェックを入れてFinishをクリック
※ここにチェックを入れることでサンプルファイルが作成されるので、それを上書きして使うことができます
- 右下に以下のポップアップが現れたら、Open in New Workspaceをクリック プロジェクトが開く。Basic Sample Filesにチェックを入れたので、赤枠のファイルが作成されている
2. ODataサービスを実行
サンプルファイルがあるので、すでにこのプロジェクトはODataサービスとして実行することができます。
- Terminsl>New Terminslをクリック
- ターミナルが開いたら
npm install
と打って必要なモジュールをローカルにインストール -
cds watch
でサービスを実行し、ポップアップが出たらOpen in New Tabをクリック ブラウザが開く。ここからメタデータやエンティティにアクセスできる
3. db/data-model.cdsを編集
data-model.cdsファイルを以下の内容で上書きします。
namespace insidetrack.sample;
entity Projects {
key projectCode : String @title : 'Project Code';
projectName : String @title : 'Project Name';
toCustomer : Association to Customers @title : 'Customer';
toManager : Association to Users @title : 'Manager';
startsAt : DateTime @title : 'Starts At';
endsAt : DateTime @title : 'Ends At';
toStatus : Association to Status @title : 'Status';
toTasks : Composition of many Tasks
on toTasks.projectCode = $self.projectCode;
}
解説
- namespace:エンティティをデータベースにテーブルやビューとして登録するときのプリフィックスになるものです。また、サービス定義からエンティティを参照するときにも使います。
- title:項目のラベルを定義しています。@マークがついているのはアノテーションで、項目に情報を付加するために使います。
-
Association:他のエンティティへの関連(参照)を定義します。例えば
Association to Customers
は、このあとで定義するCustomerというエンティティとの関連を表します。関連を持たせることで、Customerエンティティから名称を取得したりすることができます。 - Composition:Associationと似ていますが、Compositionはヘッダ-明細のように、親のエンティティに子のエンティティが従属する関係を表します(親がなければ子も存在しない)。
詳しく知りたい方は、公式ドキュメントを参照してください。
その他のエンティティも追加します。
entity Tasks {
key projectCode : String @title : 'Project Code';
key taskId : Integer @title : 'Task Id';
description : String @title : 'Description';
startsAt : DateTime @title : 'Starts At';
endsAt : DateTime @title : 'Ends At';
toStatus : Association to Status @title : 'Status';
toMembers : Composition of many Members
on toMembers.projectCode = $self.projectCode
and toMembers.taskId = $self.taskId;
toProject : Association to Projects
on toProject.projectCode = $self.projectCode;
}
entity Members {
key projectCode : String @title : 'Project Code';
key taskId : Integer @title : 'Task Id';
key toMember : Association to Users @title : 'Member';
toTask : Association to Tasks
on toTask.projectCode = $self.projectCode
and toTask.taskId = $self.taskId;
toProject : Association to Projects
on toProject.projectCode = $self.projectCode;
}
entity Customers {
key customer : String @title : 'Customer';
name : String @title : 'Name';
}
entity Users {
key user : String @title : 'User ID';
firstName : String @title : 'First Name';
lastName : String @title : 'Last Name';
fullName : String @title : 'Full Name';
}
entity Status {
key status : Integer @title : 'Status';
text : String @title : 'Text';
}
4. srv/cat-service.cdsを編集
cat-service.cdsを以下の内容で上書きします。
using insidetrack.sample as sample from '../db/data-model';
service CatalogService {
entity Projects as projection on sample.Projects;
entity Tasks as projection on sample.Tasks;
entity Members as projection on sample.Members;
entity Customers as projection on sample.Customers;
entity Users as projection on sample.Users;
entity Status as projection on sample.Status;
}
解説
-
using insidetrack.sample as sample...:data-modeファイルの
insidetrack.sample
というnamespaceを、ここではsample
という名前で参照するという宣言をしています。 -
service CatalogService{...}:data-modeファイルで定義したエンティティを、ODataのエンティティとして公開することを宣言しています。
entity Projects as projection on sample.Projects
は、data-modeファイルのProjectsというエンティティを、そのまま(項目を絞ったりはせずに)Projectsという名前で公開することを表しています。ODataとして公開するときにエンティティの名前を変えても問題ありません。
5. サンプルファイルをインポート
準備のステップでダウンロードしておいたサンプルファイルをdb/dataフォルダにドラッグ&ドロップでインポートします。ファイル名は<namespace>-<エンティティ名>.csv
とします。
※もともと入っていたmy.bookshop-Books.csvというファイルは不要なので削除します。
サンプルファイルの中身を見てみましょう。アソシエーション、またはコンポジションしている項目は、項目名が<エンティティで定義した項目名>_<アソシエーション先のキー項目>となります。(例:_toCustomer_customer)
projectCode;projectName;toCustomer_customer;toManager_user;startsAt;endsAt;toStatus_status
PJA00101;排水管交換;CST001;MANAGER01;2020-01-25;2020-02-4;3
PJA00102;エアコン導入;CST002;MANAGER02;2020-01-30;2020-02-14;3
PJA00103;エアコン清掃;CST003;MANAGER02;2020-11-01;2020-11-01;3
PJA00104;掃除ロボット導入;CST004;MANAGER03;2020-12-01;2021-01-31;2
PJA00105;ドローンテスト;CST004;MANAGER03;2021-04-02;2021-05-02;1
6. ODataサービスのテスト
ブラウザをリフレッシュすると、以下のように追加したエンティティが表示されます。$metadataをクリックすると、メタデータを見ることができます。このメタデータがFiori toolsで必要になります。
次に、各エンティティが取得できるかどうかテストしてみましょう。
6.1. Projectエンティティを取得
上の画面でProjectsのリンクをクリックすると、Projectのデータが取得できます。
URI: .../catalog/Projects
6.2. アソシエーションでTasksエンティティを取得
以下をアドレスバーに入力すると、PJA00101にひもづくタスクが取得できます。
URI: .../catalog/Projects('PJA00101')/toTasks
6.3. アソシエーションでMembersエンティティを取得
さらに、2番目のタスクにアサインされたメンバーを取得してみましょう。
URI: .../catalog/Projects('PJA00101')/toTasks(projectCode='PJA00101',taskId=2)/toMembers
ここまででODataサービスは完成です。次回はFioriのUIを作成していきます。
参考(CAPについて)
Author And Source
この問題について(CAPとSAP Fiori toolsでコーディングなしのプロトタイプを作る(2)CAPプロジェクトの作成), 我々は、より多くの情報をここで見つけました https://qiita.com/tami/items/bb5106723e6a8c69e90a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .