今日もローコードで業務改善をしたい

Power AutomateやPower Appsなど、Power Platformに関して学んだことを書いています。

Power AppsからTeamsのグループチャットを起動するアプリを作ってみる

はじめに

初めてのPower Apps記事になります!

Power Appsから特定のWebページを起動するには、Launch関数を用いることでできます。

今回はそれを利用して、Power AppsからTeamsのグループチャットを起動する方法をご紹介します。


下図のような、担当者を検索してワンタップでTeamsチャット(担当者が複数人の場合はグループチャット)を起動するアプリを作っていきます。

用意するもの

SharePoint Online リスト

任意のサイトで新規のリストを作成します。
今回は「担当者」というリスト名にし、ダミーデータをいくつか入れてみました。
列は既定のタイトル列と、Users列という「ユーザーまたはグループ列」を追加しています。

Users列は「複数選択を許可」をオンにすることで、複数名登録することができます。

SharePoint Online リストの設定は、これで以上です。

アプリの作成方法

1.SharePoint Onlineリストの接続

キャンバスアプリを一から作成します。
今回は「担当者検索」というアプリ名にし、形式は「電話」にしました。

SharePoint Online リストと接続をするために「+データの追加」をします。

「データソースの選択」より「SharePoint」と入力し、「SharePoint」を選択します。

該当する「SharePoint」を選択します。

リストを作成したサイトを選択します。

事前に作成したリストを選択し、「接続」をクリックします。

選択したリストが接続されていれば、完了です。

2.ギャラリーの追加

「挿入」>「ギャラリー」>「縦」を選択してギャラリーを追加します。

右メニューの「レイアウト」から「タイトル、サブタイトル、本文」にレイアウトを変更します。

データソースの選択で事前に接続したSharePoint Onlineリストを選択します。

リストの接続に成功すると、リストの情報がギャラリーに表示されます。
「NextArrow1」と「Body1」コントロールは不要なので、削除します。

ギャラリーのサイズをお好みで変更してください。

3.コントロール名の整理

コントロール名が「Gallery1」や「Title1」だと、後からアプリを見返したときや他の人に引き継いだ時にどこのコントロールかわかりにくくなってしまいます。

そこで、Microsoftが「Power Appsキャンバスアプリのコーディング規約とガイドライン」を公開しています。
自分のためにも人のためにも、わかりやすいコントロール名に変更しましょう!

今回は下図のようにコントロール名を変更しました。

4.ギャラリーの編集:ユーザーとグループ列を表示

いよいよアプリの要となる部分を追加していきます。

txtUsersコントロールのTextプロパティが「ThisItem.登録者.DisplayName」になっています。
ここはリストの「Users」列を表示させたいと思います。

ただ、「Users」列は複数名登録されているので、テーブル型になっています。
Textプロパティはテキスト型しか入れることができないので、「ThisItem.Users.DisplayName」とするとエラーになってしまいます。

そこで、テーブル型をテキスト型に変換するConcat関数を用います。

Concat(ThisItem.列名, DisplayName & ",")

docs.microsoft.com

ただ、上記式のままだと「User1, User2,」と最後に余分な「,」が入ってしまいます。
この余分な「,」を削除するために、LeftとLen関数の組み合わせを利用します。

Left(Concat(ThisItem.列名,DisplayName & ","),Len(Concat(ThisItem.列名,DisplayName & ",")) - 1 )

docs.microsoft.com

docs.microsoft.com


txtUsersのTextプロパティは以下の式を入れます。

Left(Concat(ThisItem.Users,DisplayName & "," ),Len(Concat(ThisItem.Users,DisplayName & "," )) - 1 )

これで無事にUsers列を表示させることができました。

5.ギャラリーの編集:Teamsのグループチャットを起動する

Teamsを起動させるためのボタンを追加していきます。

「galUsers」コントロールをクリックし、ギャラリーの鉛筆マークをクリックします。

「挿入」>「メディア」>「画像」を選択します。

画像を右に移動させます。
ついでにコントロール名も「imgTeams」と変更しました。

右メニューの「プロパティ」より、「画像」>「+画像ファイルの追加」をクリックします。
ここで私はTeamsアイコンの画像を追加しました。

Teamsの画像をクリックしたときに、Teamsのグループチャットを起動させたいので、
imgTeamsコントロールのOnSelectプロパティを設定します。

