LoginSignup
25
17

More than 3 years have passed since last update.

ics ファイルを作成する Power Automate での Flow の作り方

Last updated at Posted at 2020-01-06

ics ファイルとは

Web サイトで何らかの予約やイベント、勉強会に登録して、[予定表に追加] みたいなボタンがあって、クリックするとなんかファイルがダウンロードされて、ファイルを開くと Windows 環境の人なら Outlook が開いて、予定に追加される

スマホでもおんなじような動きになりますよね。

ダウンロードしてるファイルは ics という拡張子で iCalendar と呼ばれる形式で国際規格で定義された標準フォーマットです。国際規格なので様々なソフトで開くことができます。詳細は Wikipedia を参照してください。

さて "ics ファイル作成""iCalendar ファイル作成" と検索すると、そのフォーマットは簡単に理解できます。本記事ではフォーマットの詳細は説明しませんので、まずは簡単に検索して理解しておくことをお勧めします。(覚える必要はありません)

いくつか検索すると構造を説明しているサイトに出会いますが、ここのサイトがわかりやすかったです。
https://hacknote.jp/archives/23977/

以下にフォーマットの例を示します。

sample.ics
BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:Asia/Tokyo
TZURL:http://tzurl.org/zoneinfo-outlook/Asia/Tokyo
X-LIC-LOCATION:Asia/Tokyo
BEGIN:STANDARD
TZOFFSETFROM:+0900
TZOFFSETTO:+0900
TZNAME:JST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTAMP:20200106T053007Z
DTSTART;TZID=Asia/Tokyo:20191205T104500
DTEND;TZID=Asia/Tokyo:20191205T114500
SUMMARY:POWA10-Microsoft PowerApps と Microsoft Power Platform を活用したすべてのユーザーのアプリおよびプロセスのデジタル化の実現
DESCRIPTION:
LOCATION:Theater 3
TRANSP:OPAQUE
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:POWA10-Microsoft PowerApps と Microsoft Power Platform を活用したすべてのユーザーのアプリおよびプロセスのデジタル化の実現
TRIGGER:-PT15M
END:VALARM
END:VEVENT
END:VCALENDAR

ポイントになるのは以下です

BEGIN:xxxxEND:xxxx で囲んで各値を設定する

  1. DTSTAMP: 作成日
  2. DTSTART: 開始日時
  3. DTEND: 終了日時
  4. SUMMARY: タイトル
  5. DESCRIPTION: 本文
  6. LOCATION: 場所

なのでちょっと最低限必要なものに絞るとこんな感じになります

sample_light.ics
BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
DTSTART:20191205T104500
DTEND:20191205T114500
SUMMARY:POWA10-Microsoft PowerApps と Microsoft Power Platform を活用したすべてのユーザーのアプリおよびプロセスのデジタル化の実現
DESCRIPTION:
LOCATION:Theater 3
TRANSP:OPAQUE
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
END:VEVENT
END:VCALENDAR

ね、これなら作れそうでしょ?上記のポイントとなる 6 つの項目の値を良きように置き換えるフローを Power Automate で作成すればよいのです。

Power Automeate で作成するフローの全体像

こんな感じです。私は HTTP リクエストの Get で呼びたかったので HTTP トリガー [HTTP要求の受信時] を使用していますが、例えば Power Apps からなんらかのアクションで呼びたければ、トリガーを Power Apps の要求に置き換えてください。

image.png

変数にしているのは [作成] で置き換えたい値を入れておきたかったからです。変数を使わなくても可能ですが、後に何らか変更をする時にわかりづらくなるので、私は変数を使用するようにしています。(単なる私の好みです)

さてそれでは順に見ていきましょう。

HTTP 要求の受信時

image.png

非常にシンプルです。GET メソッドでリクエストを受け取りたいだけですから、JSON スキーマは空です。私の場合、冒頭の動画のように Power BI Report からリンクで呼び出したかったので、JSON が投げられないという制限がありました。ゆえに GET でかつ URL パラメータで必要な値を投げつけています。

呼出し元で POST にて JSON が投げられるのであれあ、JSON スキーマを定義して method を POST にしてあげてください。(Web のお作法からするとむしろそちらの方が正しいです)

