ドリンクバーゲン会場

印刷データの抽出2010年10月23日 09時37分19秒

CrystalReportで印刷を行うに当たり、残る一つの問題がデータの抽出です。
現状では全件データが表示されてしまっているので、
印刷したいデータのみ抽出する必要があります。

ネットでいろいろ調べてみたのですが、やっぱりなかなか情報が見つからず、
今回もサンプルを参考にしました。

チュートリアルに「選択式を使用したフィルタ」というのがあったので、
そのサンプルを見てみました。

サンプルでは、フォーム上で抽出する情報をセットし、ボタンのクリックで
更新するようになっていたのですが、
今回私が行いたいのは、CrystalReportに直接抽出条件を引き渡す方法ですが、
このサンプルでできそうだったので、試してみます。

サンプルでは、ボタンのクリック時に処理が発生するのですが、
ConfigureCrystalReports()の中にも初期値を設定していました。
ConfigureCrystalReports()は前回データベース接続の設定を入れた場所ですので、
今回もここに設定を追加することで抽出ができると思い設定を追加しました。

******************************************************
Private Sub ConfigureCrystalReports()
  Dim reportPath As String = Server.MapPath("レポートファイル")
  CrystalReportViewer1.ReportSource = reportPath
   Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo()
   SetDBLogonForReport(myConnectionInfo)
  myConnectionInfo.ServerName = "サーバー名"
   myConnectionInfo.UserID = "ユーザー名"
   myConnectionInfo.Password = "パスワード"
End Sub
******************************************************

上記が前回作成したConfigureCrystalReports()サブです。
ここに抽出用の条件を追加していきます。

******************************************************
Private Sub ConfigureCrystalReports()
<==== ここから
If Not IsPostBack Then
Dim mySelectFormula As String = "{学籍情報.ID} = '学籍番号'"
CrystalReportViewer1.SelectionFormula = mySelectFormula
End If
ここまで ====>
  Dim reportPath As String = Server.MapPath("レポートファイル")
  CrystalReportViewer1.ReportSource = reportPath
   Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo()
   SetDBLogonForReport(myConnectionInfo)
  myConnectionInfo.ServerName = "サーバー名"
   myConnectionInfo.UserID = "ユーザー名"
   myConnectionInfo.Password = "パスワード"
End Sub
******************************************************

抽出条件を追加したのが上のソースです。
"{学籍情報.ID} = '学籍番号'"
が抽出条件になります。
'学籍番号'に抽出したい番号を登録します。
今回はテストなので、とりあえず学籍番号は直接設定して動かしてみました。
しかし、抽出されずに全件表示されているようです。

サンプルと同じようにしているのですが、抽出されないので、
なにがおかしいのかよくわかりませんでしたが、
デバッグを続けているうちに、おかしなことに気が付きました。

と言うのも、
CrystalReportViewer1.SelectionFormula = mySelectFormula
で抽出条件をセットしているのに、セットした情報が消えているのです。
ステップ実行すると、確かに最初はセットされているのですが、
そのあとのレポートファイルのセットを行うと内容がクリアされてしまうようです。

サンプルではこの順番で記述されているのですが、
消えているのが原因とすれば逆にしたら抽出条件が消えなくなるのではないかと思い、
やってみました。

******************************************************
Private Sub ConfigureCrystalReports()
<====上に移動
  Dim reportPath As String = Server.MapPath("レポートファイル")
  CrystalReportViewer1.ReportSource = reportPath
ここまで ====>
If Not IsPostBack Then
Dim mySelectFormula As String = "{学籍情報.ID} = '学籍番号'"
CrystalReportViewer1.SelectionFormula = mySelectFormula
End If

この場所から

   Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo()
   SetDBLogonForReport(myConnectionInfo)
  myConnectionInfo.ServerName = "サーバー名"
   myConnectionInfo.UserID = "ユーザー名"
   myConnectionInfo.Password = "パスワード"
End Sub
******************************************************

逆にレポートファイルの設定が消えるなんてことはないかちょっと心配だったのですが、
実行してみると、今度はちゃんと抽出されていました。
ステップ単位で確認してみても抽出条件は消えずに残っていたので、
やはりレポートファイルを登録する際に、抽出条件をクリアしているようです。

まあ多少のトラブルはありましたが、これで抽出に関しても問題なさそうです。
あとは、抽出条件をどうやってCrystalReportに引き渡すかです。

CrystalReportへの抽出データの引き渡し2010年10月27日 11時45分55秒

CrystalReportでの抽出ができるようになったので、
Web画面から抽出条件を引き渡すようにしていきます。
今回は、セッションを使うことにしました。
理由は一番簡単かなと思ったからです。

抽出用の画面を作り、そこから抽出条件を作ります。
抽出条件はクラス全員と個別の2パターンあります。

クラスの場合は、年度とクラスを抽出条件にし、
個別の場合は生徒番号を抽出条件に指定します。

抽出自体はそれほど難しい処理ではないので、
すぐに条件にあったレポートが表示されるようになりました。

ところがここで思っていなかった問題が出てきました。
実は、レポート印刷では、いままで「rpt」ファイルを
VisualStudioのプレビューから印刷していたのですが、

今回Web経由で初めて印刷したところ、
プレビューの時は直接プリントアウトされていたのが、
AdobeReader経由となり、外字が文字化けしてしまうのです。

Web画面上では正常に表示されているのですが、
Reader経由では文字化けになるので何か対策が必要ということになりました。

調べてみると、直接プリンターに出力できるようなので、
これから調査してみます。