【T5】Delphi/C++テクニカルセッション「リモートクライアントから帳票出力
FastReportサーバーアプリ実装法」
株式会社ドリームハイブ
代表取締役 山本 悟

自己紹介
名前：山本 悟 (やまもと さとる)
• 代表取締役 & ITコンサルタント

会社：株式会社 ドリームハイブ
••
••

会社URL
山本のブログ
facebook
twitter：http://www.dreamhive.co.jp/：http://blog.dreamhive.co.jp/yama/：http://www.facebook.com/kryu2：https://twitter.com/kryu2

山本はこんな感じの人：••••

17歳からIT業界へ
Delphi は1.0からの親友
テレビ埼玉に出たり、リクルート系雑誌に載ったり
ドリームハイブの経営、ITコンサルティング、システム開発、スピーカーなどが今の主な仕事

2

アジェンダ
1.
2.
3.
4.
5.
6.
7.
8.

はじめに
各対応状況
RAD StudioのWeb対応技術
構成例
デモ
注意点
参考まとめ

 このセッションは、テクニカル・セッションです Delphi/C++ Builder製のWebアプリケーションの構築方法について、私の主観と経験に基づいてお話しいたします あなたにとって最適解では無いかもしれませんが、参考になると思います3

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

はじめにモバイルが普及したことによるビジネススタイルの変化と共に、「帳票類の電子化」も当たり前のように行われるようになってきました。 帳票の電子化とは？モバイルからどのように利用するの？などの解決策について、FastReportを利用したデモを交えて実装方法を解説します！

モバイルに対応するには？
ネイティブアプリを作成する• メリット• アプリが動くデバイスの機能をほぼ全て使うことができる• デメリット• 各デバイスごとにアプリ開発をする必要があり、多くの場合データ保存などで互換性が無いWebアプリを作成する• メリット• 全てのモバイル・スマートフォンでWebブラウザが利用できるので、開発の手間が少ない• イントラネットなどの特定ドメイン内での展開が簡単• デメリット• ネイティブアプリに比べて機能制限があり、動作速度が低下する

帳票を使うには？
ネイティブアプリ• 各OSのもつ表示用コントロールを使うのが基本• メリット•リッチな表現(スクロール、グラフ、3Dなど)ができる• デメリット•

各デバイスごとにアプリ開発をする必要がある

Webアプリ• HTMLやPDFなど、アプリ側が対応できる形式で作成する• メリット••

全てのモバイル・スマートフォンでWebブラウザが利用できるので、開発の手間が少ないイントラネットなどの特定ドメイン内での展開が簡単• デメリット•

ネイティブアプリに比べて機能制限があり、動作速度が低下する

実際のところは？
ビジネス系アプリケーションの多くで、サーバー上で作成した画像やPDFを、独自アプリかブラウザーアプリで表示するパターンが多い。
あなた

スマホアプリ
見積もりの条件

見積書

♡お客さん

サーバーアプリインターネット
メール
生成された見積書

DBRAD StudioのWeb対応技術
WebBroker• URIに関連づけたイベントハンドラを作成できる、イベント駆動型Webサーバーアプリケー
ション作成用フレームワーク• Web Application• Web Module

IntraWeb(VCL for Web)• RADスタイルでWebサーバーアプリケーションを作成できるGUIフレームワーク• Atozed社が提供しているDataSnap• JSON/REST形式のWebサーバーアプリケーションを作成できるフレームワーク

構成例「WebBrokerによるWebサーバーアプリケーション」
DataModule

WebBroker
Webブラウザー
リクエスト

TWebModule
TWebRequest

FireDAC

Actions
PathInfo URL

レスポンス TWebResponse
Content<html>〜</html>
 TWebFileDispatcher
 TPageProducer/

http://〜//foo

http://〜/foo/bar

http://〜/bar

FastReportDB構成例「IntraWebによるWebサーバーアプリケーション」
IntraWeb
Webブラウザー
リクエスト

レスポンス

TIWAppForm

DataModule
FireDACIW Controlなど•

TIWUserSession

•••
•
•
•

TIWButton
TIWListTIWImage
TIWEdit
TIWFile…

TIWUserSession

FastReportDB構成例「DataSnapサーバー／クライアントアプリケーション」

DataSnapクライアント
UI

BL

リクエスト

レスポンス
PC/Mac/iOS/Android

DataSnapサーバー

DataModule

サーバーメソッド

FireDAC••••

MyMethod1
MyMethod2
MyMethod3…

FastReport

DB本日のデモは・・••••

DBデータを流し込んだPDF作ります
IntraWebでサーバーを作成します
クライアントはブラウザーです
今回はゴルフコンペの結果表示を題材にします帳票は、FastReportで作成する
FastReportとは•

UNICODEをサポートし、バイナリへの埋め込みが可能な多機能レポーティングソリューション

主な特徴
••
•
•
•
•
•
•
•
•
•
•
•
•

CodeGear RAD Studio 2009〜Embarcadero RAD Studio 10 Seattle (Delphi / C++Builder)をサポート
UNICODEをサポート
競合製品に比べて安め
Delphiの実行用バイナリにライブラリごと埋め込むことが可能
埋め込みでも外部ファイル参照でもデザインしたレポートを利用可能
バンドによるレポート構成なので、Quick ReportやRave Reportから移行しやすい
縦型バンドもあります
テキスト、画像、線・図形はもちろん、チャート、バーコード、クロステーブル、OLEオブジェクト、リッチテキスト、などが使用可能
ランタイムデザイナを搭載、しかもロイヤリティフリー
レポート内にデータセット(ADO, BDE, DBX, IBX, FIB)を組み込み可能
Script(FastScript)に対応(PascalScript, C++Script, BasicScript, JScript)
プリンタ以外にも出力先が指定可能(PDF, RTF, XLS, XML, HTML, JPG, BMP, GIF, TIFF, TXT, CSV, ODF)
親レポートから継承したレポートを作成することが可能
クロスタブタイプ、ドリルダウンタイプのレポートの作成が可能

