Power AppsとPower Automateを使った業務改善アプリの構築例（貸出管理アプリ）

Power Platformは、必要に応じたアプリをローコード及びノーコードで作れるため、内製化支援のツールとしてとても優秀です。

今回はその中でもPower AppsとPower Automateを使って、業務改善を目的としたアプリを構築する例をご紹介します。


## Power Appsとは
Power Appsを使えば、任意のアプリケーションを効率よく構築できます。
先述した通りローコード、ノーコードでアプリを作れることから、専門的なプログラミング知識などは必要ありません。

基本的には、GUI（グラフィカル・ユーザー・インターフェース）ベースのマウス操作を用いた直感的な操作によって、アプリのデザインをカスタマイズします。

作れるアプリには「キャンバスアプリ」「モデル駆動型アプリ」の2種類があります。
今回は「キャンバスアプリ」を取り扱います。
![スライド1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/71d5cd41-6023-e493-15c7-e7e6d20fe51b.png)

## Power Automateとは
Power Automateは、繰り返し行われる一連の作業を自動化できるツールです。
自動化された一連の作業はフローと呼ばれます。

こちらもGUIベースの直感的な操作によって、単純なフローから、条件やループなどを使用した高度なフローまで作成可能です。

作れるフローには「クラウドフロー」と「デスクトップフロー」の2種類があります。
今回は「クラウドフロー」を取り扱います。
![スライド2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/f911bdf9-7d93-0eb5-466b-f02de2a79d2f.png)

## 今回作るアプリについて
今回は私の職場において、実際にアプリを作ることで改善できる部分がないかを考えて何のアプリを作るか決めました。
その中で私が「あったらいいな」と思ったものが、本の貸し出しを管理するアプリです。

私の職場では、エンジニア向けの書籍を無料で貸し出ししています。
ただ現状は、本を借りるときに紙の管理表に必要事項（自分の氏名、借りる本の名前、返却日など）を記入し、各自が本を持っていくという管理方法になっています。

この方法だと、自分が借りたい本が今借りられる状態かどうかを確認するのに、いちいち席を立って紙の管理表を確認しに行く必要があります。
本の貸し出しについて、アプリから貸し出し状況を確認出来るようになれば、移動の手間が省けて便利です。更に返却日に応じて、対象の本を借りている人に向けてメールで通知を行えば、返却し忘れなども防ぐことが出来そうです。

アプリを作るにあたって、搭載する機能をまとめると、以下のようになります。
1. __所蔵されている本の一覧を見て、借りたい本を探す__
2. __本を借りる（または返却する）場合は、その本の貸し出し状況を更新する__
3. __返却日になったら、対象者にメールで返却を促す通知をする__

これらの機能を実装したアプリを、Power AppsとPower Automateを用いて実際に作っていきましょう！


## データを保存するテーブルを用意する
アプリ作成に入る前に、まずは本のデータを格納する場所を作る必要があります。
今回は、SharePointのリスト（Microsoft Lists）をテーブルとして利用します。

:::note info
SharePointは、Microsoft 365のライセンスがあればそのまま利用することが出来ます。
:::

### SharePointリストの作成
* SharePointのホームページにアクセスします。
    ![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/a9069a72-edbe-7f94-286f-dcf1f1510950.png)
<br/>

* ＋マークのボタンから `リスト` をクリックします。
    ![無題2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/da1a26bc-f893-9d27-1bda-95704521ee38.png)
<br/>

* `空白のリスト` をクリックします。
    ![無題3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/c16f1c78-39bf-e45f-75d2-4e1c3f321525.png)
<br/>

* `名前` には「本一覧」、`保存先` には「マイリスト」を選択してください。
    ![無題4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/37061e2f-7fa6-185f-ef09-9b7866fc5821.png)

:::note warn
本来であれば、これから作るリストは今回作るアプリを使う人たちに共有する必要があるので、`保存先` にはSharePoint上で作ったサイトを選択しなければいけませんが、今回は試作段階なので「マイリスト」のままで問題ありません。
:::
<br/>


### 本のデータに関する列を追加
* `列の追加` をクリックします。
![無題5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/9009ee5a-2984-6c94-5c7d-4263aac6295f.png)
<br/>

* 列の種類を選択します。
    ![無題6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/6bd359e9-8d3d-66cd-6a1e-45d2572dce72.png)
<br/>

* `名前` に列名を入力し、`保存`をクリックします。下の表に従って、任意の列を追加してみてください。
    ![無題7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/d6235f50-2170-baad-5ab5-2cd30114253d.png)


    | 列名 | 列の種類 | 備考 |
    |:-:|:-:|:-:|
    | 副題 | テキスト |   |
    | 著者名 | テキスト |   |
    | 出版社 | テキスト |   |
    | カテゴリ | 選択肢 | 「一般」「IT」「その他」 |
    | 場所 | 選択肢 | 「1F」「2F」 |

:::note warn
基本的に、各自が「あったら便利だな」と思う列を適宜追加していただければと思います。表に示しているのは、例として私が追加した列の一覧になりますのでご注意ください。
:::


:::note warn
列の種類が 「選択肢」 の場合は、`選択肢`について適宜編集を行ってください。
    ![無題8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/72b824ea-6d4a-a97b-3648-a7c6ce1ca455.png)
:::
<br/>


### 本の貸し出しに関する列の追加
* 先ほどと同様に、`列の追加` から、以下に示した3つの列を追加します。

    | 列名 | 列の種類 | 備考 |
    |:-:|:-:|:-:|
    | ステータス | 選択肢 | 「貸出中」「貸出可能」 |
    | 借りた人 | テキスト | |
    | 返却日 | 日付と時刻 |   |
<br/>

### サンプルデータを追加
列を追加したら、適当にサンプルとなる本のデータを何件か追加します。
この作業は必須ではないですが、この後のアプリ作成において、サンプルデータがあった方が作りやすいと思います。
* `新しいアイテムの追加` をクリックします。
    ![無題11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/5df67eab-8fdf-02f5-d109-1e3079d9b113.png)
<br/>

* 「タイトル」～「場所」には任意の内容を入力し、「ステータス」は「貸出可能」を入力して、`保存` をクリックします。
    ![無題12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/2ed4a21f-338c-3410-258d-f1f3ac2b6e89.png)
<br/>

## Power Appsで貸出アプリを作る
本データの保存先となるテーブルを作ったので、次に貸出管理アプリをPower Appsを使って作ります。

### アプリの作成画面を開く
* Power Appsのホームページにアクセスします。
    ![スライド1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/03836473-34bf-1a71-e5ce-5ac22646d064.png)
<br/>

* `作成` をクリックし、 `空のアプリ` をクリックします。
    ![スライド2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/ad686d82-73df-9ccf-d847-8bff8bba3605.png)
<br/>

* `空のキャンバスアプリ` の `作成` をクリックします。
    ![スライド3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/1310c64b-e2ea-f78c-77a4-81dfa339bf9e.png)
<br/>

* `アプリ名` に任意の名前を入力して `作成` をクリックします。
    ![スライド4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/f67d1bbb-f681-3993-cd08-c87c4f272990.png)
<br/>

ここで下の画像のような新たなページに遷移すると思います。
このサイトはPower Apps Studioという、キャンバスアプリを作成するのに使用するサイトです。
![Power Apps Studio1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/f5611d79-8359-7dfb-9972-4a0c7baa7590.png)

次はこのPower Apps Studioにて、本の貸し出し管理アプリの画面を構成していきましょう。
説明する際に、Power Apps Studioにおける画面の各部名称を使って説明します。
その名称については下の画像に説明がありますので、ぜひご参照ください。
    ![Power Apps Studio2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/f377a41b-d1b0-fa39-e27e-434abf2caa1c.png)
<br/>

### 本の一覧を表示する部分を作る
まずは、先ほど作ったSharePointリスト「本一覧」に保存されているデータを見られるようにしていきます。

#### テキストを入れる
* `挿入` から `テキストラベル` をクリックして、スクリーン内にコントロールを追加します。
    ![スライド5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/5849f930-c584-a3b2-66af-b4dcc7d73eee.png)
:::note info
スクリーン内にいずれかのコントロールを入れる場合、画面上部の `挿入`をクリックすれば、追加できるコントロールの一覧が表示されるので、その中から追加するコントロールを選びます。
この**コントロールを追加する**操作は、この後も何回か登場しますので、是非覚えていただきたいです！
:::
<br/>

* プロパティペインの `テキスト` に「本一覧」と入力したら、下の画面を参考に位置を移動させましょう。
    ![スライド6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/c61d9199-2173-1efb-bef2-d107bb59cb12.png)
<br/>

