プロジェクトモードでは,同一マシンで起動したクライアントをサーバーに接続することにより,デザインモードでプロジェクトを編集することができます。つまり,ローカルクライアントの場合,自動的に開発モードが有効化されます。
サーバーは,起動時にprojectToken.json ファイルを作成します。このファイルには,マシンを特定するためのUUIDとフルパスが書き込まれています。
クライアントは,サーバーから送信されたUUIDとprojectToken.json ファイルのUUIDを比較し,合致すれば,ローカルクライアントであると判断します。ローカルクライアントは,クライアントキャッシュを使用せず,projectToken.json ファイルで指定されたプロジェクトのファイルを開きます。
アクセス権の問題等でprojectToken.json ファイルが開けない場合,サーバーと同一マシンからのアクセスであってもリモートクライアントと判定され,デザインモードのエディターがすべてリードオンリーになるかもしれません。そのような場合,サーバー停止中にprojectToken.json を削除し,次回の起動でファイルが再作成されていることを確認した上で,再度アクセスしてみてください。
メソッド名・フォーム名・その他のプロジェクト要素は,カレント言語に対応するICU(International Components for Unicode)のコレーションで比較されますが,変数名は常に英語のコレーションで比較されます。
トルコ語などの「i」は,ラテン文字の「i」「I」と同じ文字ですが,大文字と小文字および点の有無で「ı」「i」「I」「İ」を区別するため,カレント言語で比較した場合,言語によって等価になったりならなかったりする恐れがあります。チェコ語・リトアニア語・エストニア語の環境でも同じような問題が起こり得ます。誤動作を避けるため,変数名はカレント言語が何であれ,英語で比較されます。つまり,大文字と小文字を区別せず,アクセント記号をすべて無視します。これは仕様です。
公開コンポーネントなど,さまざまなシステム環境で運用されるようなプログラムを開発する場合,濁点半濁点・長音記号・半角カナなど,カレント言語に影響されるような文字を変数名には使用しないことが推奨されています。
Mac/Linuxでは,開いているファイルをそのまま削除したり移動したりすることができますが,Windowsでは,まずファイルを閉じなければなりません。4D.File
オブジェクトに対する4D.FileHandle
をインスタンス化している場合,4D.FileHandle
の参照が代入されたローカル変数にNull
を代入する必要があります。Null
を代入してもファイルハンドルが,すぐには解放されず,メソッドを終了するまでファイルを動かせないようであれば,別のローカル変数が同じ4D.FileHandle
を参照していることが原因です。
$f:=$file.open()
...
$f2:=$f // 参照を別のローカル変数に代入
...
$f:=Null // この時点でファイルハンドルは解放されない。$f2にNullを代入するかメソッドを終了する必要がある
起動時に「Profile error occurred」というエラーが表示される場合,CEF(Chrome Embedded Framework)のキャッシュファイルを一旦すべて削除してください。
CEFのキャッシュフォルダーは下記の場所に作成されています。
複数の4Dを同時に起動したことがあれば,CEF_cache
CEF_cache_1
CEF_cache_2
…と番号が付されているかもしれません。
クライアントから4D Serverに接続するとき,4D.HTTPRequest
でHTTPリクエストを送信するとき,あるいはOpen datastore
でリモートデータストアに接続するとき,4Dはドメイン名を解決するためにDNSを使用します。
v20以前のバージョンでは,デバイスにIPv4とIPv6のネットワークインタフェースが存在する場合,DNSから返されたIPv6のサーバーが利用できないと通信エラーが返されました。障害が頻繁に発生するようであれば,オペレーティングシステムの設定でIPv6を無効化したほうが良いかもしれません。
20r5では,IPv4とIPv6の両方でDNSリクエストが送信されるよう,ネットワークレイヤーが改良されました。いずれかのアドレスが利用できれば,通信エラーにはならないので,安心してIPv6を有効化することができます。
4D.HTTPRequest
クラスは,コマンドのHTTP Get
HTTP Request
よりも高機能です。たとえば,serverAuthentication
およびproxyAuthentication
というオプションプロパティがサポートされています。
これはサーバーのTLS証明書を検証するというもので,使用した場合,Node.jsでrejectUnauthorized
を使用した場合と同じようにサーバーから送信されるCA署名証明書を検証できないサーバーにはHTTPSで接続しないようになります。
コマンドのHTTP SET OPTION
にこのオプションはありません。