クリックしたときに指定されたユーザーとチャットを立ち上げるために、Launch関数を利用します。

Launch("https://teams.microsoft.com/l/chat/0/0", "users","ユーザーメールアドレス")

docs.microsoft.com

今回はグループチャットも起動させたいので、さきほど使ったConcat、Left、Len関数を組み合わせます。

imgTeamsコントロールのOnSelectプロパティに以下式を入れます。

Launch("https://teams.microsoft.com/l/chat/0/0","users",Left(Concat(ThisItem.Users,Email & "," ),Len(Concat(ThisItem.Users,Email & "," )) - 1 ))

以上でギャラリーの編集は、完了です。

6.検索ボックスの実装

せっかくなので、検索ボックスを付けて検索できるようにしてみましょう。

「挿入」>「入力」>「テキスト入力」をクリックします。

コントロール名を「txtSearchBox」に変更し、規定を「値なし」にします。

「galUsers」コントロールの「Items」プロパティに以下式を入れます。

Search(担当者,txtSearchBox.Text,"Title")

以上で検索ボックスの実装は、完了です。

アプリの実行

実際にアプリを実行してみましょう。

上から3つめのTeamsボタンをクリックしてみます。

Teamsが立ち上がります。

さきほど選択したLangerさんとShermanさんとのグループチャットが立ち上がりました。

アプリに戻り検索ボックスも利用してみます。
??部を検索するために「??」と入力したところ、ちゃんと??部だけが表示されるようになりました。

さいごに

Power AppsからTeamsのグループチャットを起動する方法のご紹介でした。

アプリでユーザーを検索し、ワンボタンでグループチャットを開くことができるのは結構便利だなと感じました!

今回はユーザーをテキスト表示だけにしましたが、ユーザーの画像も併せて表示できるともっと分かりやすくなるかなと思います。
ユーザーの画像表示方法についてわかりましたら、また記事を書きたいと思います。

FormsとPower Automateで1日先着〇名まで受付する簡易予約システムを作ってみる

はじめに

Microsoft FormsとSharePoint Onlineリスト、Power Automateを組み合わせることで、簡易的な予約システムを作成することができます。


今回は、同じ日に予約できる枠を先着3名までとし、4名以上から申請があった場合、自動で予約受付不可メールを送るシナリオをサンプルにご紹介します!

フロー全体図


用意するもの

Microsoft Forms

今回は講習会申請を想定して、日付設問のあるフォームを作成します。
(講習会は常時受付しており、ユーザーは自由に日付を選択してもらうパターンにします。)

SharePoint Onlineリスト

任意のサイトで新規のリストを作成します。
Formsの回答を格納し、カレンダー表示させるためにSharePoint Onlineリストを利用します。

「列の追加」から「日付と時刻」の列を作成します。

私は列名を「Date」にして「保存」をクリックしました。
※「時間を含める」は必ず「いいえ」にしてください。

右上の「すべてのアイテム」から「新しいビューを作成する」をクリックします。

ビューの作成画面が表示されるので、以下を設定し「作成」をクリックします。


ビュー名:任意の名前
表示方法:カレンダー
予定の開始日:Date
予定の終了日:Date

リストの表示形式がカレンダーに変わりました。

以上で準備は完了です。

フローの作成手順

1.新しい応答が送信されるとき

トリガーにはMicrosoft Formsの「新しい応答が送信されるとき」を選択し、以下を指定します。


フォームID:事前に作成したアンケート

2.応答の詳細を取得する

「+新しいステップ」からMicrosoft Formsの「応答の詳細を取得する」アクションを選択し、以下を指定します。


フォームID:事前に作成したアンケート
応答ID:動的なコンテンツの追加から「新しい応答が送信されるとき」の「応答ID」

3.ユーザープロフィールの取得(V2)

「+新しいステップ」からOffice 365 Usersの「ユーザープロフィールの取得(V2)」アクションを選択し、以下を指定します。


ユーザー(UPN):「応答の詳細を取得する」アクションから「Responder's Email」

このアクションでFormsに回答した人のOffice365ユーザー情報を取得します。

4.複数の項目の取得

「+新しいステップ」からSharePointの「複数の項目の取得」アクションを選択し、以下を指定します。


サイトのアドレス:リストを作成したSharePoint Onlineサイトのアドレス
リスト名:事前に作成したリスト名

