Примеры

 

Полный код примера можно найти на GitHub по данной ссылке.

 

 

 

Для использования генератора отчетов достаточно установить пакет stimulsoft-reports либо stimulsoft-dashboards при помощи установщика пакетов, выполнив следующую команду:

 

console

 

python -m pip install stimulsoft-reports

 

 

console

 

python -m pip install stimulsoft-dashboards

 

 

 

Будет установлена последняя доступная версия генератора отчетов в текущее рабочее пространство, после этого можно использовать классы и функции по работе с отчетами.

 

По умолчанию устанавливается минимальный набор драйверов данных. Необходимые драйверы можно дополнительно установить вручную, либо воспользоваться командой для установки всех доступных драйверов:

 

console

 

python -m pip install stimulsoft-reports[ext]

 

 

console

 

python -m pip install stimulsoft-dashboards[ext]

 

 

Информация

 

Для примеров кода использован Flask фреймворк, как один из самых популярных и простых для понимания кода. Допускается использовать любой Web фреймворк, т.к. все классы и функции для работы с генератором отчетов являются полностью независимыми.

 

 

 

Для работы с генератором отчетов в Web проекте, предназначен класс StiReport. При помощи данного класса, можно создать отчет, загрузить отчет из файла либо строки, построить отчет, вызвать экспорт отчета. Например, требуется загрузить отчет из файла и выполнить его построение и экспортирование в HTML формат на стороне клиента:

 

app.py

 

from flask import Flask, render_template, url_for, request

from stimulsoft_reports.report import StiReport

from stimulsoft_reports.report.enums import StiExportFormat

 

app = Flask(__name__)

 

@app.route('/report', methods = ['GET', 'POST'])

def report():

   report = StiReport()

   if report.processRequest(request):

       return report.getFrameworkResponse()

 

   report.loadFile(url_for('static', filename='reports/SimpleList.mrt'))

   report.render()

   report.exportDocument(StiExportFormat.HTML)

 

   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 }}

</head>

 

<body>

{{ reportHtml|safe }}

</body>

 

</html>

 

 

 

В этом примере последовательно выполняются следующие действия:

создается экземпляр объекта StiReport;
выполняется обработка текущего запроса;
выполняется загрузка шаблона отчета из файла SipmleList.mrt, расположенного в директории статических файлов;
вызывается команда построения и экспортирования отчета;
генерируется JavaScript и HTML код для работы с генератором отчетов, который передается в HTML шаблон.

 

Специальная функция report.processRequest(request) выполняет обработку текущего запроса, и если она возвращает True, значит запрос предназначен для генератора отчетов (например чтение базы данных, вызов события), то вместо шаблона страницы необходимо вернуть результат его выполнения. Более подробно про это рассказано в разделе Обработчик событий.

 

Для генерации JavaScript и HTML кода компонентов, необходимых для работы генератора отчетов, используются два основных метода: report.javascript.getHtml() генерирует HTML код для подключения необходимых ресурсов генератора, report.getHtml() генерирует HTML код для работы с самим генератором отчетов. Сгенерированный HTML код передается в качестве параметров в HTML шаблон report.html, в котором выводится в необходимых местах.

 

Информация

 

Наши продукты Stimulsoft Reports.PYTHON и Stimulsoft Dashboards.PYTHON не имеют нативного ядра генератора отчетов на Python, построение и экспорт отчета выполняется при помощи JavaScript кода на стороне клиента, либо на стороне сервера с использованием платформы Node.js. Поэтому, при использовании Python кода для работы с компонентами, необходимо вызвать функцию getHtml(), которая вернет весь необходимый JavaScript код для добавления на Web страницу. При использовании платформы Node.js, указанные методы будут вызваны автоматически внутри обработчика.

 

 

 

Поддержка фреймворков

В данный момент реализована встроенная поддержка для трех основных фреймворков для 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

from stimulsoft_reports.report.enums import StiExportFormat

 

def report(request):

   report = StiReport()

   if report.processRequest(request):

      return report.getFrameworkResponse()

 

   report.loadFile(static('reports/SimpleList.mrt'))

   report.render()

   report.exportDocument(StiExportFormat.HTML)

 

   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 }}

</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

from stimulsoft_reports.report.enums import StiExportFormat

 

class ReportHandler(RequestHandler):

   def get(self):

       report = StiReport()

       if report.processRequest(request):

           return report.getFrameworkResponse(self)

 

       report.loadFile(self.static_url('reports/SimpleList.mrt'))

       report.render()

       report.exportDocument(StiExportFormat.HTML)

 

       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 %}

</head>

 

<body>

  {% raw reportHtml %}

</body>

 

</html>

 

 

 

Универсальные функции

 

app.py

 

from stimulsoft_reports.report import StiReport

from stimulsoft_reports.report.enums import StiExportFormat

 

def report():

   report = StiReport()

   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()

   report.exportDocument(StiExportFormat.HTML)

 

   js = report.javascript.getHtml()

   html = report.getHtml()

 

 

Информация

 

В большинстве случаев для работы с продуктом достаточно использовать только Python код, который обеспечивает взаимодействие со всеми основными возможностями. Для более детальной настройки продукта и использования всех возможностей JS генератора, необходимо использовать JavaScript код. Вариант развертывания продукта при помощи только JavaScript кода описан в разделе Reports and Dashboards for JS, в этом случае использование Python кода требуется только для подключения адаптеров данных.

 

 

 

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