符号付き整数型のオーバーフローは未定義の動作です。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
など)が代入されます。
17r3では,WP Create range
にドキュメントを渡した場合の振る舞いが調整され,仕様が明確になりました。
本文をクリックしてからコマンドを実行した場合(WP Get frame
がwk body
を返す状態),WP Create range
にドキュメントを渡したときに返されるレンジは,本文に対して相対的でした。
ヘッダーをクリックしてからコマンドを実行した場合(WP Get frame
がwk current section default header
を返す状態),WP Create range
にドキュメントを渡したときに返されるレンジは,ヘッダーに対して相対的でした。
WP Create range
にドキュメントを渡したときに返されるレンジは,フレームに関係なく,本文に対して相対的です。
ポイント: コマンドの振る舞いは,Write Proドキュメントがオフスクリーンであるかどうかに左右されず,一貫している必要があります。ヘッダーやフッターがフォーカスされている場合にレンジの基準が変動する以前の動作は,この原則に沿っていませんでした。
ヘッダーに対して相対的なレンジを取得することが目的であれば,ヘッダーをクリックしてカレントフレームを移動するのではなく,ヘッダーをコマンドに渡してください。
注記: 17r5でコマンドの名称はWP Text range
に変更されています。
Windows 64ビット版は,ダブルクリックするだけで,アプリケーションのインスタンスがいくつでも起動できるようになりました。この改良により,マルチクライアントまたはマルチテナントを想定したビジネスアプリケーションであれば,同一のマシン上で複数のクライアントアプリケーションを起動し,それぞれ別のユーザーアカウントで同一のサーバーに接続する,といったことが容易になりました。
17r4以前のバージョンでは,同一のマシン上で複数のクライアントを起動し,同一のサーバーに接続するためには,ClientLocal
という名称のフォルダー(ローカルリソースのキャッシュフォルダー)をそれぞれのクライアントをアプリケーションと同じフォルダーに作成する必要がありました。標準のキャッシュフォルダーは,サーバーの公開名・アドレス・ポート番号が同じであれば,同じものが使用されるためです。
ローカルリソースのキャッシュフォルダー(17r4)
\AppData\Local\{ApplicationName}\{DBName}_{ServerIP}_{ServerPort}
17r5以降,ローカルリソースのキャッシュフォルダーパスには,クライアントアプリケーションのフルパスから計算されたハッシュ値(10
進数3
桁)が追加され,コリジョンが検出された場合には,利用できるディレクトリがみつかるまで,自動的に値をインクリメントされるようになっています。使用中のキャッシュフォルダーには,inuse.txt
およびuuid.txt
というテキストファイルが作成されます。前者には,アプリケーションのプロセス番号(pid
)とアプリケーションのフルパスが改行コード(\n
)で区切られて書き込まれています。後者には,クライアントのUUID
が書き込まれています。
17r5以降,ClientLocal
という名称のフォルダーを作成する必要はありません。
ローカルリソースのキャッシュフォルダー(17r5)
\AppData\Local\{ApplicationName}\{DBName}_{ServerIP}_{ServerPort}_{hash}
注記: キャッシュフォルダーのパスは,Get 4D folder(4D Client database folder)
で取得することができます。
ビルドされたアプリケーションは,デフォルトの設定で複数インスタンスの起動が禁止されています。具体的には,info.plist
ファイルに下記のキーが書き込まれています。
<key>SingleInstance</key>
<string>0</string>
このキーは,BUILD APPLICATION
で指定するプロジェクトのキーで設定することができます。
<Preferences4D>
<BuildApp>
<CS>
<ClientWinSingleInstance>False</ClientWinSingleInstance>
</CS>
</BuildApp>
</Preferences4D>
このキーは,Windows版のビルドされたクライアントアプリケーションで有効です。Windows版のビルドされたスタンドアロンアプリケーションは,常に複数インスタンスの起動が禁止されています。
注記: Macでは,コマンドラインからopen -n
と命令することにより,同一アプリケーションのインスタンスを起動することができます。
17r4以降,Mac版のボーダーハイライトが17.xよりも「太く」表現されるようになりました。これはシステムの表示に合わせるための意図的な変更であり,仕様です。
17.x
17r4
4D for iOSは,標準的なXcodeプロジェクトを出力し,ネイティブiOSアプリをビルドするツールです。17r4に組み込まれている4D for iOSは,ABI安定化前のSwiftを使用しているため,XcodeおよびiOSのバージョンが17r4開発当時のもの(Xcode 10.1)でなければアプリをビルドしたり,デバイスで動かしたりすることができません。これは仕様です。
Xcode | Swift | iOS | 4D |
---|---|---|---|
10.2 | 5 | 12 | 17r5 |
10.1 | 4.2.1 | 12 | 17r4 |
10.0 | 4.2 | 12 | 17r3 |
9.4.1 | 4.1.2 | 11.4 | 17r2 |
17r4の4D for iOSを使用するのであれば,Xcode 10.1の環境を用意し,アップデートは控えるようにしてください。
注記: デバイスをiOS 12.2にアップデートすると,Xcode 10.1ではデバッグができなってしまいますので,テストに使用するデバイスのアップデートも控えたほうが良いかもしれません。
すでにアップデートしてしまった場合, Appleから過去のXcodeをダウンロードすることができます。
17r5には,Xcode 10.2およびSwift 5に対応した4D for iOSが組み込まれています。最新版のXcodeを使用するのであれば,17r5(ベータ版)の4D for iOSをご検討ください。
なお,4D for iOSは,単独でダウンロードすることもできます。
17r5のexport structure file
コマンドでフォームをエクスポートした場合,フォームの名前がそのままフォルダーの名前として使用されます。ファイルシステムで許可されていない名前がつけられたフォームは,必然的にエラーが返されることになります。
プロジェクトモードでは,識別子がファイルパスの一部になりますので,フォーム・オブジェクト・メソッドの名前に :
\
/
.
といった文字を使用することは控えてください。バージョン管理システムとの連携を考え,POSIXパスのフォルダー区切り文字も避けたほうが無難です。なお,テーブルは,名前ではなく,番号がフォルダー名に使用されるので,問題にはなりません。
忘れがちな点として,Windowsでは,歴史的な経緯により,フォルダー名に使用できない識別子があります。
IN
OUT
CON
PRN
AUX
NUL
COM1
COM2
COM3
COM4
COM5
COM6
COM7
COM8
COM9
LPT1
LPT2
LPT3
LPT4
LPT5
LPT6
LPT7
LPT8
LPT9
Windows版でMDIウィンドウの閉じるボタンをクリックしたり,Alt
+F4
を入力したり,タイトルバーの左端にあるウィンドウメニューの「閉じる」アクションを実行したりしても,アプリケーションが終了しない場合,アプリケーション「終了」アクションがきちんと設定されているか,確認してください。
「終了」アクションが実行されるためには,「終了」標準アクションが設定された項目がメニューに存在しなければなりません。「終了」メニューを設定することにより,Windows版でMDIウィンドウの「閉じる」ボタンがこのメニュー項目に関連付けられます。Mac版では,アプリケーションメニューに「…を終了」という項目が追加され,代わりに本来の項目がメニューから取り除かれます。
このメニュー項目にプロジェクトメソッドが設定されていない場合,項目を選択すると,自動的に確認ダイアログが表示され,終了することに同意すると,アプリケーションの終了プロセスが始まります。
このメニュー項目にプロジェクトメソッドが設定されている場合,項目を選択すると,確認ダイアログは省略され,すぐにアプリケーションの終了プロセスが始まります。
「終了」標準アクションが設定された項目がメニューに存在しない場合,MDIウィンドウの「閉じる」ボタンをクリックしても何も起きません。
ヘルプTipsが表示されているときにOBJECT SET HELP TIP
を使用した場合,表示中のヘルプは取り消され,新しい内容のヘルプが表示されます。これは仕様です。設定したメッセージが以前と同じものであったとしても,この点は変わりません。マウスポインターの移動中にコマンドを実行すると,ヘルプTipsが絶えず点滅し,ユーザーに不快な印象を与えるかもしれませんので,注意が必要です。