問題
-
フォームの FieldReference フィールドの変更値は、ユーザーがフォームの UI を変更すると、データベース ddmforminstancereport のエンティティでも更新される必要があります。
再現するための手順
1) フォームを作成する
2) 'Text' フィールドを追加する
3) このフィールドの 'Advanced' タブに移動する
4) 'FieldReference' フィールドのテキストを変更する
5) フォームを公開する
観察した動作: データベース(ddmforminstancereport)では、デフォルトの文字列が残っていますが、UI上ではFieldReferenceのフィールドで変更した値を確認することができます。
Environment
- Liferay DXP 7.4 アップデート 1
解決策
- 観測された動作は、Liferay DXPの意図した動作です。
- データベースはDXPのニーズを満たすように設計されており、ここで修正することはできません。
そこでフィールドリファレンスを追加してしまうと、フィールドリファレンスが変わるたびに、このテーブルの行を更新して、データが陳腐化しないようにしなければなりません。
- フィールド名は不変であり、ユーザーが一定の識別子を必要とするこのようなユースケースのために作られたものです。 この表は、Forms内のグラフをプロットするための補助表でもあることに留意してください。
追加情報
-
もしユーザーがその中のデータを活用したいのであれば、次のような回避策があります。まず、フィールドを参照で検索してその名前を取得し、それを使ってこのテーブルの中のデータを検索することで、うまくいくはずです。
- ユーザーが自分の
DDMFormにアクセスできる場合、 getDDMFormFieldsReferencesMap メソッドを使用しようとすることができます。 このメソッドは、FieldReferenceをキーとするマップを返す。 そして、以下のようにフィールドIDにアクセスすることが可能です:Map<String, DDMFormField> ddmFormFields = ddmForm.getDDMFormFieldsReferencesMap(true);
DDMFormField ddmFormField = ddmFormFields.get("FirstName");
String fieldID = ddmFormField.getName();これにより、ユーザーは投稿されたフォームからデータを取得するために、
fieldIDを代わりに使用することができます。 -
したがって、要約すると、ユーザーはテーブルからデータを取得できるようなgroovyスクリプトを作成することができます。
- ユーザーが自分の
- 私たちは、あらゆるスクリプト、カスタマイズ、および開発に関するさらなる支援のために、 "Global Service Team" というチャンネルを用意しています。