見出し画像

Power Automateの覚え書き

自分の覚えでメモしておきます。


■コネクタ

Outlook

  • Office 365 Outlook:社内のメールアドレス(365の中のメール)

  • Outlook.com:フリーのMicrosoftアカウントのメール

  • Office 365 Users:「上司の取得」で「ユーザーの電子メール」を指定することで、そのユーザーの承認者の情報が取得できる

Teams

※チームのメンバーは、Teamsコネクタでは取得できないので、Office 365 Groupsのコネクタを使う

  • メッセージを取得します
    → 取得できる投稿は直近20件のみ

  • チャネルのメッセージで自分がメンションされているとき
    → 返信ではトリガー実行されない

  • 自分が @mentioned である場合
    → 返信でもトリガー実行される
     【Body PlainTextContent】がタグなしの本文

  • チャットまたはチャネルでメッセージを投稿する
    → フローボットはタイトルを投稿できない
    → フローボットはプライベートチャネルに投稿できない
    → そのチャネルに参加しているユーザーなら、プライベートチャネルに投稿できる

  • キーワードが言及された場合
    → 日本語では発火しない(わたるふさんの検証記事参照)

  • チームID:groupId
    ※「チャネルへのリンクを取得」からも取得可能

  • チャネルID:「チャネルの一覧表示」アクションから取得できるid
    ※「チャネルへのリンクを取得」だと「:」と「@」がURLエンコードでコード変換されてしまうので注意

  • メンション
     → <at>UPN(ユーザープリンシパル名)</at>

Office 365 Groups

  • グループメンバーの一覧表示
    → Teamsのチームのメンバー一覧が取得できる

SharePoint

  • 複数の項目の取得
    → 項目が100件を超える場合は、3点リーダーの設定から「改ページ」をオンにして、しきい値を上げる

  • 新しいフォルダーの作成
     → すでにそのフォルダが存在してもエラーにはならない

OneDrive for Business

  • フォルダーにアーカイブを展開します
    → 展開後のファイルが0バイトのときは、展開されるがファイルが消えるため、エラーにはならないけど展開後のファイルが残らない

Excel Online

  • 表内に存在する行を一覧表示
    → 256行しか取得できない

  • フィルタークエリの書き方:送信フラグ eq '●' ←文字列は''で囲む
     ※等しいは「eq」、等しくないは「ne」

  • 行の取得
    → 日付列をキーにするときは、もにょもにょ必要
      ※以下、Miyakeさんからのアドバイス

add(div(sub(ticks(【変換したい日付】),ticks('1/1/1900')),864000000000),2)

ちなみに 最後になぜ 2 を加算しているかというと、

<参考サイト🙏✨>
Power Automate で Excel シリアル値を求める方法
【Power Automate】Excelの「行の取得」のキー値に日付を使う方法

■アダプティブカード

アダプティブカードデザイナーで作成する

  • 画像のリンクは、https から始まるURLでないとエラーになる

  • 複数テキストにする場合はMulti-lineにチェック

  • Input.Text

    • PlaceholderはMicrosoft的に非推奨なので削除

    • 項目名をLabelに入力する

    • IDを付ける(日本語OK)

  • 段組みにはColumnSet
    Add a columnをクリックすると、段が増える

  • ドロップダウンリストにはInput.ChoiceSet

■nullかブランクか?

  • 変数:変数を初期化する → 値を設定しないとブランク

  • Excel Online:表内に存在する行を一覧表示→ブランク

nullの記述は、Expressionに null を入力
ブランクの記述は、Expressionに '' を入力

■Apply to eachを並列処理する

そのままではひとつずつ繰り返し処理を行うので、時間がかかってしまう。
最大50件までなら並列処理することができ、処理速が度向上できる。

Apply to eachの3点リーダー→設定→コンカレンシー制御を「オン」→並列処理の次数を、件数に合わせて変更する。

■関数

今日の日付(UTCから算出する必要がある)

  • UTCを日本時間に変換

    • convertFromUtc(utcNow(),'Tokyo Standard Time','yyyy/MM/dd')

    • convertFromUtc(utcNow(),'Tokyo Standard Time','yyyyMMddHHmmss')

  • 単純にUTCに9時間加算

    • addHours(utcNow(),9,'yyyy/MM/dd')

文字の分割

  • split関数で区切り文字ごとに切り出し、インデックスで指定
     split( 元の文字列 ,'区切り文字')[0スタートのインデックス]
      例)split(variables('ファイル名'),'_')[1]
         → 202405_まる_好物.xlsx から「まる」を取り出す

■現在地のGoogleマップのリンクを埋め込む

