1

私がここで働き始めるずっと前に、ある開発者が VS 2008 の VB.Net で Web アプリを作成しました。このアプリには、Crystal Reports を使用して PDF ファイルとしてレポートを作成するリンクが含まれていました。ユーザーから、リンクでエラーが発生することが報告されました。これが常に問題だったのか、それが今報告されているのか、それともサーバーに変更があったのかはわかりません. これは、私がここに来て以来、私がほとんど関与していないアプリケーションであり、それを書いた開発者は会社を離れて久しい. 90 年代後半以降、Crystal Reports を使用していません。とにかく、ここで十分な背景はエラーです。

objTemp.Export() メソッド呼び出しまですべてを追跡しました (ここで、objTemp は Crystal Reports ReportClass クラスのインスタンス化です)。

Visual Studio IDE のマシンでローカルにアプリを実行すると、すべてが想定どおりに機能します。アプリを再コンパイルして実稼働サーバーの別のフォルダーに公開してから、自分のバージョンを実行しましたが、実稼働バージョンと同じエラーが引き続き発生します。

ASP エラー ページは次のようになります。

'/MyApplication' アプリケーションでサーバー エラーが発生しました。

オブジェクト参照がオブジェクト インスタンスに設定されていません。

説明:現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。

ソース エラー:

現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。

スタックトレース:

[NullReferenceException: Object reference not set to an instance of an object.]
    MyApplication.libMyAppFunctions.ExportAndDisplayPDF(Object objTemp) in O:\MyApplication\library\libMyAppFunctions.vb:491
    MyApplication.ViewReport.btnPrint_Click(Object sender, EventArgs e) in O:\MyApplication\aspx\Reports\ViewReport.aspx.vb:1462
    System.Web.UI.WebControls.LinkButton.OnClick(EventArgs e) +111
    System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +79
    System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
    System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
    System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +175
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565


バージョン情報: Microsoft .NET Framework バージョン:2.0.50727.3643; ASP.NET バージョン:2.0.50727.3634

私が持っていた質問の 1 つは、エラーで "O:\MyApplication..." を指しているということです。これは、ソース コードを保存するネットワーク ドライブです。サーバーにマッピングされた O: ドライブはありません。それがエラーの原因のようですが、ドライブ文字をハード コーディングすることが Visual Studio の開発環境の標準的な部分であるとは想像できません。私が作成/作業した他のアプリでこの種の問題が発生したことはありません.



* 2013/3/19 Andrew さんのソース コードのリクエストに応えて追加
これは、PDF ファイルを作成するためのリンクがクリックされたときに呼び出されるコードです。

Private Sub btnPrint_Click (ByVal sender As Object, ByVal e As System.EventArgs) btnPrint.Click を処理します
    暗い
    Dim objViewReport As ViewReport = New ViewReport(frmView)
    dtReportComments = objViewReport.getDtReportComments

    オブジェクトとして薄暗い

    If (objViewReport.intTimeOfDayID -1) その後
        oRpt = 新しい rptTOC_DateSpecific()
    そうしないと
        oRpt = 新しい rptTOC_DateAll()
    終了条件
    oRpt.SetDataSource(dtReportComments)

    '季節、日付、時刻を設定
    Dim toSeason As CrystalDecisions.CrystalReports.Engine.TextObject = oRpt.ReportDefinition.ReportObjects.Item("txtSeason")
    Dim toTitle As CrystalDecisions.CrystalReports.Engine.TextObject = oRpt.ReportDefinition.ReportObjects.Item("txtViewReportDate")
    Dim toTimeOfDay As CrystalDecisions.CrystalReports.Engine.TextObject = oRpt.ReportDefinition.ReportObjects.Item("txtTimeOfDay")

    toSeason.Text = objViewReport.strSeasonID

    If (objViewReport.intTimeOfDayID -1) その後
        toTitle.Text = objViewReport.datViewReportDate.ToString("MM/dd/yyyy")
        toTimeOfDay.Text = objViewReport.strTimeOfDay
    そうしないと
        toTitle.Text = "すべて"
        toTimeOfDay.Text = "すべて"
    終了条件

    ExportAndDisplayPDF(oRpt)
サブ終了


これは btnPrint_click メソッドが呼び出すコードです


Public Function ExportAndDisplayPDF(ByVal objTemp As Object)
    Dim dNow As DateTime = Now

    Dim strFileName As String = dNow.Ticks & ".pdf"
    'write to a pdf file.
    Dim DiskOpts As CrystalDecisions.Shared.DiskFileDestinationOptions = New CrystalDecisions.Shared.DiskFileDestinationOptions()
    objTemp.ExportOptions.ExportDestinationType = CrystalDecisions.[Shared].ExportDestinationType.DiskFile
    objTemp.ExportOptions.ExportFormatType = CrystalDecisions.[Shared].ExportFormatType.PortableDocFormat

    DiskOpts.DiskFileName = HttpContext.Current.Request.PhysicalApplicationPath.ToString & "ReportOutput\" & strFileName

    objTemp.ExportOptions.DestinationOptions = DiskOpts
    Try
        objTemp.Export()
    Catch oRptExcept As Exception
        HttpContext.Current.Response.Write(oRptExcept.Message & "<br><br>" & oRptExcept.InnerException.Message)
    End Try
    HttpContext.Current.Response.Redirect("/MyApplication/aspx/print/Print.aspx?theDestination=" & strFileName)

End Function

解決策を探しているだけです。

ありがとう
ロバート

4

2 に答える 2