【Fiori】2つの基本的なレイアウトについて

##目的
Fioriらしいアプリを作るためには、Fioriのスタンダードな画面構造（レイアウト）を採用する必要があります。スタンダードなレイアウトにはどのようなものがあるのか、Fiori Design Guidelinesを参考にまとめました。

参考
[Overview – Layouts, Floorplans, and Frameworks](https://experience.sap.com/fiori-design-web/floorplan-overview/)（Fiori Design Guidelines）より

関連記事

- [【Fiori】Dynamic Page, Semantic Page, Object Pageを比較する](https://qiita.com/tami/items/9fab676953ebb53e4407)
- [【Fiori】Flexible Column Layoutを一から実装する（前編）](https://qiita.com/tami/items/fadb5064ead06fbd7872)
- [【Fiori】Flexible Column Layoutを一から実装する（後編）
](https://qiita.com/tami/items/cec7ed7e188c415105ca)

##2つの基本的なレイアウト
多くのFioriアプリのレイアウトは、以下の2つに大別されます。

- Dynamic page layout
- Flexible column layout

レイアウトはページの骨組みで、その中にfloorplanと呼ばれる画面の構造が入ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/9a00ce2a-e9ec-de10-6d4e-43dcca0c6e79.png)
図：[Overview – Layouts, Floorplans, and Frameworks](https://experience.sap.com/fiori-design-web/floorplan-overview/)（Fiori Design Guidelines）より引用


###Floorplanとは
Floorplanについては[Fiori Design Guidelines](https://experience.sap.com/fiori-design-web/get-started/)に説明があります。

>Floorplanは異なるレイアウトタイプ、使用されるコントロールの構造、異なるユースケースをどのように扱うか、などをカバーする包括的な用語です。ひとつのアプリケーションは通常、複数のページを持ち、各ページがひとつのFloorplanを表示します。

実際の例でいうと、WebIDEでテンプレートからアプリを登録するときにListReportやWorklistなどを選択できますが、それらをFloorplanと考えて差し支えないと思います。

以下では、2つの基本的なレイアウトについて説明します。

##Dynamic page layout
Dynamic page layoutはヘッダ、コンテンツ、フッタからなる1ページのレイアウトです。ヘッダ部分は開いたり閉じたりすることができます。これがDynamic page layoutの最大の特徴で、開いたり閉じたりしなくてよい場合はシンプルにsap.m.Pageレイアウトを使ったほうがよいということです（[API Reference](https://sapui5.hana.ondemand.com/#/api/sap.f.DynamicPage)より）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/92403a3c-d6dd-4abf-ad00-e2d0b6f7c60f.png)
図：[Dynamic Page Layout](https://experience.sap.com/fiori-design-web/dynamic-page-layout/)（Fiori Design Guidelines）より引用

###Dynamic page layoutの実装方法
[Fiori Design Guidelines](https://experience.sap.com/fiori-design-web/dynamic-page-layout/)では以下の方法が紹介されています。

1. 自動的に：SAP Fiori element floorplanを使った場合
2. SemanticPageを使って：フリースタイルのアプリを作る場合は、この方法を推奨。SemanticPageにもとからDynamicPageが埋め込まれているので、開発者はDynamicPageを意識する必要がない。
3. マニュアルで（DynanicPageを使って）：技術的には可能だが、大変なのでお勧めしない

フリースタイルの場合は2, 3のいずれかになります。3は大変といわれていますが、SAPUI5サンプルにはDynanicPageを使ったサンプルも載っており、SmemanticPageと比べてもさほど大変そうには見えませんでした。

＜参考＞

- [Semantic Pageのサンプル](https://sapui5.hana.ondemand.com/#/entity/sap.f.semantic.SemanticPage/sample/sap.f.sample.SemanticPageFreeStyle)
- [Dynamic Pageのサンプル](https://sapui5.hana.ondemand.com/#/entity/sap.f.DynamicPage/sample/sap.f.sample.DynamicPageFreeStyle)

###Dynamic Pageに似ているObject page layout
少し横道にそれますが、1ページの画面を作るためのレイアウトにObject page layoutというものがあります。Dynamic Pageと同様にヘッダ、コンテンツ、フッタから構成されます。
コンテンツをセクションと呼ばれるグループに分けると、セクションごとにアンカーバー（タブのようなもの）が作られます。アンカーバーをクリックすることでセクションに飛ぶことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/85d7a760-c66e-91a6-12d7-710df6dfa872.png)

##Flexible column layout
Flexible column layoutは、複数（最大3つまで）のFloorplanをひとつのページに表示します。たとえば最初に一覧画面を表示し、明細の行をクリックすると詳細画面が右側に開くようなアプリで使われます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/8b9ea239-dc34-2e1c-b53b-115f15d78541.png)
図：[Flexible Column Layout (Layout + SAP Fiori Elements)](https://experience.sap.com/fiori-design-web/flexible-column-layout/)（Fiori Design Guidelines）より引用

###Flexible column layoutの実装方法
フリースタイルのアプリの場合の代表的な実装方法は、ナビゲーションによる方法です。ルートとなるビューにsap.f.FlexibleColumnLayoutのインスタンスを登録しておき、ユーザの操作に応じて表示する画面を変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/0e7f9ac2-2515-75de-204d-e77399fe8c72.png)

＜参考＞

- [Flexible column layoutのサンプル](https://sapui5.hana.ondemand.com/#/entity/sap.f.FlexibleColumnLayout)

上記リンク先のサンプルで、3つに分かれたパーツのそれぞれの中ではDynamic Pageが使われていました。Flexible column layoutの中にDynamic Pageを入れ込むことができるということです。

##このあと
Dynamic page、Semantic page、Object Pageはよく似ていますが、コンテンツの表示のされ方が微妙に変わります。同じコンテンツを配置したときにどのように見えるのか、サンプルを作ってみたいと思います。

[【Fiori】Dynamic Page, Semantic Page, Object Pageを比較する](https://qiita.com/tami/items/9fab676953ebb53e4407)