A Django site.
3月 29, 2008
» CrystalReportsの帳票を含んだプログラムをディプロイメントする

setup_pageVisualStudio2008 ProfessionaにバンドルされているCrystalReportsのレポートを含んだプログラムを配布するためにセットアップファイルをビルドしようとしても、CrystalReportsのランタイムをセットアップに含めるためのマージモジュールが見つからずしばらく悩んでいました。

が、どうやら.msmファイルでセットアップファイルをつくるのではなく、.msiで作ればいいみたいだと判明。

具体的には、セットアッププロジェクトのプロパティーページから「必須コンポーネント」ボタンをクリックして、「CrystalReports Basic for VisualStudio」にチェックを入れ「アプリケーションと同じ場所から必須コンポーネントをダウンロードする」を選択すれば、セットアップファイルにCrystalReporsのランタイムが自動的に同梱されます。これに気づかずしばらくはまりました・・・。マージモジュールが必須だと思ってたんですね。

comp.gif

.msiでランタイムをインストールすれば、ターゲットコンピュータにランタイムが既にインストールされていれば再度インストールされることはありませんからセットアップ時間の短縮につながる可能性があります。マージモジュールでセットアップした場合は、インストールのたびに必ずランタイムもインストールが行われるというセットアップ時の挙動の違いがあります。

3月 24, 2008
» CrystalReportsに値を渡す

業務用に作成していたアプリケーションが、ディスクドライブの故障でサーバーを修理したとき以来ちょっと、挙動がへんでCrystalReportsの帳票を開くとき、コードでユーザーアカウントやパスフレーズを設定しているのに、ログインできずにダイアログが表示されてしまう状況が発生するようになったので、コードを見直して修正しました。手を抜いていたところの心当たりがあったので解決はすぐだったんですが・・・そのついでにちょっと帳票を修正しました。

コードから値をCrystalReportsの帳票に渡して、データベースから読み込むフィールド以外でも動的に帳票を変化させるようにしました。

TextObject txtObj;
txtObj = this.mainZaigakuReport.ReportDefinition.ReportObjects["text12"] as CrystalDecisions.CrystalReports.Engine.TextObject;
txtObj.Text = "任意の文字列を書く。";
//Reportobjectnameはレポートオブジェクトの名前を入れる
//TextFieldNameはテキストフィールドの名前を入れる

VisualStudio2005 C#
CrustalReports XI R2 SP3+fix3.4
Windows XP SP2

いろいろな手法があるようですが、これ以外だとパラメータフィールドを使うのがやりやすそうですね。    

3月 19, 2008
» Crystal Reports for Visual Studio 2008

VS2008 ProfessionalにはCrystalReportsがバンドルされています。しかしながら、Crystal Reports 2008のサブセットのようで、しかも致命的なのは、セットアップファイルを作成して配布するときに必要なCrystalReportsのランタイムを含めるためのマージモジュールがどうやらまだ提供されていないことです。

マージモジュールはMSDNのサイトの情報によると、「CrystalReportsRedist2007_x86.msm」で・・・なんで、2007なのかよくわからないんですが・・・その実態は、「cr_net_2008_mergemodules_mlb_x86.zip」とのことです。(32bit Version)がBusinessObjectsのサイトにもまだ、ファイルはアップロードされていないようで・・・。

CrystalRepors2008のマージモジュールは既に提供されていますから、ちょっとした嫌がらせ・・・じゃなくて、急ぐんなら製品版買えやってことでしょうね。他のバージョンのマージモジュールを試しましたが動作するセットアップファイルを作成できませんでした・・・まあ、商売的には当然ですが。

VS2008に開発環境を全面的に移行させるのはまだ時期尚早と判断しました。何しろ、バンドルされているCrystal Reports for Visual Studio 2008で作成した帳票を含んだプログラムを配布できないんですから。

8月 27, 2007
» Crystal Reports ViewerのBusinessObjectロゴを消す

Crystal Reports XI R2でWindowsアプリケーションを作成すると、Crystal Reports Viewerの右上に、「BusinessObject」というロゴが表示されます。これ、プロパティーの設定とかじゃ消えないんですね。WEBアプリケーションの方は、プロパティーの設定で消えるみたいなんですけどね。
で、非常に気になるわけです。なんで、BusinessObjectの宣伝しないといけないのかと・・・。

というわけで、コードで消してみることにします。

  1.  private void toolStripButton_Click(object sender, EventArgs e)
  2.          {
  3.              List<System.Windows.Forms.ToolStripLabel> lbls = new List<ToolStripLabel>();
  4.              // コントロールオブジェクトに分解
  5.              foreach (Control ctl in crystalReportViewer.Controls)
  6.              {
  7.                  // ツールバーを取得
  8.                  if (ctl.GetType().Equals(typeof(System.Windows.Forms.ToolStrip)))
  9.                  {
  10.                      System.Windows.Forms.ToolStrip strip = (System.Windows.Forms.ToolStrip)ctl;
  11.                      // ツールバーをアイテムに分解
  12.                      foreach (ToolStripItem item in strip.Items)
  13.                      {
  14.                          MessageBox.Show(item.GetType().ToString());//アイテムの名前を列挙 実行時は不要
  15.                          // ラベルを取得
  16.                              if (item.GetType().Equals(typeof(System.Windows.Forms.ToolStripLabel)))
  17.                          {
  18.                            lbls.Add((ToolStripLabel)item);
  19.                          }
  20.                      }
  21.                  }
  22.              }
  23.              // ラベル2個中の、2番目がロゴを表示
  24.                lbls[1].Visible = false;//取りあえず非表示にしてみる
  25.              MessageBox.Show("非表示にしました。");
  26.  }

これを何かのイベントで呼び出せば、ロゴを非表示にできます。違うロゴを表示することはできませんでした。どうしても、BussinesObjectロゴが表示されてしまい、そのイメージに重なって別の指定したイメージが表示されてしまう状態です。解決するには、別のアプローチが必要かも知れない・・・。

まあ、非表示にできたからいいや。