クイックレポートは64ビットで完全に再作成され、継続的に新しい機能が統合されています。前回のRリリースのUI(ユーザーインターフェイス)の改良に加えて、4D v17 R6はスタンドアロンレポート中のイベントを捉える機能と、小計スペースを管理する機能を追加しました。
QR REPORT コマンドに”methodName”パラメータを設定できるようになりました。このメソッドは管理されたイベントごとに起動するコールバックです:
以下はコールのサンプルです:
QR REPORT([My Table];Char(1);"qrCallbackMethod")
コールバックメソッドでは、管理されたイベントすべてを途中でやめて、やるべきことをやり、QR EXECUTE REPORT コマンドでイベントを実行できます。
下記はコールバックメソッドのサンプルで、文書を生成する前にフッターに現在のタイムスタンプを設定し、プレビューイベントにフィルターをかけます:
C_LONGINT($1;$2)
C_LONGINT($zone;$event)
$zone:=$1
$event:=$2
Case of
: ($event=qr cmd generate)
QR SET HEADER AND FOOTER($zone;2;"";Timestamp;"";100)
QR EXECUTE COMMAND($zone;$event)
: ($event=qr cmd print preview)
Else
QR EXECUTE COMMAND($zone;$event)
End case
それぞれのブレイク(小計)に対して、ページブレークあるいは異なる行高を設定できるようになりました。異なる行高の場合、違いはポイント(pt)とパーセンテージ(%)で表示できます。
既存のコマンドが改良され,さらに便利になりました。フォームオブジェクトのカラーは,数値だけでなく,直感的なCSS文字列でも指定することができます。従来のような4バイトの倍長整数(0x00RRGGBB)では,すぐに色がイメージできなかったかもしれません。255(0xFF)とではなく,単純に”blue”と記述できれば良いのに,と感じていたデベロッパーには朗報です。17r6では,CSS文字列がサポートされるようになりました!
CSS文字列がサポートされるようになったコマンドは,OBJECT SET RGB COLORS, LISTBOX SET ROW COLOR, LISTBOX SET GRID COLOR です。
コマンドの改良により,下記の要領でオブジェクトの色指定ができるようになりました。
$color:="blue"
$color:="#0000FF" // または #FF
$color:="RGB(0,0,255)"
OBJECT SET RGB COLORS コマンドには,前景色と背景色がそれぞれ文字列で渡せるようになりました。コードを記述するのが簡単になるだけでなく,可読性も向上します。
OBJECT SET RGB COLORS(*;"text";"red";"Yellow")
// 従来の表記 OBJECT SET RGB COLORS(*;"text";0xFF0000;0xFFFF00)
それだけではありません。OBJECT GET RGB COLORS コマンドからも文字列でCSSカラーが返されるようになりました。
C_TEXT($front;$back)
OBJECT GET RGB COLORS(*;"rectangle";$front;$back)
ALERT($front+"/"+$back) // #0000FF/#90EE90 が返される
リストボックスのコマンドも同じように改良されていますが,注意点があります。LISTBOX SET ROW COLOR にCSS文字列が渡された場合,リストボックスや列のカラーを制御するための配列には,数値に変換された値が代入されることに留意してください。
サポートされているCSSカラーネームの一覧はドキュメントに掲載されています。
早速,HDIをダウンロードして,改良コマンドを試してみるのはいかがでしょうか。
SQLでログインする場合,On SQL Authentication
データベースメソッドでCHANGE CURRENT USER
コマンドを実行し,SQLセッションのアクセス権を明示的に付与することが必要です(データベースメソッドが存在する場合)。
v11では,SQLの実行コンテキスト(たとえばトリガ)でCurrent user
を使用することができませんでした。返されるのは,直近のOn SQL Authentication
データベースメソッドで付与されたユーザー名であり,カレントSQLセッションのユーザー名であるとは限らなかったからです。SQLセッションはOn SQL Authentication
データベースメソッドで付与されたアクセス権で実行されていますが,そのアクセス権をCurrent user
で取得できるとは限りません。
v12以降,SQLの実行コンテキストでCurrent user
を使用した場合,SQLセッションのアクセス権がそのまま返されるようになりました。ただし,SQLの実行コンテキスト(たとえばトリガ)でCHANGE CURRENT USER
コマンドを実行した場合,4Dのカレントユーザーが変更され,Current user
とSQLセッションのアクセス権が一致しないことになります。いずれにしても,On SQL Authentication
データベースメソッドでSQLセッションに付与されたアクセス権は,ログアウトするまで有効であり,途中,CHANGE CURRENT USER
コマンドに影響されることはありません。
Courierは,定番のクロスプラットフォーム等幅フォントですが,Windows版はビットマップフォントであることに注意する必要があります。Mac版であれば,Courierフォントが設定されたフォームオブジェクトを印刷することができますが,Windows版は,印刷にDirect2Dが使用されているため,別のフォントが出力されることになります。これは仕様です。
フォームエディターで「透過」プロパティが有効にされている場合,OBJECT SET RGB COLORS
で背景色が指定されたとしても,オブジェクトの背景は塗りつぶされません。背景色にはBackground color none
という定数がありますが,これは「透過」プロパティが有効にされていない場合にだけ使用できる値です。
一方,プロジェクトモードでは,フォームエディターの「透過」プロパティはエクスポートされず,背景色だけがエクスポートされます。したがって,フォームエディターで「透過」プロパティが有効にされているオブジェクトの背景色をプロジェクトモードで再現するためには,OBJECT SET RGB COLORS
で背景色をBackground color none
に指定する必要があります。これは仕様です。
なお,17r5では,OBJECT SET RGB COLORS
が改良され,背景色の指定を省略したり,前景色には触れずに背景色だけを変更できるようになりました(空の文字列を指定)。
ON ERROR CALL
でエラー処理メソッドを宣言する場合,戻り値のないメソッドを指定するようにしてください。エラー処理メソッドが$0
を宣言している場合,コンパイルモードでランタイムエラー-20002
(存在しないパラメーターに対するアクセス)が返されることになります。これは仕様です。