ツールボックスのメニューエディターには「イベントを発生させない」というプロパティが存在します。このイベントとはOn Data Change
のことです。
編集メニューの「ペースト」標準アクションに「イベントを発生させない」プロパティが設定されていない場合,アプリケーションモードでは,ペーストの直前にOn Data Change
イベントが発生します。
これは,通常のタイミング(入力を確定した時点)よりも早く,値が変更される前のことなので,奇妙に感じるかもしれません。編集メニューの標準アクションは,原則的に「イベントを発生させない」設定にしたほうが良いでしょう。これには「取り消し」「やり直し」「カット」「ペースト」アクションが含まれます。
ビルド253159
(18r4)以降,プロジェクトメソッド呼び出しのトークナイズが変更されています。メソッド名とカッコ((
)の間にスペースは挿入されなくなりました。たとえば「デザインモード検索」を実行する場合,新しいトークナイズをサーチフレーズに入力する必要があります。
ビルド252873
(18r5)以降,コメント文のトークナイズが変更されています。シングルラインコメント(//
)の前に2
個のスペースは挿入されなくなりました。METHOD GET CODE
で取得したメソッドのメタ情報(//%attributes...
)も同じように「スペース無し」で返されます。
4Dでは,日付リテラル(定数)をメソッドエディターに記述することができます。
$日付:=!1920-06-30!
ドキュメントに記述されているように,日付リテラルのフォーマットはv15で改定されました。
-
)YYYY-MM-DD
00-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ランゲージの実行コンテキストもトランザクションが中止されることになります。これは仕様です。