ストアド プロシージャまたは ResultSet を使用してレポートを生成するために、Java Crystal Report SDK を使用しています。
これは、数か月前に作成した投稿で、 ResultSet を使用してレポート内でサブレポートのストアド プロシージャを実行しようとしています: Java Crystal Report SDK - Report & SubReport。この場合、ストアド プロシージャを実行するために設定するパラメータを知っていたので、「簡単」でした。
今、私は同じことをしようとしています(つまり、ResultSetを使用してメインレポート内にサブレポートを作成するためのストアドプロシージャを実行しています)が、一般的な方法で:パラメータを事前に知らないので、設定する必要がありますそれぞれが を使用してParameterFieldController
いますが、一部はメインの ResultSet から取得され、その他はメイン レポートの静的変数から取得されます。
できる限り一般的なものにするためには、やるべきことがたくさんあり、カバーしなければならないケースがたくさんあることに気づきました。メイン レポートにデータソースを設定しないと、すべてが自動的に適切に処理されます。
では、レポートとサブレポートで ResultSet とストアド プロシージャを混在させる「簡単な」方法はありますか?
または、メソッドをバイパスするuseDatasource()
方法はありますか? これは、特定のストアド プロシージャではなく、サブレポートごとにメインの ResultSet を使用することを確実に決定します。
(パフォーマンス上の理由から、メイン レポートの ResultSet を保持し、そのストアド プロシージャを再実行しないようにする必要があります)。
いろいろ試した結果、ここに戻ってきました。残念ながら、ResultSet を使用してパラメーターをメイン レポートのサブレポートに単純に渡す方法をまだ考えています...
メインレポートとサブレポートおよびサブレポートパラメーター間のリンクを取得するために使用しているものは次のとおりです。
IStrings subreports = clientDoc.getSubreportController().getSubreportNames();
for (int i = 0; i < subreports.size(); i++) {
// Get subreport
String subreportName = subreports.getString(i);
ISubreportClientDocument subreport = clientDoc.getSubreportController().getSubreport(subreportName);
// Get datasource tables
databaseController = subreport.getDatabaseController();
tables = databaseController.getDatabase().getTables();
// Get links between subreport and main report
SubreportController subreportController = clientDoc.getSubreportController();
SubreportLinks links = subreportController.getSubreportLinks(subreportName);
Fields params = subreport.getDataDefController().getDataDefinition().getParameterFields();
// Set datasource
setTablesLocation(tables, databaseController, args);
}
問題は、各SubreportLink
fromlinks
が半分埋められているか空であるということです。
- サブレポート パラメーターがメイン レポートのストアド プロシージャまたは数式フィールドのフィールドにリンクされている場合、このパラメーターの名前は
SubreportLink
( usinggetMainReportFieldName()
) にありますが、サブレポートからのリンクされたパラメーターの名前 ( usinggetSubreportFieldName()
) はなく、値もありません。リンク。 - サブレポート パラメーターがメイン レポートのパラメーター フィールドにリンクされている場合、
SubreportLink
オブジェクトは空です。
そのため、サブレポートのパラメータをこの状態で設定するのは非常に難しく、それぞれの半分の部分Subreportlink
+ParameterField
などを使用しても.
私が間違っていることは何ですか?私の場合、必要なすべての情報を入手できますか?
setTablesLocation()
または、 (データソースを ) で設定する代わりに、メインレポートでメソッドを使用するときに行われるように、サブレポートパラメーターを自動的に設定する方法はありますResultSet
か?