2021年12月17日

QuickReportをAlexandriaで

本投稿はDelphi Advent Calendar 2021 17日目 の記事です。

quickreport のProfessional版(ソース付き)を購入していたので、Alexandriaで使えそうか、とりあえずパッケージを作成してみました。Delphiバンドル版でなく、別途購入したものです。
バージョンは最新のVer6でなく、その前のVer5.06になります。Delphiにバンドルされていたのは、こちらのバージョンだと記憶しています。
Delphi10.3 Rioまでは、Delphiの新しいバージョンが出るために対応したパッケージファイル一式ダウンロードできるようになっていたので、それが使えたが、今はできない(*1)ので、Alexandriaでは、自力で試してみます。

1)
Delphi10.3 Rioに、Rio版をインストールし、ソースコード部分をコピー。
2)
上記を、Delphi11 Alexandriaの環境にコピーする。
3)
デザイン用、実行時用パッケージプロジェクトを、それぞれ、QR506DesignDXE11,QR506RunDXE11に変更
4)
R506DesignDXE11.dpkの Requires のQR506RunDXE10_3を、上記に合わせQR506RunDXE11に変更
5)
QR506RunDXE11、QR506DesignDXE11をそれぞれビルド
6)
それぞれの、bplを
C:\Program Files (x86)\Embarcadero\Studio\22.0\bin
にコピー
7)
コンポーネントのインストールからQR506DesignDXE11.bpl をついかすれば、コンポーネントパレットに追加されます

実際にプログラムでの使用はまだ試していません。
Ver5.06は、Berlinでは、実際にDelphiVer7からのマイグレーション作業をしたプログラムで使用していて、特に問題が起きた覚えがないので、Alexandriaでも大丈夫だと期待しています。今のところ実際に使う予定はなさそうですが。


(*1)
サポート開発者の2019年にLutMentz氏が亡くなったため

Ver6は、まだ販売しているようだけどほんとに買えるかは不明

 

posted by しんくそふと at 06:00| Comment(0) | TrackBack(0) | 開発TIPS

2020年12月24日

3層スタイルC/Sアプリ作成術(Rest版)

これは Delphi Advent Calendar 2020 の 24 日目の記事です。

もうずいぶん前になりますが、"3層スタイルC/Sアプリ作成術"というタイトルでデブキャンで発表したのですが、その時はWebは、SOAPを使っていたのですが、それをRestでできないかと考えて試したものです。
サーバー側は、PHPで作ったりでその時と同じ形までまだ行ってないですがとりあえず簡易版を作ってみました。
(Delphiで作りたかったけど時間切れです)

Formは、同じで、Datamoduleを切り替えるだけで、C/SプログラムとRest版アプリを切り替えられるようにしたものです。

ソースはここからダウンロードできるようにしてあります。
動かすときは、ReadMe.txtを読んでください。

データベースをクラウドにしたいときの一つのアイデアとして作成しています。
SOAPよりも、軽くなっていて、仕組みもわかりやすいと思います。
Restについては、8日の記事を参考にしてください。
今あるプログラムに適用するには、データアクセス部分をフォームと分離しないといけないなど、既存のアプリにすぐに適用とはいきませんが。分離ができていれば、有効な手段だとおもいます。


posted by しんくそふと at 00:00| Comment(0) | TrackBack(0) | 開発TIPS

2020年12月17日

Restクライアントで配列送信

これは Delphi Advent Calendar 2020 の 17 日目の記事です。
8 日目の記事(DelphiでRestクライアント)の関連記事です。
配列送信については、サーバー側をPHPで開発が前提になります。
確認は、IDE上で行います。
事前に
    RESTClient1: TRESTClient;
    RESTResponse1: TRESTResponse;
    HTTPBasicAuthenticator1: THTTPBasicAuthenticator;
のパラメータが設定されているものとします。(前記事参照)

RESTRequest1: TRESTRequest;
については、Resource、Client 、Response をそれぞれ設定します。(前記事参照)
サーバー側のPHPファイルを、Test1.phpとします。
内容は、
    <?php
    var_dump($_REQUEST['PARAM']);
    ?>

続けて、RESTRequest1のResourceSuffix に上記PHPファイル名を設定
    ResourceSuffix := 'Test1.php';

Paramsを下記のように設定


RESTClient1の上で、マウス右ボタンを押すと下記ポップアップメニューが出るので、実行を選ぶと実行されます。

応答データは、RESTResponse1のContentプロパティに返る。
確認すると、
配列で受けたものが返されるのが確認できる。


posted by しんくそふと at 00:00| Comment(0) | TrackBack(0) | 開発TIPS

2020年12月14日

FastReport 1コードで複数レイアウト伝票作成

これは Delphi Advent Calendar 2020 の 14 日目の記事です。

何年か前に、デブキャンのLTで、CoReportを使った同様の処理を発表しました。
今回その時に作成したプログラムと同様のことを、FastReportで作成してみました。

FastReportも、CoReport同様にレイアウト定義ファイルを別ファイルとして作成し、実行時に読み込むことが可能なので、同様の処理が可能と考えた次第です。
この場合、データベースとリンクせず、出力内容をTfrxMemoViewで定義し、プログラムから値を設定するという方法で行うことになります。

