В iReport создайте шаблон и сохраните его в директорию reports как <модуль>_<id>.jrxml. Откройте его в iReport.
Для отображения отчёта необходимо получить данные (datasource). Получение данных описывается в шаблоне отчёта, для iReport - это пункт меню Data->Report Query (Запрос Отчёта).
На данный момент возможны два метода получения datasource - SQL и BGBS. В параметре Query language необходимо указать используемый.
...
Блок кода | ||||
---|---|---|---|---|
| ||||
import java.sql.*; import java.util.*; public void fillReport( con, filter, result ) { //код для получения datasource result.setParams( params ); //установка параметров, которые будут доступны в отчёте (Parameters) - объект интерфейса Map result.setDataSource( datasource ); //установка datasource, это может быть объект интерфейса Collection<Map<String, Object>>, ResultSet } |
con - объект класса java.sql.Connection - соединение с базой данных;
filter - объект класса bitel.billing.server.admin.reports.BGReportFilter, содержащий параметры фильтра, переменные конфигурации модуля отчётов. Краткий перечень доступных функций (полный - в API-документации для разработки скриптов BGBS):
Блок кода | ||||
---|---|---|---|---|
| ||||
String getStringParam( String name ) int getIntParam( String name ) int getIntParam( String name, int def ) long getLongParam( String name ) long getLongParam( String name, long def ) Calendar getCalendarParam( String name ) Date getDateParam( String name ) |
result - объект, в который необходимо передать параметры отчёта и datasource. У него имеются функции:
...
запрос использующий Collection<Map>:
Блок кода | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
import java.sql.*;
import java.util.*;
public void fillReport( con, filter, result )
{
PreparedStatement ps = con.prepareStatement( result.sql( "SELECT t3.title as col1," +
" SUM(t1.summa) as col2 FROM contract_account AS t1, contract AS t2, service AS t3"+
" WHERE t1.cid=t2.id AND t1.sid=t3.id AND t2.gr&$(gr)>0 AND t1.yy=$yy(month) AND"+
" t1.mm=$mm(month) GROUP BY t1.sid ORDER BY t3.mid, t3.title", filter ) );
ResultSet rs = ps.executeQuery();
double total = 0;
List res = new ArrayList();
while(rs.next())
{
Map map = new HashMap();
map.put("col1", rs.getString(1));
double val = rs.getDouble(2);
map.put("col2", val);
total += val;
res.add(map);
}
Map params = new HashMap();
params.put( "total", total );
result.setDataSource( res );
result.setParams( params );
} |
Для отображения в отчёте даты отчёта добавляем textfield с Expression Class: java.util.Date, Pattern: год: yyyy месяц: MMMMM, Expression: $P{_filter}.getDateParam( "month" ).
...
Добавим текстовое поле для его отображения, Expression Class java.lang.Double, Pattern # ##0.00, Text Field Expression $V{sum}.
iReport вместе с вариантом данного примера: ftp://bgbilling.ru/pub/bgbilling/reports/iReport_1.3.2.zip
Другие примеры отчётов доступны на Wiki. Наиболее простой способ разработки собственного отчёта - модификация существующего. Также некоторые отчёты, идущие в стандартной поставке (например, отчёт по должникам) могут быть изменены.
Имеется возможность в отчёте использовать гиперссылки. Это позволяет из одного отчёта быстро открывать другие связанные отчёты или разные сущности системы, например, договоры. Можно использовать отчёты как "универсальный поиск" - формируем любые фильтры и логику поиска, связываем строки результата с отрываемыми договорами и можно получить список договоров по любому критерию с возможностью открыть нужный. На данный момент поддерживаются следующие типы ссылок:
bgbilling:reports://bitel.billing.module.services.reports.BGReportsPanel?param1=value1¶m2=value2&... для открытия любого другого отчёта. Для этого нужно знать соответствующие параметры метода Report модуля reports (код отчёта и т. д.).
bgbilling:reports://bitel.billing.module.contract.ContractEditor?<cid> для открытия вкладки с соответствующим договором.
Можно указывать глобальные настройки для библиотеки jasperreports в файле jasperreports.properties, путь к которому можно указать с помощью параметра запуска сервера ( server.sh/server.bat):
Блок кода | ||||
---|---|---|---|---|
| ||||
-Dnet.sf.jasperreports.properties=/path/jasperreports.properties |
Значения опции вы можете узнать в документации библиотеки jasperreports.