「詳細オプションを表示する」をクリックし、「フィルタークエリ」で以下を指定します。

Date eq '@{outputs('応答の詳細を取得する')?['body/raca8d897979b44128d7563b13dc301d3']}'

※Date eq から右にある '' の中は、事前に作成したアンケートの日付設問を動的に指定してください。

Formsで回答された日付と同じ日付列になっているレコードをこのアクションで取得します。

注意点

「複数の項目の取得」アクションは、デフォルトだと100レコードまでしか取得されません。
もし100を超えるレコードを管理する場合は、「上から順に取得」で100以上の数を指定しましょう。

5.条件

「アクションの追加」からコントロールの「条件」アクションを選択し、以下を指定します。


左辺:式から以下を入力

length(Outputs('複数の項目の取得')?['body/value'])

右辺:3

この条件アクションで、「複数の項目の取得」アクションで取得されたレコード数が3つ以上あるかを判定します。

6.はいの場合「メールの送信(V2)」

Formsで回答した日付が既に3枠埋まっている場合、予約受付不可のメールを送るアクションを作ります。

「アクションの追加」からOffice365 Outlookの「メールの送信(V2)」アクションを選択し、以下画像のようにお好みで指定します。


宛先:応答の詳細を取得するアクションから「Responders' Email」

7.いいえの場合「項目の作成」

Formsで回答した日付にまだ空きがあった場合、回答をSharePoint Onlineリストに格納し、予約受付完了メールを送るアクションを作ります。


「アクションの追加」からSharePointの「項目の作成」アクションを選択し、以下を指定します。


サイトのアドレス:リストを作成したSharePoint Onlineサイトのアドレス
リスト名:事前に作成したリスト名
Title:ユーザープロフィールの取得(V2)アクションの「表示名」
Date:応答の詳細を取得するアクションの日付設問

8.いいえの場合「メールの送信(V2)」

「アクションの追加」からOffice365 Outlookの「メールの送信(V2)」アクションを選択し、以下画像のようにお好みで指定します。

フローの実行

早速Formsを回答して、実行してみましょう。

動作を確認するために、「2022/7/11」を4回分回答してみます。
想定では、回答の3回目までは「受付完了」となり、4回目から「受付不可」になります。

1~3回目まで

「2022/7/11」を3回回答したことにより、SharePoint Onlineリストに3レコードが登録されました。


メールも3回目の人までは、受付完了メールが届きます。

Power Automateの条件アクションで、「いいえ」のアクションが実行されたことになります。

4回目以降

既に3枠埋まっている状態で、もう一度「2022/7/11」を回答してみます。

結果、「受付不可」メールが届きました。


既に3枠埋まっているため、SharePoint Onlineリストに回答内容が格納されることもありません。

Power Automateの条件アクションで、「はい」のアクションが実行されたことになります。


4回同じ日付で回答したときに受信したメール結果です。
先着3名までは「受付完了」になり、4名以上はすべて「受付不可」のメールが送信されています。

さいごに

「複数の項目の取得」アクションでフィルタークエリを用いることで、Formsで回答した日付と一致したレコードを取得し、
「条件」アクションで一致したレコードが3つ以上あった場合、受付不可メールを送るというフローのご紹介でした。


今回はFormsアンケートが日付設問であることを前提に作成しましたが、選択肢設問でも同じようなことができると思います。
是非色んなパターンで試してみてください!

行事の〇日前になったら対象者に自動でメールを送る

はじめに

業務で行事の○日前になったら対象者にメールを送りたいということありませんか?

今回はメールを送信する対象者をExcelテーブルで作成し、
Power Automateで行事の前日に対象者に自動メールを送るフローをご紹介します!

フロー全体図


毎日決まった時間にフローを実行して、Excelテーブルに翌日の日付があるレコードがあったらメールを送るという仕組みにしています。

用意するもの

Excelテーブル

今回はこんなExcelテーブルを用意しました。

メールを送信することを考えていますので、「メールアドレス」と「送信日(日付が入る)」列は必ず作成してください。
また、「送信日」列が対象者の行事日ということにします。

Excelの保存先はSharePoint OnlineもしくはOneDriveになりますが、今回はSharePoint Onlineに保存したことを前提に説明します。

フローの作成手順

1.繰り返し

