Crystal Reportsの使用asp.netコアの問題

背景

    最近のプロジェクトでは、スケジュールされたタスクのCrystal Reports生成されたPDFファイルで、背景に需要を満たし、その後、関係者にメッセージを送信します。

アイデアの技術的実現

    (バージョン2.2に基づいて)選択ASP.NETコアフレームワークは、タイミングタスクIHostedService結合インターフェイスクォーツを達成します。しかし、現在のCrystal Reports SDKのみフレームワークフレームワークをサポートしているのために、ASP.NETコアは、.NET Framework 4.7に基づいて選ばれました。ASP.NETのコア機能でクォーツ定期的なタスクの統合で、それはデフォルトホスティングIISので、特に特定の注意することは、それらを繰り返して、アプリケーションプールのリサイクルの問題を引き起こす可能性があり、正規につながる、技術の多くのブログの庭でいない掲載されていますIISホスティングので、あなたがのアプリケーションプールを設定する必要がある場合は、タスクが終了すると、启动模式値をAlwaysRunning闲置超时値が設定されています0

    Crystal Reportsの使用方法ということに焦点を当て、身近には、以下。

  1. Crystal ReportsのVS開発キットをダウンロードして、アドレス:https://www.crystalreports.com/crvs/confirm/

  2. RPT Crystalレポートテンプレートファイルを取得します。

  3. コーディングエクスポート機能 

コーディング

    2つのアセンブリを参照する最初の必要性:CrystalDecisions.CrystalReports.Engine``CrystalDecisions.Shared

メインのコード・ロジック・パッケージ

using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

namespace CrontabService.Services.report

{
    public class CrystalReportGenerator
    {
        private ReportDocument _rd;
        private readonly ILogger<PurchaseNotifyMsgCreatorService> _logger;
        public CrystalReportGenerator(string templatePath, ConnectionInfo connectionInfo, ILogger<PurchaseNotifyMsgCreatorService> logger)
        {
            _logger = logger;
            TableLogOnInfo t = new TableLogOnInfo();
            t.ConnectionInfo = connectionInfo;
            _rd = new ReportDocument();
            _rd.Load(templatePath);
           foreach (Table table in _rd.Database.Tables)
           {
              table.ApplyLogOnInfo(t);
           }

                      
        }
        public string GenerateReport(Dictionary<string,object> paras,string reportFileName)
        {
            try
            {
                foreach (var kv in paras)
                {
                    _rd.SetParameterValue(kv.Key, kv.Value);
                }
                var reportPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"report\" + reportFileName);


                //导出为pdf格式
                _rd.ExportToDisk(ExportFormatType.PortableDocFormat, reportPath);
                return reportPath;
            }
            catch (Exception e)
            {
                _logger?.LogError(e, "GenerateReport error");


            }

        }
    }
}

    主に内部情報データベースであるConnectionInfoクラス、次の再適用データベース接続情報、または時間のエクスポートをテーブルに適用する必要このレポートは、エラーメッセージは、データベース接続の失敗を表示します

    Crystal Reportsは2つのデータソースがある取得するための2つの方法があるため:pushpullプッシュが積極的に設定データソースを符号化され、メソッド呼び出しSetDataSourceのどちらか、彼は、データベースの情報に私を得たことを維持し、そのデータソース情報テンプレートに基づいて、プルレポートを。

    Iこれは、レポートを生成するためのバックグラウンドタスクであるため、何reportviewコントロールが存在しないので、私は問題が発生しているこれは、私がデータソースを取得するSetDataSourceの方法で持つようになった、実行ExportToDisk方法の結果は、データベース接続を示唆し、例外がスローされますフェイルは、その後、オンラインなので、プルモードは、データベース接続、およびレポートテンプレートのパラメータ値のセットを定義していること、ExportToDiskが成功した実行、解決策を見つけます这个我猜测可能直接通过ReportDocument去导出时,默认还是用的pull方式,由于不熟悉水晶报表的使用,还忘大神指点!

遭遇ピット

    首尾よくこのような剥離した後のように、上記の開発環境で正常にテスト、IISへの展開は、質問の束が登場しました!

  • 次のようにlog4netの例外エラーが発生し読み込むことができません、と見て無知力、そしてどのようにlog4netのオンライン食事の研究については、コミュニティの公式回答樹液があり、基本的にはターゲットプラットフォームの選択コンパイル時の問題は、X86を選択すべきであると述べましたその後、試験食の狂ったが、無駄に、例外となっています。
Could not load file or assembly ‘log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304’ or one of its dependencies. The system cannot find the file specified
  •     Mozheは、、何の生産環境を実行していないとき、すでにデフォルトでインストールされているSDKに基づいて、その開発環境が実現、ランタイムはCrystalReportsではないことを示唆し、異常を変え、ねえ、ディレクトリに32ビットのlog4netのを見つけましたまたはへhttps://www.crystalreports.com/crvs/confirm/ .NETフレームワークのためにSAP Crystal Reportsのランタイムエンジンをダウンロードするには、このサイトで 、 インストール

  • 自信の再起動は、ちょっと、次のように奇跡は、私の神をヌルポインタ例外を発生し、新しい例外の出現はなかった、どのような地獄が実行されることが判明した_rd.ExportToDisk場合に例外が、nullにああではない_RD。

    System.NullReferenceException: 未将对象引用设置到对象的实例。
     在 CrystalDecisions.CrystalReports.Engine.FormatEngine.ExportToStream(ExportRequestContext reqContext)
     在 CrystalDecisions.CrystalReports.Engine.FormatEngine.Export(ExportRequestContext reqContext)
     在 CrystalDecisions.CrystalReports.Engine.ReportDocument.ExportToDisk(ExportFormatType formatType, String fileName)
  • 彼の顔をオフにリッピングする力の際には、彼は実行時間とSDKの独自の影のバージョンを取るように見えました

    SDKのバージョン:CRforVS13SP25_0-10010309

    ランタイムバージョン:CR13SP26MSI64_0-10010309

      1 SP26、難易度が一貫性のないバージョンが原因で引き起こされ、膝ジャークはSP25ですか?

       SDKの新しいバージョンのダウンロードするには、公式サイトを、それを試してみてCRforVS13SP26_0-10010309、インストールと展開を。

  • この奇跡は、待望のレポートファイルを生成するために、最大実行smoothが!

概要

確認した目は、右の人を選択します!~~~~~~

ロジック自体は、バージョンに一致する展開プロセスの紆余曲折、実行は、心に留めなければならない、非常に簡単です!

最後に、ピットが掘ら自分自身、そしてまた彼のジャンプですが、自分自身の飛び出し、ビジョンは少し異なる場合があります!

おすすめ

転載: www.cnblogs.com/liuww/p/12036559.html