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