(下部にソース、Exe, 定義ファイル一式落とせるようにしてあります)

最初に定義ファイルの作成ですが、すべて出力項目を同じにする必要があります。
この時、A定義では項目はあるが、B定義ではその項目は使わないというケースが出る場合は、B定義でその項目を定義しておいて、その項目のVisibleをFalseにしておきます。添付のサンプルでは、年月日の項目でその対応をしているものがあります。
また、プレビューで対象の伝票のイメージを背景に貼ってあるのですが、これは印刷時には、不要です。
この場合は、そのコンポーネントの、Visibilityプロパティ中の、vsPrintをFalseにします。

Delphiコード側は、処理の最初に下記メソッドで、定義ファイルを読み込むのですが、この時、出力したい伝票の定義をしています。
frxReport1.LoadFromFile( );

この後、項目に値を流し込むのですが、各定義ファイルの、項目は同一にしてあるので、それぞれの定義ごとにコードを書く必要はなく、同一のコードですむことになります。

実際のコードは下記から落とせるようにしてありますので、確認ください。
delphiadvent2020.14.zip
使用している伝票は、上記、デブキャンLTの時のもので、ずいぶん古いので、今使われてるかは不明です。



posted by しんくそふと at 08:46| Comment(0) | TrackBack(0) | 開発TIPS

2020年12月08日

DelphiでRestクライアント

これは Delphi Advent Calendar 2020 の 8 日目の記事です。

PHPとMySQLが使えるレンタルサーバーのデータを参照するプログラムを、DelphiでRestクライアントとして作成しす。サーバー側プログラムは、PHPで作成しています。
用意するコンポーネントは、
    RESTClient1: TRESTClient;
    RESTRequest1: TRESTRequest;
    RESTResponse1: TRESTResponse;
    HTTPBasicAuthenticator1: THTTPBasicAuthenticator;
の4種類です。

以下の解説でのサーバーアクセスURLは、下記とします。
https://www.thinksoft.co.jp/cgi-bin/PostListApi/ListPref.php

*RESTClient1のパラメータ設定
    Authenticator = HTTPBasicAuthenticator1
    Accept = 'application/json, text/plain; q=0.9, text/html;q=0.8,'
    AcceptCharset = 'utf-8, *;q=0.8'
    BaseURL = 'https://www.thinksoft.co.jp/cgi-bin'
Acceptと、AcceptCharsetの設定値は、RESTRequest1の同名プロパティからコピー。
Authenticatorの設定は、HTTP認証を使う場合、コンポーネントの追加とともに設定。

*HTTPBasicAuthenticator1のパラメータ設定
    Username = ******************
    Password = ************************
HTTP認証のUsername、Passwordを設定

*RESTRequest1のパラメータ設定
    Resource := 'PostListApi';
    ResourceSuffix := 'ListPref.php';
    Client = RESTClient1
    Params = <>
    Response = RESTResponse1
(RESTClient1のBaseURL とRESTRequest1のResource、ResourceSuffixの設定については、HELP参照)
Paramsに、URLクエリパラメータを設定する。
Methodパラメータは、サーバー側をどちらでも対応できるように作ったので今回はデフォルトのままです。
後述する郵便番号検索のプログラムでは、下記のようにNAMEだけ設定。Kindはデフォルトのまま。

 
下記の"DelphiIDE上でテスト実行"する場合は、Valueも設定する。
プログラムで設定する場合は、
    RESTRequest.Params.ParameterByName('POST_CODE').Value := '1234567';
のような感じで設定。

*RESTResponse1のパラメータ設定
    ContentType='text/html'

*DelphiIDE上でテスト実行
この状態で、IDE上で実行可能となります。
URLクエリパラメータがある場合は、RESTRequest1のParamsに設定したパラメータのValueに値を設定します。ない場合は、必要ありません。
RESTClient1の上で、マウス右ボタンを押すと下記ポップアップメニューが出るので、実行を選ぶと実行されます。
 
応答データは、RESTResponse1のRESTResponse1に設定され、確認できます。
DelphiIDE上でテスト実行できることから、開発については、RESTRequestコンポーネントは、

*テストプログラム
弊社で使用しているサーバーに郵便番号データベースを作成し、複数パターンで郵便番号を検索できるRestクライアントプログラムをダウンロードできます。Exeのみでソースは含めていません。
Gridタブには、応答データをTFDMemTableにロード(ライブラリとして汎用的に作成しています)した結果を、RcvTextには、応答データをそのまま出力させています。
データ形式は、jsonを使うのが一般だと思いますが、特に他システムとの連携を考えていないのでCSV形式で行っています。(*1)
Request、Response、テーブル登録時間などが確認できるようになっています。

(*1)2022/1/16
Json形式でデータの受け取りを行うのがRestであり、CSV形式で行うのは、RestではないといわれたのでJson形式修正
ただし、ダウンロードできるプログラムは、CSVのままです。


posted by しんくそふと at 00:00| Comment(0) | TrackBack(0) | 開発TIPS