ささみ学習帳 - sasami's study book

ささみ学習帳

Microsoft365 や Power Platform について学んだこと・アイデアのメモ

Outlook メールの下書きをPower Automate クラウドフローで作成する

  • はじめに
  • 考え方
  • 1.新規メールの下書きを作成する
    • フロー全体
    • フロー解説
      • [Office 365 Outlook]HTTP 要求を送信します-下書きメールを作成
    • 実行結果
  • 2.返信の下書きを作成する
    • フロー全体図
    • フロー解説
      • [Data Operation]作成-元メッセージのId
      • [Office 365 Outlook]HTTP 要求を送信します-返信の下書きを作成
      • [Office 365 Outlook]HTTP 要求を送信します-返信の下書きメールを更新
    • 実行結果
  • 3.全員に返信する下書きを作成する
    • フロー解説
      • [Office 365 Outlook]HTTP 要求を送信します-全員返信の下書きを作成
    • 実行結果
  • 4.転送の下書きを作成する
    • フロー解説
      • [Office 365 Outlook]HTTP 要求を送信します-転送の下書きを作成
    • 実行結果
  • 5.下書きメールにファイルを添付する
    • フロー全体図
    • フロー解説
      • [Office 365 Outlook]HTTP 要求を送信します-下書きメールを作成
      • [OneDrive for Business]パスによるファイル コンテンツの取得-添付ファイル
      • [Variable]変数を初期化する-FileName
      • [Office 365 Outlook]HTTP 要求を送信します-ファイルを添付する
    • 実行結果
  • 参考にしたページ
  • さいごに

 

はじめに

Power Automate クラウドフローでOutlook メールの下書きを作成する方法です。

 

考え方

Power Automate のOffice 365 Outlook コネクタには下書きメールを作成するアクションは用意されていませんが「HTTP 要求を送信します」アクションを使ってGraph APIを呼び出すことで作成することが可能です。

  • 新規メールの下書き
  • 返信するメールの下書き
  • 全員に返信するメールの下書き
  • 転送するメールの下書き
  • 下書きメールにファイルを添付する

のパターンを確認してみました。

 

1.新規メールの下書きを作成する

Graph API の「メッセージを作成する」を利用します。

learn.microsoft.com

 

フロー全体

1アクションだけです。

 

フロー解説

[Office 365 Outlook]HTTP 要求を送信します-下書きメールを作成

  • URI
  • メソッド
    • POST
  • 本文
    • 下書き保存するメッセージをJSONで指定します。
    • 一例は件名,本文,to,cc,bccを指定するとこんな感じです。
    • {
          "subject": "メールの下書きを作成するよ",
          "body": {
              "contentType": "HTML",
              "content": "<p>メッセージの本文です</p><p>テスト</p><p>なのです。</p>"
          },
          "toRecipients": [
              {
                  "emailAddress": {
                      "name": "strike",
                      "address": "GAT-X105@seed-dummy.onmicrosoft.com"
                  }
              },
              {
                  "emailAddress": {
                      "name": "rouge",
                      "address": "MBF-02@seed-dummy.onmicrosoft.com"
                  }
              }
          ],
          "ccRecipients": [
              {
                  "emailAddress": {
                      "name": "freedom",
                      "address": "ZGMF-X10A@seed-dummy.onmicrosoft.com"
                  }
              },
              {
                  "emailAddress": {
                      "name" : "strike freedom",
                      "address": "ZGMF-X20A@seed-dummy.onmicrosoft.com"
                  }
              }
          ],
          "bccRecipients": [
              {
                  "emailAddress": {
                      "name": "rising freedom",
                      "address": "STTS-909@seed-dummy.onmicrosoft.com"
                  }
              }
          ]
      }
      • subject
        • 件名
      • body
        • contentType
          • HTML , Text ←本文の形式を指定
        • content
          • 本文を記述。(Textの場合は\nで改行) 
      • toRecipients 
        • emailAddress ※複数指定可 
          • name
            • 宛先(To)の表示名(省略可能)
          • address
            • 宛先(To)のメールアドレス
      • ccRecipients
        • emailAddress ※複数指定可 
          • name
            • ccの表示名(省略可能)
          • address
            • ccのメールアドレス
      • bccRecipients
        • emailAddress ※複数指定可 
          • name
            • bccの表示名(省略可能)
          • address
            • bccのメールアドレス 
    •  その他設定可能な属性はこちらに記載されています。

