Генератор отчетов позволяет использовать переменные в выражениях, запросах, фильтрах и других элементах отчета. Предусмотрена возможность предварительного просмотра и изменения значений переменных из кода перед построением отчета.

 

Значения переменных шаблона отчета

Генератор отчетов позволяет легко получить прямой доступ к переменным в шаблоне отчета через словарь данных. Для этого достаточно определить событие onBeforeRender у объекта отчета, в аргументах которого на стороне клиента будет передан JavaScript объект отчета. Подробное описание доступных значений аргументов находится в разделе События генератора отчетов..

 

Для доступа к переменной отчета, необходимо использовать JavaScript функцию getByName() у коллекции переменных в словаре данных отчета. Для изменения значения переменной, достаточно присвоить его в свойстве value, при этом нет необходимости проверять установленный тип переменной - преобразование типов будет выполнено автоматически. Например, требуется изменить строковое и целочисленное значение указанных переменных:

 

app.py

 

from stimulsoft_reports.report import StiReport

 

report = StiReport()

report.onBeforeRender += 'beforeRender'

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

report.render()

 

 

report.html

 

<script>

  function beforeRender(args) {

      let report = args.report;

 

      let variableString = report.dictionary.variables.getByName("VariableString");

       variableString.value = "Text value";

 

      let variableInt = report.dictionary.variables.getByName("VariableInt");

       variableInt.value = "20";

   }

</script>

 

 

Информация

 

Значения переменных будут изменены в самом шаблоне отчета, и при его последующем сохранении будут сохранены в файле. Для изменения значений переменных без изменения шаблона, можно воспользоваться событием onPrepareVariables, которое вызывается при подготовке значений переменных отчета перед его построением.

 

 

 

Прямой доступ к переменным в шаблоне отчета на стороне Python сервера не предусмотрен.

 

 

Значения переменных при построении отчета

Генератор отчетов позволяет легко получить доступ к переменным перед построением отчета. Для этого достаточно определить событие onPrepareVariables у объекта отчета. В аргументах события будет передана коллекция переменных отчета с их типами и значениями. Если переменная инициализируется как выражение, то в коллекцию будет передано уже подсчитанное значение выражения. Подробное описание доступных значений аргументов находится в разделе События генератора отчетов.

 

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

 

app.py

 

from stimulsoft_reports.report import StiReport

 

report = StiReport()

report.onPrepareVariables += 'prepareVariables'

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

report.render()

 

 

report.html

 

<script>

  function prepareVariables(args) {      

       args.variables = [

           {

               name: "VariableString",

               type: "String",

               value: "Text value"

           },

           {

               name: "VariableInt",

               type: "Int32",

               value: 20

           }

       ];

</script>

 

 

 

В событии на стороне Python сервера коллекция переменных представляет собой словарь из объектов типа StiVariable, в каждом объекте хранится имя переменной, тип переменной и значение. Ключ словаря соответствует имени переменной отчета.

 

app.py

 

from stimulsoft_reports.report import StiReport

from stimulsoft_reports.events import StiVariablesEventArgs

 

def prepareVariables(args: StiVariablesEventArgs):

   variableName = args.variables['Variable1'].name

   variableType = args.variables['Variable1'].typeName

   variableValue = args.variables['Variable1'].value

 

report = StiReport()

report.onPrepareVariables += prepareVariables

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

report.render()

 

 

 

Допустимо изменять значения переменных, при этом тип нового значения должен соответствовать типу изменяемой переменной. Для изменения значения достаточно присвоить новое значение для свойства переменной value, например:

 

app.py

 

from stimulsoft_reports.events import StiVariablesEventArgs

 

def prepareVariables(args: StiVariablesEventArgs):

   args.variables['VariableString'].value = 'Value from Server-Side'

   args.variables['VariableInt'].value = 123

   args.variables['VariableDecimal'].value = 123.456

 

 

 

 

Переменные типа DateTime передаются в виде объекта типа datetime, для изменения его значения достаточно присвоить новый объект datetime, например:

 

app.py

 

from datetime import datetime

from stimulsoft_reports.events import StiVariablesEventArgs

 

def prepareVariables(args: StiVariablesEventArgs):

   args.variables['VariableDateTime'].value = datetime.today()

 

 

 

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

 

app.py

 

from stimulsoft_reports.events import StiVariablesEventArgs

 

def prepareVariables(args: StiVariablesEventArgs):

   args.variables['VariableStringRange'].value['from'] = 'Aaa'

   args.variables['VariableStringRange'].value['to'] = 'Zzz'

 

 

 

Для изменения значения переменной типа List, необходимо обратиться к значению списка по его индексу. Допускается установка значений сразу всего списка в виде подготовленного массива, например:

 

app.py

 

from stimulsoft_reports.events import StiVariablesEventArgs

 

def prepareVariables(args: StiVariablesEventArgs):

   args.variables['VariableStringList'].value[0] = 'Test'

   args.variables['VariableIntList'].value = [1, 22, 333]

 

 

 

Также, допускается создание новой переменной отчета, если это необходимо. Для создания новой переменной, не определенной в отчете, необходимо добавить в словарь переменных новый объект типа StiVariable, используя новое имя переменной. После этого переменную можно использовать для построения отчета, то есть в шаблоне отчета переменная сохранена не будет.

 

app.py

 

from stimulsoft_reports.report import StiVariable

from stimulsoft_reports.report.enums import StiVariableType

 

def prepareVariables(args: StiVariablesEventArgs):

   args.variables['NewVarInt'] = StiVariable('NewVarInt', StiVariableType.INT, 10)

 

 

 

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

 

Информация

 

Если переменная используется в SQL запросе в виде выражения, т.е. записана в фигурных скобках, например {VariableName}, то ее значение не будет автоматически экранировано. Вам необходимо самим следить за безопасностью значений, либо использовать переменную как параметр запроса, например @VariableName. Подробное описание работы параметров находится в разделе Подключение SQL адаптеров данных.

 

 

 

Переменные отчета, передаваемые в URL запросе

Генератор отчетов имеет возможность автоматически присваивать значения переменных, переданных в URL запросе. Для этого необходимо установить свойство passQueryParametersToReport в значение True у обработчика событий:

 

app.py

 

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

def report():

   report = StiReport()

   report.handler.passQueryParametersToReport = True

  if report.processRequest(request):

      return report.getFrameworkResponse()

 

 

 

Все остальные действия генератор отчетов сделает автоматически. Если переменная присутствует в отчете, то ее значение будет изменено на значение из URL запроса. Если такой переменной в отчете нет - она будет создана для построения отчета, то есть в шаблоне отчета новая переменная сохранена не будет. Имена переменных, передаваемых в URL запросе, не чувствительны к регистру.

 

Информация

 

Все значения переменных будут присвоены до вызова события onPrepareVariables, таким образом в этом событии можно дополнительно контролировать установленные значения, и при необходимости выполнять их корректировку.