Editionによって使えない機能
Embarcadero RAD Edition

Enterprise Edition

RunTime end‐user designer

×○Vertical Bands

×○

Cross Tabs

×○

Dialog forms designer

×○

×

○

Excel Binary

×○

Excel XML×○

E‐Mail×○

Script×○

Components for web‐applications

×○Interbase Express (IBX),
IBOjects, ActiveX Data Objects(ADO), dbExpress support

14

デモ「FastReportによるレポートの生成」
WebブラウザーForm
TfrxPDFExport

PDF
TfrxReport

FireDAC
TfrxDBDataset

DB

ポイント
FastReport.BackPictuerで背景画像を指定<Line>で現在行を表示.Rotationで回転(270度で縦書き).Font.Nameに@付きフォントは90度回転済み.LineSpacingで行間を指定.AllowHtmlTagsでHTMLタグの利用が可能
スコア[(<frxDBDataset1."GOLF_SCORE">)]<b>[(<frxDBDataset1."RL_NAME">)]殿</b>
ShowDialogは不要
ShowProgressは不要

FDMemTable

IndexFieldNamesで並び替え

Codeprocedure
Memo3OnBeforePrint(Sender:TfrxComponent);
var
Memo: TfrxMemoView;
begin
Memo := TfrxMemoView(Sender);if <Line> <= 3 thenMemo.Color := clRed
else
Memo.Color := clNone;
end;

ポイント
FastReportで利用可能なHTMLタグ<b>：テキストを太字にする<i>：テキストを斜体にする<u>：テキストに下線を引く<sub>：下付き文字を表示する<sup>：上付き文字を表示する<fontcolor>：フォントの色<nowrap>：WordWrapが有効であってもテキストを分割しない。テキスト全体が次の行へ移動されます。

FastReport VCLの情報
http://www.agtech.co.jp/products/fastreportvcl/

デモ「IntraWeb + FastReportによるレポート生成」
IntraWebWebブラウザー
リクエスト

レスポンス
PDF

FastReport
FireDACDBポイント
FastReport

frxReport1.Export(frxPDFExport1);
WebApplication.SendStream(ms, false,‘application/pdf’, ‘GolfReport.pdf’);
end;

Code

procedure TForm1.Button1Click(Sender:TObject);
begin
frxReport1.PrepareReport();frxReport1.Export(frxPDFExport1);
end;.Fontを日本語にしないとゴゴゴ.EmbeddedFontsを指定しないとゴゴゴ.Backgroundを指定して画像を埋め込み

procedure TIWForm2.IWButton1Click(Sender:TObject);var
ms: TMemoryStream;
begin
ms := TStringStream.Create;
frxReport1.PrepareReport();frxPDFExport1.Stream := ms;IntraWebを使う際の注意点
割と修正版が良く出ます

http://www.atozed.com/intraweb/Download/index.EN.aspx• Seattleに含まれるものは14.0.0→最新版は14.0.47

今回の14.0.0の環境で出た例外• ContentStream already exists Exception

RAD Studioに最新版を入れる方法

http://www.atozed.com/intraweb/FAQ/InstallingIntraWeb.EN.aspx
1. RAD StudioからIntraWebをアンインストール
2. IWBundledRemovalTool.exeで不要なファイルなどを削除
3. 新しいIntraWebをインストールFastReport日本語版/最新版を使うにはこれからSeattleをインストールする方• RAD Studioのインストール設定からFastReportを外す

Seattleインストール済みの方• コントロールパネルの「プログラムと機能」から削除

参考：モバイル・スマートフォンの動作確認環境はどうする？
実機• 一番確実な確認環境であり、最終的には行わなければならない

仮想環境• iPhoneシミュレーター
•

取得元：AppStore - Xcode•

取得元：http://developer.android.com/sdk/•

取得元：http://www.microsoft.com/ja-jp/download/details.aspx?id=27570• Androidエミュレーター

• Windows Phoneエミュレーター

参考：シミュレーターとエミュレーターの違い
 シミュレーター
ソフトウェアを模倣する、再現性はそこそこ、動作速度は速い、バイナリ互換が無い
 エミュレーター
ハードウェアを模倣する、再現性は完璧、動作速度は遅い、バイナリ互換がある参考：データの移行に便利なTFDBatchMove
FDBatchMove.Mappings

ポイント
Code
procedure TForm1.Button2Click(Sender: TObject);
begin
FDMemTable1.SaveToFile(‘C:¥path¥to¥DCamp31.xml’, sfXML);end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FDMemTable1.LoadFromFile(‘C:¥path¥to¥DCamp31.xml’, sfXML);
end;

まとめ
モバイル対応方法は2種類• ネイティブアプリを作り、パフォーマンスを優先する方法• Webアプリを作り、スケラービリティを優先する方法

RAD Studioでモバイル対応する方法は3種類• WebBrokerによる既存のHTML技術・資産を活用する方法• IntraWebによるRADスタイルで開発する方法• DataSnapによってビジネスロジックをWebサービスで公開し、それを利用するFireMonekyネイティブアプリを開発する方法

帳票作成はPDFがベター• FastReportで作るのが簡単• CSV/XLSX/HTML/画像での出力もできるFastReport VCLのキャンペーンあるよ！
http://www.agtech.co.jp/Campaign_FR/

Thank you!