2020年10月14日 (水)

Power Automate の Apply to each 内でOffice Script を使うときの注意点?

Power Automate から Excel on the web で利用できる Office Scripts (プレビュー) を呼び出せるようになっています。弊社の研修でもこれを体験してもらおうとPower Automate のコースで扱っているのですが、作った演習で高確率でエラーが発生することが判明。といっても5日前のことで、今日はまったくもってスムーズに実行できているのですが。。。

ともかく、どんなことをやってどう回避したかを備忘録として書いておきます。

演習でのシナリオ

Power Automate の研修で行っている演習の一つが、Excel ファイル内に記載された情報をもとに、見積書を複数自動生成するというもの。見積書の生成だけなら単純に SharePoint コネクターを使って既存の見積書テンプレートのコピーを作成すればいいのですが、コピーした見積書に、事前に読み込んでいた Excel から顧客名などの情報を渡して Office Scripts を使って自動的に書き込みます。

このとき、Apply to each を使って複数の見積書を一括してフローで作成するようにしているのですが、ここでエラーが出てしまう。3つのファイルを作成する演習なのですが、2件目でエラーになる人もいれば、3件目でエラーになる人も。

エラーは「404 File not found」。 SharePoint ファイルが見つからないと言っている。これ、呼び出し元のファイルが見つからなかったのか、スクリプトが見つからなかったのか判断ができないんですが、この前の処理で実際にはSharePointファイルのプロパティを編集しているので、ファイルは読み込めているはず。そうなると、Office Script ファイル側だろうなぁと推測しています。

2020-10-14_13-28-13

対策

そもそも「スクリプトの実行」アクションはまだプレビュー段階であり、単なる一時的な不具合の可能性も捨てきれません。

ですが、404 エラーが発生した経験を踏まえてエラー処理を加えて、安定的に動作するようになったので一通りの処理を書いておきましょう。

ちなみに、Office Scripts ファイルは実行時には編集などの同時アクセスは厳禁となっています(それもあって OneDrive for Business 内にファイルを作成して、できる限り排他制御するようにしているんだろうと想像しています)。

そのため、このアクションを含む「Apply to each」ではコンカレンシー制御はオフにしておきます。試しに「オン」にしたところ、確実にエラーが発生しました。

つづいてエラー処理です。「スクリプトの実行」アクションを実行したあとに条件を追加し、左側の条件式に次の式を追加して評価します。

equals(int(actionOutputs('スクリプトの実行').statusCode),404)

これで 404 エラーを拾います。True の場合の条件では、いったん待ち時間を設定します。30秒で試しました。あとは、30秒後に再びスクリプトの実行を試みます。

2020-10-14_13-32-56

この処理を加えることで挙動が安定しました。

エラーが多発していた時点での動作確認をしたので、スクリーンショットも併せて掲載しておきます。これも5日前のものです。

2020-10-14_13-47-38

色々となぞは残りますが、とりあえずは良しとしましょう。

 

コメント