Примеры

 

Полный код примера можно найти на 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-проект, предназначен класс StiDesigner. При помощи данного класса можно создать объект дизайнера, установить необходимые настройки, обработать запрос и вернуть результат его выполнения, получить подготовленный JavaScript и HTML код компонента. Пример отображения дизайнера на HTML странице:

 

app.py

 

from flask import Flask, render_template, url_for, request

from stimulsoft_reports.designer import StiDesigner

 

app = Flask(__name__)

 

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

def designer():

   designer = StiDesigner()

   designer.options.appearance.fullScreenMode = True

 

  if designer.processRequest(request):

      return designer.getFrameworkResponse()

 

   js = designer.javascript.getHtml()

   html = designer.getHtml()

  return render_template('designer.html', designerJavaScript = js, designerHtml = html)

 

 

designer.html

 

<!DOCTYPE html>

<html>

 

<head>

   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

   <title>Editing a Report Template in the Designer</title>

 

  {{ designerJavaScript|safe }}

</head>

 

<body>

  {{ designerHtml|safe }}

</body>

 

</html>

 

 

 

В этом примере создается экземпляр объекта StiDesigner и задаются необходимые настройки.

 

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

 

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

 

Информация

 

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

 

 

 

Предусмотрено упрощенное развертывание дизайнера без использования HTML шаблона страницы. Например, этот же пример можно реализовать, использовав только Python код:

 

app.py

 

from flask import Flask, url_for, request

from stimulsoft_reports.designer import StiDesigner

 

app = Flask(__name__)

 

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

def designer():

   designer = StiDesigner()

   designer.options.appearance.fullScreenMode = True

 

  if designer.processRequest(request):

      return designer.getFrameworkResponse()

 

  # Here is the code for working with the report

 

  return designer.getFrameworkResponse()

 

 

 

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

 

Информация

 

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

 

 

 

Для формирования ответа используется функция getFrameworkResponse(), которая возвращает готовый объект, подходящий для используемого в данный момент Web-фреймворка. Текущий фреймворк определяется в момент обработки запроса. Наши компоненты поддерживают работу с такими популярными фреймворками, как Django, Flask, Tornado. Для обработки запроса и формирования ответа в Web-проектах, не использующих указанные фреймворки, необходимо передать текущие GET и POST данные в функцию обработки запроса, а для формирования ответа воспользоваться функцией getResponse(), которая вернет все необходимые данные. Например, обработку событий дизайнера можно реализовать указанным ниже способом:

 

app.py

 

from flask import Flask, make_response, render_template, url_for, request

from stimulsoft_reports.designer import StiDesigner

 

app = Flask(__name__)

 

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

def designer():

   designer = StiDesigner()

   designer.options.appearance.fullScreenMode = True

 

   query = request.args.to_dict()

   body = request.get_data(False)

  if designer.processRequest(None, query, body):

       designerResponse = designer.getResponse()

       response = make_response(designerResponse.data)

       response.mimetype = designerResponse.mimetype

       response.headers.add('Access-Control-Allow-Origin', request.origin)

      return response

 

   js = designer.javascript.getHtml()

   html = designer.getHtml()

  return render_template('designer.html', designerJavaScript = js, designerHtml = html)