指定した日時で複数ユーザーのOutlook予定表空き状態を一覧化する

  • 指定した日時において、指定したユーザーのOutlook予定表がどんな状態か調べます。(予定なし、取り込み中、外出中など)
  • 複数ユーザーの予定を一気に取得します。

アプリケーションの構成

  1. PowerAppsから複数ユーザーのUPN (メールアドレス) をカンマでつなげた文字列をPower Automateフローへ渡します。
  2. Power AutomateではGraph APIのcalendar: getScheduleを使って状態 (availabilityView) を取得します。
  3. Power Automateフローから返されたJSONをコレクションに変換し、一覧表示します。

Power Appsからカンマ区切りメールアドレスと日時を渡す

UPNの入ったコレクションcolUPNsがあった場合、Concat関数を使い以下のようにして結合できます。

Concat(colUPNs, ThisRecord.Value, ",")

日時は”yyyy-mm-ddThh:nn:ss”形式で渡す必要があるので、Text関数で形式を指定します。現時刻を渡す場合の例は以下の通り。

Text( Now(), "yyyy-mm-ddThh:mm:ss" )

Power Automateフローで状態 (availabilityView) を取得

前準備として、トリガーで渡される日時を適切な形式にします。作成アクション (作成 input datetime) で以下のように書きます。

formatDateTime(triggerBody()?['text_1'], 'yyyy-MM-ddTHH:mm:00Z')

前準備として、入力されたUPNsをダブルクォーテーションで囲んだメールアドレスに変更します。
aaa@sample.com,bbb@sample.com を “aaa@sample.com”,”bbb@sample.com”
作成アクション (作成 – カンマ区切りUPNsを変換) に以下の式を入力します。ここでtriggerBody()?[‘text’]はトリガーのUPNsです。

concat('"', replace(triggerBody()?['text'], ',', '","'), '"')

このフローの主役はOffice365 Oulookコネクタの「HTTP要求を送信します」アクションを使用します。Graph APIのcalendar: getScheduleを参考にして記入します。

schedulesの[]の中には、直前に作った作成アクションの出力を入れています。

startTimeとendTimeのdateTimeはトリガーで指定した日時を指定のフォーマットにしています。startTimeは以下のように指定します。

outputs('作成_input_datetime')

また、endTimeはaddMinutes関数を使いstartTimeの60分後に設定します。

formatDateTime(addMinutes(outputs('作成_input_datetime'), 60), 'yyyy-MM-ddTHH:mm:00Z')

availabilityViewはavailabilityViewInterval (分) で区切られた時間幅で指定した時刻から先の予定を数値で返します。指定した時刻直後であれば、先頭の数値だけ見ればOKです。数値の意味はリンク先または以下の表を見てください。

「外出中」は日本語訳がおかしく「不在」がいいところです。

availabilityViewの数値Outlook予定表の状態
0予定なし free
1仮の予定 tentative
2取り込み中 busy
3外出中 out of office
4他の場所で仕事中 Working elsewhere

「HTTP要求を送信します」アクションの出力は「JSONの解析」アクションで配列に変換します。スキーマは以下のように書けます。

{
    "type": "object",
    "properties": {
        "value": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "scheduleId": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "availabilityView": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "workingHours": {
                        "type": [
                            "object",
                            "null"
                        ],
                        "properties": {
                            "startTime": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            },
                            "endTime": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            }
                        }
                    }
                }
            }
        }
    }
}

「JSONの解析」アクションから必要な項だけ抽出するには選択アクションを使います。うまく動的コンテンツが出ない場合は、数式でitem()?[‘scheduleId’]やitem()?[‘availabilityView’]と入力します。

最後のPower Appsに応答するアクションで終わりです。選択アクションの出力をそのまま指定すればOKです。

Power AppsでPower Automateフローから返されたJSONをコレクションに変換

JSONからコレクションに変換するにはparseJSONを使用します。

PowerAutomateから戻り値がlocResultに入っておりコレクションcolAvailabilityにするとしたら

ClearCollect(colAvailability, parseJSON(locResult));

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください