0

私は約 700 個の Crystal XI レポートを持っており、そのうちのいくつかには、「 Test } 」のような式フィールド に右中括弧が含まれています。Crystal Reports XI はそれらすべてを開くことができますが、そのようなレポートをロードしようとすると C# がクラッシュします。

これは、レポートをロードするために使用するコードです (他のレポートでは正常に機能します)。

CrystalDecisions.CrystalReports.Engine.ReportDocument reportDocument; 
reportDocument = new CrystalDecisions.CrystalReports.Engine.ReportDocument();

reportDocument.Load(path); //Application crashes here

次の例外がスローされます。

A first chance exception of type 'System.Exception' occurred in 
CrystalDecisions.CrystalReports.Engine.dll

Load report failed 
Invalid field name

私の質問は、これらのレポートを関係なくロードする可能性があるかどうかです。そうでない場合、Crystal Reports DLL の新しいバージョンは古いレポートをロードできますか?

問題に関する詳細情報:
Visual Studio 2012 C# .NET 4.5 を使用しており、プラットフォーム ターゲットを x86 に設定してい
ます。Crystal DLL については、バージョン 11.0.3300 を使用しています。

驚くべきことに、C# では、フィールド名に左中括弧やその他の多くの特殊文字が含まれるレポートを問題なくロードできます。

" Test } " または " {Test } " - エラー
" { Test " または " Test { " - 問題なく読み込み中 - 中括弧を開くと問題なく動作します
" " Test < >= % & |" " - 問題なく読み込み中(はい、名前には二重引用符が含まれています)

編集:避けられない混乱のため:

問題は数式自体ではなく、数式フィールドに関するものであることに注意してください。画像例:

サンプル画像

-> 現時点では、問題は API と C# の組み合わせにあるように見えるため、解決策は 1 つだけです。すべての数式フィールド名の名前を変更し、括弧を削除します。

元の例外メッセージ:

{"Der Bericht konnte nicht geladen werden."} //Load report failed
Data: {System.Collections.ListDictionaryInternal}
HelpLink: null
HResult: -2146233088
InnerException: {"\rUngültiger Feldname.\nC:\\Users\\username\\AppData\\Local\\Temp\\  
  {566E74ED-58BF-40CD-82B2-9AE0E6BC4013}.rpt"} //Invalid field name
Message: "Der Bericht konnte nicht geladen werden."
Source: "CrystalDecisions.CrystalReports.Engine"
StackTrace: " at 
  CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.EnsureDocumentIsOpened() \r\n at 
  CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(String filename, 
  OpenReportMethod openMethod, Int16 parentJob)\r\n at 
  CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(String filename) \r\n at 
  CRTableLister.ReportAnalyzer.analyzeReport(String path)"
TargetSite: {Void EnsureDocumentIsOpened()}
4

2 に答える 2