Я использую Java Crystal Report SDK для создания отчетов с использованием хранимых процедур или ResultSets.
Вот сообщение, которое я сделал несколько месяцев назад, пытаясь выполнить хранимую процедуру моего подотчета в отчете с помощью ResultSet: Java Crystal Report SDK - Отчет и подотчет. В этом случае я знал параметры, которые нужно установить для выполнения моей хранимой процедуры, так что это было «легко».
Теперь я пытаюсь сделать то же самое (т.е. выполнить хранимую процедуру для заполнения моего подотчета в основном отчете с помощью 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
из links
наполовину заполнен или пуст.
- Если параметр вложенного отчета связан с полем хранимой процедуры основного отчета или полем формулы, у меня есть имя этого параметра в
SubreportLink
(с использованиемgetMainReportFieldName()
), но не имя связанного параметра из вложенного отчета (с использованиемgetSubreportFieldName()
), а не ценность ссылки. - Если параметр вложенного отчета связан с полем параметра основного отчета, объекты
SubreportLink
пусты.
Таким образом, очень сложно установить параметры вложенных отчетов в этом условии, даже используя половину части каждого Subreportlink
+ ParameterField
и т. Д.
Что я делаю не так? Могу ли я получить всю необходимую информацию в моем случае?
Или есть способ автоматически установить параметр моих вложенных отчетов, как это делается, когда я использую метод setTablesLocation()
в моем основном отчете (вместо установки источника данных с помощью ResultSet
)?