#### 本の一覧を表示させる
* スクリーン内に `垂直ギャラリー` コントロールを追加します。
<br/>

* ツリービューから、このコントロールの3点マークから `名前の変更` をクリックしたら、コントロール名を「BookList」に変更します。
    ![スライド8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/b1547d52-3751-d0ab-69c0-a23d45abf1f8.png)
<br/>

* `BookList` をクリックして、`データソースの選択` から `SharePoint` を選択します。
    ![スライド10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/31a188a1-6e32-7c30-e4b4-e57273115e74.png)
<br/>

* `直接接続（クラウドサービス）` をクリックし、`接続` をクリックします。
    ![スライド11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/7716206d-b119-c005-9156-955e58963dd7.png)
<br/>

* `リストの場所を表す SharePoint URLを入力してください` というメッセージの下の入力欄に __Microsoft ListsのマイリストのURL（URLの確認方法は下記参照）__ を入力します。
    ![スライド12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/1ec887df-9eb1-5294-c9fd-ac4909e46a53.png)
<br/>

:::note warn
Microsoft ListsのマイリストのURLは、人によって異なります。
「本一覧」のページにアクセスした際のURLの内 `http:`~`_com`までの部分がそれに該当します。
![Power Apps マイリストのURL1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/88c90905-1f4a-b14e-eb4e-4cb96f881514.png)
:::
<br/>

* `本一覧` にチェックを入れ、`接続` をクリックします。
    ![スライド13.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/81d32478-3283-48b1-0aa2-56d592fb8c1c.png)
<br/>


***
#### 対象の本の貸し出し状況が一目で分かるようにする
* `BookList` を選択し、コントロール内の鉛筆マークをクリックします。
    ![スライド14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/8976fbe2-0204-52d2-da5f-cd4e04e874db.png)
<br/>

* BookListの中に `テキスト ラベル` コントロールを追加します。
:::note info
ギャラリーコントロールは、データソースに保存されている各データを一覧で表示しますが、1つ分のデータをどのように表示するかを決めるテンプレートが存在します。
鉛筆マークを押すと、そのテンプレートのデザインを編集することが出来るようになります。
:::
<br/>

* `Text` プロパティを選択し、数式バーに以下の内容を入力します。
    ```
    ThisItem.ステータス.Value
    ```
    ![スライド16.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/dd476422-845d-c70b-d3bb-9ab3b7792deb.png)
<br/>

***
#### フィルター機能を付ける（テキスト）
* スクリーン内に `テキストラベル` コントロールを追加します。
<br/>

* プロパティペインの `テキスト` に「貸出可能な本のみ表示」と入力したら、`BookList` を少し変形して、「本一覧」の下に配置します。
    ![スライド18.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/8768e618-ec62-f961-de67-0b9a4b9effce.png)
<br/>

***
#### フィルター機能を付ける（トグルボタン）
* スクリーン内に `切り替え` コントロールを追加します。
<br/>

* 「貸出可能な本のみ表示」と書かれたテキストラベルの横の位置に移動させたら、`ツリービュー` から、このコントロール名を「AvailableToggle」に変更します。
    ![スライド22.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/3cca3efc-cc70-03d2-d194-9b399fff6229.png)
<br/>

* `BookList` の `Items` プロパティを選択し、数式バーに以下の内容を入力します。
    ```
    Filter(本一覧, AvailableToggle.Value = false || ステータス.Value = "貸出可能")
    ```
    ![スライド22.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/0ba67260-f9df-ca23-c52f-580982c5f4bd.png)
:::note info
`Filter` 関数は、指定したテーブルに対して特定の条件を満たすレコードのみを返す関数です。
参考：https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-filter-lookup
:::
<br/>

### 対象の本についての貸し出し状況を操作する部分を作る

#### 垂直ギャラリー内でクリックした本の詳細を表示させる
* スクリーン内に `表示フォーム` コントロールを追加します。
<br/>

* プロパティペインの `データソース` をクリックし、「本一覧」をクリックします。
    ![スライド25.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/e9760cd6-3815-47bb-fa95-568a35c5db7a.png)
<br/>

* プロパティペインの `フィールド` にある `フィールドの編集` をクリックし、`フィールドの追加` から「タイトル」「副題」「カテゴリ」「著者名」「出版社」「場所」を追加します。
    ![スライド26.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/135ffb81-4331-06d1-475a-0a6afc368586.png)