リクエスト.url
https://prod-XX.japaneast.logic.azure.com/workflows/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/triggers/manual/paths/invoke?api-version=2016-06-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&ics-FileName=POWA10&DTSTART=20191205T104500&DTEND=20191205T114500&SUMMARY=POWA10-Microsoft%20PowerApps%20と%20Microsoft%20Power%20Platform%20を活用したすべてのユーザーのアプリおよびプロセスのデジタル化の実現&DESCRIPTION=&LOCATION=Theater%203

ちなみに私の場合は Flow を呼び出す際の URL を以下のように作成しています。こうすることで必要なデータを URL パラメータ で渡すことが可能です。
[URLパラメータで渡す Key と Value]

  1. ics-FileName=POWA10
  2. DTSTART=20191205T104500
  3. DTEND=20191205T114500
  4. SUMMARY=POWA10-Microsoft%20PowerApps%20と%20Microsoft%20Power%20Platform%20を活用したすべてのユーザーのアプリおよびプロセスのデジタル化の実現
  5. DESCRIPTION=
  6. LOCATION=Theater%203

= の前が Key で = の後ろが Value なので、Value の方を可変にして URL を作成してください。

JSON の解析

image.png

HTTP リクエストトリガーに渡された URL パラメータを取得するには画像の [コンテンツ] のところに以下のような式を記入します。

triggerOutputs()['queries']

[式] に上記の式を入力したら OK をクリックしてください
image.png
image.png

これで URL のパラメータに自分で付与した Key 名 の値が取得できます。ここでは扱いやすいように [JSON の解析] を使用して JSON に変換しています。

shema.json
{
    "type": "object",
    "properties": {
        "ics-FileName": {
            "type": "string"
        },
        "DTSTART": {
            "type": "string"
        },
        "DTEND": {
            "type": "string"
        },
        "SUMMARY": {
            "type": "string"
        },
        "DESCRIPTION": {
            "type": "string"
        },
        "LOCATION": {
            "type": "string"
        }
    }
}

私と同じ URL パラメータ名で作成するなら上記をコピーしてください。

各変数の初期化

[新しいステップ] から検索ボックスに "変数" と入力して [変数を初期化する] を選択してください。
image.png
image.png
[名前] は任意の名前、[種類] は文字列、[値] は右側の動的なコンテンツから [JSON の解析] - 該当の項目 を選択してください。
これを各変数分繰り返します。

image.png

現在の時刻~タイムゾーンの変換

[新しいステップ] から検索ボックスに "日付" と入力して [現在の時刻] を選択してください。
image.png
image.png
[現在の時刻] は設定値がないので、何もしなくて OK です
再び [新しいステップ] から検索ボックスに "日付" と入力して、今度は [タイムゾーンの変換] を選択してください。
image.png
以下のように設定します。
image.png
「あれ?なんか変じゃない??」と思われた方、正解です。そう、ここでは タイムゾーン変換してません。タイムゾーンではなく、書式設定をしています。これは私がよくやる方法なのですが、実はこの [タイムゾーンの変換] を使わなくても、関数で書式設定をすることは可能です。が、関数を使うと、プログラミング経験のない方にとってハードルがクンっと上がってしまうので、ポチポチっとできる [タイムゾーンの変換] を利用しています。関数でできる方はどうぞ関数でやってください

Power Automate の関数 - formatDateTime() :
https://docs.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#formatdatetime

ics フォーマットの作成

[新しいステップ] から検索ボックスに "データ操作" と入力して [作成] を選択してください。
image.png
作成に冒頭の ics のフォーマットを貼り付け、動的に変えたい項目を該当の項目に変更します。
image.png

Light版の場合はこんな感じです。
image.png

応答

[新しいステップ] から検索ボックスに "要求" と入力して [応答] を選択してください。
image.png
image.png

項目
状態コード 200

[ヘッダー]
Content-Type: text/plain
Content-Disposition: attachment;filename=@{variables('iCS-FileName')}.ics

あとは [本文][出力] を指定してください
image.png

これで完成です。

動作確認

名前を付けてフローを保存したら [HTTP 要求の受信時] トリガーに HTTP GET の URL が作成されますので、右端のボタンで URL をコピーして、後ろに URL パラメータを付けて、動作確認をしてみてください。Postman を使用すると簡単です!
image.png

おわりに

いがかでしたでしょうか?ちゃんと動作しましたか??
もしうまく動作しなかった場合は、もういちど最初から設定を読み直してみてください。焦らずやれば、絶対にできますよ😉

Power Automate を楽しんでくださいねー😁

25
17
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
17