トリガーにはスケジュールから「繰り返し」アクションを選択し、以下画像のように設定します。

設定時刻は任意で決めてください。タイムゾーンを(UTC+09:00)大阪、札幌、東京にすることを忘れずに!

これで1日1回、決まった時間にフローが自動実行されます。

2.作成

「+新しいステップ」からデータ操作の「作成」アクションを選択し、「式」から以下をコピペします。

addDays(addHours(utcNow(),9),1,'yyyy/MM/dd')


ここのアクションで、1日後の日付を作成しています。

もし1日前の日付を作成したい場合は、以下のようにするといいです。
addDays(addHours(utcNow(),9),-1,'yyyy/MM/dd')

当日の日付を作成したい場合は、もうお分かりかと思いますが、以下になります。
addDays(addHours(utcNow(),9),0,'yyyy/MM/dd')
フロー実行時に今日の日付が入ったレコードにメールを送りたい場合は、上記の式が使えます♪

3.表内に存在する行を一覧表示

「+新しいステップ」からデータ操作の「作成」アクションを選択し、以下を指定します。
※DataTime形式は必ず「Serial Number」にしてください。

4.Apply to each

「+新しいステップ」からコントロールの「Apply to each」アクションを選択し、動的なコンテンツより「表内に存在する行を一覧表示」の「value」を選択します。

5.条件

Apply to eachアクション内の「アクションの追加」からコントロールの「条件」アクションを選択し、以下を指定します。

左辺:式から以下をコピペ

if(empty(items('Apply_to_each')?['送信日']),null,addDays('1899-12-30',int(items('Apply_to_each')?['送信日']),'yyyy/MM/dd'))

右辺:動的なコンテンツより「作成」アクションの「出力」


Excelの日付形式の値は、1900年1月1日を1としてカウントアップされた数値になっています。
そのため、Power AutomateでExcelの日付を扱うときは日付形式に変換する必要があります。

各列の形式の判定は、Excelテーブルの1行目のデータを基に判定しているため、1行目の日付が空白だと日付形式に変換されないことが起きます。

そこで、今回は都度日付形式に変換する式にしました。
これで送信日が決まっていないレコードがあっても大丈夫です!

6.メールの送信(V2)

条件アクション「はいの場合」の「アクションの追加」からOffice365 Outlookの「メールの送信(V2)」アクションを選択し、以下を指定します。

宛先:表内に存在する行を一覧表示アクションの「メールアドレス」
件名:なんでもどうぞ
本文:こちらもなんでもいいですが、分かりやすく表内に存在する行を一覧表示アクションの「名前」を指定してみました。

フローの実行

早速手動実行してみましょう。
ブログ記載時点では2022/6/22なので、成功すれば1日後の日付が入っている高橋 四郎さんへメールが届きます。

実行ポチッ!

届きました!

さいごに

本記事では空白行があっても大丈夫なフローを紹介しましたが、そもそも空白行を省く方法がありますので、ついでにご紹介します。

「表内に存在する行を一覧表示」アクションで「フィルタークエリ」を以下にします。

送信日 ne ''


これをすると、送信日列が空白のレコードはそもそも取得されなくなります。

上記を行った場合は、「条件」アクションの左辺には以下をコピペします。