<br/>

* `Item` プロパティを選択し、数式バーに以下の内容を入力します。
    ```
    BookList.Selected
    ```
    ![スライド27.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/19eb8ec4-cdf0-d6a2-f111-acd2a0cf024b.png)
:::note info
`Item` プロパティは、フォーム内でどのレコードを表示するかを決めます。
:::
:::note info
`BookList.Selected` とは、`BookList` の中のレコードの内、マウスクリックで選択されたレコードを表します。
:::
<br/>

#### 借りるボタンを作る
* スクリーン内に `ボタン` コントロールを追加します。
<br/>

* プロパティペインの `テキスト` に「この本を借りる」と入力したら、ツリービューから、このコントロール名を「BorrowButton」に変更します。
    ![スライド29.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/2aa080e2-1d5b-f09e-89e5-7098c9f3e682.png)
<br/>

* `BorrowButton` の `OnSelect` プロパティを選択し、数式バーに以下の内容を入力します。
    ```
    Patch(本一覧, BookList.Selected, {借りた人:User().Email, 返却日:DateAdd(Today(), 7, TimeUnit.Days), ステータス:First(Choices(本一覧.ステータス, "貸出中"))})
    ```
    ![スライド30.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/79d4c140-510b-0863-1364-306abc9782bd.png)
:::note info
`OnSelect` プロパティは、対象のコントロールをクリックした場合の動作を決めます。
:::
:::note info
`Patch` 関数は、対象のテーブルについて、特定のレコードに対して内容を編集したり、また新しくレコードを追加したりすることができる関数です。
参考：https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-patch
:::
<br/>

* `BorrowButton` の `DisplayMode` プロパティを選択し、数式バーに以下の内容を入力します。
    ```
    If(BookList.Selected.ステータス.Value = "貸出可能", DisplayMode.Edit, DisplayMode.Disabled)
    ```
    ![スライド31.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/b4548009-09bf-fc54-c762-2553c71c6375.png)
:::note info
`DisplayMode` プロパティは、対象のコントロールに対する操作（クリックなど）を制御します。
:::
:::note info
`If` 関数は、条件に合わせて返す値を変えることが出来る関数です。
参考：https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-if
:::
<br/>


#### 返却するボタンを作る
* スクリーン内に `ボタン` コントロールを追加します。
<br/>

* プロパティペインの `テキスト` に「この本を返却する」と入力したら、ツリービューから、このコントロール名を「ReturnButton」に変更します。
    ![スライド32.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/1b42e138-c4e1-674e-a246-5736fdf796e5.png)
<br/>

* `ReturnButton` の `OnSelect` プロパティを選択し、数式バーに以下の内容を入力します。
    ```
    Patch(本一覧, BookList.Selected, {借りた人:Blank(), 返却日:Blank(), ステータス:First(Choices(本一覧.ステータス, "貸出可能"))})
    ```
    ![スライド33.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/19f9f82a-5770-cc05-f62d-9c4e8a3e7f10.png)
<br/>

* `ReturnButton` の `DisplayMode` プロパティを選択し、数式バーに以下の内容を入力します。
    ```
    If(And(BookList.Selected.ステータス.Value = "貸出中", BookList.Selected.借りた人 = User().Email), DisplayMode.Edit, DisplayMode.Disabled)
    ```
    ![スライド34.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/8d14166a-fd7f-b91b-c32e-25862091abe7.png)
<br/>

## Power Automateで本の返却を通知するフローを作る

### クラウドフローの作成画面を開く
* Power Automateのホームページにアクセスします。
    ![スライド1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/2061de5c-3aad-1616-6b06-27bb545da7bd.png)
<br/>

* `作成` をクリックし、 `スケジュール済みクラウドフロー` をクリックします。
    ![スライド2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/371d388d-9fdb-a733-7dbc-18c26344e0d6.png)
<br/>

* フロー名欄に任意の名前を入力して、次のように設定します。
    * **開始日**：今日の日付
    * **時間**：10:00AM（何時でも良い）
    * **繰り返し間隔**：「1」「日」

    ![スライド3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/9496f51b-c08b-a32c-f3fd-3379c9bf67e7.png)
<br/>

### 全ての本データを取得するアクションを追加する
* `新しいステップ` をクリックします。
    ![スライド4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/6a987212-7531-ec54-7b60-e51cd4ea9004.png)
<br/>

