今回もPowerAutomateを使ってフローを構築・運用している過程で遭遇した問題のトラブルシューティングです。
Problem
オブジェクトの配列に対して「選択」(Select)アクションを使用し、要素オブジェクトのプロパティの選択/変換を行うとき、string()
関数が無視される。
例えば次のような配列があるとしましょう。この配列の要素オブジェクトにはfoo
というプロパティがあり、文字列型だったり数値型だったりします:
[
{
"foo": "123"
},
{
"foo": "456"
},
{
"foo": 789
},
{
"foo": "012"
}
]
ここで、プロパティfoo
をすべて文字列型に変換するとします:
「Map」欄のfooString
に対応する値には 式string(item()['foo'])
を指定します。
これを実行すると、結果は思いもかけないものになります:
[
{
"fooString": "123"
},
{
"fooString": "456"
},
{
"fooString": 789
},
{
"fooString": "012"
}
]
つまり数値型から文字列型への変換が行われていません。。
おまけに「選択」アクションの「Switch Map to text mode」ボタンを押したり、フローの詳細画面に戻ったあと再度編集画面に遷移したりすると、式string(item()['foo'])
は勝手に式item()['foo']
に変換されています。
原因は不明です。
PowerAutomateが自動的に行う式の最適化のバグだろうと推測していますが実際のところはわかりません。
ちなみにこの問題はオブジェクトの配列でのみ発生し、文字列型の配列では発生しません。
Solution
対策として string()
の代わりにconcat('', ...)
を使用します。
つまり string(item()['foo'])
の代わりに concat('', item()['foo'])
と記述します。