Для использования генератора отчетов достаточно установить пакет 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 позволяет установить варианты возвращаемого кода:

StiHtmlMode.Scripts – только необходимый JavaScript код для вставки в блок <script></script> на HTML странице;
StiHtmlMode.HtmlScripts – необходимый JavaScript и HTML код, для вставки в HTML элемент на странице;
StiHtmlMode.HtmlPage – полностью подготовленная HTML страница.

 

Примечание: у элементов компонента, например объекта 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 кода требуется только для подключения адаптеров данных.

 

 

 

Различные варианты развертывания и оптимизации рассмотрены в разделе Уменьшение времени загрузки скриптов.