4
5

More than 1 year has passed since last update.

OneDriveやSharePointで利用できない文字を置き換えてフォルダ名にする方法(Power Automate / Logic Apps)

Last updated at Posted at 2022-08-28

こんにちわ、 のりじ です。

「添付ファイル付きのメールを受信したら添付ファイルを自動でOneDriveやSharePointに保存する」仕組みを作る場合、「件名をフォルダ名に利用する」こともあると思います。

が、OneDriveやSharePointには「利用できない無効な文字」が存在します。

Power Automate / Azure Logic AppsでSharePoint / OneDriveに件名でフォルダを作りたい場合、OneDriveやSharePointで利用できない無効な文字「" * : < > ? / \ |」が含まれているとアクションがエラーになる問題。
返信した場合に入る「RE:」や「<至急>ご確認ください」のような件名って結構多いので、この問題をスルーするとなかなか厄介です。

ということで、今回は「OneDriveやSharePointで利用無効な文字(" * : < > ? / \ |)が含まれている場合、該当の文字を「-」に置き換える処理」のワークフローを作成しました。

とはいえ、既に出来上がっているワークフローに新しい処理を入れ込むのは大変な場合があります。このようなときには「ソリューション」を利用して処理を子フローとして部品可すると便利なので、今回は「OneDriveやSharePointで利用無効な文字が含まれている場合、該当の文字を「-」に置き換える処理」を子フローとして作成してみます。

1. ソリューションの作成

0828-001.jpg

Power Automateポータル画面の「ソリューション」をクリックし、「+新しいソリューション」で作成します。

2. 小フローの作成

新規で作成したソリューション内に小フローを作成します。

0828-002.jpg

「+新規」>「自動化」>「クラウドフロー」>「すぐに」を選択し、「OneDriveやSharePointで利用無効な文字が含まれている場合、該当の文字を「-」に置き換える処理」のフローを作成します。

2-1. 作成する子フローの全体図

0828-003.jpg

子フローの全体図はこのような形。
親フローから「メールの件名」の値を持ってきて、この小フローで処理を行います。
今回の「OneDriveやSharePointで利用無効な文字が含まれている場合、該当の文字を「-」に置き換える処理」ですが、Hiroさんが作成してくださったワークフローを利用させていただいてます。
Hiroさんいつもありがとうございます!(五体投地)

2-2. トリガーの設定

0828-004.jpg

タブの「組み込み」をクリックし、「モバイルのフローボタン」をクリック。

0828-005.jpg

「手動でフローをトリガーします」をクリックします。

0828-006.jpg

「+入力の追加」をクリックし「テキスト」を選択。
今回はメールの件名の値を親フローから取得するフローにするので「件名」と項目名を入れました。

2-3. アクションの設定

トリガーの設定が終わったのでアクションの選択・設定を行います。

0828-007.jpg

検索窓に「データ操作」と入力し、一覧の中から「作成」をクリック。動的なコンテンツの「手動でフローをトリガーします」の中にある「件名」を選択。
後続のアクションでわかりやすくするため、コネクタ名を「作成」から「件名」に名前を変更します。

0828-008.jpg

検索窓に「変数」と入力し、一覧の中から「変数を初期化する」を選択。
以下の内容を入力していきます。

  • 名前:「置き換え後」と入力
  • 種類:「文字列」を選択
  • 値:「件名」コネクタの動的なコンテンツの「出力」を選択

このコネクタ名も「変数を初期化する」から「置き換え後」に名前を変更しておきます。

0828-009.jpg

検索窓に「変数」と入力し、一覧の中から「変数を初期化する」を選択。
以下の内容を入力していきます。

  • 名前:「禁止文字」と入力
  • 種類:「アレイ」を選択
  • 値:「式」を選択し、以下の内容を入力。
createArray('"','*',':','<','>','?','/','\','|')

このcreateArray関数をうまく利用すると、処理が簡潔になるのだなと今回学びました。
このコネクタ名も「変数を初期化する」から「禁止文字」に名前を変更しておきます。

0828-010.jpg

「コントロール」から「Apply to each」を選択します。
「以前の手順から出力を選択」には動的なコンテンツの変数から「禁止文字」を選択。
アクションの追加で「データ操作」を検索し「作成」をクリック、動的なコンテンツの変数から「置き換え後」を選択します。

0828-011.jpg

次にアクションの追加で「変数」を検索し、一覧から「変数の設定」を選択。
以下の内容を入力します。

  • 名前:「置き換え後」を選択
  • 値:「式」を選択し、以下の内容を入力。
replace(outputs('作成'),item(),'-')

replace関数を利用して、無効文字を「-」に置き換えます。

0828-012.jpg

最後に、親フローに小フローの処理結果を返す部分を作成します。
検索窓に「PowerApp」と入力し、表示される「Power Apps」をクリック。

0828-013.jpg

「PowerApp または Flow に応答する」をクリック。

0828-014.jpg

「+出力追加」をクリックして「テキスト」を選択し、図のように動的なコンテンツの変数から「置き換え後」を選択。(項目は「置き換え後文字)とわかりやすいものに)

以上で子フローが出来上がったので、名前を付けて保存します。
今回、小フローの名前は「SharePoint_Replace_ChildFlow」としました。

3. 既存のフローをソリューションに追加する

今回は既存のワークフローに作成した小フローを追加したいので、該当のフローをソリューションに追加します。

0828-015.jpg

小フローを作成したソリューションを開き「既存を追加」をクリック。
「自動化」>「クラウドフロー」をクリックします。

0828-016.jpg

一覧に表示されているフロー名をクリックし「追加」ボタンをクリック。

0828-017.jpg

このように既存のフローがソリューションに追加されました。
既存のワークフローを修正するのでクリックします。

4. 既存のクラウドフローから小フローを利用する

0828-018.jpg

ワークフローの「編集」を行います。編集前のワークフローはこのような形。
元フローの作り方は以下の記事を参考にしてください。

トリガー直下の「+」をクリックして、アクションを追加します。  

0828-019.jpg

「組み込み」タブをクリックし「フロー」をクリック。

0828-020.jpg

「小フローの実行」をクリック。

0828-021.jpg

「小フロー」は作成したフローを選択。
件名は、動的なコンテンツの「新しいメールが届いたとき (V3)」内から「件名」をクリック。

0828-022.jpg

検索窓に「データ操作」と入力し一覧から「作成」をクリック。
動的なコンテンツの「小フローの実行」から「置き換え後文字」を選択します。

0828-023.jpg

最後に、保存するフォルダ部分を変更します。
フォルダーパスの部分を以下の内容で置き換えます。

concat(formatDateTime(addhours(utcnow(),9),'yyyy-MM-dd'),'/',outputs('作成'))

日付フォルダの中に件名のフォルダを作り、その中に添付ファイルを格納していきます。件名に無効文字が入っていても子フローで「-」に置き換えられているのでエラーは出なくなる、という形。

0828-024.jpg

最終的に、親フローはこのようなワークフローになります。

5. 実行結果

では実行結果を見てみます。

0828-025.jpg

このように、件名には「< > ? |」という無効文字が入っています。

0828-026.jpg

結果は無効文字がすべて「-」に置き換わった形でフォルダができました。

6. さいごに

ざっくりですが、ソリューションを利用して小フローを作成する方法も含めての説明でした。
このようにソリューションをうまく使うと処理を部品可できて便利なので、適宜活用してみてください。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5