Использование
Для использования генератора отчетов достаточно установить пакет stimulsoft-reports либо stimulsoft-dashboards при помощи установщика пакетов, выполнив одну из указанных ниже команд:
console |
python -m pip install stimulsoft-reports
|
console |
python -m pip install stimulsoft-dashboards
|
Информация |
Для Linux систем может потребоваться установка дополнительного пакета для работы с ODBC, это можно сделать, например выполнив следующую команду:
sudo apt-get install unixodbc.
|
Будет установлена последняя доступная версия генератора отчетов в текущее рабочее пространство, после этого можно использовать классы и функции по работе с отчетами.
По умолчанию устанавливается минимальный набор драйверов данных. Необходимые драйверы можно дополнительно установить вручную, либо воспользоваться командой для установки всех доступных драйверов:
console |
python -m pip install stimulsoft-reports[ext]
|
console |
python -m pip install stimulsoft-dashboards[ext]
|
Информация |
Для примеров кода использован Flask фреймворк, как один из самых популярных и простых для понимания кода. Допускается использовать любой Web фреймворк, т.к. все классы и функции для работы с генератором отчетов являются универсальными.
|
Для работы с генератором отчетов предназначен класс StiReport. При помощи данного класса, можно загрузить шаблон либо документ отчета, выполнить построение и экспортирование, обрабатывать запросы и управлять событиями генератора отчетов.
Например, требуется загрузить отчет из файла и выполнить его построение, после чего вывести сообщение в окне браузера:
app.py |
from flask import Flask, render_template, url_for, request from stimulsoft_reports.report import StiReport
app = Flask(__name__)
@app.route('/report', methods = ['GET', 'POST']) def report(): report = StiReport() report.onAfterRender += 'afterRender'
if report.processRequest(request): return report.getFrameworkResponse()
report.loadFile(url_for('static', filename='reports/SimpleList.mrt')) report.render()
js = report.javascript.getHtml() html = report.getHtml() return render_template('report.html', reportJavaScript = js, reportHtml = html) |
|
report.html |
<!DOCTYPE html> <html>
<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Render and Export a Report</title>
{{ reportJavaScript|safe }}
<script type="text/javascript"> function afterRender() { alert('Done!'); } </script> </head>
<body> {{ reportHtml|safe }} </body>
</html>
|
Полный код примера доступен на GitHub.
В этом примере последовательно выполняются следующие действия:
• | создается экземпляр объекта StiReport; |
• | добавляются необходимые обработчики событий; |
• | выполняется обработка текущего запроса; |
• | выполняется загрузка шаблона отчета из файла SipmleList.mrt, расположенного в директории статических файлов; |
• | вызывается команда построения отчета; |
• | в шаблоне HTML файла добавляется код JavaScript события и выполняется вывод необходимого JavaScript и HTML кода компонента. |
Метод report.processRequest(request) выполняет обработку текущего запроса, и возвращает результат работы. В случае успешной обработки, вместо шаблона страницы необходимо вернуть результат его выполнения. Более подробно про это рассказано в разделе Обработчик событий.
Метод report.javascript.getHtml() выполняет генерацию кода для подключения необходимых скриптов компонента. Метод report.getHtml() выполняет генерацию JavaScript и HTML кода самого компонента. Сгенерированный HTML код передается в качестве параметров в HTML шаблон report.html, в котором выводится в необходимых местах.
Наши продукты Stimulsoft Reports.PYTHON и Stimulsoft Dashboards.PYTHON не имеют нативного ядра генератора отчетов на Python, построение и экспорт отчета выполняется при помощи JavaScript кода на стороне клиента, либо на стороне сервера с использованием платформы Node.js. Поэтому, при использовании Python кода для работы с компонентами, необходимо вызвать один из специальных методов, который добавит на Web страницу соответствующий JavaScript код для выполнения всех необходимых действий, и HTML код визуальной части компонента.
Наименование |
Описание |
||||||
getHtml(mode = StiHtmlMode.HtmlScripts) |
Возвращает JavaScript и HTML код, необходимый для работы компонента, со всеми необходимыми действиями над отчетом. Параметр mode позволяет установить варианты возвращаемого кода:
Примечание: у элементов компонента, например объекта report.javascript, метод getHtml() не принимает параметров, поскольку имеет только один вариант вывода кода. |
||||||
renderHtml(elementId: str = None) |
Выводит JavaScript и HTML код, необходимый для работы компонента, со всеми необходимыми действиями над отчетом. Параметр elementId позволяет указать ID элемента HTML страницы, внутри которого будет выведен компонент. По умолчанию, вывод осуществляется в текущем месте страницы. |
||||||
printHtml() |
Выводит полностью подготовленную HTML страницу со всеми необходимыми скриптами для работы компонента. Текущий HTML шаблон страницы полностью игнорируется. Данный режим отлично подходит для полноэкранного просмотра либо редактирования отчета. |
Таким образом, указанные выше методы позволяют отобразить компонент различными способами в зависимости от требований. Пример упрощённого отображения компонента без использования HTML шаблона страницы:
app.py |
from flask import Flask, url_for, request from stimulsoft_reports.report import StiReport
app = Flask(__name__)
@app.route('/report', methods = ['GET', 'POST']) def report(): report = StiReport() report.onAfterRender += "alert('Done!');" if report.processRequest(request): return report.getFrameworkResponse()
report.loadFile(url_for('static', filename='reports/SimpleList.mrt')) report.render()
return report.getFrameworkResponse()
|
Информация |
При использовании платформы Node.js для построения отчета на стороне Python сервера, указанные методы будут вызваны автоматически внутри обработчика, их явное использование не требуется.
|
В данный момент реализована встроенная поддержка для трех популярных фреймворков Python - это Flask, Django и Tornado. Также доступны универсальные функции для работы в любых других фреймворках. Для примеров кода использован Flask фреймворк, как один из самых популярных и простых для понимания кода, развертывание продукта для него было рассмотрено выше. Ниже представлены примеры этого же кода для остальных фреймворков. Все они очень похожи и отличаются только функциями, используемыми для конкретного фреймворка.
Django
app.py |
from django.shortcuts import render from django.templatetags.static import static from stimulsoft_reports.report import StiReport
def report(request): report = StiReport() report.onAfterRender += 'afterRender'
if report.processRequest(request): return report.getFrameworkResponse()
report.loadFile(static('reports/SimpleList.mrt')) report.render()
js = report.javascript.getHtml() html = report.getHtml() return render(request, 'report.html', {'reportJavaScript': js, 'reportHtml': html})
|
report.html |
<!DOCTYPE html> <html>
<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Render and Export a Report</title>
{{ reportJavaScript|safe }}
<script type="text/javascript"> function afterRender() { alert('Done!'); } </script> </head>
<body> {{ reportHtml|safe }} </body>
</html>
|
Tornado
app.py |
import asyncio, os from tornado.web import Application, RequestHandler, url from stimulsoft_reports.report import StiReport
class ReportHandler(RequestHandler): def get(self): report = StiReport() report.onAfterRender += 'afterRender'
if report.processRequest(request): return report.getFrameworkResponse(self)
report.loadFile(self.static_url('reports/SimpleList.mrt')) report.render()
js = report.javascript.getHtml() html = report.getHtml() self.render('report.html', reportJavaScript = js, reportHtml = html)
def post(self): handler = StiHandler() if handler.processRequest(self.request): return handler.getFrameworkResponse(self)
|
report.html |
<!DOCTYPE html> <html>
<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Render and Export a Report</title>
{% raw reportJavaScript %} <script type="text/javascript"> function afterRender() { alert('Done!'); } </script> </head>
<body> {% raw reportHtml %} </body>
</html>
|
При использовании любого другого фреймворка, вместо метода getFrameworkResponse() необходимо использовать метод getResponse(), который вернёт объект StiResponse, содержащий все необходимые параметры для формирования ответа:
app.py |
from stimulsoft_reports.report import StiReport
def report(): report = StiReport() report.onAfterRender += 'afterRender' query = 'query string' body = 'post data' if report.processRequest(None, query, body): response = report.getResponse() data = response.data contentType = response.contentType mimetype = response.mimetype
report.loadFile(url_for('static', filename='reports/SimpleList.mrt')) report.render()
js = report.javascript.getHtml() html = report.getHtml()
|
Информация |
В большинстве случаев для работы с продуктом достаточно использовать только Python код, который обеспечивает взаимодействие со всеми основными возможностями. Для более детальной настройки продукта и использования всех возможностей JS генератора, необходимо использовать JavaScript код. Вариант развертывания продукта при помощи только JavaScript кода описан в разделе Reports and Dashboards for JS, в этом случае использование Python кода требуется только для подключения адаптеров данных.
|
Различные варианты развертывания и оптимизации рассмотрены в разделе Уменьшение времени загрузки скриптов.