昨年末に次の記事を公開しました。
[Office Scripts] Excel 内のデータを使って SharePoint ライブラリのプロパティを自動設定しよう (weblogs.jp)
この記事で使っていたのは GA 前の Office Scripts でパブリック プレビューでした。しかし、2021年5月27日に General Availability (GA) に達したことが発表されました。
Office Scripts is now generally available in Excel for the web - Microsoft Tech Community
さて、この記事で説明したフローですが、久しぶりにファイルをアップロードして動作させてみると SharePoint コネクターを使ったファイルのプロパティ更新のアクションが実行できない。で、原因を探るためエラーを確認するとファイルがロックされてしまっているようです。
エラーのメッセージの要点は「ファイル <ファイルパス> は、<フローの所有者> が排他的に使用するためにロックしています。」というところです。Office Scripts 実行時にファイルの内容を読み取っているので、File Open の状態となっているのでしょう。比較のために単純に、SharePoint コネクターだけを使って「ファイルが作成されたとき(プロパティのみ)」のトリガーを使い、次のステップで「ファイルのプロパティの更新」を実行してみますが、特にファイルがロックされることはありません。
さて、これをどう対処しよう。が、結局のところファイルが排他ロックされるとSharePoint 上でファイルが解放されるまで待つしかありません。ですが、どのタイミングで解放されるのかはよくわからない。そこで、Power Automate を使って SharePoint 上のファイルのプロパティを更新するときに何らかの理由でファイルロックに遭遇した人はいるだろうと、なにかよさそうなアプローチがないかネット上で探してみます。予想通り、複数の記事を見つけましたが、結局、みな共通しているのはファイルのロック状態が解除されるまで Do Until で繰り返しトライするしかなさそうです。
まず結果から言うと、5分ほど待機すればロックが解除されるようです(現時点)。
ですが、念のため30秒ごとにロック解除を繰り返し確認するようにロジックを変更してみましょう。まず、ロック状態を判定するために IsFileLockedという名前でブール値の変数を用意します。既定値は true。
Office Script 実行後すぐにファイルのプロパティを変更していましたが、直後にDo until を追加しこの中に「ファイルのプロパティ更新」アクションを 移動させます。Do until の条件は 「IsFileLocked の値が false に等しい」です。
次に変数の設定アクションを追加し、IsFileLocked にファイルが引き続きロックされていれば true、そうでなければ false を格納するように式を書きます。
なお参考にしたサイトは下記の通りです。
- Working with locked documents in Power Automate Flows (tachytelic.net)
- Power Automate – Avoiding “File Locked For Shared Use” Failing Your Workflow | Timlin Enterprises - SharePoint and Office 365 Managed Services
- Retry after failures in Power Automate (sharepains.com)
コメント