В дизайнере предусмотрено два варианта сохранения отчета, которые доступны в главном меню и на главной панели дизайнера: Сохранить (Save) и Сохранить как (Save As). В свою очередь, каждый из этих вариантов сохранения имеет свои режимы и настройки.

 

 

Сохранение отчета на стороне JavaScript клиента

При нажатии кнопки Сохранить (Save), сохранение файла шаблона отчета осуществляется средствами браузера, для этого не требуется каких-либо настроек. При необходимости сохранения отчета своими методами, предназначено событие onSaveReport. В аргументах события будут переданы имя файла отчета и сам отчет. Отчет можно сохранить, например, в JSON строку и передать на сторону сервера своими методами.

 

app.py

 

from stimulsoft_reports.designer import StiDesigner

 

designer = StiDesigner()

designer.onSaveReport += 'saveReport'

 

 

designer.html

 

<script>

  function saveReport(args) {

      let fileName = args.fileName;

      let report = args.report;

 

      let jsonReport = report.saveToJsonString();

   }

</script>

 

 

 

Если событие определено, то после завершения события дизайнер продолжает работу без каких-либо дополнительных действий и сообщений. При необходимости, после сохранения отчета можно отобразить диалоговое окно с ошибкой или текстовым сообщением. Для этого предназначена специальная функция StiError.showError(). Вы сами определяете необходимость отображения сообщения об ошибке.

 

designer.html

 

<script>

  function saveReport(args) {

      let fileName = args.fileName;

      let report = args.report;

 

      // Error message

       Stimulsoft.System.StiError.showError("An error occurred while saving the report.");

 

      // Info message

       Stimulsoft.System.StiError.showError("The report was saved successfully.", true, true);

   }

</script>

 

 

 

При нажатии кнопки Сохранить как (Save As), будет отображено диалоговое окно с запросом имени файла отчета. После этого сохранение файла шаблона отчета будет осуществляться средствами браузера. При необходимости сохранения отчета своими методами, предназначено событие onSaveAsReport. В аргументах события будут переданы имя файла отчета и сам отчет.

 

Работа данного события не отличается от работы события onSaveReport, за исключением того, что после завершения события произойдет автоматическое сохранение шаблона отчета на компьютере средствами браузера. Для предотвращения этого действия, достаточно установить свойство preventDefault в значение true в аргументах события, в этом случае автоматическое сохранение не будет выполнено.

 

app.py

 

from stimulsoft_reports.designer import StiDesigner

 

designer = StiDesigner()

designer.onSaveAsReport += 'saveAsReport'

 

 

designer.html

 

<script>

  function saveAsReport(args) {

       args.preventDefault = true;

   }

</script>

 

 

 

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

 

designer.html

 

<script>

  function saveAsReport(args) {

      // Report name from the designer save dialog

       var reportName1 = args.fileName;

 

      // Original report name from properties

       var reportName2 = args.report.reportName;

   }

</script>

 

 

 

Подробное описание доступных значений аргументов находится в разделе События дизайнера.

 

 

Сохранение отчета на стороне Python сервера

Для сохранения отчета на стороне Python сервера, достаточно определить событие onSaveReport, в аргументах события будут переданы имя файла отчета и сам отчет в виде объекта. Для сохранения отчета можно воспользоваться стандартными функциями, например сохрани редактируемый отчет в виде файла в заданной директории:

 

app.py

 

import json

import os

from stimulsoft_reports import StiResult

from stimulsoft_reports.designer import StiDesigner

from stimulsoft_reports.events import StiReportEventArgs

from stimulsoft_reports.report import StiReport

 

def saveReport(args: StiReportEventArgs):

   filePath = os.path.normpath(os.getcwd() + '\\static\\reports\\' + args.fileName)

  try:

      with open(filePath, mode='w', encoding='utf-8') as file:

           jsonReport = json.dumps(args.report, indent = 4)

           file.write(jsonReport)

           file.close()

  except Exception as e:

      return StiResult.getError(str(e))

 

  return f'The report was successfully saved to a {args.fileName} file.'

 

designer = StiDesigner()

designer.onSaveReport += saveReport

 

 

 

Аналогичным образом реализована работа события onSaveAsReport на стороне Python сервера, все аргументы события имеют те же имена и значения.

 

Подробное описание доступных значений аргументов находится в разделе События дизайнера.