実行結果

メールの下書きが作成されます。

 

続きを読む

Boxコネクタの「ファイルが変更されたとき(プロパティのみ)(V1/V2)」トリガーが反応するのはファイルが変更されたときだけではない事への対処

はじめに

こちらの記事の続きです。

sasami-axis.hatenablog.com

Boxコネクタの「ファイルが変更されたとき(プロパティのみ)(V1/V2)」トリガーはファイルが変更されたときも含め、少なくとも下記のイベントに反応することが検証で分かりました。

  • ファイル新規作成
  • ファイル新規アップロード
  • ファイルの変更
  • ファイル更新アップロード
  • ファイル名の変更
  • メタデータの追加(1つ目のみ)
  • タグの追加

この動作は新規ファイルと変更ファイルで異なる処理を行いたい場合に厄介な仕様です。

今回はこれに対する対処になりそうな一つのアイデアです。

 

対処案-ファイルの履歴の有無で新規ファイルか判別する

対処案はシンプルです。ファイルの履歴がない場合は新規ファイルという判断を加えるだけです。

 

Box APIにはそれができる命令が備わっています。

ja.developer.box.com

 

HTTPアクションやカスタムコネクタでこのAPIを使ってもよいのですが、「ファイルが変更されたとき(プロパティのみ)(V1/V2)」トリガーの出力や「ID によるファイル メタデータの取得」アクションの出力にある「ETag」がそれにあたるようです。

新規ファイルのEtagは"0"で、ファイルが更新されるたびに数字が増えていきます。

BoxコネクタのリファレンスにもBox APIのリファレンスにもそのようなことは記載されていません。あくまで個人的に検証したのみの結論です。

 

フロー全体図

フロー解説

  • Etagが0だったら
    • 新規ファイルまたは新規アップロード
  • それ以外だったら
    • 下記のいずれか
      • ファイルの変更
      • ファイル更新アップロード
      • ファイル名の変更
      • メタデータの追加(1つ目のみ)
      • タグの追加

という分岐ができます。

 

制限事項・課題事項

 

さいごに

カスタムコネクタを作成して一通り動作確認した後でETagの存在に気づきました...

結果的にBox APIが気軽に使えるようになったので回り道もよいものです。

 

Boxコネクタの「ファイルが変更されたとき(プロパティのみ)(V1/V2)」トリガーが反応するのはファイルが変更されたときだけではない

 

"ファイルが作成されたとき"と"ファイルが変更されたとき"と別々のトリガーが存在しているが...

Power Automateで利用できるBoxコネクタには2024年1月現在3つのトリガーがあります。これらのうち変更の2つトリガーについてはBoxコネクタのリファレンスに書かれていない考慮事項があります。

※「変更されたとき」トリガーはV1,V2の2つがありますが、確認した限り今回の考慮事項は共通です。

 

learn.microsoft.com

 

あくまで一つ環境のみでの検証結果です

私が利用しているBoxのテナントでの確認しただけの結果です。テナント固有の設定の影響の可能性もあるかもしれません。

 

 

[考慮事項]ファイルが変更したされたとき"以外"にもトリガーが動作してしまう

「ファイルが変更されたとき」という名称から変更されたときにだけ起動するトリガーと思ってしまいがちですが、実際はそうではありません。私が検証した限りでは下記のイベントでトリガーが発火しました。

 

イベント トリガーが発火
ファイル新規作成
ファイル新規アップロード
ファイル更新アップロード
ファイルの変更
ファイルの削除 ×
メタデータの追加
メタデータの変更 ×
メタデータの削除 ×
タグの追加
タグの削除 ×
ファイル名の変更
電子透かしの適用on ×
電子透かしの適用off ×
コレクションに追加 ×
有効期限を設定 ×
バージョン履歴から現在のバージョンを変更 ×
ロック ×

 

ファイルの新規作成・ファイルを新規アップロード

変更トリガーはファイルの新規作成で起動します。この為、ファイルが新規または更新された場合に何か処理を実行したい場合には変更トリガーのフロー1つで対応することが可能です。

反面、作成と変更で異なる処理を行うことが難しいという問題があります。

また、ファイルを新規作成する場合にOfficeドキュメントの場合は複数回トリガーが起動する場合があります。

また、ブックマークを新規作成しても変更トリガーは起動しません。

 

ファイルの変更・ファイルを更新アップロード

変更トリガーですので当然変更した時にも動作します。

ただし、Box Note とブックマークは更新しても変更トリガーは起動しませんでした。

 

メタデータの追加(1つめのみ)

メタデータを追加した際にも変更トリガーが起動します。ただし1つ目のメタデータを追加した場合のみです。2つ目以降には無反応です。

しかし、メタデータを更新・削除しても無反応です。

 

タグの追加

タグを追加した際にも変更トリガーが起動します。メタデータと異なり2つ目以降にも反応します。

しかし、タグを更新・削除しても無反応です。

 

ファイル名を変更

なんとファイル名を変更しても変更トリガーは起動します。

 

バージョン履歴から現在のバージョンを変更しても"反応しない"

現在のバージョンを変更した場合は変更トリガーは反応しませんでした。ユーザー視点では実質ファイルが書き換わった状態ですが変更トリガーでは追跡できない点に注意です。

 

さいごに

検証してみたところファイルの変更以外のいろんなイベントに反応してしまうことがわかりました。厳密にファイルコンテンツが変更されたときだけ処理を行いたい場合には厄介な動作です。

 

対処編に続きます。

sasami-axis.hatenablog.com

 

 

新しいTeamsでもStream Deck Mobile アプリでTeams会議のリアクションを使いやすく(Stream Deck Mobile無料版でもOK)

 

はじめに

以前Stream Deck Mobile のiOSアプリは無料で6ボタンまで使えて・Teamsプラグインも動くのでい感じという記事を書きました。

sasami-axis.hatenablog.com

新しいTeamsでは設定手順が少し変わっていたので改めて記事にまとめてみました。

 

 

設定方法

1.Stream Deck MobileアプリをPCアプリと接続する

ここは以前と変わりませんので説明は省略しています。

 

2.Teams デスクトップアプリの設定

設定→プライバシー→サードパーティ製アプリAPIを開き、[APIの管理]ボタンを押す

APIを有効にするをオンにする

※クラシックTeamsではここでAPIキーのコピーが必要ですが不要になったようです

 

3.Stream Deckアプリの設定

PCでStream Deckアプリを起動し↓からElgato Marketplace にアクセスします。

Teamsで検索するとプラグインが表示されるかと思います。

Getをクリック

Edgeの場合はこんなダイアログが出ますので開くをクリック

Stream DeckアプリにTeamsプラグインが追加されます。

ドラッグして好きな場所に配置します。

※Stream Deck Mobile アプリを無料版では2x3マスのみ利用できます。


4.Teams会議を開始する

設定のためにTeamsで今すぐ会議で会議を開始します。

はじめはStrem Deck ModileアプリのTeamsプラグインのボタンはすべてグレーアウトしています。

会議に参加すると有効なボタンとなりカラー表示に変わります。

どれでもいいのでTeamsプラグインのボタンを押してみましょう。

するとアクセス許可を確認するダイアログが表示されますので「許可」します。

以上で設定完了です。

 

新しいTeamsで設定→プライバシー→サードパーティ製アプリAPIAPIの管理に許可したアプリとデバイスが表示され、ブロックすることもできるようになっていました。

 

 

参考にしたページ

クラシックTeamsで設定するときに参考にさせていただきました。

mokudai.jp

 

偶然このページを見てStream Deckのことを思い出しました。

support.microsoft.com

 

 

 

この記事のまとめ

設定手順を文字だけでまとめると

  1. iPhoneにStream Deck Mobile アプリをインストール
  2. PC(またはmac)にStream Deck アプリをインストール
  3. PCアプリとiOSアプリを接続する
  4. 新しいTeamsで設定→プライバシー→サードパーティ製アプリAPIAPIの管理→APIを有効にするをオン
  5. Stream Deck PCアプリでTeamsプラグインを設定し配置する
  6. Teams会議を始めてTeamsプラグインのボタンを押す
  7. 接続要求ダイアログで許可

 

 

