Power Automate（クラウドフロー）でOne Driveファイル名の値が謎の文字列になるバグっぽい事象と回避 #powerautomate


OneDriveのモジュールとトリガーに`ファイルに変更があったら -> 何かする`を作ろうとし
てますがちょっとよくわからない挙動に当たったのでメモがてら記録しておきます。

Power Automate（クラウドフロー・DPA）での話です。 PADではないので悪しからず。

## まずは通常の使い方から

動的コンテンツ（変数的なものだと思ってます。）の`ファイル名`にファイル名が入ってきますが、以下のように`<ファイル名>が更新されたよ`などと入れておくと、例えば`book.xlsx`を変更した場合、`book.xlsxが更新されたよ`の文字列が送られてきます。

> ![スクリーンショット 2022-11-13 15.49.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/d3e069f8-39bf-31e5-edac-c674980d3abc.png "スクリーンショット 2022-11-13 15.49.04.png")

## <ファイル名>のみで扱うとバグる?

特定のファイル名だったら何か処理をする、を実装する場合、以下のようにすると思います。

例えばbook.xlsxが変更された場合

> ![スクリーンショット 2022-11-13 15.52.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/71c7726c-0f65-ae4a-5c74-f9ee10619387.png "スクリーンショット 2022-11-13 15.52.58.png")

ただこれだとfalseに行ってしまい、中身を確認すると`Ym9vay54bHN4`といった文字列になっていました。

> ![スクリーンショット 2022-11-13 15.47.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/954afb78-10c5-81c9-45c4-50463b67121e.png "スクリーンショット 2022-11-13 15.47.05.png")

条件を<ファイル名>が`Ym9vay54bHN4`だったらに変更してみたら...

> ![スクリーンショット 2022-11-13 15.54.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/3e1e1688-0578-ce89-1d2a-79b266ea5b66.png "スクリーンショット 2022-11-13 15.54.58.png")

まさかのtrue。

> ![スクリーンショット 2022-11-13 15.48.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/6ba270f1-ddde-a28e-f671-7c67e60adfe9.png "スクリーンショット 2022-11-13 15.48.11.png")

ということで`book.xlsx`は`Ym9vay54bHN4`という文字列に変換されてました。

## 回避策 - ○○を噛ませてxxで囲む

調べても有効な手段がなかったのですが（PADの方がでてきてしまって、Power Automateのクラウドフローのググラビリティ悪さ... ）

こんな形で **変数を作成** し、

> ![スクリーンショット 2022-11-13 16.17.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/dba2da98-e468-a0cb-f973-fdd0ae23fbfc.png "スクリーンショット 2022-11-13 16.17.31.png")

文字列として追加する際に動的コンテンツのファイル名を**ダブルクオーテーションで囲みます。**

見出しに書いた○○は変数で、xxは""ですね。`変数を噛ませて""で囲む`ことで回避できます。


> ![スクリーンショット 2022-11-13 16.18.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/0c681fb8-c85f-0de1-3bb9-4a7dec3963c2.png "スクリーンショット 2022-11-13 16.18.42.png")

条件式では作った変数を利用します。

> ![スクリーンショット 2022-11-13 16.19.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/4fc5d82d-f76b-2a19-599d-31c7394368a4.png "スクリーンショット 2022-11-13 16.19.56.png")

すると **なぜか分からんけど**回避できます。

JavaScriptでx=1はNumberだけど`${x}`にすると文字列に変換されるような挙動だったり、エクセルで001を入れると1という表示になってしまうけど`'001`と入れると文字列で`001`になったりしますがその辺をイメージしてみたらうまくいきました。

## 成功するとこんな感じ

謎文字列ではなくちゃんと`ブック.xlsx`という文字が変数に格納されていて、

> ![スクリーンショット 2022-11-13 16.22.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/a4827f07-d649-4cfd-8d79-557ef6571d5b.png "スクリーンショット 2022-11-13 16.22.46.png")

条件はtrueに入ってました。

> ![スクリーンショット 2022-11-13 16.23.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/63306093-7968-fae8-a5f4-0abf10cad056.png "スクリーンショット 2022-11-13 16.23.31.png")


試した際のこの式の場合`ブック.xlsx`をいじるとtrue、他ファイルをいじるとfalseに分岐します。

## まとめ

仕様がわからなくてつらみがある。回避したあとに以下の記事を見つけたけど`x-ms-file-name-encoded`というエンコード方式があるっぽいですね。。うーむ。。

> [Power AutomateにてOneDriveから取得したファイルのファイル名が文字化けする問題の解決方法](https://papasensei365.com/powerautomate-resolve-garbled-characters/)