SAP CP Trial環境でMulti Target Applicationを作ってみる【Fiori LanchPadモジュールの作成】

# はじめに
以前の記事でSAP CloudPlatform Trialにおいて、CF環境で
　DB　⇔　OData　⇔　Fiori
の連携が行えるMTAプロジェクトを作成しました。

【DBModuleの追加】
　[SAP CP Trial環境でMulti Target Applicationを作ってみる【DBModuleの作り方】](https://qiita.com/yonekura-h/items/6aea4da68da8e99fdace)

【JavaModuleの追加】
[SAP CP Trial環境でMulti Target Applicationを作ってみる【JavaアプリとDBModuleの連携】](https://qiita.com/yonekura-h/items/0e1e16b303d4a4ed6503)

【ODataService V2（Java）の追加】
[SAP CP Trial環境でMulti Target Applicationを作ってみる【ODataService_V2の作成】](https://qiita.com/yonekura-h/items/62abe8b4ff1a747bd2e9)

【Fiori画面の追加】
[SAP CP Trial環境でMulti Target Applicationを作ってみる【OData⇔Fiori画面の連携】](https://qiita.com/yonekura-h/items/dda7d3c0e0babd45abaa)

今回は上記のMTAプロジェクトを前提として、
MTA内にFiori LaunchPadモジュールを追加してapprouter経由でLanchPad -> Fiori画面に遷移できるよう設定します。

# Fiori LaunchPadモジュールを追加
MTAプロジェクトにFiori Launchpadのモジュールを追加します。
MTAプロジェクトを右クリック -> New -> SAP Fiori Launchpad Site Moduleを選択します。
任意のモジュール名を決定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/9697ab94-e88a-5c5c-af0c-d2b809ea5dbf.png)

作成されるLanchPadモジュールの構成は下記のようになっています。
カタログ・グループの設定などは`CommonDataModel.json`に記載するようになっており、
設定方法などの詳細はREADME.mdに書かれています。
より詳細が知りたい場合は[公式ドキュメント](https://help.sap.com/viewer/ad4b9f0b14b0458cad9bd27bf435637d/Cloud/en-US/5fb5289cc8334bd581d31473e6dc584d.html)を参照

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/be3c7c97-4c32-1397-d842-ac6e992d8ba5.png)

# Fiori Launchpadの設定

Fiori Launchpadモジュールに同一MTA内で作成しているFiori画面アプリへ遷移可能なタイルを作成します。
まず、Lunchpadから呼び出すHTML5モジュール側にタイルの設定を行います。
その後Fiori Launchpadモジュールに設定したタイル設定を登録します。

## HTML5モジュールのタイル設定

HTML5モジュールの`manifest.json`ファイルを開きます。
※下記ではDiscripter Editerを使った設定を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/970e9e83-09ee-5b9b-9cff-06a1fdc82080.png)

Navigationタブへ移動し、Inbound設定で「+」ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/cd9d517b-ac43-eb64-7a55-4d0054d81a44.png)

下図を参考に、Semantic ObjectとActionを定義します。
Inbound Tileの項目には任意で値を設定可能です。
※`{{<KEY>}}`でHTML5モジュール内のi18nで定義したプロパティを参照可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/ca78bc3f-8abe-d8d7-bf1b-e0602163dfd5.png)

設定の変更が完了したらファイルを保存します。
上記設定をCode Editerで確認すると以下のような`crossNavigation`プロパティが追加されていることが確認できます。

```json:manifest.json(抜粋)
		"crossNavigation": {
			"inbounds": {
				"intent1": {
					"signature": {
						"parameters": {},
						"additionalParameters": "allowed"
					},
					"semanticObject": "demoUI",
					"action": "display",
					"title": "{{title}}",
					"info": "{{appDescription}}",
					"subTitle": "demoSubTitle",
					"icon": "sap-icon://accelerated"
				}
			}
		}
```

## Lunchpadモジュールへのタイル登録
Lunchpadモジュールの`CommonDataModel.json`ファイルを開きます。
※下記ではLaunchpad Editerを使った設定を行います。

+が表示されているタイルを押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/fcd11bbf-8b44-06ce-59aa-c2a992db6903.png)

登録するタイル一覧がダイアログで表示されます。
先ほど作成した`demoUI`のタイル設定が確認できるはずなので、選択して「Select」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/e76f8b1c-6188-887f-cd22-d075d9b0beb9.png)

正常に登録された場合、下図のようにタイル設定が`CommonDataModel.json`に追加されることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/b0e90d01-7cca-bb2c-693a-56b1e0c7eadb.png)

# Fiori Launchpadのデプロイ・実行

Launchpadにタイル設定の登録が完了したら、MTAプロジェクトをBuild -> Deployします。
MTAプロジェクトを右クリック -> Build -> Buildを選択
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/23e0daba-82a1-3f3a-7344-d51bf91f00a7.png)

Build完了後、MTAプロジェクト内に`mta_archives/xxxxxxx_0.0.1.mtar`ファイルが作成されます。
ファイルを選択し、右クリック -> Deploy -> Deploy to SAP Cloud Platformを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/fe8dea0f-9ec9-03e7-5b7c-407c4e7fa9e6.png)

デプロイが完了したら、SAP CloudPlatformのコクピット画面からデプロイしたアプリのRouteを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/3be0221e-4a24-cb72-c58f-4190cb54c69e.png)

上記のリンクに遷移すると無事Fiori Launchpad画面が表示されること、
タイル登録したHTML5モジュールへ遷移できることが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/c8112dae-07df-b1da-f8e5-b2a8f5b97a6d.png)

# オプション：動的タイルの設定方法

タイル上に動的な数値（データ件数など）を表示する動的タイルの実装は簡単にできるのでついでにやってみます。
※Launchpadのタイル上にチャートなどを表示するには別途カスタムタイルを作成する必要があるらしい
　https://blogs.sap.com/2020/03/23/custom-tiles-with-cloud-foundry-portal-cloud-platform/


## タイル設定の追加

HTML5モジュールの`manifest.json`ファイルに設定を追加します。
タイル設定の下部にある以下の項目を指定します。

|項目|設定値|
|---|---|
|DataSource|取得元API（manifest.jsonのDataSourceプロパティの定義から選択可）|　
|Path|DataSourceに対するリクエストURLのパス|
|Refresh|タイル情報の更新頻度（秒指定）|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/0347297d-d5af-e662-6746-036a442f86e0.png)


動的タイルのデータソースにはODataの$countクエリオプションを使用しています。
下図のように、APIへのリクエストに対するレスポンスが数値のみであれば問題ないと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/1d1b666c-caea-0bac-1828-2a1d654aa15d.png)
> 今回使用したODataに$countクエリを意図して実装していないのですが、`/$count`で動作しています。
> SAP Cloud SDKを利用しているので標準で実装される？


MTAを再度Build -> Deployを実施して、結果を確認します。
動的にデータ件数を表示するタイルを作成できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/c024dacb-596a-6c40-30fd-2accf4804571.png)

# おわりに

まずはFiori Launchpadを作成して画面に表示するところまで実装することができました。
Launchpadの実装にはテーマやタイルのカスタマイズ、権限設定など考慮すべき内容が多いので、
今後そのあたりもまとめていきたいと思います。