前回の記事では、弊社で使用している有給休暇自動承認フローについて紹介しました。当記事は前回の記事の続編ですので、詳しくは前回の記事を参照ください。 Show 「そもそもMicrosoft Flowってなに?」という方は、前々回の記事を参照ください。 今回はMicrosoft Flowで、「変数」や「ループ (Apply to each) 」を扱う際の注意点や手順について説明します。応用編として、「HTTP要求 (HTTPリクエスト) 」の使い方についても少し触れていきます! ※「Microsoft Flow」は2019年11月に「Microsoft Power Automate」と改称されました。新しい機能(RPA機能)もいくつか追加されています。当記事で紹介するワークフローは、RPA機能が追加される前の「Microsoft Flow」で作成したものですので、当記事では「Microsoft Flow」と呼称しております。 この記事の目次
2次承認フローについて今回説明する「2次承認フロー」は「1次承認フロー」とほぼ同じ流れです。二つのフローチャートを見比べてみましょう。 2次承認フローは、申請が承認された時のアクションが増えています。
これから、①と②について説明します。 「個人リスト」の用途について1次承認フローでは、承認済みの休暇申請を「1次承認待ちリスト」から「2次承認待ちリスト」へ移動するだけでしたが、2次承認フローでは「2次承認待ちリスト」から「承認済みリスト」と「個人リスト」へ移動する必要があります。 ここでいう「承認済みリスト」とは、1次承認者および2次承認者に承認された休暇申請が格納されるリストのことです。「1次承認待ちリスト」と「2次承認待ちリスト」は、承認前の休暇申請が一時的に保存されるだけですが、「承認済みリスト」には過去から現在の間に承認されたすべての休暇申請が保存されています。 もう1つのリストである「個人リスト」の役割は、「承認済みリスト」と同じです。ただ、「個人リスト」は申請者(社員)1人につき、1つのリストが割り当てられています。そのため、フロー実行ごとに申請者が誰かを判断し、それに応じて休暇申請の保存先リストを変更する必要があります。 「どうしてそんな手間をかけてまで「個人リスト」を使用するのか?」と疑問に思う方もいるのではないでしょうか?その理由は、データの閲覧権限にあります。 弊社で運用している休暇申請フローには、管理者以外は閲覧できないように、すべてのリストに対してデータの閲覧権限を設定しています。 しかし、自分の休暇申請履歴を閲覧したい社員もいるかもしれません。そのため、個別にリストを作成して、そのリストだけ別に閲覧権限を設定(管理者+リストの所有者のみ閲覧可)しています。 ※SharePointのアクセス制限の設定方法は、公式サイトのヘルプを参照してください。 「承認済みリスト」に休暇申請を保存するだけなら1次承認フローと同じ処理で構いませんが、「個人リスト」に振り分ける際は別に処理を作成します。これは、最初の記事で説明した「条件分岐」に「変数」と「ループ」を加えた少し特殊な条件分岐で作成します。 ワークフロー作成の準備をする社員のメールアドレスリストを作成しておく下図のように、社員の名前とメールアドレスが格納されたリストを作成します。 1次承認ワークフローをコピーする2次承認フローの基本構造は1次承認フローと同じなので、1次承認フローをコピーして編集していきます。 コピーするフローの名前を変更できるので、任意のタイトルに変更します。 【変更前】 「保存」をクリックすると、1次承認フローのコピーが作成されます。コピーしたフローはコピー元のワークフローと内容が重複するため、初期設定ではオフになっています。これは、トリガーが実行されてもフローが開始しない状態です。 編集中はオフのままでも構いませんが、動作テストをする際は、忘れずにオンにしましょう。 新しい処理を追加する前に、コピー元である1次承認フローの内容を2次承認フロー用に書き換えます。 ・各ステップの名前を変更する ・各ステップの中身を変更する ③承認済みアイテムのコピー先を「2次承認待ちリスト」から「承認済みリスト」へ変更します。 ・承認通知メールの設定をする これで事前準備は完了です。それでは、新しい処理を作成していきましょう。 ループ (Apply to each) を用いて個人リストに振り分ける【2次承認フローの「個人リストに振り分ける」をフローチャート】 【ワークフロー作成画面に当てはめる場合】 【完成イメージ】 SharePointリストを取得する①について説明します。 このステップでは、社員のメールアドレスリスト(社員リスト)内のアイテム情報をすべて取得します。「はいの場合」の最初のステップに作成します。 ここでの注意点は、最上位に新規ステップを追加することはできないことです。 そこで、「承認済みリストにアイテムをコピーする」の下に作成して、あとで一番上に移動します。 「アクションの追加」表示がない場所にステップを挿入したいときは、矢印部分にカーソルを合わせると表示される+ボタンを使用します。 +ボタンをクリックすると、アクション選択画面が表示されます。検索ボックスに 「サイトのアドレス」と「リスト名」を指定します。「リスト名」には、先ほど作成したメールアドレスリスト「社員リスト」を選びます。 これで①の設定は完了です。次のステップに進む前に、一つ前のステップ「承認済みリストに承認済みアイテムをコピーする」をドラッグ&ドロップして、「①複数の項目の取得」の下に移動させましょう。 【移動後】 名前も変更しておきます。 【変更後】 ループ「Apply to each」を作成する②、③について説明します。 ここでは、「リスト内のメールアドレスと申請者メールアドレスを比較し、両者が一致したときのみ、特定の処理を実行する」というアクションを、社員数分の繰り返し処理を行います。 ここでいう「特定の処理」とは、個人リストに項目を作成することを指します。 フローを作成するとき、同じ処理を複数回実行したいと思うことがしばしばあります。その時に、何度も同じ処理を作成するのは、大変です。そこで、最初の一回だけの処理を作成し、それを繰り返し実行してくれる「ループ」機能を利用します。 ループにはいくつか種類がありますが、Microsoft Flowで扱えるのは「Do until」と「Apply to each」の2つです。 ・Do until(=~までする) ・Apply to each(=それぞれに適用する) 今回は、①で取得したリストの項目数だけ同じ処理を繰り返したいので、「Apply to each」を使います。ループの中に条件分岐を設置する、いわゆる「入れ子構造」を作成します。 【入れ子構造】 では順番に、ループから作成していきましょう。 アクション選択画面の「組み込み」タブを選択し、「Apply to each」をクリックします。 「Apply to
each」ステップが挿入されます。 直前のステップで取得した「社員リスト」内のアイテムを出力するため、「社員のメールアドレスリストを取得する」ステップの「value」パラメータを挿入します。 「リスト内のメールアドレス=申請者メール」となったときのみ処理を行うため、 「アクションの追加」→「組み込み」タブから「条件」をクリックします。 左側の「値の選択」にステップ名「社員のメールアドレスリストを取得する」の「メールアドレス」パラメータを挿入します。 右側の値には、トリガーでもある「2次承認待ちリストに新規アイテムが追加されたときに処理を開始する」ステップの「送信者」パラメータを挿入します。 条件の設定が完了したら、分岐後の処理を作成していきましょう。 変数とは④について説明します。 変数とは、値の出し入れができる箱のことです。ここでいう「値」とは、数値や文字列です。Microsoft Flowでサポートされている型は、以下の通りです。
2次承認フローでは、「文字列」を使用します。具体的には、「申請者の氏名」を格納します。 先に進む前に、冒頭の完成イメージ図の④を見てみましょう。 ②~③で作成したループは、投稿通知メールアドレスをもとに、申請者の名前を特定するためのものでした。④は、②~③で特定した「申請者の名前」を「文字列」という形で扱うために、「変数」という箱を用意するためのステップです。 変数とは何か、何のために使うのか、なんとなくイメージはつかめたでしょうか? 個人リストの各リスト名は任意のもので構いませんが、一目で個人を特定できる要素を入れましょう。弊社では、「氏名」をリスト名に入れています。個人リストに振り分ける際、「氏名」を基準にしています。 さて、Microsoft FlowでSharePointの項目を作成するとき、リスト名を指定したことを覚えていますか?これは、処理の結果にかかわらず、毎回固定のリストに項目を作成するためのものでした。 今回は項目を作成するリストをその都度変更したいので、今までの同じやり方では不十分です。そこで、ここに「変数」を加えます。「変数」を使用すれば、フロー中の状況に応じて、その後に行う処理を変更することができます。 ここで、なぜ「条件分岐」を使わないのかというと、条件分岐は選択肢が多ければ多いほど、効率が落ちるからです。 条件分岐は、選択肢の数(今回の場合は社員の数)の処理を作成しなければなりません。それに対し、変数は最初に変数さえ用意しておけば、多様な処理を行うことができます。 とはいえ、処理の内容によっては、条件分岐を使用したほうが効率的な場合もあります。選択肢が少ないときや、選択肢ごとに処理内容が大幅に変わるときなど、状況に応じて、使い分けましょう。 変数を設定する変数を設定していきましょう。Microsoft Flowでは、変数を使いたいとき、必ず初期化をする必要があります。具体的には、事前に、「名前」・「型」・「初期値」を宣言します。 「変数の初期化」はフローの最上位でないと行えないため、トリガーの次にステップを挿入します。 トリガー直下の+ボタンをクリックすると、アクション選択画面が表示されます。「組み込み」タブを選択し、紫色の「変数」アイコンをクリックします。 すると、変数のアクション一覧が表示されるので、「変数を初期化する」をクリックします。 変数の初期化画面が表示されました。 それぞれの値を以下のように設定します。 名前:この変数には「申請者の氏名」を代入したいので、そのまま「Name」とします。変数の名前は、どんな用途で使われるのかが分かるものにします。 これで、変数の初期化は終了です。 ステップ名も分かりやすいものに編集しておきましょう。 次に、申請者の名前を変数に代入します。 申請者の名前を特定したあと、つまり③~④で作成したループ内にある条件分岐の、「はいの場合」に「変数の設定」アクションを設置します。 「アクションの追加」→「組み込み」→「変数」から「変数の設定」を選択します。 変数の設定画面が表示されました。 「名前」項目の下向き三角をクリックすると、事前に宣言した変数一覧が表示されます。先ほど宣言した変数「Name」を選択しましょう。 「値」には、「メールアドレスリスト」の「タイトル」を指定します。 ここでいう「タイトル」は、社員の氏名を意味します。分からない場合は、SharePointのメールアドレスリストをもう一度見てみましょう。 以上で、変数「Name」には申請者の名前が代入されたことになります。早速、次のステップで変数を使ってみましょう。 「変数の設定」ステップの下に「項目の作成」アクションを設置して、リスト名の一部に変数「Name」を挿入します。 「リスト名」項目に「休暇取得リスト【】」と入力し、「【」と「】」の間にカーソルを合わせて変数「Name」パラメーターを挿入します。 すると、「設計時にパラメーター ‘path.$.table’ を評価できません。パラメーターは空か、実行時式が設定されています。」という警告が出ます。 「実行時式が設定されています」とあるので、フローの実行時に値が変わる可能性のあるパラメーター、つまり変数は設定できないということです。 実際には、この警告が表示されていてもフローは問題なく動作します。しかし、本来の使い方ではないようです。予期せぬ動作を引き起こす可能性があるので、今回は別の方法で「項目の作成」を行うことにします。 「項目の作成」アクションと同じ処理を別の方法で実行したいわけですが、具体的にどういう手段を使えばいいのでしょうか? ここから多少ややこしい話になってきますので、よくわからないという方はこちらを参照してください。記述されているコードを画面通りにコピー&ペーストすれば、処理を行うことができます。 (応用編)コードを利用するここは、上級者向けの内容です。 Microsoft Flowには、ステップごとに「コードのプレビュー」機能があります。 試しに、「休暇取得リスト【山田一郎】」に項目を作成するアクションを作り、右上の「…」マークから「コードのプレビュー」をクリックして、「コードのプレビュー」を見てみましょう。 コードビューが表示されます。 上記のコードを抜き出してみましょう。(一部、URLを伏せてあります) これをフロー作成画面と照らし合わせると、コードの赤字が項目名、青字が項目の内容に該当していることがわかります。 「項目の作成」に必要な項目は、上から順に「サイトのアドレス」、「リスト名」、「タイトル」、「本文」、「分類」となっています。「サイトのアドレス」、「リスト名」は別の方法で指定するので、それ以外の「タイトル」、「本文」、「分類」を示すコードを抜き出してみましょう。 ●本文:本文 ●分類:休暇 どの文字列が何を指すのか、なんとなく把握できましたか?要するに、これらのコードをどうにかしてSharePointに送信できれば、「項目の作成」アクションと同じ処理が行えるということですね。 Microsoft Flowには、SharePointに直接データ(コード)を送れる機能があります。この機能を「HTTP要求(HTTPリクエスト)」といい、これを利用することで、既存のアクションだけでは手の届かない様々な処理を行うことができます。 HTTP要求の送信には、先ほど抜き出したコードが必要になります。 SharePointにHTTP要求を送信するでは、実際にHTTPリクエストを送信するための手順について説明していきます。まず、先ほど試しに作った「項目の作成」ステップを削除します。 「アクションの追加」から「SharePoint」の「SharePoint に HTTP 要求を送信します」を選択します。 HTTP要求送信の設定画面が表示されます。 「サイトのアドレス」を指定します。これは、今までのやり方と同じです。 次に、「方法」を指定します。5つの選択肢がありますが、それぞれの役割は下記の通りです。 GET:取得 今回は、指定したリストに項目を追加、つまり「登録」をしたいので「POST」を選択します。 「URI」には、項目を作成したいリストのURIを指定します。これは「項目の作成」アクションの「リスト名」項目とほぼ同じ役割の項目です。 SharePointリストの場所を示すURIは、 したがって、「URI」には「_api/web/lists/getbytitle(‘休暇取得リスト【】’)/items」と入力し、【】の間にパラメーター「変数:Name」を挿入します。 コピペ用: ヘッダーは使わないので、空欄で構いません。ボディの値は先ほど抜き出した「タイトル」、「本文」、「分類」のコードをそのまま入力します。 上記のコードを「ボディ」に入力(またはコピペ)すると、「@{triggerBody()?[‘Title’]}」、 「HTTP要求の送信」アクションには「方法」や「URI」、「ボディ」など聞き覚えのない単語が並んでいますが、構成自体は「項目の作成」アクションとほぼ同じです。 今回は変数を扱うため、馴染みのない手法を使いましたが、根本的には今までの操作と変わりはありません。この「HTTP要求」機能はいろんな使い方があります。興味のある方は、調べてみてください。 さて、これで「有給休暇自動承認フロー」は完成です。 2記事にわたって長々と説明しましたが、画像で見ると結構シンプルです。基本さえ理解していれば、簡単にフローを構築できてしまうのがMicrosoft Flowです。 ぜひ、日々のルーチンワークにMicrosoft Flowを取り入れて、業務の効率化を図りましょう。当記事で紹介した以外にも、多種多様な機能があります。動作テストを繰り返しつつ、独自のアレンジを加えてみてください。新しい世界が見えてくるかもしれませんよ! Power Automateの無料制限は?機能面での制限としては次の4つが挙げられます。. 追加費用なしの範囲ではMicrosoft365の各種サービスに接続するコネクタ、アクションを中心にフローを作成する. スケジュール動作や特定のイベントをきっかけに動作させることは可能. 上記きっかけから無人での動作が可能. Power Automateのフロー期限は?Power Automate にはフローの実行継続期間があり、フロー開始されてから30日となっています。
Apply to each の上限は?そして このアクションのあとに Apply to each を使用しますが、 Office 365 およびフリーのライセンスでは5,000までしか対応していません。
Powerautomate APIの制限は?例えば、従来 5000回/日/ユーザーだった上限は、40,000回へと変わりました。 これにより、ほぼすべての利用者の方々の利用シナリオに対応できます。
|