4Dでは,日付リテラル(定数)をメソッドエディターに記述することができます。
$日付:=!1920-06-30!
ドキュメントに記述されているように,日付リテラルのフォーマットはv15で改定されました。
-)YYYY-MM-DD00-00-00過去のバージョンでは,区切り文字と年月日の順序はシステムのロケール(地域と言語)設定に左右されました。世界的にみて,もっとも一般的なフォーマットは「日月年」または「月日年」,区切り文字はピリオド(.)またはスラッシュ(/)記号というものです。
メソッドに入力された日付リテラルは,トークナイズされ,内部的に「年・月・日」に分解されて保存されます。システムのロケールが違う環境でメソッドを開いた場合,日付リテラルのフォーマットは自動的に変換されますが,コピー&ペーストをしたり,メソッドのソースコードをテキスト形式でインポートした場合は,別の値になってしまう恐れがあります。
日本のように「年月日」という順序を採用しているロケールはあまり多くありません。また,区切り文字にハイフン記号を使用しているロケールも,スウェーデン語など,ごく少数です。大抵の地域では,日付リテラルの仕様がv15で変更されたことにすぐに気づきましたが,日本の場合,以前の仕様がISOフォーマットに似ているため,変更に気づかなかったかもしれません。
メソッドエディターにピリオド(.)またはスラッシュ(/)区切りで日付リテラルを入力した場合,トークナイズにより,区切り文字が自動的に変換されてハイフン(-)になります。同時に,2桁で入力された年は自動的に4桁に変換されます。
!20/6/30! → !2020-06-30!!20.6.30! → !2020-06-30!SET DEFAULT CENTURYでデフォルト世紀を変更しない限り,29年以前の日付は21世紀,30年以降の日付は20世紀,とみなされます。
両方の区切り文字にハイフン(-)を入力した場合,2桁で入力された年はトークナイズで4桁に変換されません。下記の例では,1世紀の日付を入力したことになります。
!20-6-30! → !20-06-30!当然,この日付で検索を実行した場合,1920年あるいは2020年のレコードはヒットしません。
メソッド日付リテラルを記述する場合,下記いずれかの方法で入力するように注意してください。
.)またはスラッシュ(/)を使用する(4桁に変換されます)-)を使用するのであれば,年を4桁で入力する自動アップデートはSET UPDATE FOLDERに続けてRESTART 4Dを実行することで開始されます。その過程で「アップデーター」アプリが新旧ファイルを入れ替えますが,カレントディレクトリに対するアクセス権限がない場合,一時ファイルの作成とリネームに失敗し,アップデートを完了することができません。たとえば,自動アップデートの直前にLAUNCH EXTERNAL PROCESSを使用した場合は注意が必要です。このコマンドのカレントディレクトリは,特に指定しない場合,アプリケーションのディレクトリとなっており,外部プログラムを起動したまま自動アップデートを開始した場合,そのプロセスがディレクトリを使用しているためにアプリを移動することができなくなるためです。そのような事態を回避するため,SET ENVIRONMENT VARIABLEで_4D_OPTION_CURRENT_DIRECTORY環境変数をセットし,安全なカレントディレクトリで外部プロセスを起動するといった工夫が必要です。
SET ENVIRONMENT VARIABLE("_4D_OPTION_CURRENT_DIRECTORY ";"C:\\")
Windows版の4D Serverは「サービス」登録することができます。デフォルトのサービス名は「4DS アプリ名」です。ACI0100708の修正前は「4DS ストラクチャ名」でした。サービス管理者は,サービス名を変更することができますが,この「4DS 」プリフィックスは4Dサービスのシグネチャであり,省略することができません。これは仕様です。
Excel 2016の「データ > 取得 > ODBCから > 他のソースから > ODBCから」を選択した時に表示されるナビゲーター,あるいは以前のバージョンに付属しているODBCデータ接続ウィザードは,2個以上のテーブルが存在する場合,データソース(4DのSQLサーバー)に対し,SQLのカタログをリクエストするようになっています。しかし,4DのODBCドライバーにはこの処理が実装されていません。これは仕様です。
4DのSQLサーバーに対し,Microsoft社製品(たとえばExcel)からODBCで接続する場合,ナビゲーターやODBCデータ接続ウィザードではなく,MS Queryを使用してください。
PROCESS 4D TAGSは,テンプレートを評価した結果が空の文字列になった場合,テンプレートの出力値,つまり空の文字列ではなく,テンプレートをそのまま返します。これは仕様です。ドキュメントは入力値が「テンプレートに4Dタグが含まれない場合」にテンプレートがそのまま返される,と述べられていますが,「テンプレートが何も出力しない場合」も入力値がそのまま返される条件となります。
例:
$in:="<!--#4dif false-->abc<!--#4dendif-->"
PROCESS 4D TAGS($in;$out)
$outには$inの内容がそのまま返されます。
$in:="<!--#4dif false-->abc<!--#4dendif-->\r"
PROCESS 4D TAGS($in;$out)
$outには"\r"が返されます。
メソッドのSQLパートは,4Dランゲージの実行コンテキストからトランザクションレベルを継承します。たとえば,4Dパートでトランザクションを開始した場合,SQLもトランザクション内で実行されます。SQLパートでエラーが発生し,トランザクションがキャンセル(ロールバック)された場合,4Dランゲージの実行コンテキストもトランザクションが中止されることになります。これは仕様です。
v16以降の64ビット版クイックレポートエディター(QR SET AREA PROPERTYコマンド)は,下記のプロパティをサポートしていません。これは仕様です。
qr view color toolbarqr view column toolbarqr view menubarqr view operators toolbarqr view standard toolbarqr view style toolbar現在,サポートされているプロパティはqr view contextual menusのみ,となっています。
Folderコマンドには,ファイルシステムパス(例:"/PACKAGE")または定数(例:fk database folder)を渡すことができます。コンポーネントからホスト側のパスを取得するには,アスタリスクオプション(*)を指定します。このオプションが使用できるのは,定数でパスを指定した場合だけです。この点は,ドキュメントに明記されています。ファイルシステムとアスタリスクオプションを組み合わせて使用することはできない点に留意してください。
CLEAR VARIABLEは,変数または配列をクリアするコマンドです。インタープリターモードでは,2次元配列の要素もクリアできるかもしれませんが,これは従来の振る舞いを変えないための特別な措置であり,コマンドに2次元配列の要素を渡すことは想定されていない点に留意してください。
コンパイルモードで配列の要素をCLEAR VARIABLEでクリアすることはできません。2次元配列の要素は,変数(配列)とは違います。DELETE FROM ARRAYを使用してください。