このページの本文へ

松本典子の「はじめよう!Azure Logic Apps/Power Automateでノーコード/ローコード」 第21回

件名に含まれる「:」「<」「>」「?」などの文字を取り除く処理

メール件名でフォルダーを自動作成するときの「困った」を解決するTips

2022年12月28日 08時00分更新

文● 松本典子 編集● 大塚/TECH.ASCII.jp

  • この記事をはてなブックマークに追加
  • 本文印刷

 こんにちは、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 eachの設定

 「Apply to each」アクションが開くので、動的なコンテンツの「変数」から「禁止文字」を選択します。 ※「Apply to each2」の表記になっているのは、「1」ですでに作成済みのワークフローに追加しているためです。

2-6. アクションの設定:作成

Apply to eachの設定

 検索窓に「データ操作」と入力し「作成」をクリック。動的なコンテンツの「変数」から「置き換え後」を選択。

2-7. アクションの設定:変数の設定

Apply to eachの設定

 検索窓に「変数」と入力し、一覧から「変数を初期化する」をクリック。

replace(outputs('作成'),item(),'-')

 ここまでで「利用できない無効な文字(" * : < > ? / \ |)」を「-」に置き換える処理を行います。

 最後に、OneDriveに保存する箇所を修正しましょう。

2-8. アクションの設定:OneDrive

アクションの設定:OneDrive

 検索窓に「OneDrive」と入力し「OneDrive」をクリックし、一覧から「ファイルの作成」を選択します。※「OneDrive for Buissiness」コネクタでも同様です。

 「フォルダーのパス」ですが、「1」のときに「件名」を設定した箇所を動的なコンテンツの「変数」の「置き換え後」に変更します。

 以上で「利用できない無効な文字(" * : < > ? / \ |)」が含まれた件名でもエラーを起こさずフォルダーを自動生成できるワークフローに修正できました。

3. 実行結果

 テストのために、「RE:<至急>送信メールの確認」という件名の添付ファイル付きメールを自分宛に送信してみます。

実行結果

 「RE:<至急>送信メールの確認」が「RE--至急-送信メールの確認」に変換されてフォルダー名になり、エラーにならずに処理が完了しました。

最後に

 今回ご紹介した方法を活かすことで「添付ファイルの自動保存」の仕組みがより作りやすくなると思います。ぜひ活用してみてください。

■関連サイト

カテゴリートップへ

この連載の記事