DELETE RECORD
とDELETE SELECTION
では,レコードロックの仕組みが異なるため,トリガの振る舞いに違いが存在します。後者の場合,複数のレコードがロックされている可能性があるため,LockedSet
システムセットに削除できなかったレコードの情報が記録され,レコード毎にエラー処理メソッドが実行されることはありません。これは仕様です(v2004以降)。v2003では,削除できなかった最初のレコードでON ERR CALL
メソッドが実行され,DELETE SELECTION
の処理は中止され,以降のレコードすべてがLockedSet
システムセットに追加されました。現行バージョンでは,レコードが削除できなかった場合,ON ERR CALL
メソッドは実行されず,LockedSet
システムセットが更新されるだけで,DELETE SELECTION
の処理は継続されます。これにはトリガで削除が防止されたレコードも含まれます。
下記の記述(「コマンドの実行は即座に停止し・・・」)はv2003の振る舞いを説明しています。
レコードのセレクションで動作しているコマンドのフレームワーク内のトリガーによってエラーが生成されると (DELETE SELECTIONのような) ,コマンドの実行は即座に停止し,セレクションは必ずしも完全に処理されません。この場合は,デベロッパーによる適切な処理が必要となります。例えばセレクションを一時的に保存したり,トリガーの実行前にエラーを取り除くなどの処理が必要です。
https://doc.4d.com/4Dv15/4D/15.6/Triggers.300-3817569.ja.html
現バージョンの振る舞いは下記のとおりです。
レコードのセレクションで動作しているコマンドのフレームワーク内のトリガーによってエラーが生成されると (DELETE SELECTION,APPLY TO SELECTION,ARRAY TO SELECTIONなど)レコードは処理されず,自動的にLockedSet に登録されます(セット 参照)。コマンドは終わりまで実行が続けられ,このときエラーはキャッチされません。つまりエラーハンドリングメソッドは(あったとしても)呼び出されません。このコンテキストにおいて,エラーが生成されたかどうかを確認するためには,コマンドの呼び出しの直後にLockedSet をテストする必要があります。また,トリガでは,エラーをあとで適切に管理するためには,エラーコードを例えばコレクションなどに保存する必要があります。
https://doc.4d.com/4Dv18R6/4D/18-R6/Triggers.300-5199080.ja.html
Mac版の「名前を付けて保存」ダイアログでは,キーボードショートカットの編集メニュー(コピー・カット・ペースト)が使用できません。これは仕様です。4Dのメニューは,独自のコードを実行するようにカスタマイズされているため,Cocoaの標準アクションと互換性がありません。ファイル名のコピー&ペーストには,コンテキストメニューを使用してください。
Webエリアがページを読み込んでいる間にフォームを閉じたり,フォームのページを切り替えたりすることがないようにしてください。Windowsの場合,タイミング次第ではアプリケーションがクラッシュするかもしれません。WebエリアでURLを開いた場合,On End URL Loading
イベントが発生するまでウィンドウが閉じられることがないように対策を講じる必要があります。
Windows版のマルチスタイルテキストのコンテキストメニューでフォントサイズ(たとえば15
)を選択した場合,ソースコードのHTMLには別の数値(たとえば20pt
)が挿入されます。これは仕様です。 Macでは,フォームのフォントサイズとspan
に書き込まれるフォントサイズの値が一致しますが,Windowsでは72/96
倍の値になります。span
には,4Dのフォントサイズではなく,システムのフォントサイズが記録されるようになっているためです。
フォームのDPIは,プラットフォームに関係なく72
です。フォームエディター等でフォントサイズを20
(つまり20px
)に設定した場合,システムのDPIが72
であるMacでは20pt
のテキストが表示されますが,システムのDPIが96
であるWindowsでは15pt
のテキストが表示されます。マルチスタイルテキストのソースコードには,システムのフォントサイズ(Windowsであれば15pt
)が記録されることになります。
v12でマルチスタイルテキストが追加されたとき,ソースコードにシステムのフォントサイズを記録することにしたのは,明らかに悪い決定でした。クロスプラットフォームの振る舞いではないからです。しかし,過去のバージョンで作成されたアプリケーションに配慮し,現在も上述したような仕様となっています。
Googleのブログで説明されているように,組み込みレンダリングエンジンにブラウザの操作を模倣させてGoogleサービスにログインすることはできなくなりました。Googleユーザー認証には,実際のブラウザを使用するか,OAuth 2.0の手順を踏む必要があります。WebエリアでGmailなどのサービスにログインを試みた場合,「このブラウザまたはアプリケーションは安全ではない可能性があります」というエラーメッセージが表示され,先に進むことができません。これは仕様です。
Write Proエリアのツールバーウィジェット(WP_Toolbar
)は,内部的にOBJECT Get pointer
でサブフォームコンテナのバインド変数を参照しているため,サブフォームのデータソースに変数ではなくオブジェクトのプロパティ(例:Form.wp
)が設定されている場合,ポインターの逆参照に失敗し,初期化を正常に完了することができません。Write Proエリアには,変数(例:wpArea
)を使用する必要があります。これは仕様です。