Synergy предоставляет возможность разработчику формировать и загружать произвольные отчеты на основе данных, содержащихся в БД системы.
Система составления отчетов реализована на основе
JasperReports.
Для составления шаблонов отчетов используется программа
IReport
.
RAM: 256 MB
Дисковое пространство: 50 MB
Java 6 или Java 7 (для рассматриваемой версии iReport 5.5.1)
Необходимость отдельной настройки используемых шрифтов и
кодировок связана с тем, что для отчетов в Synergy необходимо
использовать русский и казахский языки. По умолчанию iReport
работает с кодировкой Cp1252
, которая их не
поддерживает, поэтому потребуется подключить кодировку
Identity-H
.
Для установки шрифтов в панели меню выберите пункт Tools - Options. В открывшемся окне перейдите на вкладку «Classpath»:
Мы предлагаем сформированный файл fonts.jar, который сразу можно добавить в iReport. Для этого нажмите на кнопку Add JAR. Откроется диалог выбора ресурса:
Выберите нужный файл и нажмите на кнопку ОК.
После добавления архива со шрифтами требуется указать iReport, что были изменены шрифт и кодировка, используемые по умолчанию. Для этого нужно обновить конфигурационный файл:
В архиве
ireport/modules/ext/jasperreports-5.5.1.jar
изменить содержимое файла
default.jasperreports.properties
:
В секции # Font settings
изменить
значения свойств на следующие (как на стороне сервера, так и
в редакторе отчетов):
net.sf.jasperreports.default.font.name=Arial net.sf.jasperreports.default.font.size=10 net.sf.jasperreports.default.pdf.font.name=Arial net.sf.jasperreports.default.pdf.encoding=Identity-H net.sf.jasperreports.default.pdf.embedded=true net.sf.jasperreports.awt.ignore.missing.font=false
Кроме того, убедитесь, что в библиотеке
jasperreports
в файле
default.jasperreports.properties
есть
строка вида:
# Query executer settings net.sf.jasperreports.query.executer.factory.xpath2=com.jaspersoft.jrx.query.JRXPathQueryExecuterFactory
При ее отсутствии работа отчетов в формате
xml
не гарантируется.
На панели инструментов нажмите на кнопку Reports Datasources. Откроется окно, содержащее список сохраненных соединений:
Для создания нового соединения нужно нажать на кнопку New. Первым шагом создания соединения является выбор типа соединения:
Это же окно открывается в том случае, если на стартовой странице iReport нажать на кнопку установки соединения Step 1.
Для Synergy требуется соединение типа
Datasource JDBC connection
. После выбора
этого типа соединения откроется окно настройки соединения:
Введены следующие параметры соединения:
Name |
Synergy connection |
JDBC Driver |
|
JDBC URL |
|
Здесь <hostname>:<mysql_port>
-
адрес и порт сервера, на котором расположен MySQL, или, как в
случае с пробросом соединения через SSH (пример ниже),
локальный хост и порт, куда был выполнен проброс.
Далее указываются логин и пароль пользователя, имеющего доступ к БД, а также настройка, сохранять ли указанные данные авторизации.
Для проверки соединения можно нажать на кнопку Test. Если соединение с указанными параметрами удалось установить, то будет отображено сообщение с текстом:
Connection test successful!
Если же соединение установить не удалось, то будет отображено сообщение с текстом ошибки.
Проброс соединения через SSH
Если требуется установить соединение с БД, расположенной на удаленном сервере, то предварительно необходимо сделать проброс соединения через SSH, выполнив команду:
ssh -L 3307:localhost:3306 user@remote-host.com
Здесь 3307
- локальный порт, с которым
будет устанавливать соединение iReport,
localhost
- локальный хост,
3306
- удаленный порт (например, порт
mysql
, запущенного на удаленном сервере),
user@remote-host.com
-
пользователь@удаленный хост.
Примечания:
Эту команду требуется выполнять после каждого перезапуска сервера.
Время отклика возрастает, поскольку добавляются накладные расходы на шифрование/расшифровывание.
На локальном сервере появляется уязвимость удаленного сервера, так как есть прямой проброс соединения. Поэтому для порта
3307
следует заблокировать доступ извне черезiptable
или брандмауэр.
Создание отчета производится в несколько шагов:
Выбор внешнего вида отчета, настройка его частей.
Формирование запроса отчета, подключение и настройка параметров.
Публикация шаблона отчета в Synergy.
Примечание:
В данном разделе рассмотрена только небольшая часть функций iReport. Для изучения всех его возможностей рекомендуем обращаться к официальной документации (для версии 5.5.1).
На стартовой странице iReport расположены имена ранее открытых отчетов и кнопка для запуска мастера отчета (Step 2):
Откроется мастер отчетов, первым шагом которого будет выбор шаблона отчета:
Кроме внешнего вида отчета, этот мастер позволяет:
выбрать стиль текста (вкладка Style)
выбрать вид диаграмм (вкладка Chart Theme)
создать пакет ресурсов с переводами строк, используемых в документе (вкладка Resource Bundle)
создать другие типы конфигурацонных файлов (вкладка Other file Types)
В качестве примера во вкладке Report выберем шаблон Blank A4 - стандартный лист формата А4.
Для продолжения работы в мастере отчетов нужно нажать на кнопку Launch Report Wizard. В этом случае мастер после указания имени отчета и места для его сохранения позволит сформировать запрос отчета, выбрать используемые поля и указать способ их группировки.
Вместо этого рассмотрим ручное составление отчета. Для этого после выбора шаблона отчета нужно нажать на кнопку Open this Template. В этом случае постребуется только ввод имени отчета и указание его расположения:
После этого нужно нажать на кнопку Next >, а после появления сообщения о завершении создания шаблона - на кнопку Finish.
Будет отображено окно составления нового отчета:
В левой части располагается дерево элементов отчета, где в качестве корня выступает сам отчет. В правой части будут отображаться свойства элемента, выбранного в дереве элементов. В нижней части окна расположена область вывода ошибок при генерации отчета (вкладка Report Problems Window) и область отображения сообщений о статусе отчета (вкладка iReport output).
Посередине окна располагается рабочая область отчета. По умолчанию открыта вкладка Designer - в ней отображена структура отчета, и именно в ней настраивается внешний вид отчета.
Вкладка XML содержит полученный отчет в формате XML.
Вкладка Preview предназначена для предварительного просмотра итогового отчета.
Отчет состоит из следующих основных секций:
Title - заголовок отчета. Секция будет напечатана один раз на первой странице отчета.
Page Header - заголовок страницы. Секция будет напечана в начале каждой страницы отчета. Обычно здесь размещается название отчета либо номер текущей страницы.
Column Header - название колонок отчета.
Detail 1 - тело отчета. Секция отличается от остальных тем, что она повторяется в отчете ровно столько раз, сколько строк будет в полученном отчете.
Column Footer - нижняя подпись колонок.
Page Footer - нижний колонтитул страницы. Секция будет напечатана в конце каждой страницы отчета. Аналогично с заголовком страницы, здесь могут быть размещены название отчета или номер текущей страницы.
Summary - нижняя подпись отчета. Секция будет напечатана один раз в конце отчета.
Если какая-либо секция в отчете не нужна, то достаточно просто уменьшить ее размер до 0 и не помещать в нее компонентов. Если необходимо, чтобы область начиналась на следующей странице, следует вставить в конец предыдущей области компонент разрыва (Break).
Доступ к редактирования отчета возможен двумя способами:
В дереве элементов отчета выделить корневой элемент, и в его контекстном меню выбрать пункт Edit query.
На верхней панели отчета, правее вкладки Preview, нажать на кнопку .
Откроется окно редактирования запроса отчета:
В поле Query language можно выбрать нужный язык запросов.
Текст запроса можно написать вручную, загрузить из файла
txt
или sql
(кнопка
Load query), либо создать
с помощью составителя отчетов (кнопка
Query designer,
необходимо работающее соединение с базой данных).
Полученный текст запроса можно сохранить в файл
txt
или sql
.
В качестве примера напишем простой запрос выбора всех пользователей:
SELECT lastname, firstname, patronymic FROM users
Для упрощения написания запросов рекомендуем обращаться к описанию базы данных Synergy.
Поля, полученные в результате выполнения запроса, отображаются в нижней части окна. Если запрос не может быть выполнен, в этой области будет отбражен текст возникшей ошибки.
После завершения составления отчета нажмите на кнопку OK.
После формирования запроса обновляется дерево элементов отчета. Поля, полученные в запросе, содержатся в элементе Fiels. Для того, чтобы отобразить поле в отчете, нужно перетащить поле из дерева в нужную секцию отчета:
При этом в отчете одновременно появляются два элемента:
Static Text, содержащий
заголовок поля, и элемент вида
$F{field_name}
, содержащий значение поля.
Заголовок поля следует расположить в секции
Column Header, а значение
поля - вплотную под заголовком в секции
Detail 1.
Настройки текста, отображаемого в элементе, отображаются в правой части окна при выделении элемента в виде его свойств. В частности, форматирование текста настраивается в группе свойств Text properties:
Аналогично в отчете размещаются и настраиваются остальные элементы.
Часто возникает необходимость формировать отчет с использованием данных, которые должен вводить пользователь. Например, пользователь должен указать условие поиска сотрудников. Для того, чтобы это сделать, в отчете необходимо использовать параметры.
Параметры отчета расположены в правой части окна редактирования запроса:
Для добавления нового параметра нужно нажать на кнопку New Parameter. Откроется окно редактирования параметра:
Обращение к параметру в запросе производится в формате
$P{<имя_параметра>}
, например:
SELECT * FROM users WHERE lastname LIKE CONCAT($P{params1}, '%')
В результате в отчет будут включены пользователи, чья фамилия начинается на значение, введенное пользователем.
Описание параметра - текст, который будет отображаться пользователю при генерации отчетов из Synergy. Он заполняется в свойстве Description:
При соединении iReport с Synergy предусмотрены некоторые специальные параметры.
Если название параметра
(Parameter name
) содержит комбинацию
символов как в коде переменной, то для данной переменной
применяется специальный редактор:
Код | Описание |
---|---|
|
Для параметра с данным кодом в названии будет предоставляться возможность выбора нескольких пользователей. В значение параметра будут записаны имена пользователей, перечисленные через запятую, в формате Фамилия Имя О. |
|
Для параметра с данным кодом в названии будет предоставляться возможность выбора нескольких пользователей. В значение параметра будут записаны ID пользователей, перечисленные через запятую, в одинарных кавычках. Этот параметр предназначен только для выполнения запросов. Пример:
Обратите внимание, что параметр в запросе должен
быть записан с |
|
Имя выбранного пользователя |
|
ID выбранного пользователя |
|
Названия выбранных подразделений, перечисленные через запятую |
|
Идентификаторы выбранных подразделений, перечисленные через запятую |
|
Название выбранного подразделения |
|
Идентификатор выбранного подразделения |
|
Идентификатор пользователя, который формирует отчет. Данный параметр не отображается при заполнении отчета. Название используемого параметра быть точно равно коду |
|
Полное имя пользователя, который формирует отчет. Данный параметр не отображается при заполнении отчета. Название используемого параметра должно быть точно равно коду |
|
Дата формирования отчета. Данный параметр не отображается при заполнении отчета |
|
Идентификатор выбранного проекта |
|
Идентификаторы выбранных проектов, перечисленные через запятую |
|
В параметре необходимо указать код справочника и
коды полей, которые должны быть использованы в
качестве значения параметра
( |
Для того, чтобы параметр стал опциональным, необходимо добавить для него специальное свойство:
Выбрать нужный параметр в дереве объектов
В свойствах параметра (Properties
в
правой части окна) открыть список свойств параметра:
Нажать на кнопку
Add и добавить
новое свойство
kz.arta.synergy.reports.parameters.optional
с любым значением:
Чтобы проверить значение опционального параметра в отчете, используется условие вида:
IF($P{param}='', true, t=$P{param})
То есть если параметр param
не задан,
его значение не учитывается (результат сравнения
true
). Если параметр задан, то он
сравнивается с переменной t
.
Если же параметр - это мультивыбор значения справочника, то условие имеет вид:
IF('$P!{param_dictionary}' <> '[]', $X{IN, t, param_dictionary}, true)
То есть если список значений
param_dictionary
не имеет элементов, то
условие считается верным, иначе - выполняется проверка,
содержится ли (ключевое слово IN
)
значение поля t
в значениях
param_dictionary
. Если необходимо
проверить, что значение поля не содержится в списке
значений параметра, можно использовать ключевое слово
NOTIN
.
Для просмотра результата составления отчета нужно перейти во вкладку Preview.
Если отчет содержит параметры, то в первую очередь отобразится диалог ввода параметров:
Для использования значения по умолчанию нужно нажать на кнопку Use default.
После ввода параметра отображается результат составления отчета, содержащий данные, полученные в результате выполнения запроса:
После завершения составления отчета его необходимо сохранить
в формате jrxml
и загрузить этот файл в
окне составления нового
пользовательского отчета.
1. Получение информации о карточке документа и его визах (подписях, согласованиях и т.д.)
Сервис доступен по ссылке:
http://host:port/Synergy/docsightings?docID={elementid}&type={type}
Здесь:
elementid
- идентификатор документа
(доступен в ссылке на документ)
type
- тип необходимых виз документа,
необязательный параметр. Возможные значения:
-1
- лист подписей;
0
- лист согласования;
1
- лист утверждения;
2
- лист ознакомления.
Если параметр
type
не передан, то будут получены все подписи.
Пример получаемых данных:
<document> <docInfo> <number /> <subject>111111 - 23333</subject> <regDate /> <author>Ермолаев М.О.</author> <docType>Служебные записки между департаментами</docType> <registry /> </docInfo> <signatures> <signature> <userID>73635fff7b742f7aa5af93c96bd6c2ae</userID> <userName>Ермолаев М.О.</userName> <position>Председатель правления</position> <signDate>20.11.2014 10.25.26</signDate> <comment /> <signType>Согласовано</signType> <signResult>Согласовано</signResult> <value>Обычная</value> </signature> <signature> <userID>a8773e4f56b4cc73381bb1e74d479902</userID> <userName>Абдазимова Г.А.</userName> <position>Инженер ПО</position> <signDate>19.11.2014 10.31.53</signDate> <comment>Согласен</comment> <signType>Согласовано</signType> <signResult>Согласовано с комментарием</signResult> <value>Обычная</value> </signature> </signatures> </document>
2. Получение строки с полным именем пользователя
Формат вызова:
getFullName(userID, addPosition)
Функция возвращает полное имя пользователя в формате Фамилия И.О..
Параметр addPosition
регулирует,
передавать ли дополнительно должность пользователя.
Примеры использования:
Select getFullName('<userID>', true)
Select getFullName('<userID>', false)
3. Сортировка по иерархической структуре подразделений
Во многих отчетах требуется сортировать данные согласно
какой-либо иерархической структуре, например, по
департаментам. В таблице departments
есть
поле struct_number
вида
1.2.1
. Поскольку это строковое поле,
сортировать по этому полю прямо не получится. Для сортировки
по департаментам используется функция вида:
getStruct(struct_number)
Пример использования:
SELECT nameru FROM departments WHERE deleted IS NULL ORDER BY getStruct(struct_number)
- отобразить названия неудаленных подразделений,
отсортированные согласно иерархии в орг.структуре.
Модуль отчетности состоит из трех подмодулей:
jasperreports
(svn+ssh://scm.forge.arta.local/var/lib/gforge/chroot/scmrepos/svn/synergy/trunk/reports/deps
)
javaee
(am-libs/jboss
,
ai-libs/jboss
,
ai-libs/jcr
,
am-libs/persist
)
synergy-web
am-common
arta-components
ReportsBean
Management
Information
Шаблоны отчетов составляются на странице управления отчетами,
расположенной по адресу:
http://<host>:<port>/Reports/Admin
К каждому модулю в системе можно добавить системную кнопку, по
нажатию на которую появится всплывающее меню, в котором будут
отчеты этого модуля. Для этого необходимо загрузить отчет и
указать ему тип объекта, к которому он относится (если нужного
типа объекта нет, то нужно добавить его в
ObjectType
и таблицу
object_types
, это нужно сделать в классе
MboDBSchema
, примерно после 1815 строчки (там
добавляются все типы объектов системы)).
После этого в модуле Synergy необходимо добавить кнопку
ReportButton
(обычно слева на панели
заголовка модуля), вот таким способом:
ReportButton reportButton = new ReportButton(ObjectType.PLAN|ObjectType.ACTION) {
@Override
public String getSelectedID(int objectTypeID) {
if (objectTypeID == ObjectType.PLAN) {
return getCurrentPlanID();
}else if (objectTypeID == ObjectType.ACTION) {
ActionHolder ac = panelsManager.plansList.actionsTreeTable.getSelectedAction();
if (ac != null) return ac.getAction().getActionID();
}
return null;
}
};
В качестве параметра в конструктор передаем типы объектов,
отчеты по которым должны быть отображены в меню. Далее
реализовываем метод
getSelectedID(int objectTypeID)
. Далее данный
параметр будет передаваться в качестве специального параметра в
отчет.
Кнопка будет видна, только если существуют хоть какие-то отчеты, связанные с переданными в конструктор типами объектов.
В меню кнопки можно добавить свои пункты.
Параметры расположения пункта отчета в списке отчетов:
setAdditionalItems(ArrayList<PopupMenuItemIF> additionalItems)
- пункты будут отображаться после системных отчетов.
setFirstAdditionalItems(ArrayList<PopupMenuItemIF> additionalItems)
- пункты будут отображаться до системных отчетов.
Если меню состоит всего из одного пункта, то по нажатию на кнопку отчетов он выполняется сразу.
Внешний вид компонентов выбора пользователя, пользователей, департамента, департаментов, планов, элемента справочника.
Расширить список специальных параметров отчета (например, добавить возможность выбрать журнал или дело). Также можно это решить справочниками (например, создать справочник, где будут перечислены все журналы) и создать такой параметр, но этот способ не рекомендуется.