ポリシーを使用して新しいTeams デスクトップアプリにアップグレードする場合の動作を確認してみた

(2024/1/16更新) VDI環境におけるTeams更新ポリシーのサポート有無について新たな見解を得た為訂正しました。

 

WindowsのTeamsデスクトップアプリの話が中心です。

 

新しいTeamsにアップグレードする手段は複数提供されている

クラシックTeamsから新しいTeamsにアップグレードする手段は複数用意されています。

 

今回は「ポリシーを使用して新しい Teams にアップグレードする」方法を検証してみました。

 

「ポリシーを使用して新しい Teams にアップグレードする」方法

基本的にはこちらの公開情報の通り進めるだけです。

learn.microsoft.com

 

1.クライアントPCが前提条件を満たしていることを確認する

上記ページの前提条件を満たしていることを確認します。通常は何もしなくても満たしているはずですが、特殊な運用をされている場合は注意が必要です。

 

2.Teams管理センターでポリシーを構成する

Teams管理センターまたはPowershellでポリシーを構成することができますが、今回はTeams管理センターで実施しました。

2-1.Microsoft Teams 管理センターにサインインする

https://admin.teams.microsoft.com/

2-2.チーム→Teams更新ポリシー

 

2-3.更新ポリシーを追加する

今回は検証のため特定のユーザーのみポリシーを適用しました。

その為、新たにポリシーを「追加」します。

 

2-4.新しい更新ポリシーを設定する

「名前」と「説明」を設定し、「新しいTeamsクライアントを使用する」を"既定として新しいTeams"を選択します。

  • 「新しいTeamsクライアントを使用する」の設定値
    • 無効
      • 「新しいTeamsを試す」トグルボタンが非表示になる
    • 既定としての従来のTeams
      • クラシック Teams を既定のアプリになる
      • 「新しい Teamsを試す」 トグル スイッチが表示され、ユーザーが必要に応じて切り替えることができる
    • Microsoftが管理
    • 既定として新しいTeams
      • 新しいTeamsが既定のアプリとなる
      • 「新しいTeams」トグルでクラシックTeamsに切り替えることもできる

 

2-5.作成したTeams更新ポリシーにグループまたはユーザーを割り当てる

通常は「グループポリシーの割り当て」でセキュリティグループを指定して複数ユーザーを一括指定する形になるかと思いますが、今回は検証のためポリシーにユーザーを直接指定しました。

 

ポリシーを選択し「ユーザーの割り当て」

ユーザーを検索して追加し適用して完了です。

 

※グループへのポリシーの割り当てを行う場合

こんな感じで指定できます。

 

ポリシーが適用された後の動き

(新しいTeams未インストールのPCでは)Teams利用中に自動的に新しいTeamsがダウンロードされインストールされます。完全にサイレントインストールで何も表示されません。

インストールが終わった後Teamsを使っているとこちらのようなメッセージが表示されました。

このメッセージは×がないので閉じることができません。下記いずれかを必ず選択する必要があります。

  •  今すぐ切り替え
    • ただちに新しいTeamsに切り替えます
  • Teamsを使用していないときに切り替える
    • 次回Teamsを起動した際に新しいTeamsに切り替わります
    • 次回起動時のみクラシックTeamsを起動しても無条件で新しいTeamsが起動します

 

再びクラシックTeamsに切り替えることも可能

2023年1月時点では、新しいTeamsが既定となった後もクラシックTeamsに戻ることができます。

 

 ●「…」→「新しいTeams」トグルボタンをオフにする

●クラシックTeamsのアイコンから起動する

 

Teams更新ポリシーはTeams for Mac (デスクトップアプリ)にも適用されるか

mac のTeamsデスクトップアプリにも更新ポリシーは反映され、メッセージが表示されます。Windows版Teamsデスクトップアプリとは若干メッセージが違いますし、動作も異なります。

  • 今すぐ入手
    • Windows版と同様に新しいTeamsに切り替わります
  • 明日質問する
    • 次回起動時に再びこのメッセージが表示されます



Teams更新ポリシーはVDI環境のTeamsデスクトップアプリにも適用されるがサポート外?

私が確認した範囲では反映されました。しかし、サポートに確認したところVDI環境でのアップグレードでサポートされる手段はこちらの公開情報に記載された内容のみとの回答でした。サポートされない点に注意が必要です。

