1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「SharePointにHTTP要求を送信します」に自動的なエスケープ処理を期待してはいけない

Last updated at Posted at 2025-06-24

本日も小ネタで恐縮です。どういうわけかお祭りシーズンはPowerAutomateで連日トラブルシューティングしていることが多い気がします。

Problem

PowerAutomateでワークフローを構築・運用。
あるとき、SharePointコネクターの「SharePointにHTTP要求を送信します」アクションでエラーが発生。
エラーメッセージはだいたい以下のような内容:

無効な JSON です。スコープ 'Object' にはコンマ文字 ',' が必要です。配列内の 2 つ以上の要素およびオブジェクトの 2 つ以上のプロパティはコンマで区切る必要があります。

Solution

当該アクションの「ボディ」欄に入力されているJSONの内容をチェック。
"{@...}"というかんじで先行するアクション(ステップ)のデータを埋め込んでいる箇所があったら、それらのデータに"が混入する可能性を検討(エラー時の処理対象データでだいたいわかる)。
可能性ありの場合は{@replace(..., '"', '\"')}と手動でエスケープ処理を実装。

image.png

PowerAutomateのアクションの入力欄でJSONを記述できるものはいくつもある。
それらの入力欄で、とくにJSONもしくは文字列のみを受け付けるものについては、上記のような自前でのエスケープ処理の実装は不要なよう。とくに"のエスケープしなくても自動でコンテキストを理解してエスケープ処理をしてくれる。

一方、「SharePointにHTTP要求を送信します」アクションはJSON以外にも例えばXMLのようなものも入力データとして想定しているためか、自動的なエスケープ処理は期待できず、必要に応じて自前で入力データの構文仕様に応じたエスケープ処理を実装する必要がある。

ところで、replace(..., '"', '\"')という関数式は、これがJavaScriptだとするとちょっと違和感。
そもそも関数かメソッドかという違いもありますが、JavaScriptの場合 '...'.replace('"', '\\"')という引数になるはず。
仮に'...'.replace('"', '\"')という書き方をしてしまうと\"の部分がただの"と同義と解釈されてしまい、実質的にまったくエスケープ処理がされません。
しかしここはあくまでもPowerAutomateの式関数。エスケープ処理はreplace(..., '"', '\"')という引数の指定になります。
データのやり取りにJSONが採用されていたり、Office ScriptsはTypeScriptのサブセットだったりと、周囲にJavaScript系のモノがあるからといって、式関数まで同類にしてはいけないということです。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?