On-premises Data Gatewayを使って、MS PowerAppsとオンプレミスのDBを接続

# はじめに
この記事は**オンプレミスのDB内のデータをPowerApps上に表示させるまで**を記載しています。

PowerAppsとDBのインストール方法や操作方法の詳細については記載しておりません。

本記事では、Windows7のパソコンに無償の「SQL Server 2012 Express」(オンプレミスのDBとして)と「On-premises Data Gateway」をインストールしたものを使用しました。

# On-premises Data Gatewayのインストール
※On-premises Data Gatewayをインストールするパソコンは、DBがインストールされているパソコンである必要はありません。

[PowerAppsのdownloadページ](https://powerapps.microsoft.com/ja-jp/downloads/)にてOn-premises Data Gatewayのインストーラーをダウンロード。
![odg_ins_01.PNG](https://qiita-image-store.s3.amazonaws.com/0/128060/4b55de3a-cd28-ea9e-5815-c8526c5d58f9.png)

ダウンロードしたGatewayInstall.exeを実行して、下図画面が出現するまで「次へ」をクリック。
画面が出現したら、Office365に登録済みの電子メールアドレスを入力して「サインイン」をクリック。
![odg_ins_02.PNG](https://qiita-image-store.s3.amazonaws.com/0/128060/7b68885a-8d9e-0ece-3fcf-8c4ce9c12d61.png)

パスワードを入力して「サインイン」をクリック。
![odg_ins_03.PNG](https://qiita-image-store.s3.amazonaws.com/0/128060/b63636bd-e298-5812-dc6a-ccd343621b98.png)

新しいon-premise data gatewayの名前と回復キーに任意の値を入力して「構成」をクリック。
![odg_ins_04.PNG](https://qiita-image-store.s3.amazonaws.com/0/128060/64ef1994-8bca-4c18-5b3b-62878dd4fc04.png)

PowerAppsが準備完了になっている事を確認して「閉じる」をクリック。
![odg_ins_05.PNG](https://qiita-image-store.s3.amazonaws.com/0/128060/b6f9302d-343d-ccfa-6fee-4ffc660d3255.png)

```
Info:
On-premises Data Gatewayが起動していない時はWindowsの「サービス」アプリで起動可能
```

# PowerApps<-->On-premises Data Gateway<-->SQLServerの接続設定
PowerAppsの画面の左ペインの「データ」-「接続」をクリック。
![gw_setting_01.PNG](https://qiita-image-store.s3.amazonaws.com/0/128060/76985424-bc26-b280-864d-fcb153bd3d61.png)

画面左上の「新しい接続」をクリック。
![gw_setting_02.PNG](https://qiita-image-store.s3.amazonaws.com/0/128060/253459ad-d905-d2cf-dac8-383c0bc52f24.png)

「[接続するオンプレミス環境のDB]」をクリック。(今回はSQL Server)
![gw_setting_03.PNG](https://qiita-image-store.s3.amazonaws.com/0/128060/59971434-3f18-5278-a7c3-d787ba3a4be0.png)

オンプレミスのDBに関する情報を入力。(下記はSQL Serverの場合)

- 「オンプレミス データ ゲートウェイを使用して接続」を選択
- 「SQL サーバー名」に「SQL Serverのインスタンス名(サーバー名を含む)」を入力
- 「SQL データベース名」に「SQL Serverのデータベース名」を入力
- 「認証の種類」から認証方法を選択
    - Windows認証の場合は「Windows」
    - SQL Server認証の場合は「basic」
- 「ユーザー名」に「オンプレミスのDBにログインする為のユーザー名」を入力
- 「パスワード」に「オンプレミスのDBにログインする為のパスワード」を入力
- 「ゲートウェイを選択してください」から「インストールしたOn-premises Data Gatewayの名前」を入力

最後に「作成」ボタンをクリック。
![gw_setting_04.PNG](https://qiita-image-store.s3.amazonaws.com/0/128060/e29e175d-ebb4-87a1-3c34-f5978b1c9e9a.png)

# PowerAppsにオンプレミスのDBデータを表示
「ホーム」-「Canvas app from blank」をクリックして、PowerApps Studio(PowerApps開発環境)を開く。

![development-by-powerapps-and-onpremisedb_01.PNG](https://qiita-image-store.s3.amazonaws.com/0/128060/e02001e5-a375-0bf9-6b14-1195908d9eed.png)

下図画面が出現した場合は「スキップ」をクリック
![development-by-powerapps-and-onpremisedb_02.PNG](https://qiita-image-store.s3.amazonaws.com/0/128060/77a84c4d-8de5-ae27-9272-4a820344d491.png)

ゼロから作るのは面倒なので、今回はテンプレートを使用。「ギャラリー」-「縦」をクリック
![development-by-powerapps-and-onpremisedb_03.PNG](https://qiita-image-store.s3.amazonaws.com/0/128060/1cd1461f-fefa-a923-e977-e0b88f956cd5.png)

キャンバス上にテンプレート通りのリスト形式のオブジェクトが配置されます。

最初はサンプルデータが使用されているので、データソースを変更する為に「データ」-「データソース」-「CustomGallerySample」の右にある「V」ボタンをクリックして「データソースの追加」をクリック
![development-by-powerapps-and-onpremisedb_04.PNG](https://qiita-image-store.s3.amazonaws.com/0/128060/ddf29ffa-26cb-2c70-fca2-b9a6b907be46.png)

データ一覧画面になったら、オンプレミスのDBをクリック
![development-by-powerapps-and-onpremisedb_05.PNG](https://qiita-image-store.s3.amazonaws.com/0/128060/be569e1f-4f12-6437-9027-b80b8780f4d2.png)

テーブルの一覧が表示されるので、使用するテーブルにチェックをつけて「接続」ボタンをクリック
![development-by-powerapps-and-onpremisedb_06.PNG](https://qiita-image-store.s3.amazonaws.com/0/128060/ceb82127-c54d-fca2-210b-24dc168fbb6d.png)

データ一覧画面に戻るので、各項目に下記内容を設定
- 「データソース」に主となるテーブルを設定(今回はT_Sales)
- 「レイアウト」に自分が望むレイアウトを設定（今回は「タイトル、サブタイトル、本文」のレイアウトを設定）
- ラベルなどの各オブジェクトにDBのカラムを設定

![development-by-powerapps-and-onpremisedb_07.PNG](https://qiita-image-store.s3.amazonaws.com/0/128060/c57666a9-eb56-894a-1941-ca26e7a461bb.png)

ここまでで、オンプレミスのDBデータをPowerAppsに表示させる設定は完了です。

しかし実際の仕事では、トランザクションテーブルのデータからマスタテーブルの情報を取得できないと使い物になりません。

なので、最後にトランザクションテーブルとマスタテーブルを結合して終わりたいと思います。

結合方法は下記の通りです
1. 対象のオブジェクトをクリック
2. 関数項目に`LookUp`関数を使った、結合処理を入力

例を用いて説明すると、下記の通りです。

Case: 主テーブル(T_Sales)にマスタテーブル(M_Customer)を連結させ、`CompanyCode`が表示されているオブジェクトに`CompanyName`を表示させる場合(連結キーは`CompanyCode`と`CustomerCode`)

1. `CompanyCode`が表示されているオブジェクトをクリック
2. 関数項目に`LookUp('[dbo].[M_Customer]', ThisItem.CompanyCode=CompanyCode && ThisItem.CustomerCode=CustomerCode,CustomerName)`を入力

上記のLookUpを見れば理解できるかと思いますが、`LookUp('[連結するテーブル名'], [連結条件], [連結先のテーブルから取得するカラム名])`です。

![development-by-powerapps-and-onpremisedb_08.PNG](https://qiita-image-store.s3.amazonaws.com/0/128060/7f46b306-56fd-3581-790d-1f91f4f757c6.png)

## 所感
思ったよりも簡単な作業でオンプレミスのDBデータをPowerAppsで扱えるようになりました。

ただ、私自身の経験で言うと、直感的に理解できるUIではなく、本格的に使用するとなると、最初に学習コストが大きくかかりそうな印象です。

しかし、ユースケースによってはメリットが大きいと思います。例えば、イントラネット内でしか使用できないようなレガシーシステムをモバイルアプリ化したい場合などは有用ではないでしょうか？

自分たちの状況によっては非常に有用になりそうな気がします。