* SharePointコネクタをクリックします。
    ![スライド5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/7bb51e2f-bec8-61af-e7d3-dda16716fa2d.png)
<br/>

* `アクション` の中から `複数の項目の取得` をクリックします。
    ![スライド6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/66b127f2-a981-9a16-f4e1-0dc72f0e951f.png)
<br/>

* 追加したアクションを1度クリックして詳細を開いたら、`サイトのアドレス` の入力欄から `カスタム値の入力` をクリックします。
    ![スライド7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/2b12d26e-bb87-26ae-5b18-341054f1e872.png)

<br/>

* 先ほど調べたMicrosoft Listsの「マイリスト」のURLを入力します。
    ![スライド8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/ac5aa723-9683-048c-a200-a00ab2b26568.png)
<br/>

* `リスト名` の入力欄から「本一覧」を選択します。
    ![スライド9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/869f2029-99a5-101a-8f8f-9b3303a4c557.png)

<br/>

* `詳細オプションを表示する` をクリックします。
    ![スライド10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/f12a13b4-1f1c-3311-1082-f186dcd7b5e8.png)
<br/>

* `フィルター クエリ` の入力欄には、次の内容を入力します。
    （__[「ステータス」列の内部名]__ の部分の内容は、下記の方法から確認して下さい。）
    ```
    OData_[「ステータス」列の内部名] eq '貸出中'
    ```
    ![スライド11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/e30f5de1-4f7b-bf5f-9c61-079e5adcc8ef.png)


:::note warn
[「ステータス」列の内部名]の部分は、人によって内容が異なります。次の手順で「ステータス」列の内部名を確認し、その文字列を当てはめてください。

* SharePointリスト「本一覧」のページを開いたら、右上の歯車マークから `リストの設定` をクリックします。
    ![スライド12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/29e60c55-3943-905d-5c90-f5f7cf5116b7.png)
<br/>

* `列` 欄の `ステータス` をクリックします。
    ![スライド13.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/d3239cda-f08f-e18b-ae6a-1dea79f065ab.png)
<br/>

* 開いたページのURLの内`&Field=` 以降の文字列が「ステータス」列の内部名です。
    ![スライド14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/4f2b5777-78ea-c677-a7bf-591a37782e09.png)
    
:::
<br/>

### 返却期限を迎えている人に向けてメールを送信するアクションを追加する

#### 分岐条件を作る
* `新しいステップ` をクリックし、コントロールコネクタの `条件` をクリックします。
    ![スライド15.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/23bd03df-aceb-e013-bf8d-e1154882ac94.png)
<br/>

* 左側の `値の選択` には、`動的なコンテンツ` から `複数の項目の取得` の `返却日` をクリックして入力してください。
    ![スライド17.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/033b06a7-fe42-1a7b-250f-d5581dd7a7e1.png)
<br/>

*  `条件`アクションが、自動的に`Apply to each`アクションの中に入れられたことを確認します。右側の `値の選択` には、`式` の `Fx` と書かれた入力欄に、次の内容を入力して `OK` をクリックしてください。
    ```
    utcNow('yyyy-MM-dd')
    ```
    ![スライド18.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/0767bd57-c4e5-2165-1954-2e2a0f144fc2.png)
:::note info
`Apply to each`（`それぞれに適用する`）アクションは、コントロールコネクタ内のアクションの1つで、このアクション内に記述されたフローを、指定されたデータ数分繰り返し行うことが出来ます。
データの指定は `以前の手順から出力を選択` と書かれたボックスに入力します。

自動的に `Apply to each` アクションに囲まれたのは、 `複数の項目を取得する` アクションから出力されるデータの個数が複数あるため、全てのデータの対して同じアクションを適用する必要があるとシステム側が判断したためです。
:::
:::note info
`utcNow` 関数は、現在日時を返す関数です。引数として日時表記のフォーマットを渡すことで、任意の表記形式にすることもできます。
:::
<br/>
    
#### メールを送信するアクションを追加する
* `はいの場合` の方の `アクションの追加` をクリックします。
    ![スライド19.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/16d37172-e380-05ca-c63d-36d4821d1fe2.png)
<br/>

* Outlookコネクタの `メールの送信(V2)` をクリックします。
    ![スライド20.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/b3d6ce24-28ce-875b-f6ef-6a479b3f5610.png)
<br/>

