legacy-knowledge-base
公開されました Jun. 30, 2025

DDMStorageAdapterSaveRequest は、最終的なフォーム送信イベントと自動保存イベントを区別することができません。

written-by

Sorin Pop

How To articles are not official guidelines or officially supported documentation. They are community-contributed content and may not always reflect the latest updates to Liferay DXP. We welcome your feedback to improve How To articles!

While we make every effort to ensure this Knowledge Base is accurate, it may not always reflect the most recent updates or official guidelines.We appreciate your understanding and encourage you to reach out with any feedback or concerns.

legacy-article

learn-legacy-article-disclaimer-text

問題

  • フォームが送信されたときに外部サービスを呼び出すカスタム・フォーム・ストレージ・アダプタを使用しています。
    Liferay Formsの自動保存機能と組み合わせると、外部サービスが繰り返し呼び出されることに気づきました。
    回答を自動的に保存する "機能はLiferayによって導入され、ユーザーが時間を必要としたり、中断されたり、あるいはログアウトした場合にフォーム入力が失われるのを防ぎます。
    "Save Answers Automatically "オプションをオンにすると、外部システムへの送信が約1分間隔で繰り返されます(製品にあるデフォルトの間隔による)。

    saveRequest-Object (DDMStorageAdapterSaveRequest) と関連する API ドキュメントには、最終的なフォームの送信と自動保存による保存イベントを区別する方法がありませんでした。

  • 再現の手順
    1. https://learn.liferay.com/w/dxp/process-automation/forms/developer-guide/writing-a-form-storage-adapter
    2. この記事にあるサンプルのカスタム・ストレージ・アダプターをビルドし、デプロイする。 このストレージアダプタを使用する新しいフォームを作成します。 (自動保存はデフォルトで有効になっており、デフォルトでは1分間隔に設定されています)
    3.
    4. フォーム上に2つのページを置き、それぞれにテキストフィールドを置く。 あるページにフォームを置き、フォームへの入力を開始する。例えば、1ページ目のフィールドに入力し、2ページ目に進み、停止して1分以上何もしない。
    結果:ログで、自動保存イベントがトリガーされたことを示すログを見ることができる:Acme storage adapter's save method was invoked"(Acmeストレージアダプターの保存メソッドが呼び出された)。また、UI上で別のユーザーのフォームエントリーを見ると、ステータスが "Draft "のエントリーが作成されていることがわかる。
    5. 最後に、2ページ目のフィールドに記入し、「送信」をクリックします。
    結果:ログには同じメッセージが表示され、バックグラウンドでも同じことが起こり、UI上ではフォームエントリーが承認済みステータスに変更されたことがわかります(確定されました)。

環境

  • 7.4

解像度

  • これはバグではないことが確認されています しかし、将来的に製品に何らかの形で追加される可能性があるため、分析する価値があるかもしれません。 https://liferay.atlassian.net/browse/LPD-16093 どうぞご自由にお進みください。

    現在、自動保存も送信も、フォーム上では同じロジックで動作しています。 両者の違いはステータスのみで、自動保存時には
    下書き、 と表示され、提出時には 承認済み と表示される。 そのため、ストレージ・アダプターを使用する場合は、差別化は存在するが使用されない。 おそらく回避策として、目標を達成するためにこのステータスの差別化を活用できるだろう。

did-this-article-resolve-your-issue

legacy-knowledge-base