私がここで働き始めるずっと前に、ある開発者が 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
解決策を探しているだけです。
ありがとう
ロバート