【カスタムテーブル】カスタムテーブルを定義してみる

Sharperlightカスタムテーブルでは、SQL文を利用した仮想テーブルを作成することができます。データモデルを通じて接続するデータベースにその環境固有のテーブルがある場合や日常頻繁に使用するデータセットをビューとして作成したいが、データベースの変更は許可されていないといった場合に使用できます。
ではここでは簡単に作成を紹介します。

[Sharperlight](https://sharperlight.jp/)アプリケーションメニューから**カスタムテーブル**を起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/54741cd2-0316-cc8e-3a37-06d6b8683e98.png)
**カスタムテーブル**ダイアログが開いたら、`新規`ボタンあるいは右クリックメニューから`新規`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/09e253b8-d0b4-aff7-f7d5-79add278433a.png)
**製品**ダイアログが表れるので、使用する製品を指定します。これはつまり製品（データモデル）を選択することで、そのデータモデルが接続しているデータベースに関連するカスタムテーブルを作成することを意味します。今回はQiita投稿用にデータベースを準備していたので、そのデータベースに接続している製品を使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/a9c40f9c-a232-faf7-2630-df4b27927921.png)
SQL文で作成しますかという問い合わせメッセージが表示されるので、`Yes`ボタンで先に進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/711bf5e5-05a1-c973-d6ce-86b11cc219de.png)
`タイプ`に**SQLステートメント**を選択し、中央のテキストフィールドに準備しておいたSQL文を貼り付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/302dd4f9-a2d8-ddfb-8307-c3ba7f3c590b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/18cbb26b-426d-f215-28c1-a0b640c3baa5.png)
`OK`ボタンで先に進みます。
カスタムテーブル定義ダイアログが開きます。
`一般`タブでは**コード**と**タイトル**を記入します。**コード**はこのカスタムテーブルを表現するキーとなります。他のSharperlightオブジェクトでこのカスタムテーブルが使用された後では変更できません。万が一変更した場合は、レポート等が正常に表示されなくなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/30fb6d18-4923-5a0f-11ee-5a0899b97fc7.png)
`適用`ボタンで一度保存します。
`テーブルの詳細`タブに移動します。
テーブルを選択して**Table Name**プロパティを拝見すると、先に設定したSQL文が使用されていることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/db30bdbb-f720-a982-7bf7-3e03c7a81688.png)
テーブル定義とフィールド定義を確認します。これらは最初に設定したSQL文を基にSharperlightエンジンによって作成されます。主にCodeとDescriptionプロパティを確認します。お好みの値に変更できますが、Codeに関しては一旦使用されてしまうと変更はできません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/44b09d95-278f-d133-6f22-716f8f62f145.png)
確認および変更が済んだら`OK`ボタンでカスタムテーブルを保存します。

早速カスタムテーブルを使用してみます。
[Sharperlight](https://sharperlight.jp/)アプリケーションメニューから**クエリビルダ**を起動します。
`製品`には先ほどのカスタムテーブル作成時に指定した製品を選びます。
テーブルの検索ボタンをクリックすると、選択可能なテーブルの一覧が表示されます。カスタムテーブルフォルダに先ほど作成したカスタムテーブルがありますね。選択してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/bb836175-b955-585b-cd63-069e4b47f1d1.png)
このようにフィールドが**選択**領域に表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/866be962-dd30-ed2b-72cf-53c215c511ba.png)
全てのフィールドを**出力**領域に設定し、`プレビュー`ボタンでクエリを実行してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/c29b502a-d4e4-67fd-f8d0-75076e84b395.png)
正しくデータが返ってきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/90fe9b28-697e-f574-f952-f31df2084039.png)
どのようなSQL文が生成されたか確認してみます。
`!`アイコン -> SQLステートメントを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/8e0b0bab-ff56-65bc-8f50-a9f6ef10f5b8.png)
カスタムテーブルに設定したSQL文が使用されていることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/c22673b0-e4e9-6e5f-9e79-e913c6b768d8.png)
このようにカスタムテーブルを使用することで、既存のデータモデルやデータベースへの変更を行うことなく、柔軟にソリューションを作成することが可能になります。

では、失礼します。