* `宛先` には、`動的なコンテンツ` から `複数の項目の取得` の `借りた人` をクリックして入力します。
`件名` と `本文` には、本貸し出しアプリからの返却に関する通知であることが分かるような内容を入力します。例としては、以下の画像をご参照ください。
    ![スライド21.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/3959259d-a330-1028-3348-07538b60a16b.png)
<br/>

## 動作確認をする

作ったアプリとフローが正常に動作するかどうかを確認しましょう。

### 所蔵されている本の一覧を見て、借りたい本を探す
この機能については、既にアプリを作成している途中でSharePointリスト「本一覧」の全データを垂直ギャラリーにて表示させていたので、正しく動作しているとします。


### 本を借りる（または返却する）場合は、その本の貸し出し状況を更新する
まず対象の本を借りる場合は、アプリ内の「この本を借りる」ボタンを押します。
すると、「この本を借りる」ボタンが押せなくなり、代わりに「この本を返却する」ボタンが押せるようになったと思います。
    ![スライド37.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/87bf5943-320c-b87b-4f9a-71f689733d2f.png)


また「本一覧」リストのページにアクセスしてデータを見てみると、対象の本データの「借りる人」列には自分のEmailアドレスが、「返却日」列にはボタンを押した日から1週間後の日付が格納されており、「ステータス」列も「貸出中」に変化しているはずです。
![スライド38.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/c107ab8c-b8bc-1653-301e-03310b67a6d4.png)


「この本を返却する」ボタンを押した場合はこの逆で、「借りる人」「返却日」列が空になって、「ステータス」列は「貸出可能」に戻ります。

次に「本一覧」リストのページにアクセスして、任意の本データにて、以下の画像のようにデータを直接編集してみます。
![スライド39.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/8203ce2d-f84a-d98e-dc59-7cfcc7faae8e.png)

これは「自分以外の誰かがその本を借りている」という状況を再現したデータになります。
この本データについてアプリ内から確認してみると、どちらのボタンも押せなくなっています。他の人が借りているから当然「この本を借りる」ことは出来ないし、「この本を返却する」ことも出来ないため、こちらも正常に動作していることが確認できます。
![スライド40.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/364b74cb-cda4-f0ab-629c-f6cd693ee28b.png)

フィルターボタンも正常に動作するかを確認します。トグルボタンをオンにすると、「貸出中」になっている本が消えたことが分かります。
![スライド41.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/515515d6-d652-fc39-b0c7-339ef6cfa3a8.png)


### 返却日になったら、対象者にメールで返却を促す通知をする
このフローは本来、1日おきに自動的に実行されるフローです。
ただPower Automateには、作ったフローを試しに実行できる機能があります。今回はそれを使って正しく動作するかを見ていきます。

まずフローを実行する前に、「本一覧」リストのページにアクセスして、任意の本データにて、以下の画像のようにデータを直接編集してください。
![スライド22.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/04b0f692-a20c-2a2d-bfe2-4d2a3d98198a.png)

これは「自分が借りた本について、返却日が今日に迫っている」という状況を再現したデータです。
データの編集が終わったら、フローの作成画面に移り、次の手順を実行してください。
* `テスト` をクリックします。
    ![スライド23.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/f144324f-de1d-2b20-c43b-a125b3d99400.png)
<br/>

* `手動` を選択したら `テスト` をクリックします。
    ![修正1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/b4d81490-5796-4689-0467-f63584990c26.png)
<br/>

* `フローの実行` をクリックします。
    ![スライド25.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/f80e40d8-7837-da76-7f96-fa295dc51a94.png)
<br/>

* `完了` をクリックすると、フローの実行結果の画面に遷移します。
    ![スライド26.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/6fec1011-d7c8-01d2-8ebb-aa103a1635a7.png)
<br/>

フローの実行が成功すると、自分のアカウントのOutlookに、Power Automateからのメールが届いているはずです。
    ![スライド28.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588961/149ce1fb-4f46-dadd-58de-5e8a725dd5a0.png)
<br/>

## まとめ

今回は、会社内での本貸し出しに関する管理アプリをPower Appsで作成し、更には返却の通知を行うフローをPower Automateで作成してみました。

PowerPointのようなマウスを使う操作によってアプリ開発が行えるため、プログラミング初心者にも開発しやすい便利なツールであることが分かっていただけたかと思います。

皆さんもPower Platformを用いて、良い業務改善のソリューションをどんどん作っていきましょう！