Сохранение отчета
В дизайнере предусмотрено два варианта сохранения отчета, которые доступны в главном меню и на главной панели дизайнера: Сохранить (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 сервера, все аргументы события имеют те же имена и значения.
Подробное описание доступных значений аргументов находится в разделе События дизайнера.