私は約 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()}