v16R4:フォームへのオブジェクト記法で登録してみた

普通の入力項目は問題なかったのですが、ポップアップとドロップボックスは正しく動作しない様です。
[]19685782;“Your comment here…”[/]

仕様としてサポートされるフォームオブジェクトは,
テキスト入力とサブフォーム(ウィジェット)だけです。

その他はサポートされません。

また,<customer.name>様 のような,スタティックテキストに対する変数の埋め込み記法もサポートされません。

代わりに,入力不可のテキスト入力を作成し,

custome.name+“様” のような「式」をデータソースとすることが推奨されています。

http://forums.4d.fr/Post/FR/19643754/1/19682622#19682622

R5に期待でしょうか。 :mrgreen:

ところでリンク先の内容とこの内容の関係性がよくわからないのですが、ご説明をお願いします。

: Laurent ESNAULT

The <> syntax currently only supports variables and fields.

のところで,オブジェクト記法はスタティックテキストをサポートしていない,という言及がありました。

: Keisuke MIYAKO
: Laurent ESNAULT

The <> syntax currently only supports variables and fields.

のところで,オブジェクト記法はスタティックテキストをサポートしていない,という言及がありました。
全体ではなく、この部分でと言うことだったんですね。
表題と内容が違うので判断できませんでした。 :pray:

こちらの方法だとポップアップとコンボボックスも動作する様なのですが、テキスト入力の日付と時間が面倒なことになりますね。
オブジェクトで渡されていて、プロパティで変数タイプをそれぞれ日付と時間にしていしていたら日付と時間変数と同じ様に動作してくれないものでしょうか? :frowning:
[]19685836;“Your comment here…”[/]

[]19685840;“Your comment here…”[/]

こんにちは。

現状,オブジェクト型は,フォームオブジェクトにバインドされているかに関わりなく,

日付は文字列(yyyy-mm-ddThh:mm:ssZ, Is text, DBパラメーターの_JSON use local time_で管理)

時間はミリ秒

で格納されているので,仕様上,ご覧のような振る舞いになるかと思います。

将来のバージョンでは,互換性オプションで「JSON日付を使用する」のような項目が提供され,
オブジェクト型の日付をランゲージの日付に「寄せる」という仕様の変更案が検討されています。

具体的には,

日付は日付(yyyy-mm-dd, Is date, DBパラメーターの_JSON use local time_に影響されない・時間を含まない純粋に日付だけの情報)

という新しいモードが用意される予定です。

JSON Parse・JSON Stringify・OB Get・OB SET・New objectなども,ISO文字列ではなく,4Dの日付リテラル・日付型を基本(新規データベースのデフォルト)とすることが提案されています。

しかし,時間型については,特に仕様を変更する予定はないようです。

日付の新しいモードはR5からでしょうか。
時間の方も、hh:mm:ss表記に対応を希望します。
でないと、フォームへのオブジェクト表記対応が中途半端になってしまうと思います。

それとselection to josnで外部システムへわたす場合、この日付と時間の表記をもとめられる事が多いのですが、
現状はこの問題のためにせっかくのselection to jsonが使えない状態になっています。
部分的に使えても、その後でforで回して再生成みたいな事を行わないといけないです。
テンプレートのオブジェクトにフォーミュラを記述できるとからなんらかの対応を望みます。 :pray:

ご意見ありがとうございます。

現状,
日付や時間をデフォルト以外の形式で出力したい場合,
PROCESS 4D TAGS(4DLOOP, 4DEVAL, 4DCODE等)がもっとも実際的かもしれません。

selection to jsonはこんな記述にできればと思います。

<code 4D>
C_OBJECT($template_o;$option_o)
$template_o:=New object(“firstname”;->[Table_1]firstname;“lastname”;->[Table_1]lastname;“birthday”;[Table_1]birthday;“time”;[Table_1]time)
$option_o:=New object(“date_format”;"####/##/##";“time_format”;"##:##:##";“number_format”;"###,###,###")
Selection to JSON([Table_1];$template_o;$option_o)

</code 4D>

https://momentjs.commoment.js>のようなフォーマットであれば,
system date longのような曖昧さがなくて良いかもしれないですね。

https://github.com/miyako/4d-plugin-time-and-numberICUの実装>も興味深いと思います。

: Keisuke MIYAKO

https://momentjs.commoment.js>のようなフォーマットであれば,
system date longのような曖昧さがなくて良いかもしれないですね。

https://github.com/miyako/4d-plugin-time-and-numberICUの実装>も興味深いと思います。

YYMDなどフォーマット記述にできればよいですよね。日本の元号表記などにも対応できそうですし。

ただ、それに対応するとフォームプロパティの日付や時間のフォーマットもおなじ様にしてね、と要望が増えてしまいそうです。 :slight_smile:

追伸

フォームオブジェクトのデータソース(変数・式)におけるオブジェクト記法の使用について

使用できるオブジェクト(フォームプロパティ)は以下のとおりです。

テキスト入力
コンボボックス
ポップアップドロップダウンメニュー
チェックボックス
ラジオボタン
ピクチャラジオボタン
サーメモーター
ダイアル
ルーラー
リストボックス列(セレクション型)
リストボックスの背景色・スタイル・フォント

ブール型と数値型(ボタンやチェックボックスに関係)は,代入の対象に合わせて型が変換されます。
つまり,相手の型を再定義することなく,代入することができます。(実数・整数の扱いと同じ)

また,デバッグの「式」にもオブジェクト記法で式が入力できるようになりました。

これに伴い,デバッガの「式」が作り直されています。
(引数・変数・式・オブジェクト型のプロパティ・配列の要素)

16R3以前のバージョンでそのような「式」が保存されている場合,
16R4以降のデバッガには継承されませんのでご注意ください。

: Keisuke MIYAKO

追伸

フォームオブジェクトのデータソース(変数・式)におけるオブジェクト記法の使用について

使用できるオブジェクト(フォームプロパティ)は以下のとおりです。

テキスト入力
コンボボックス
ポップアップドロップダウンメニュー
チェックボックス
ラジオボタン
ピクチャラジオボタン
サーメモーター
ダイアル
ルーラー
リストボックス列(セレクション型)
リストボックスの背景色・スタイル・フォント

結局のところ、コンボボックスとポップアップの
<code 4D>
forms_o.age->
</code 4D>
この記述方法はNGって事なのでしょうか。それとも許容される範囲なのでしょうか。

NGを示唆したのは間違いでした。訂正いたします。

オブジェクト記法の日付と時間は,文字列またはミリ秒(実数)のデータソースとして設定できます。

ポップアップメニューにコレクションを使用する例題を作成してみました。

https://forums.4d.com/4DBB_Main/x_User/298210/files/29818267.zip

ポイント:項目リストは,JSONフォームのプロパティ,プロパティリストの選択リストまたはデフォルト値,OBJECT SET LIST BY@でセットすることができ,データソースには文字列のコレクションが代入されます。データソースに値/参照を代入したり,UIで項目を選択したりすると,そのコレクションは値/参照で上書きされ,元のコレクションではなくなりますが,フォームオブジェクトとしては引き続き機能します。

オブジェクト型のプロパティに代入されたポインターの逆参照について

シンタックス的には合っていても,

Form.objects.Text.ptr->


Form[“objects”][“Text”][“ptr”]->

はエラーになりました。(#56:フィールドか変数かテーブルが必要です。

$Form:=Form
$value:=$Form.objects.Text.ptr->

あるいは

$Form:=Form
$value:=$Form[“objects”][“Text”][“ptr”]->

あるいは

(Form.objects.Text.ptr)->

であればOKです。