Begin SQL
~End SQL
ブロックに変数名などのトークンを記述する場合,余計な空白を挿入しないように注意してください。INTO :$var
は問題ありませんが,INTO : $var
はコンパイルエラーになります。これは仕様です。
4Dのテキスト型は,値と文字列長の属性を持っているため,通常はC言語で文字列の終わりを示す\0
が値に含まれていてもトランケートされません。しかし,クライアント/サーバー版のORDAは,内部的にREST APIを使用しており,JSON形式でエンティティを表現しているため,\0
以降のテキストが取得できません。これは仕様です。そのようなデータはテキスト型ではなく,BLOB型で管理し,必要に応じてBASE64 ENCODE
でエンコードすることを検討してください。
トランザクション中に「サーバー上で実行メソッド」を呼び出してレコードを更新した場合,トランザクションをキャンセルしてもサーバー上で実行した処理はキャンセルされません。これは仕様です。トランサクションのスコープはプロセスであり,サーバー側のプロセスに効果は及びません。サーバー側の処理をキャンセルしたいのであれば,サーバー側のプロセスでもトランザクションを管理する必要があります。
ACI0102487が修正された19r5およびv19.1 Hotfix 1以降,entity.toObject()
およびentitySelection.toCollection()
の振る舞いが調整されています。修正前は__KEY
バーチャル属性にプライマリーキーが返されていましたが,修正後はリレーション使用されているキーフィールドの値が返されるようになりました。
リレーションの1フィールドにはプライマリーキー以外を使用することができるとはいえ,特別な理由がない限り,ORDAではキーフィールドにプライマリーキーを使用することが推奨されています。
バイナリモードでは,他のクライアントで編集中のメソッドをエディターで開こうとした場合,メソッドがロックされていることを知らせるアラートが表示されるようになっています。19r7では,アラートの表示が省略され,プロジェクトモードと同じようにエディターのツールバーにロックアイコンが表示されるだけになりました。
しかし,原則的にチームで開発をすることがないプロジェクトモードとは違い,バイナリモードではメソッドを編集できる状態が普通なので,メソッドがロックされているときにはアラートを表示して注意を喚起する以前の振る舞いが復元されることになりました。
バイナリモードのポップアップメニューには「非表示」というプロパティがあります。非表示のポップアップメニューは画面に描画されませんが,アクティブであり,クリック操作に反応します。そのようなフォームをプロジェクトに変換すると,当該プロパティは「レンダリングしない(display
)」というプロパティに引き継がれます。これは「表示状態(visibility
)」とは別のものです。「表示状態」が「非表示(hidden
)」のポップアップメニューは,非アクティブであり,必要に応じてオブジェクトを表示(OBJECT SET VISIBLE
)することができます。バイナリモードでの名称は「デフォルトで表示しない」でした。
現在は21
世紀ですが,SET DEFAULT CENTURY
のデフォルト設定は引き続き20
世紀(区切り年30
)となっています。これは仕様です。
日付の Internal date short special 表示フォーマットで21
世紀をデフォルトにしたいのであれば,コマンドに20
を渡す必要があります。20
世紀から21
世紀の日付を扱いたいのであれば,コマンドに19
と区切り年を渡す必要があります。コマンドに渡す値は「世紀」そのものではない点に留意してください。
v16以降,リストボックスを水平方向にリサイズした場合,リサイズ中は継続的に On Display Detail イベントが発生します。これは仕様です。すべての行を表示するためには,水平または垂直のリサイズ中にリストボックスのデータをリフレッシュする必要があります。v15には,垂直方向にリストボックスを拡大するとデータがキャッシュされていない行の内容が表示されないという不具合がありました。
コマンドでメニューを構築した場合,編集メニューのペースト操作でリストボックスのセルにテキストをペーストした直後に On Data Change イベントが発生するかもしれません。メニュー項目には「イベントを発生されない」というプロパティがありますが,コマンドで追加したメニュー項目はデフォルトでこのプロパティが有効にされているためです。
コマンドで構築したメニュー項目には,下記の要領でプロパティを設定することができます。
SET MENU ITEM PROPERTY(menu ; line ; "4D_execute_without_validating"; True)
エンティティセレクションおよびカレントセレクションは,共通のアドレステーブルを使用してレコードを特定するようになっています。レコードが削除されると,空いたアドレスは再利用できるようになり,サイズが足りていれば,そこに新規レコードが保存されます。これは,エンティティセレクション/カレントセレクションを作成した後,その中に含まれるレコードを削除し,続けて新規レコードを保存した場合,エンティティセレクション/カレントセレクションの内容が入れ替わることを意味しています。マルチプロセスで環境でエンティティセレクションまたはカレントセレクションを保持している間に当該テーブルのレコードが他のプロセスに削除される可能性がある場合,この振る舞いを念頭に置いてアプリケーションを設計する必要があります。そのようなテーブルのレコードはすぐに削除するのではなく,削除フラグなどを活用し,メンテナンス業務の一環として整理することを検討できるかもしれません。