Tips

クイックレポートの出力エンコーデイング

日付2010/06/25
ID76112 (英語原文参照)
バージョン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