【SAPUI5】Data Typeを指定して表示形式を整える

##はじめに
[前回](https://qiita.com/tami/items/e90cb3ca18280c829995)の記事で、複数アイテムをリストで表示させました。
結果を見てみると、金額のところには複数の通貨がありますがすべて整数で表示されています。
本来、EURであれば小数点以下2桁まで表示されるべきです。
こんなとき、コントロールのtypeという属性に「通貨」というデータ型を指定すると、通貨に合った形式で金額を表示することができます。
[sap.ui.model.type](https://sapui5.hana.ondemand.com/#/api/sap.ui.model.type)というクラスに様々なデータ型が用意されていますので、今回はそれらを使ってデータ形式を整えてみます。

**前回の結果**
![WS000046.JPG](https://qiita-image-store.s3.amazonaws.com/0/276021/742051b1-b71f-857e-2d6a-ea937f2a0d2d.jpeg)

##通貨の表示(type: Currency)
以下のように、通貨に合わせて小数点以下桁数が変わるようにします。（EURは小数点以下2桁、JPYは小数点以下なし）
![WS000050.JPG](https://qiita-image-store.s3.amazonaws.com/0/276021/14991ef0-b6d1-ffad-eb30-b79e21bbd4ba.jpeg)

###ソース
App.view.xmlのObjectListItemの中身を以下のように変更します。

####変更前

```xml
<ObjectListItem
                                        title="{mPricelist>name}"
                                        number="{mPricelist>price}"
                                        numberUnit="{mPricelist>currency}">
                                    </ObjectListItem>
```

####変更後

```xml
<ObjectListItem
										title="{mPricelist>name}"
										number="{
											parts: [{path: 'mPricelist>price'}, {path: 'mPricelist>currency'}],
											type: 'sap.ui.model.type.Currency',
											formatOptions: {
												showMeasure: false
											}
										}"
										numberUnit="{mPricelist>currency}">
									</ObjectListItem>
```
numberに対してtypeを指定するために、次の引数を渡しています。

- parts: 表示させるデータを指定します。数字と単位の2つの引数を渡すため、partsの後にpathでモデルのデータを指定します。
- type: 通貨の形式で表示するために'sap.ui.model.type.Currency'を指定します。
- formatOptions: オプションとして、通貨を表示しないように設定しています。（通貨はすでに表示しているので）


####メモ
partsは複数の引数をまとめるための宣言で、引数が1つなら直接pathを指定します。

**引数が複数の場合**
`parts: [{path: 'データ'}, {path: 'データ'}, ...]`

**引数が単数の場合**
`path: 'データ'`




##日付の表示(type: Date)
panel1に日付を追加します。
まずは、controllerでdateという変数を定義してビューでそのまま表示させてみます。（typeを指定しないとどうなるか確認するため）

###App.controller.js

```js
sap.ui.define([
   "sap/ui/core/mvc/Controller",
   "sap/ui/model/json/JSONModel"
], function (Controller, JSONModel) {
   "use strict";
   return Controller.extend("test.helloworld.controller.App", {
		_data : {
			"date" : new Date()
		},

		onInit : function (evt) {
			var oModel = new JSONModel(this._data);
			this.getView().setModel(oModel);
		},
   });
});
```

ここでは、以下の処理を行っています。

- 今日の日付を持つdateという変数を、JSON形式のモデルで定義
- コントローラーの初期処理(onInit)の中でJSONモデルをインスタンス化し、ビューにセットする。これにより、ビュー側から変数dateにアクセスできるようになる。

###App.view.xml
ひとつめのPanelにTextコントールを追加して、dateを表示させます。

```xml
					<Panel headerText="panel1">
						<content>
							<l:VerticalLayout class="sapUiContentPadding">
								---省略---
								<Text text="{/date}"/> ←追加
							</l:VerticalLayout>								
						</content>
					</Panel>
```

表示形式は以下のようになります。
![WS000052.JPG](https://qiita-image-store.s3.amazonaws.com/0/276021/0c4e81f7-1033-4110-778a-5c76e4221cd1.jpeg)

次に、typeを指定します。

```xml
                               <Text text="{
									path: '/date',
									type: 'sap.ui.model.type.Date',
									formatOptions: {
										style: 'short'
									}
								}"/>
```

日付がyyyy/mm/dd形式で表示されました。

![WS000053.JPG](https://qiita-image-store.s3.amazonaws.com/0/276021/21ded0c8-fe35-f810-19e7-3089fda3d843.jpeg)

##formatOptionsに指定できるもの
fotmatOptionsに指定できるものは、データの型によって決まっています。
詳細については、以下の公式リファレンスを参照してください。

- [numberの場合](https://sapui5.hana.ondemand.com/#/api/sap.ui.core.format.NumberFormat/methods/format)
- [dateの場合](https://sapui5.hana.ondemand.com/#/api/sap.ui.core.format.DateFormat/methods/sap.ui.core.format.DateFormat.getDateTimeInstance)

##参考にしたページ
[Get Started: Setup and Tutorials-Walkthrough-Step 21: Data Types](https://sapui5.hana.ondemand.com/#/topic/dfe04650afc046e0802abb1a1a90d2d9)
[sap.ui.model.type.Dateのサンプル](https://sapui5.hana.ondemand.com/#/entity/sap.ui.model.type.Date)