【データモデル】標準書込みフォームを拡張してみる - ラベルと入力タイプ

Sharperlightは、データベースと独自のデータモデルを使用して会話します。
そのデータモデルは、Sharperlightスタジオを使用して作成します。
以下のようなデータベースがある場合、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/de02d9c4-460b-bb39-f3a7-05313d1d4290.png)
Sharperlightスタジオでデータモデルを作成すると以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/43bf7888-aa26-bdd0-7173-cc1c62884d41.png)
データベースのスキーマが読み込まれています。
Sharperlightエンジンは、これらの情報を利用して動的にクエリを作成し、対象データベースからデータを読み出します。

通常は、**読み込みだけ**の一方通行ですが、データの書込みを許可するオプションが準備されています。
例えば、`Transaction`テーブルのオプションを見てみます。**Allow Table Writeback**オプションが**True**になっています。このオプションを**True**にすることで、このテーブルに対してデータを書き込むことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/de8a78ec-60e9-6d53-0927-e60971ec19f8.png)

このオプションがTrueになっているテーブルには、`標準のオンライン書込みフォーム`が利用できるようになります。
Sharperlightサービスを起動して、以下のアドレスにアクセスすると、このような標準書込みフォームが表示されます。
```
http://localhost/DemoRest/EntryForm/?productcode=TRAIN2&tablecode=Transactions
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/bdf0d6a5-ca6f-860a-1da1-1d08a6c5d206.png)
この標準書込みフォームは、先ほどのデータモデルのテーブル/フィールド定義を元に生成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/7e632dcf-5514-c92f-6fb6-8476b36cc25f.png)
ここで注目は、例えば**Manufacture_ID**フィールドと**Model_ID**フィールドです。
実際のこれらのフィールドは**ID**となっています。しかし標準書込みフォーム上では、**Manufactures/Code**、**Models/Code**とそれぞれなっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/50d2d0ad-22f3-c7c0-6fde-eedb437a98ee.png)
値を選択する場合も検索ウインドウを開くと、このようにコードで選択できるようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/98e202d0-d989-c723-6470-dd58c6f4316b.png)
これはSharperlightエンジンが、データモデルに定義されているJOIN定義を利用して、Join先テーブルの定義を解析し、`コード(Code)`フィールドと`名前(Name)`フィールドを参照するようになっているからです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/819368ce-45e2-34d2-938e-3eef74e5cb28.png)
Join先テーブル: Manufactures
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/9b2fc73f-0ac3-ecbc-a24b-b76e54509924.png)
Join先テーブル: Models
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/0b8eef55-b442-3f89-3f94-30716c4bc478.png)
ここまでが、データモデルの定義を利用して生成される標準書込みフォームの概要でしたが、ここで二つのオプションを利用して、標準書込みフォームを拡張してみようと思います。
### ラベルの変更 ###
先ずは、このラベルを変更してみます。現在は、JOIN先のテーブル名とコード(Code)フィールド名を表示しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/53893dc0-ff5b-b319-6c60-5875508f5775.png)
この既定の設定を変更してみます。
現フィールド自身の摘要(Description)を使用するようにします。解りやすいように摘要を日本語にしてみます。
Manufactures -> 製造元
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/b01a4aed-9085-0277-f8e5-81a7f5280185.png)
Models -> モデル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/750b51bb-0456-ac07-105d-588d8c3b0cd5.png)
次にそれぞれのフィールドの**Use This Description**オプションを**True**にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/d5f08688-9d49-ac12-06f4-40383a42bfee.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/fc73b2f0-5e21-8454-afe2-31de81771407.png)
データモデルを保存して、Sharperlightサービスを再スタートさせて変更を反映させます。
書込みフォームには、自身の摘要が表示されるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/6d2ce5dd-1442-d946-84b6-2da9a64987f9.png)
### 入力タイプの変更 ###
今度は、入力タイプを変更してみます。現在は、別窓で検索ウインドウが表示されるようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/b63ecfaa-6453-6359-3696-723dd7e64710.png)
これをドロップダウンリストに変更してみます。
それには**Input Style**オプションに`DropDownList`を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/88b82d45-be2d-431d-8c51-03c25eeff826.png)
このように書込みフォームでは、ドロップダウンリストが表示されるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/ee91a0f1-698a-9209-cbcd-c648858c14ef.png)