11.3. Табличные отчёты.

Это отчёты, выполняемые с помощью скрипта Beanshell. С возможностью сохранения в csv.

Фильтр отчёта настраивается так, как описано выше. Кроме того, нужно сделать следующие модификации: в файле *.rep.xml нужно поместить атрибут type=""java":

<report title="Test" type="java">
  <address title="Адрес" cityName="cityId" streetName="streetId" houseName="house"/>
  <combo name="status" title="Статус">
    <item id="-1" title="любой"/>
    <item id="0" title="активен"/> 
    <item id="4" title="приостановлен"/>
    <item id="3" title="закрыт"/>
  </combo>
  <fields>
    <item id="title" title="Имя"/>
    <item id="comment" title="Комментарий"/>
  </fields>
</report>

В теге fields указываются заголовки полей данного отчёта .

Создайте файл и сохраните его в директории reports как <модуль>_<id>.java. Пример файла :

public void fillReport( con, filter, bitel.billing.server.reports.BGCSVReport.ReportResult result )
{
  query = " SELECT * from contract ";
  query += " LIMIT " + ((pageIndex - 1) * pageSize )+ "," + pageSize;

  ps = con.prepareStatement( query );
  data = new ArrayList( 1000 );

  rs = ps.executeQuery();

  while( rs. next() )
  {
    title = rs.getString("title");
    comment = rs.getString("comment"); 
  
    map = new HashMap();
    map.put( "title", title );
    map.put( "comment", comment );
    data.add( map );     
  }

  result.setData( data );
}

con - объект класса java.sql.Connection - соединение с базой данных;

filter - объект класса bitel.billing.server.admin.reports.BGReportFilter, содержащий параметры фильтра, переменные конфигурации модуля отчётов;

result - объект класса bitel.billing.server.reports.BGCSVReport.ReportResult, в который необходимо передать параметры отчёта и datasource;

pageSize - размер страницы;

pageIndex - номер страницы.

Пример внешнего вида отчёта :

С помощью кнопки "сохранить" можно сохранить данные отчёта в csv-файл.

Примеры отчётов доступны на Wiki.

Есть возможность спрятать столбец в итоговой таблице, для этого надо в файле с описанием фильтров его значение title предворить символом '#':

<fields>
  ...
  <item id="cid" title="#cid"/>
...

После этого столбец станет невидимым (и его настоящее заглавие останется с решёткой). Это может понадобиться, например, для нижеописанной возможности.

При клике на строки таблицы могут выполняться некоторые действия в зависимости от содержимого таблицы и содержимого в каждой строке. В данный момент имеются следующие возможности: