クイックレポートの出力エンコーデイング
| 日付 | 2010/06/25 |
|---|---|
| ID | 76112 (英語原文参照) |
| バージョン | v11 |
| プラットフォーム | Mac/Win |
4D v11 SQLの外部出力エンコーデイングは, 原則的にすべてUTF-8です。しかし, 一部のアプリケーションは, UTF-8をインポートすることができないため, 他のエンコーディングでデータを出力する必要があります。たとえば, Mac版のMicrosoft ExcelやWordがインポートできるのは, UTF-8ではなくMacRoman/MacJapaneseエンコーディングのテキストファイルです。
ほとんどのインポート・エクスポートコマンドは, USE CHARACTER SETコマンドでエンコーディングを指定できますが, クイックレポートはこのコマンドの対象ではありません。そこでいったんレポート文書を作成した後, Convert to textおよびCONVERT FROM TEXTコマンドでこれを目的のエンコーデイングに修正するなどの処置が必要です。
たとえば, フォームを作成し, そこにクリックレポートエディタを配置して, フォームイベントに次のようなコードを記述します。
Case of
:(Form event=On load)
C_BLOB($doc)
C_LONGINT(MyArea)
QR ON COMMAND(MyArea;"runcommand")
DOCUMENT TO BLOB("quick_report_document.4qr";$doc)
QR BLOB TO REPORT(MyArea;$doc)
End case
これによりクリックレポートエリアで何らかのコマンドが発行されるたびにプロジェクトメソッドruncommandが実行されるようになります。今回, オーバーライドする必要があるのは「出力」コマンドだけです。runcommandに下記のようなコードを記述することにより, クリックレポートエリアより出力されるレポートのエンコーディングをUTF-8から変換することができます。
C_LONGINT($1;$2) If ($2=qr cmd generate ) C_BLOB($myblob) C_TEXT($path;$text) QR EXECUTE COMMAND($1;$2) QR GET DESTINATION($1;$type;$path) DOCUMENT TO BLOB($path;$myblob) $text:=Convert to text($myblob;"UTF-8") CONVERT FROM TEXT($text;"MacRoman";$myblob) BLOB TO DOCUMENT($path;$myblob) Else QR EXECUTE COMMAND($1;$2) End if