(2024/1/16訂正) 再度サポートに確認したところ、Teams更新ポリシーによるアップグレードの動作は「"新しいTeamsを試す"トグルをオンにする動作なのでVDI環境でもサポートされる」という見解との事で、VDI環境であってもサポートされるとの事でしたので訂正します。

 

learn.microsoft.com

 

Teams更新ポリシーのはTeams for Webにも適用されるか?

2024年1月10日時点では反映されないようでした。

公開情報に記載がありました。

learn.microsoft.com

 

さいごに

ポリシーによるアップグレードは、アップグレードを一括で行う手段としては一番お手軽な手段と感じました。(ネットワークの帯域等いろいろ考慮ポイントはありますが…)

ところで新しいTeamsが既定のアプリになることで何が変わるのか?動作を確認しましたが違いは見出せませんでした。新しいTeamsを既定としてもクラシックTeamsに戻すことができます。何が変わったのかわかり次第追記したいと思います。

 

 

PowerApps for Teams で利用できるTeams統合オブジェクトについて調べてみた

 

Power Apps for Teams (Dataverse for Teams) でアプリを作ってみたくなりTeams統合オブジェクトについて調べてみた記録です。

 

 

Teams統合オブジェクトとは

Power Apps for Teams (Teamsにアプリ追加したPower Apps)でアプリを作成すると自動的に追加される赤枠のもののことです。Teams統合オブジェクトを通じてTeamsアプリの状態を取得することができます。


どんな情報が取得できる?[公式ドキュメント]

Microsoftの公式ドキュメントでは

Power Apps の Teams との統合で利用可能な 2 つの機能があります。 キャンバス アプリ内で Teams テーマを取得でき、チームまたはチャネルのコンテキストに応じてデータをフィルタリングできます。

と解説されており、

  • Teams のテーマを取得する
  • Teams のチャンネル名を取得して、アプリ データをフィルタリングします

と2つの機能のみが解説されています。

learn.microsoft.com

 

ですが、実際にTeams統合オブジェクトを使ってみると2つ以外にもいろいろな情報を取得することができるようなので検証してみました。

 

どんな情報が取得できる?[検証結果]

表にまとめてみました。

Property チャネルのタブとして追加したときに取得できる値
ContextEntityId Id?
例)/providers/Microsoft.PowerApps/apps/5c6a559a-6748-44f3-af18-e3ea93affaee
IsFullScreen

常にfalse

Teamsアプリを最大化しても変化なし

IsSidePanel

常にfalse

Theme  
Theme.Name [クラシックTeams]
default:既定
dark:ダーク
contrast:ハイコントラスト
---
[新しいTeams]
default:ライト ←重複
dark:ダーク
default:クラシック ←重複
contrast:ハイコントラスト
ThisChannel Appsタブが存在するチャネルの情報
ThisChannel.Displayname チャネル名
ThisChannel.Id チャネルId
ThisChannel.Kind Regualr:標準チャネル
Private:プライベートチャネル
ThisTeam Appsタブが存在するチームの情報
ThisTeam.DisplayName 標準チャネルの場合→チーム名
プライベートチャネルの場合→チャネル名
ThisTeam.Id 標準チャネルの場合→チームId(=一般チャネルのチャネルId)
プライベートチャネルの場合→チャネルId
ThisTeam.GroupId 標準チャネルの場合→チームに関連づいたm365グループのGroupId
プライベートチャネルの場合→値なし
ThisMeeting  
ThisMeeting.Id 常に空欄

気になった点の補足です。

 

Theme.Name の値は新しいTeamsの"ライト"・"クラシック"で重複

公式ドキュメントにもあるTeamsのテーマが取得できるプロパティですが、新しいTeamsでアプリを開いている場合、テーマが"ライト"・"クラシック"の場合どちらも同じ"default"の値が返されます。(2023年12月現在)

 

ThisTeam の値は標準チャネルとプライベートチャネルで値が異なる

標準チャネルの場合、ThisTeams はその名の通りチームに関する情報を返します。

しかし、プライベートチャネルの場合はDisplayName,Idにはチャネルの情報を返しGroupIdの値は空欄になります。この為、プライベートチャネルのタブとしてアプリを追加した場合はTeams統合オブジェクトからチームの情報を参照することはできないようです。

 

※共有チャネルはPowerApps for Teamsで作成したアプリの公開先チャネルとして表示されるものの、実際にしようとするとエラーが発生します。このため今回は動作を確認できていません。

 

IsFullScreen, IsSidePanel, ThisMeeting ? Teams会議アプリ用?

これらは、チャネルのタブにアプリを追加しただけでは常に同じ値であったり値を返さない状態でした。名称的にTeams会議関連ぽい雰囲気ですが詳細は不明です。

 

Param関数でも同様の情報を参照可能

Param関数で同じような情報を取得できるようです。Param関数では locale, hostClientType, userTeamRole, chatId などのTeams統合オブジェクトでは取得できない情報も参照可能です。

Teams統合オブジェクト Param関数 補足
ContextEntityId - -
IsFullScreen - -
IsSidePanel - -
Theme - -
Theme.Name theme -
ThisChannel - -
ThisChannel.Displayname - -
ThisChannel.Id ChannelId -
ThisChannel.Kind ChannelType -
ThisTeam - -
ThisTeam.DisplayName - -
ThisTeam.Id teamId -
ThisTeam.GroupId groupId -
ThisMeeting - -
ThisMeeting.Id - -
- chatId [アプリをチャットのタブに追加した場合]チャットId
- hostClientType androdi,ios,desktop…といったクライアントアプリの種類
- subEntityId
- teamType Office 365 for Education で用いられるチームの種類
- userTeamRole チームでのユーザーの権限レベル 0:Admin,1:User,3:Guest

Teams統合オブジェクトはPower Apps for Teamsでのみ使用できるようですが、通常のPower Apps アプリをチャネルのタブに追加した場合・Power Apps for Teamsのアプリどちらでも利用可能でしたので、用途に応じて使い分けがよさそうです。

詳しくはこちらのページを参照ください。

learn.microsoft.com

 

ippu-biz.com

 

※プライベートチャネルにタブとして追加した場合はParam関数でもgroupIdが取得できない・teamIdにプライベートチャネルのIdを返す挙動はTeams統合オブジェクトと同じなようです。

 

さいごに

Teams統合オブジェクトを利用してTeamsの情報が取得できると、Power Apps アプリにTeamsと連動した動きができるようになり便利です。

Power Apps for Teams (Dataverse for Teams) と書きましたが、正式な名称は何なんだろう

 

 

 

 

Outlook on the Web で複数メールをファイルとして一括エクスポートする (Outlookの機能だけで)

この記事は「Microsoft 365 Advent Calendar 2023 - Adventar」に参加しています。

16日目の記事です。

 

 

これは何?

Outlook on the Web または 新しいOutlook で複数メールを一括エクスポートする手段です。

どんな時に使うか……ファイルとしてエクスポートしたメールにはヘッダ情報などがすべて含まれていますので、メール関連のトラブルでサポートに問い合わせる際に提供するとサポートの中の人に喜ばれるかもしれません。

 

操作手順

1.メール一覧でエクスポートしたいメールを選択

 

2.新規メールを作成する

3.1で選択したメールを新規メールにドラッグ&ドロップ

メールにファイルとして添付されます。

 

4.メールを自分宛に送信

 

5.届いたメールを[すべてOneDriveに保存] または [すべてダウンロード]する

  • すべてをOneDriveに保存
    • OneDrive for Businessの"添付ファイル"フォルダに1ファイルづつ保存されます
  • すべてダウンロード
    • 添付ファイルがzip圧縮されて1つのファイルとしてダウンロードされます

 

※保存に失敗するケースも

2023年12月現在、この方法では保存に失敗するケースがありました。具体的には下記のパターンです。

  • 件名なしのメール
  • 件名にOneDriveでファイル名に利用不可な文字が使われているメール
    • " : < > ? / \ |

 

 

動作確認した環境

 

さいごに

多数のメールをファイルにエクスポートしたい…なんて事はなかなかないかもしれませんが、手段があることだけでも知っておくと役立つ日があるかもしれません。

 

※以前Power Automate クラウドフローで実現する手段も考えてみました。sasami-axis.hatenablog.com