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

 

 

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

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

 

Пример сохранения отчета в JSON строку на стороне JavaScript клиента для дальнейшего использования в приложении:

 

designer.php

 

<?php

use Stimulsoft\Report\StiReport;

use Stimulsoft\Designer\StiDesigner;

 

$designer = new StiDesigner();

$designer->onSaveReport = 'saveReport';

$designer->process();

 

$report = new StiReport();

$report->loadFile('reports/SimpleList.mrt');

$designer->report = $report;

?>

 

...

 

<script>

function saveReport(args) {

let fileName = args.fileName;

let report = args.report;

let reportJson = args.report.saveToJsonString();

...

}

</script>

 

 

 

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

 

designer.php

 

<script>

function saveReport(args) {

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

 

designer.php

 

<script>

function saveReport(args) {

args.preventDefault = true;

}

</script>

 

 

 

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

 

designer.php

 

<script>

function saveReport(args) {

// Report name from the designer save dialog

let reportName1 = args.fileName;

 

// Original report name from properties

let reportName2 = args.report.reportName;

}

</script>

 

 

 

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

 

 

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

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

 

Пример сохранения редактируемого отчета в виде файла в заданной директории:

 

designer.php

 

<?php

use Stimulsoft\Report\StiReport;

use Stimulsoft\Designer\StiDesigner;

use Stimulsoft\Events\StiReportEventArgs;

 

$designer = new StiDesigner();

$designer->onSaveReport = function (StiReportEventArgs $args) {

$reportJson = $args->getReportJson();

file_put_contents('reports/' . $reportFileName, $reportJson);

};

 

$designer->process();

 

$report = new StiReport();

$report->loadFile('reports/SimpleList.mrt');

$designer->report = $report;

 

$designer->printHtml();

?>

 

 

 

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

 

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

 

Информация

 

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