Power AppsでSharePointリストに勤務時間を打刻してみた。

## はじめに
前回の投稿では、Power Automateを使って定期連絡フローを作成しました。今回は、Power Appsを利用してSharePointリストに勤務時間を打刻する方法をご紹介します。

https://qiita.com/neo_kuwashun/items/1885e2e14782c83be1b5

## Power Automateとは
Microsoftが提供するRPA（ロボティック・プロセス・オートメーション）ツールです。Power Automate使うことで、日常的な繰り返し作業を自動化し、業務の効率化を図ることができます。例えば、メールの自動返信やデータの入力、ファイルの保存などを自動化できます。

## Power Appsとは
Power Appsは、Microsoftが提供するローコード開発プラットフォームで、ユーザーが簡単にカスタムアプリを作成できるツールです。コードの知識が少なくても、ドラッグ＆ドロップでアプリを構築し、データの接続や自動化を実現できます。ビジネスプロセスの効率化に役立ちます。

## SharePointとは
SharePointは、Microsoftが提供するコラボレーションおよび文書管理プラットフォームです。チームがファイルを共有し、共同作業を行い、プロジェクトを管理するためのツールを提供します。企業内の情報共有と効率化を促進します。

## Power Appsで勤怠管理アプリを作成する

まず、初めに勤怠管理アプリを作成します。デザインは個人によって異なるため、今回は詳細な説明を省略します。画面を作成する際に、出勤ボタンと退勤ボタンを追加します。

![スクリーンショット 2025-03-30 011141.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/c8db9b21-866b-4055-a42b-c0d8fd7fb77a.png)

### SharePointリストに打刻する

出勤ボタンを押した際には出勤時刻、退勤ボタンを押した際には退勤時間をSharePointリストに打刻したいと思います。

### 出勤ボタン
出勤ボタンを押した際には、SharePointリストの「日付」「開始時刻」「作業場所」の列に対して打刻したいと思います。

まず、Power Appsで、出勤ボタンを選択します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/a2705295-0db8-433d-94a8-631834df37d3.png)


出勤ボタンを選択するとプルダウンが出るので、「OnSelect」を選択し、下記の関数を入力します。

```py:value1.json
Patch(
  WorkManagement,
  Defaults(WorkManagement),
  {
    日付: Now(),
    開始時刻: Time(Value(Time_selection.Selected.Value), Value(Minute_selection.Selected.Value), 0),
    作業場所: Location_selection.Selected.Value
  }
);
If(
    IsBlank(LookUp(WorkManagement, 日付 = Now())),
    Notify("報告済み", NotificationType.Information);
)
```

:::note warn
「WorkManagement」と記載されている箇所は、任意のリスト名で記載しても問題ありません。
:::

実際にボタンを押すと下記の画像のように出勤時刻を打刻することができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/468308dc-db16-4400-a849-bb2fc1baf5d8.png)





### 退勤ボタン
次に退勤ボタンを押した際にSharePointリストの「終了時刻」の列に対して打刻したいと思います。また、ボタンを押した時の日付に対して終了時刻を打刻できるようにしております。

まず、Power Appsで退勤ボタンを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/63254585-d15e-4321-8aea-a041fa4e7fdb.png)

退勤ボタンを選択するとプルダウンが出るので、「OnSelect」を選択し、下記の関数を入力します。

```py:value1.json
Patch(
    WorkManagement,
    LookUp(WorkManagement, 日付 = Today()),
    {
        終了時刻: Time(Value(Time_selection.Selected.Value), Value(Minute_selection.Selected.Value), 0) 
    }
);
Notify("退勤時間が記録されました", NotificationType.Success);
```
:::note warn
「WorkManagement」と記載されている箇所は、任意のリスト名で記載しても問題ありません。
:::

実際にボタンを押すと下記の画像のように終了時刻を打刻することができました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/f8d37997-6bfb-4e46-872e-ffcc34e9f8fd.png)


## リセット
最後にSharePointリストを毎日リセットできるフローをPower Automateで作成したのでご紹介させていただきます。


Power Automateの画面左メニューの[作成]を選択し、[スケジュール済みクラウドフロー]を選択します。
選択後下記の情報を入力します。
- フロー名：任意のフロー名を入力
- 開始日：任意の時間
- 時間：開始する時間（今回の場合は10:00 AMとする）
- 繰り返し回数：1週間
- 設定曜日：月火水木金

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/d6903f03-f5da-4837-ade9-d95bfd67d862.png)



クリックすると詳細画面が出てくるので、TimeZoneを下記に設定します。




- Time Zone：(UTC+09:00)大阪、札幌、東京
- Start Time 2024-12-13T01:00:00.000Z


![フロー2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/35f4f9f5-3b75-3b7b-e440-2d45c75f5d59.png)

:::note info
Start Timeは自動的に入力されます。
:::

#### SharePointの設定
⊕ボタンを押すと「アクションの追加」が選択できるので、クリックします。


![アクションの追加.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/decd874a-a486-11fb-dad6-bcd01e9242bb.png)
クリックすると検索することができるので、「SharePoint」と入力します。
「SharePoint」のアクションが表示されるので、「さらに表示」をクリックします。
「複数項目を取得する」が表示されるので、選択します。

:::note warn
SharePointサイトを取得するには各自でサイトを作成する必要があります。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/7cf303ee-da8e-401e-a153-fb05ef85b3ab.png)

選択したら、「サイトのアドレス」、「リスト名」を記入することができるので、下記を入力します。

- サイトのアドレス：先ほど取得したサイト
- リスト名：任意のリスト名を選択する

:::note warn
SharePointリストを各自で作成する必要があります。
:::

#### 繰り返し
各リストをリセットするために、それぞれのリストを繰りかえして処理します。
「アクションの追加」で「control」で「それぞれに適用する」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/c171bf0b-f7f4-4f57-8c4f-ac0a8b2235cd.png)

パラメータを設定できるので、「body/value」を設定します。設定することで、SharePointリストの複数項目の取得で取れたデータを取得しております。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/cf019644-5402-4887-a296-e4874cc02a6d.png)


#### 処理

「アクションの追加」で「sharepoint」で「項目の更新」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/ff252861-1ec2-462e-9bed-70823006f41d.png)

次に更新するサイト、リスト名、IDを設定します。
- サイトのアドレス：任意のサイトのアドレスを入力する
- リスト名：任意のリスト名を選択する
- ID：取得したID

次に詳細パラメーターを設定します。
「日付」、「開始時刻」、「終了時刻」、「作業場所」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/14cb6aea-6cce-493b-99f3-b1079baa3189.png)

次に、それぞれの選択したパラメータに対して、関数を設定します。
先ほど設定したパラメータで「null」と設定することでリセットすることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/34264b1e-e396-4179-863e-9407ef82e6f9.png)

実際に実行すると、全ての情報をリセットすることができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3941779/eca28ff5-841c-41f6-96c7-8e3acf7ed729.png)




## まとめ
今回は、Power AutomateとPower Appsを用いて、リストへの打刻を行いました。また、毎日自動的にリセットできるフローも作成することができました。


## 次回
次の投稿ではPower AutomateとPower Appsを連携し、teamsへのメッセージを送信する説明をしました！

https://qiita.com/neo_kuwashun/items/c23bc3f71d824acae0fb