addDays(‘1899-12-30’,int(items(‘Apply_to_each’)?[‘送信日']),'yyyy/MM/dd')

条件アクションで都度日付形式に変更する方法とフィルタークエリを利用する方法、お好みの方をお使いください!

Microsoft Formsにアップロードした画像をリストにサムネイル表示する

はじめに

Microsoft Formsには「ファイルのアップロード」という機能があります。
Power Automateを使ってアップロードした画像ファイルをSharePointリストにサムネイルとして表示する方法がありますので、ご紹介します。


フロー全体図


用意するもの

Microsoft Forms

今回は「ファイルのアップロード」のみのアンケートを作成しました。

ファイル数の制限:1、単一ファイルサイズの制限:1GBにしています。(ファイルサイズはご自由に)

SharePoint Online リスト または Microsoft Lists

今回はSharePoint Onlineリストで説明します。

任意のサイトで新規のリストを作成します。
「列の追加」より「複数行テキスト」をクリックします。

私は「Image」という名前をつけて、「保存」をクリックしました。

「Image」列が作成できたら「列の設定」から「この列の書式設定」をクリックします。

「Image 列の書式設定」が表示されるので、「詳細モード」をクリックします。

JSONの書式設定が表示されるので、以下のJSONをコピペして「保存」をクリックします。

{
  "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
  "elmType": "img",
  "attributes": {
    "src": "@currentField"
  }
}


これで事前準備は完了です。

フローの作成手順

ここからがPower Automateの話です。

1.新しい応答が送信されるとき

トリガーにはMicrosoft Formsの「新しい応答が送信されるとき」を選択し、以下を指定します。
フォームID:事前に作成したアンケート

2.応答の詳細を取得する

「+新しいステップ」からMicrosoft Formsの「応答の詳細を取得する」アクションを選択し、以下を指定します。
フォームID:事前に作成したアンケート
応答ID:動的なコンテンツの追加から「新しい応答が送信されるとき」の「応答ID」

3.JSONの解析

「+新しいステップ」からデータ操作の「JSONの解析」アクションを選択し、以下を指定します。
コンテンツ:動的なコンテンツの追加から「応答の詳細を取得する」のファイルのアップロードの設問

スキーマ:「サンプルから生成」をクリックします。
※必ず「サンプルから生成」をしてください。

以下のJSONをコピペして「完了」をクリックします。

[{"name":"PA.png","link":"https:","id":"016HND","type":null,"size":876877,"referenceId":"01DF","driveId":"bviAS","status":1,"uploadSessionUrl":null}]


以下のようになっていればOKです。

4.項目の作成

「+新しいステップ」からSharePointの「項目の作成」アクションを選択し、以下を指定します。
サイトのアドレス:リストを作成したサイト
Microsoft Listsのマイリストでリストを作成された方は、サイトのアドレスの指定方法が少し異なりますので過去の記事をご覧ください。
yuri365lily.hatenablog.com
リスト名:事前に作成したリスト
Title:なんでもいいです。(私は動的なコンテンツの追加から「応答の詳細を取得する」のResponders' Emailを選択しました。)
Image:動的なコンテンツの追加から「JSONの解析」の「link」

「link」を選択すると、「Apply to each」が自動で追加されます。

以上でフローの作成は終了です。

フローの実行

実際に画像をFormsからアップロードしてみましょう!

リストを確認すると、「Image」列に画像がサムネイルとして表示されました。(2度回答したので画像が2つになっています)

ちなみに画像はMicrosoftさんの公式ドキュメントからお借りしました。Power Platformのアイコンがあるのはシラナカッタ!
docs.microsoft.com

さいごに

リストのアイテムをクリックしたときに、Formsでアップロードした画像を確認することができますが、

実は画像自体をクリックするとただのURLになってしまいます。

リストには「画像」列というものが別でありますが、Power Automateで「画像」列にFormsにアップロードした画像を格納することができなかったため、今回の方法をご紹介しました。

もし方法をご存じの方がいましたら、教えてください。
また、方法がわかったら新たに記事を書こうと思います!

Microsoft ListsのマイリストをSharePointアクションの候補に表示させる方法

※もし当記事よりいい方法がありましたら教えてくださいm(__)m

背景

Microsoft ListsのマイリストをPower Automateで自動化しようと思い、SharePointの「項目の作成」アクションからマイリストを呼び出そうとしたらサイトのアドレス候補にマイリストが表示されないということがありました。

そこで、マイリストを候補に表示する方法がありましたので、ご紹介します。

手順

1.Micsoroft Listsをブラウザで開きます。

2.Microsoft Listsのホーム画面を開いたら、URLの「https://~_com」までをコピーします。

これは実はOneDriveのURLで、組織のユーザーであれば以下のURLになっています。
https:// <tenant name>-my.sharepoint.com/personal/<user principal name>


OneDriveのURLに関する公式のドキュメントはこちら↓
組織内のユーザーの OneDrive URL の一覧を表示する - OneDrive | Microsoft Docs


ちなみにOneDriveのURLですので、もちろんOneDriveをブラウザで開いたときのURLでをコピーでも大丈夫です。

3.2でコピーしたURLを「サイトのアドレス」の「カスタム値の入力」として貼り付けをします。

するとリスト名にマイリストの一覧が候補として表示されるようになります!

最後に

SharePointの他のアクションである「複数の項目の取得」、「アイテムの作成」などでも同じような方法が使えます。
よきPower Automateライフを♪