4.2.6. Шаблон, определяемый классом
Шаблоны, определяемые классом, используются в тех случаях, когда выбирать данные с помощью SQL, JPQL или Groovy слишком сложно или невозможно. Например, в случаях, когда отчёт представляет собой результат объединения нескольких других отчётов.
Расположите класс, определяющий шаблон, в модуле core и реализуйте интерфейс com.haulmont.yarg.formatters.CustomReport
. В классе определите метод createReport()
, возвращающий массив байтов и принимающий на вход параметры:
-
report
– описатель отчёта типаcom.haulmont.yarg.structure.Report
. -
rootBand
– данные корневой полосы типаcom.haulmont.yarg.structure.BandData
. -
params
– мэп внешних параметров отчёта.
Ниже приведен пример шаблона, определяемого классом. Он формирует HTML-документ с названием выбранной в параметре отчёта книги:
package com.sample.library.report;
import com.haulmont.yarg.formatters.CustomReport;
import com.haulmont.yarg.structure.BandData;
import com.haulmont.yarg.structure.Report;
import com.sample.library.entity.Book;
import java.util.Map;
public class BookReport implements CustomReport {
@Override
public byte[] createReport(Report report, BandData rootBand, Map<String, Object> params) {
Book book = (Book) params.get("book");
String html = "<html><body>";
html += "<p>Name: " + book.getName() + "</p>";
html += "</body></html>";
return html.getBytes();
}
}
В редакторе шаблона установите флажок Is custom, затем выберите Class в поле Defined by и укажите имя Java-класса с полным именем пакета в поле Custom definition: