松本典子の「はじめよう!Azure Logic Apps/Power Automateでノーコード/ローコード」 第21回
件名に含まれる「:」「<」「>」「?」などの文字を取り除く処理
メール件名でフォルダーを自動作成するときの「困った」を解決するTips
2022年12月28日 08時00分更新
こんにちは、Microsoft MVP(Azure / Business Applications)の松本典子です。
Power AutomateやAzure Logic Appsを利用して「添付ファイル付きのメールを受信したら添付ファイルをOneDriveやSharePointに自動保存する」という仕組みを作りたい、あるいは実際に作って使っているという方は多いかと思います。今回は、この仕組を作るときに知っておくと便利なTipsをご紹介します。
1. OneDriveやSharePoint内にメールの件名でフォルダーを作ろうとすると…?
「メールの添付ファイル自動化」を作るとき、メールの件名をフォルダー名にしてその中に添付ファイルを入れる方法を試している場合も多いかと思います。
図のように、トリガーにはOffice 365 Outlookコネクタの「新しいメールが届いたとき(V3)」を選択し、OneDriveコネクタの「ファイルの作成」アクションを選択するワークフローを作成することで、通常であれば問題なく動作します。
ですが、たとえば「メール件名」「RE:」のような特定の文字が含まれている場合、OneDrive(またはSharePoint)内にフォルダー作成は行えず、エラーになってしまいます。
1-1. OneDriveやSharePointの「利用できない無効な文字」問題
Power Automate / Azure Logic AppsでOneDrive(またはSharePoint)にフォルダーを作成する場合、OneDriveやSharePointで利用できない無効な文字「" * : < > ? / \ |」が含まれているとアクションがエラーになるという問題が発生します。
●OneDrive と SharePoint の制限事項(マイクロソフトサポートドキュメント)
固定された名前でフォルダーを作成するのであればこうした問題も回避できますが、受信メールの件名はまちまちです。たとえば「RE:○○について」といった返信メールや、「<至急>ご確認ください」といった件名のメールは、結構やり取りがあるのではないでしょうか?
今回は、上述したフォルダー名の利用無効文字(" * : < > ? / \ |)がメールの件名に含まれる場合に、該当の文字を「-」に置き換える処理を作成して問題を回避できるようにしてみましょう。
2. 文字の置き換え処理を追加する
先ほど「1」の項で紹介したワークフローをベースに、「利用できない無効な文字」を「-」に置き換える処理を追加していきます。
文字の置き換え処理を追加したワークフローの全体図は上のようになります。この図に沿って作成していきましょう。
2-1. トリガーの設定
検索窓に「Outlook」と入力し「Office 365 Outlook」をクリックし、一覧から「新しいメールが届いたとき(V3)」を選択します。
「添付ファイルを含める」と「添付ファイル付きのみ」の設定を「はい」に変更します。これで、添付ファイル付きのメールを受信したときのみトリガーが起動して処理を行うようになります。
2-2. アクションの設定:作成
検索窓に「データ操作」と入力し、一覧から「作成」をクリック。
コネクタ自体の名前を変更したいので、右側の「…」をクリックし「名前の変更」を選択。「件名」という名前に変更します。
動的なコンテンツの「新しいメールが届いたとき (V3)」の「件名」を選択します。
2-3. アクションの設定:変数
検索窓に「変数」と入力し、一覧から「変数を初期化する」をクリック。
「利用できない無効な文字」を「-」に置き換える処理後の結果を入れる「置き換え後」という変数を作成します。
(1)名前:今回は「置き換え後」という名前で設定
(2)種類:「文字列」を選択
(3)値:動的なコンテンツの「件名」の「出力」を選択
2-4. アクションの設定:変数(利用できない文字の設定)
検索窓に「変数」と入力し、一覧から「変数を初期化する」をクリック。
コネクタ自体の名前を変更したいので、右側の「…」をクリックし「名前の変更」を選択。「禁止文字」という名前に変更します。
createArray関数を利用することで「利用できない無効な文字(" * : < > ? / \ |)」を設定し、ワークフロー内で置き換え処理ができるようにします。
(1)名前:今回は「禁止文字」という名前で設定
(2)種類:「アレイ」を選択
(3)値:「式」に以下の内容を入力
createArray('"','*',':','<','>','?','/','\','|')
2-5. 条件の設定:それぞれに適用する(Apply to each)
「コントロール」コネクタをクリックし「それぞれに適用する」アクションをクリック。
「Apply to each」アクションが開くので、動的なコンテンツの「変数」から「禁止文字」を選択します。 ※「Apply to each2」の表記になっているのは、「1」ですでに作成済みのワークフローに追加しているためです。
2-6. アクションの設定:作成
検索窓に「データ操作」と入力し「作成」をクリック。動的なコンテンツの「変数」から「置き換え後」を選択。
2-7. アクションの設定:変数の設定
検索窓に「変数」と入力し、一覧から「変数を初期化する」をクリック。
replace(outputs('作成'),item(),'-')
ここまでで「利用できない無効な文字(" * : < > ? / \ |)」を「-」に置き換える処理を行います。
最後に、OneDriveに保存する箇所を修正しましょう。
2-8. アクションの設定:OneDrive
検索窓に「OneDrive」と入力し「OneDrive」をクリックし、一覧から「ファイルの作成」を選択します。※「OneDrive for Buissiness」コネクタでも同様です。
「フォルダーのパス」ですが、「1」のときに「件名」を設定した箇所を動的なコンテンツの「変数」の「置き換え後」に変更します。
以上で「利用できない無効な文字(" * : < > ? / \ |)」が含まれた件名でもエラーを起こさずフォルダーを自動生成できるワークフローに修正できました。
3. 実行結果
テストのために、「RE:<至急>送信メールの確認」という件名の添付ファイル付きメールを自分宛に送信してみます。
「RE:<至急>送信メールの確認」が「RE--至急-送信メールの確認」に変換されてフォルダー名になり、エラーにならずに処理が完了しました。
最後に
今回ご紹介した方法を活かすことで「添付ファイルの自動保存」の仕組みがより作りやすくなると思います。ぜひ活用してみてください。


この連載の記事
-
第46回
Team Leaders
SharePointリストとExcelを活用して、効率的な「お知らせメール」送信フローを作ろう -
第45回
Team Leaders
Power Automateで使える“2種類のExcel”、その使い分けを覚えよう -
第44回
Team Leaders
契約書を確実に期限管理! SharePoint+Power Automateで期日通知を自動化 -
第43回
Team Leaders
社内からの質問に自動回答! AI Builder+ノーコードでQ&Aボットを作ろう -
第42回
Team Leaders
Power Automateで複数人の承認(多段階承認)ワークフローを簡単作成しよう -
第41回
Team Leaders
重要なTeamsメッセージの見失い/見落としを防ぐPower Autometeのフローを作ろう -
第40回
Team Leaders
クラウドフローからデスクトップフローを「Picture-in-Picture」で起動する -
第39回
Team Leaders
面倒なカレンダー登録作業を生成AIで自動化するワークフローを作ろう -
第38回
Team Leaders
生成AIに日本語プロンプトで指示を出し、メールから情報を抽出してもらおう -
第37回
Team Leaders
フォルダー内のすべてのファイルを添付してメールを自動送信するフローを作ろう -
第36回
Team Leaders
ローカルPCのテキストファイルをPower Automateに読み込ませて活用しよう - この連載の一覧へ