「手動でフローをトリガーします」で、スマホアプリでボタンを押したときの現在値(緯度・経度)が取得できているので、それを利用する。

</> でコードビューにして、
<a href="https://www.google.com/maps?q= 【緯度】,【経度】">地図</a>
とする。
※緯度・経度は数値なので動的な値として表示されないため、検索をする

■Twitterのリンクを埋め込む

</> でコードビューにして、
<a href="https://twitter.com/【ツイート作成者】/status/【ツイートID】">Twitter</a>

■承認

  • 「結果」は、Approve か Reject で返って来る

  • 「開始して承認を待機」のbodyのresponses

配列になってしまうので、「データ操作:作成」で
first(outputs('開始して承認を待機')?['body/responses'])
して、必要箇所で
outputs('作成')?['comments'] ←commentsの部分はresponses内の欲しいもの
すると、中身だけ取れる。
※displayNameを取りたいときは、
outputs('作成')?['responder/displayName']
にする

※JSON Pretty Linterを利用するときは、objectの部分をoutputs('アクション名')にする。
outputs('開始して承認を待機')?['body']?['responses']?[0]?['responder']?['displayName']

💣アクション名に「 2」とか付いてるときは注意!
outputs('作成_2')?['comments'] ← 2の前の半角スペースは _ で入力する

<参考サイト🙏✨>
first関数で不要なApply to eachを回避する - MoreBeerMorePower

■制限

  • 実行の継続時間:最大30日(承認の保留中を含む)

  • フローの実行履歴の保存:28日間

■JSON Pretty Linterを使用して、JSONから欲しい値を取得する

「整形前」に解析したいJSONを(*゚▽゚)ノ□ペタッ
→下の「ビューアー」の「JSON」の右側にある「Path」をクリック

取得したい値のPathをクリック

objectをoutputsに、ブラケットとブラケットの間に?を入れる

object['body'][2]['items'][0]['columns'][1]['items'][0]['text']
だったら、
outputs('アクション名')?['body']?[2]?['items']?[0]?['columns']?[1]?['items']?[0]?['text']
にする。
※アクション名の半角スペースは、代わりに _ を入力すること

この例だと、「🍑maru」が取得できる

■式の入力フォームを広げる(「実験的な機能」をONにする)

右上の設定アイコン→すべてのPower Automate設定を表示する→実験的な機能をONにする

■フローのエクスポート→インポート

  1. フローの詳細画面から「エクスポート」
    インポートの設定の「更新」は、インポートしたときに新規にするか上書きするかの選択

  2. クラウドフローか自分と共有の「インポート」→「パッケージのインポート(レガシ)

  3. エクスポートしたZipファイルをアップロード

  4. 「インポート時に選択する」で自分を選択して「保存」
    「×」になるけど、気にしなくてOK

  5. 「更新」で、更新するフローを選択して「保存」

  6. 「インポート」

■「選択したメッセージの場合」のフローがTeamsで表示されないとき

メッセージの3点リーダー→その他の操作→新規アクションを作成→表示されるウィンドウを閉じる
で、次から3点リーダー押下で表示されるようになる。

■付随してSharePointリスト

Titleの「必須」を解除

設定したいリストを開いた状態で、右上歯車「設定」
→「リストの設定」
→「列」の「Title」をクリック
→「この列への情報の入力を必須にする」を「いいえ」にする
→右下の「OK」

Lists側で準備してくれている内部列を表示する

右上「すべてのアイテム」
→「現在のビューの編集」
→表示したいものにチェックを入れて、右上か右下の「OK」
💣キャッシュの関係?で反映が遅いときがあるので、変更したら再読み込みするのが吉

内部列名の英語表記(よく使いそうなやつのみ)

  • ID:ID

  • 登録日時:Created

  • 登録者:Author

  • 更新日時:Modified

  • 更新者:Editor

本人が作成したレコードのみ表示できるようにする

設定したいリストを開いた状態で、右上歯車「設定」
→「リストの設定」
→「全般設定」の「詳細設定」
→「読み取りアクセス権」を「ユーザー本人が作成したアイテム」にする
→「作成/編集のアクセス権」を「ユーザー本人のアイテム」にする
→下の「OK」

リストの日時

初期値では日本時間になっていないので、必ず変更する。
サイトの設定→サイトの管理の地域の設定→日本時間にする

■付随してForms

フォームID

個人フォームはリストから選択可能。
グループフォームはカスタム項目の追加から、IDをコピペ

回答のExcelファイルの保存場所


事務員が少しの背伸びでできる効率化を目指す🌈✨ 自分の好きなものを、楽しく発信していきたいです! いただいたサポートは学習費にあてさせていただきます🥰