ユーザーが作業中にビジネス クリティカルなアプリケーションでデータが失われるという、現在直面している非常に深刻な問題を解決するのを誰かが助けてくれることを願っています。
これはランダムに発生します。これを再現したことはありませんが、ユーザーは私よりもはるかに多くシステムに参加しています。
多数のフィールドを含むドキュメントが作成され、2 つのリッチ テキスト フィールドがあります。Domino 8.5.3 を使用しています - 使用中の拡張 lib コントロールはありません。ドキュメントにはワークフローが組み込まれており、すべての検証は、データ クエリの保存イベントから呼び出される SSJS 関数によって行われます。sessionscope.log には非常に多くのログが記録されており、これは (現在) 各ユーザーのメモ ドキュメントに記録されているため、ユーザーが何をしているかを確認できます。
ユーザーは、リッチ テキスト フィールドに入力し、ドロップダウン フィールドで選択する必要があるワークフロー ステップに到達し、ワークフロー ボタンを使用してドキュメントを送信することがあります。ワークフロー ボタンが押される (フル アップデートを実行する) と、一部のクライアント側 JS が最初に実行されます。
// Process any autogenerated submit listeners
if( XSP._processListeners ){ // Not sure if this is valid in all versions of XPages
XSP._processListeners( XSP.querySubmitListeners, document.forms[0].id );
}
(ブログを読んだ後に RTF フィールドの値が失われるのを防ぐためにこれを追加しましたが、今のところ機能していません)
次に、サーバー側のイベントが実行され、view.save() を呼び出して QS コード (検証用) と PS コードをトリガーし、サーバー上でワークフロー エージェントを実行します。
95% の確率で、これで問題なく動作します。
ただし、5% の確率で、ページは RFT フィールド (CKEditor) とドロップダウン フィールドの両方に加えられたすべての変更を更新し、コンテンツなしで以前と同じように再読み込みされます。保存が行われていないようで、[完全更新] ボタンは送信ではなくページの更新のように機能するように決定されています。
通常の状況では、ワークフロー ボタンが押されると、QuerySave コードが開始され、True が返されることがログに示されます。次に、押されたワークフロー ボタンの ID がログに記録され (そのため、問題を確認するときにどのボタンが使用されているかがわかります)、PostSave コードが開始され、最後に true が返されます。
問題が発生すると、QuerySave イベントが実行され、検証に合格した場合は true を返し、失敗した場合は false を返し、停止します。ワークフロー ボタンの ID もログに記録されます。ただし、QuerySave が true を返した場合、コードは PostSave 関数を呼び出して続行する必要があります。PostSave 関数を開始していることも記録しません。
さらに悪いことに、PostSave コードの呼び出しに失敗した後、次にログに記録されるのは実行中の beforePageLoad イベントであり、これによりページがリロードされ、最近の編集が反映されていないため、ユーザーはすべてを失います。彼らが入力した情報!
これは、私が XPages でこれまでに遭遇した中で最も厄介な問題であるに違いありません。なぜなら、QuerySave が成功した (または必須フィールドが入力されていないために失敗した) と、ページがこのように更新されて、コンテンツ。誰かが私を正しい方向に向けるのを手伝ってください??