フィールドの値の内部表現
更新日:2024.02.06
フリーレイアウト型のカスタムフィールドの値は、内部的には以下のようなJSON文字列として保存しています(実際には不要な改行やスペースを詰めて保存します)。
フィールドの組み合わせ(またはユニット)の1件分のデータを、1つのオブジェクトとして扱います。
そして、フィールドの組み合わせ(またはユニット)の複数回の繰り返しを、配列として扱います。
フリーレイアウト型のカスタムフィールドの内部形式
[
{ "フィールド名":"値", "フィールド名":"値", ・・・, "フィールド名":"値", "flcf_row_is_null":XXX },
{ "フィールド名":"値", "フィールド名":"値", ・・・, "フィールド名":"値" "flcf_row_is_null"::XXX },
・・・
{ "フィールド名":"値", "フィールド名":"値", ・・・, "フィールド名":"値" "flcf_row_is_null"::XXX }
]
「flcf_row_is_null」は、1件分のフィールドの組み合わせ(またはユニット)が、空であるかどうかを表すフラグです。空ならこの値は1になり、空でなければ「""」(空文字列)になります。
例えば、あるフリーレイアウト型のカスタムフィールドがあり、その中に「txt1」と「txt2」の2つのテキスト型のフィールドを作ったとします。そして、このフィールドの組み合わせを2回作り、以下のようにデータを保存したとします。
フィールドのデータの例
txt1フィールド | txt2フィールド |
こんにちは | 山田 |
さようなら | 田中 |
この場合、このカスタムフィールドの値の内部形式は、以下のようになります
上記の表に対応するカスタムフィールドの値の内部形式
[
{ "txt1":"こんにちは", "txt2":"山田", "flcf_row_is_null": "" },
{ "txt1":"さようなら", "txt2":"田中", "flcf_row_is_null": "" }
]
ユニットを使う場合も、同様の形でJSON文字列で保存しています。ユニット名は、内部的には「flcf_unit_name」というフィールドに保存しています。
例えば、以下のような状況でデータを保存したとします。
- フリーレイアウト型のカスタムフィールドがあり、その中に「txt1」と「txt2」の2つのテキスト型のフィールドがある
- 「unit1」と「unit2」の2種類のユニットを定義していて、「unit1」ユニットでは「txt1」フィールドに値を入力し、「unit2」ユニットでは「txt2」フィールドに値を入力する
- ユニットを2つ作り、以下の表のように値を入力した
フィールドのデータの例
ユニット | txt1フィールド | txt2フィールド |
unit1 | こんにちは | 入力なし |
unit2 | 入力なし | 田中 |
この場合、このカスタムフィールドの値の内部形式は、以下のようになります。
上記の表に対応するカスタムフィールドの値の内部形式
[
{ "flcf_unit_name":"unit1", "txt1":"こんにちは", "txt2":"", "flcf_row_is_null": "" },
{ "flcf_unit_name":"unit2", "txt1":"", "txt2":"田中", "flcf_row_is_null": "" }
]