お世話になっております。
現在、バージョンを戻すを押下した時にイベントを発生させることはできているのですが、ルックアップコピー先のレコード更新方法がうまくできずにいます。
※バージョンを戻した後のレコードの取得ができておりません。
バージョンを戻すを行った時のルックアップコピー先の更新の方法について、何か良い案があればご教示いただきたく存じます。
宜しくお願い致します。
※ルックアップ更新で参考にしたサイトです
https://kintoneapp.com/blog/lookup_improvement/
otsuka-y さん
まず、参考にされた下記サイトを拝見したところ、submit.success イベントやPromise対応前に公開されたものらしく
現時点では、いくつか問題が発生する場合がありそうです。
https://kintoneapp.com/blog/lookup_improvement/
・submit イベント処理で更新APIを実行していますが、項目必須チェックエラーなどが発生すると、実際には本レコードが更新されない場合があります。
その結果、アプリ間でデータ不整合になる場合があります。
・他スクリプトにおいてsubmit イベント処理に時間のかかるPromise処理があると、本レコードが実際に更新される前に先に非同期で更新APIが処理され、
アプリ間でデータ不整合になる場合があります。
・タイミングによって、他のPCでルックアップ先アプリ更新処理と競合する場合、更新した項目の値がもとに戻ってしまう。
これは、ルックアップ項目以外の項目も設定して更新対象にしているためです。
これらの対策としては、submit.success イベント処理で、更新APIを処理するように変更が必要です。
また、ルックアップ先アプリ更新処理との競合対策は、ルックアップ項目の値のみ設定して更新APIを発行するなどがあります。
ただし、今回の対象アプリで、必須項目や他のスクリプト処理が無く、対象レコードが少なければ、問題が発生する可能性は低くなります。
対象アプリの状況によって、対応するかを判断されてもいいと思います。
次に、「バージョンを戻す」についてですが、「バージョンを戻す」を実行された場合は、submit イベント、submit.success イベントが発生しません。
対応としては、下記処理手順が考えられます。
・「バージョンを戻す」後に表示される「戻す」ボタンクリック時に、セッションストレージに「バージョンを戻す」処理用情報を書き込み。
・detail.show イベント処理で、セッションストレージに「バージョンを戻す」処理用情報があった場合に、
セッションストレージ削除、ルックアップ先更新処理を行う。
しかし、「バージョンを戻す」には、他にも問題があります。
例えばルックアップ項目があった場合、「バージョンを戻す」実行時点で以前のルックアップ項目の値が無くても、エラーになりません。
プロセス管理を行っている場合に、ステータス関連処理がされません。
いろいろチェック無しで、データが戻ってしまいます。
すべて対応するのは困難なので、暫定対策として「バージョンを戻す」を非表示にしたほうがいいかもしれません。