Project Template のObjectPageを使用し、修正画面のフッターにボタンを追加

# はじめに
SAPのProject Templateでどういうことができるかを調査する一環として
保存ボタンを自前の実装やボタンの追加について調べた内容を記載したいと思います。
# 実装手順
拡張ポイントを使用したカスタムアクションにてボタンを追加します。
###　1. コントローラー拡張を実装する
左メニューのプロジェクトにて、右クリック→NEWからフォルダ作成やファイル作成を行います。
![無題1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390199/8dd1f859-ea55-9349-5ea3-73418ff9cc1e.png)
今回は、ObjectPageExt.Contoroller.jsとして作成しました。
このファイルに、ボタン押下時の処理を記述します。

```js:ObjectPageExt.Contoroller.js
sap.ui.controller("sample2.ext.controller.ObjectPageExt", {
	onSave : function(oEvent) {
		// ここに処理を記述
	}
});
```
上記例として、onSaveというイベントハンドラー関数を用意いたしました。
※こちらは、任意の値です

###　2. manifest.jsonファイルを拡張します
左メニューのプロジェクト内にあるmanifest.jsonを開き、「Code Editor」で変更していきます。
![無題2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390199/488ac59e-255e-558e-14b3-ac93bf36bc50.png)
コードをスクロールしていきますと以下のような記述部分がありますので編集していきます。
※なければ追記が必要です

```js:manifest.json
"sap.ui5": {
   "extends": {
      "extensions": {
         "sap.ui.controllerExtensions": {
            "sap.suite.ui.generic.template.ObjectPage.view.Details": {
                "controllerName": "sample2.ext.controller.ObjectPageExt",
```

以下が編集後となります。

```js:manifest.json
"sap.ui5": {
   "extends": {
      "extensions": {
         "sap.ui.controllerExtensions": {
            "sap.suite.ui.generic.template.ObjectPage.view.Details": {
               "controllerName": "sample2.ext.controller.ObjectPageExt",
                  "sap.ui.generic.app": {
                     "EntityName": {
                        "EntitySet": "EntityName",
                        "Header": {
                           "Actions": {
                              "onSave": {
                                 "id": "onSave",
                                 "type": "Emphasized",
                                 "text": "自作保存",
                                 "press": "onSave",
                                 "determining": true
                             }
                          }
                       }
                    }
                 }
              }
           }
        }
     }
  }
}
```
Actions内については、基本的にはsap.m.Buttonのリファレンスと同様の設定ができるかと思います。
フッターにボタンを表示するポイントとしましては、「**"determining": true**」となります。
こちらがtrueとなることでフッターに表示と判断されるようです。

その他、このextensionsの記載方法によっては、ヘッダーにボタン表示などすることも可能です。

以上でボタンを表示するロジックの記載は終了となります。
実際に画面を確認してみましょう。（※以下、詳細画面）
![無題3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390199/d2f49160-39e6-0de0-db75-5ea4c1085afc.png)
ObjectPage、つまり詳細画面や修正画面のフッターに先ほど追加したボタンが表示されました。

ただし、今回やりたいこととしましては修正画面のフッターだけにボタンを表示させたいということなので
表示画面にフッターボタンが表示されるのは望ましくありません。

###　3. 再度manifest.jsonを修正し、修正画面だけに表示されるようにする

```js:manifest.json
"sap.ui5": {
   "extends": {
      "extensions": {
         "sap.ui.controllerExtensions": {
            "sap.suite.ui.generic.template.ObjectPage.view.Details": {
               "controllerName": "sample2.ext.controller.ObjectPageExt",
                  "sap.ui.generic.app": {
                     "EntityName--save": {
                        "EntitySet": "EntityName",
                        "Header": {
                           "Actions": {
                              "onSave": {
                                 "id": "onSave",
                                 "type": "Emphasized",
                                 "text": "自作保存",
                                 "press": "onSave",
                                 "determining": true
                             }
                          }
                       }
                    }
                 }
              }
           }
        }
     }
  }
}
```
変更箇所は、１か所で「"sap.ui.generic.app"」直後の**「"EntityName--save"」**となります。
「--save」をこの場所に追加することで修正画面のみフッターボタンを表示できるようになりました。

※この部分はリファレンス等に記述がないので、方法としての是非は判断できません。

■ 詳細画面
![無題5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390199/886a097e-f874-b87d-e6cd-52e3e003ec67.png)
■ 編集画面
![無題4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390199/4f6a3214-d47b-1ae9-0c3b-326f62ea90d2.png)
# まとめ
Project Templateでジェネレートした画面でもある程度の事ができるので楽ではありますが
やはり細かい設定等を行おうとすると制約が多く、私自身は自作でプログラムを作成した方が
望ましいと思っております。

モックや自身での学習としてこの記事が役に立てればと思います。