ネットワーク上で同じ公開名のサーバーアプリケーションが動いている場合,デザインモードの「アプリケーションビルド」画面で設定したプロジェクトでビルドされたクライアントアプリケーションは,自動アップグレード後に別のサーバーアプリケーションに接続してしまうかもしれません。これは仕様です。
ビルドプロジェクトには,サーバーのアドレスIPAddress
を含めることができますが,デザインモードの「アプリケーションビルド」画面には,これを入力する場所がないため,この値は空となります。
サーバーのアドレスが設定されていない場合,クライアントアプリケーションは,ネットワークにブロードキャストされている公開名でサーバーを探すため,ネットワーク上で同じ公開名のサーバーアプリケーションが動いている場合,別のサーバーアプリケーションに接続してしまう可能性があります。これが問題になるようであれば,ビルドプロジェクトにサーバーのアドレスを含めるようにしてください。
スプレッドシートを.pdf
形式でエクスポートした場合,フォントが変わってしまうことがあります。これは仕様です。VP EXPORT DOCUMENT
はSpreadJSの標準モジュールを使用してドキュメントをPDFに変換します。バージョン12でサポートされているのは,下記14種類のフォントです。
フォントファミリー | フォント |
---|---|
Courier | Courier |
Courier-Bold | |
Courier-Oblique | |
Courier-BoldOblique | |
Times | Times-Roman |
Times-Bold | |
Times-Italic | |
Times-BoldItalic | |
Helvetica | Helvetica |
Helvetica-Bold | |
Helvetica-Oblique | |
Helvetica-BoldOblique | |
Symbol | Symbol |
ZapfDingbats | ZapfDingbats |
コレクション型のリストボックスは,要素がオブジェクト型ではなくスカラー値(テキスト・数値・ブールなど)だった場合,This.value
という特殊な表記で値を表示することができます。This.value
は値のコピーであるため,新しい値を代入しても,元のコレクション要素を更新することにはなりません。これは仕様です。リストボックスに表示されたコレクションの要素を更新するのであれば,スカラー値ではなく,オブジェクト型のコレクションを使用してください。
Macプラットフォームでは「システム環境設定 > キーボード > ショートカット」でシステム全体またはアプリケーション毎のカスタムキーボードショートカットを設定することができます。
システム環境設定で追加したショートカットは,項目名が合致する4Dのメニューに関連付けられます。4Dの場合,32ビット版では,アプリケーションが最前面であればカスタムキーボードショートカットが入力できますが,64ビット版では,メニューをクリックした後でなければ,カスタムキーボードショートカットが入力できません。これは仕様です。
回避策: カスタムキーボードショートカット設定は,下記のファイルに登録されています。この設定を優先したいのであれば,ファイルを参照し,必要に応じて4D側のキーボードショートカット設定を調整してください( SET MENU ITEM SHORTCUT
)。
~/Library/Preferences/com.myapp.*
17r6では,メソッドのコールスタック(呼び出し連鎖)を取得するためのコマンドが追加されたことに伴い,コンパイルモードの内部ランタイムバージョンがインクリメントされました。17r6でコンパイルしたコードは,新コマンドを使用していなかったとしても,17.xや17r5で実行することができません(「再コンパイルが必要」というエラーメッセージが表示されます)。17r5以前でコンパイルしたコードを17r6で実行することは問題ありません。
オブジェクト型のプロパティには,テキスト型あるいは日付型で日付がセットできるので,v17では,Date
のシンタックスが緩和され,テキスト型の代わりに日付型が渡されても,シンタックスエラー(59
)が返されないようになりました。
符号付き整数型のオーバーフローは未定義の動作です。MAXLONG*2
MAXLONG*3
1.234567898765e+23
のような実数値を整数型のフィールドや変数に代入した場合の結果は, WindowsとmacOSでは違うかもしれません。これは仕様です。
パラメーターが宣言されているメソッドの引数が省略された場合,そのパラメーター($1
など)は「未定義」となります。v16では,変数やフィールドに「未定義」を代入しようとすると,エラーが返されました。v17以降,「未定義」を変数やフィールドに代入してもエラーは返されません。これは仕様です。
オブジェクト型のプロパティは,変数やフィールドとは違い,型が決まっていません。値またはNull
が代入されていないプロパティは,省略されたパラメーターと同じように「未定義」です。
オブジェクト記法を使用すれば,プロパティのプロパティにアクセスするコードがずっとシンプルで直感的になるだけでなく,実行速度も大幅に向上させることができます。しかし,プロパティのプロパティにアクセスするコードが成立するためには,上位のプロパティが「未定義」でなければなりません。
深い階層のプロパティに1行でアクセスするために,ひとつずつプロパティをチェックしなければならないとすれば,それは本末転倒であり,オブジェクト記法を使用するメリットがありません。それで,v17以降,「未定義」の参照と代入に関する仕様が変更され,より柔軟に「未定義」を扱うことができるようになりました。オブジェクトのプロパティだけでなく,省略されたパラメーターにも影響が及びます。
https://blog.4d.com/object-notation-improvement-after-customer-feedback/
v16r4まで
エラーが返されました。
v17から
オブジェクト記法で参照したプロパティが「未定義」だった場合,式は「未定義」を返し,以降のコードは無視されます。つまり,途中のプロパティをすべてチェックする必要がなくなりました。
v16まで
パラメーター($1
など)は「未定義」でした。
v17から
パラメーター($1
など)には,型のデフォルト値(0
など)が代入されます。
注記: コマンドに「未定義」を渡すことはできません。引数が「未定義」になる可能性があるのであれば,String
Num
Date
Time
Bool
を使用することができます。v17以降,「未定義」は型のデフォルト値に変換されるからです。
If
Case of
など)の式が「未定義」v16まで
エラーが返されました。
v17から
False
条件として扱われます。
:=
)の右オペランドが「未定義」v16まで
値を返さないメソッド($0
なし)や未定義のプロパティ($o.undefined
)を変数やフィールドに代入するようなコードは何もしませんでした。つまり,値は元のままでした。
v17から
値を返さないメソッド($0
なし)や未定義のプロパティ($o.undefined
)を変数やフィールドに代入した場合,左オペランドには型のデフォルト値(0
など)が代入されます。