こんにちわ、 のりじ です。
「添付ファイル付きのメールを受信したら添付ファイルを自動でOneDriveやSharePointに保存する」仕組みを作る場合、「件名をフォルダ名に利用する」こともあると思います。
が、OneDriveやSharePointには「利用できない無効な文字」が存在します。
Power Automate / Azure Logic AppsでSharePoint / OneDriveに件名でフォルダを作りたい場合、OneDriveやSharePointで利用できない無効な文字「" * : < > ? / \ |」が含まれているとアクションがエラーになる問題。
返信した場合に入る「RE:」や「<至急>ご確認ください」のような件名って結構多いので、この問題をスルーするとなかなか厄介です。
ということで、今回は「OneDriveやSharePointで利用無効な文字(" * : < > ? / \ |)が含まれている場合、該当の文字を「-」に置き換える処理」のワークフローを作成しました。
とはいえ、既に出来上がっているワークフローに新しい処理を入れ込むのは大変な場合があります。このようなときには「ソリューション」を利用して処理を子フローとして部品可すると便利なので、今回は「OneDriveやSharePointで利用無効な文字が含まれている場合、該当の文字を「-」に置き換える処理」を子フローとして作成してみます。
1. ソリューションの作成
Power Automateポータル画面の「ソリューション」をクリックし、「+新しいソリューション」で作成します。
2. 小フローの作成
新規で作成したソリューション内に小フローを作成します。
「+新規」>「自動化」>「クラウドフロー」>「すぐに」を選択し、「OneDriveやSharePointで利用無効な文字が含まれている場合、該当の文字を「-」に置き換える処理」のフローを作成します。
2-1. 作成する子フローの全体図
子フローの全体図はこのような形。
親フローから「メールの件名」の値を持ってきて、この小フローで処理を行います。
今回の「OneDriveやSharePointで利用無効な文字が含まれている場合、該当の文字を「-」に置き換える処理」ですが、Hiroさんが作成してくださったワークフローを利用させていただいてます。
Hiroさんいつもありがとうございます!(五体投地)
2-2. トリガーの設定
タブの「組み込み」をクリックし、「モバイルのフローボタン」をクリック。
「手動でフローをトリガーします」をクリックします。
「+入力の追加」をクリックし「テキスト」を選択。
今回はメールの件名の値を親フローから取得するフローにするので「件名」と項目名を入れました。
2-3. アクションの設定
トリガーの設定が終わったのでアクションの選択・設定を行います。
検索窓に「データ操作」と入力し、一覧の中から「作成」をクリック。動的なコンテンツの「手動でフローをトリガーします」の中にある「件名」を選択。
後続のアクションでわかりやすくするため、コネクタ名を「作成」から「件名」に名前を変更します。
検索窓に「変数」と入力し、一覧の中から「変数を初期化する」を選択。
以下の内容を入力していきます。
- 名前:「置き換え後」と入力
- 種類:「文字列」を選択
- 値:「件名」コネクタの動的なコンテンツの「出力」を選択
このコネクタ名も「変数を初期化する」から「置き換え後」に名前を変更しておきます。
検索窓に「変数」と入力し、一覧の中から「変数を初期化する」を選択。
以下の内容を入力していきます。
- 名前:「禁止文字」と入力
- 種類:「アレイ」を選択
- 値:「式」を選択し、以下の内容を入力。
createArray('"','*',':','<','>','?','/','\','|')
このcreateArray関数をうまく利用すると、処理が簡潔になるのだなと今回学びました。
このコネクタ名も「変数を初期化する」から「禁止文字」に名前を変更しておきます。
「コントロール」から「Apply to each」を選択します。
「以前の手順から出力を選択」には動的なコンテンツの変数から「禁止文字」を選択。
アクションの追加で「データ操作」を検索し「作成」をクリック、動的なコンテンツの変数から「置き換え後」を選択します。
次にアクションの追加で「変数」を検索し、一覧から「変数の設定」を選択。
以下の内容を入力します。
- 名前:「置き換え後」を選択
- 値:「式」を選択し、以下の内容を入力。
replace(outputs('作成'),item(),'-')
replace関数を利用して、無効文字を「-」に置き換えます。
最後に、親フローに小フローの処理結果を返す部分を作成します。
検索窓に「PowerApp」と入力し、表示される「Power Apps」をクリック。
「PowerApp または Flow に応答する」をクリック。
「+出力追加」をクリックして「テキスト」を選択し、図のように動的なコンテンツの変数から「置き換え後」を選択。(項目は「置き換え後文字)とわかりやすいものに)
以上で子フローが出来上がったので、名前を付けて保存します。
今回、小フローの名前は「SharePoint_Replace_ChildFlow」としました。
3. 既存のフローをソリューションに追加する
今回は既存のワークフローに作成した小フローを追加したいので、該当のフローをソリューションに追加します。
小フローを作成したソリューションを開き「既存を追加」をクリック。
「自動化」>「クラウドフロー」をクリックします。
一覧に表示されているフロー名をクリックし「追加」ボタンをクリック。
このように既存のフローがソリューションに追加されました。
既存のワークフローを修正するのでクリックします。
4. 既存のクラウドフローから小フローを利用する
ワークフローの「編集」を行います。編集前のワークフローはこのような形。
元フローの作り方は以下の記事を参考にしてください。
トリガー直下の「+」をクリックして、アクションを追加します。
「組み込み」タブをクリックし「フロー」をクリック。
「小フローの実行」をクリック。
「小フロー」は作成したフローを選択。
件名は、動的なコンテンツの「新しいメールが届いたとき (V3)」内から「件名」をクリック。
検索窓に「データ操作」と入力し一覧から「作成」をクリック。
動的なコンテンツの「小フローの実行」から「置き換え後文字」を選択します。
最後に、保存するフォルダ部分を変更します。
フォルダーパスの部分を以下の内容で置き換えます。
concat(formatDateTime(addhours(utcnow(),9),'yyyy-MM-dd'),'/',outputs('作成'))
日付フォルダの中に件名のフォルダを作り、その中に添付ファイルを格納していきます。件名に無効文字が入っていても子フローで「-」に置き換えられているのでエラーは出なくなる、という形。
最終的に、親フローはこのようなワークフローになります。
5. 実行結果
では実行結果を見てみます。
このように、件名には「< > ? |」という無効文字が入っています。
結果は無効文字がすべて「-」に置き換わった形でフォルダができました。
6. さいごに
ざっくりですが、ソリューションを利用して小フローを作成する方法も含めての説明でした。
このようにソリューションをうまく使うと処理を部品可できて便利なので、適宜活用してみてください。