Scripts
- 4 minutes to read
This document describes the most common scenarios of using report scripts.
Enable Scripts
In a new Report and Dashboard Server installation, scripts are disabled for security reasons. It is not recommended that you change this behavior.
If you need to disable security restrictions for any reason (for example, to save logs), go to the Administrative Panel’s General Settings section and set the Report Script Execution Mode option to Unrestricted.
Script Editor
Each report element has its own set of events that can be handled by the Script Editor. To handle an event of a report element, do the following.
- Click the Scripts button () located on the Report Designer’s toolbar.
In the invoked Script Editor, specify the report control and an available event for this control.
After the event is chosen, a code template is generated in the current scripting language.
To check for errors in the report’s script, click the Validate button ().
If an error is found, the string that contains this error is marked with the icon. When a mouse pointer hovers over this icon, the error text is displayed.
Enable Logging
To use NLog for debug tracing when scripts are enabled, specify the corresponding nlog configuration in the Web.config file of the worker service. This file is located in the directory where you installed the Report and Dashboard Server (“C:\Program Files (x86)\DevExpress\Report Server\Web\Worker” by default).
<logger name="ScriptingNamespace.ScriptingReport" minLevel="Trace" writeTo="file" />
The following example illustrates how to use NLog in a script.
static readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
private void Report_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {
logger.Info("This is a test.");
}
Access User Information
To access information about the current user in report scripts, use the ReportContext functionality. The following code displays the current user e-mail in a report.
private void label1_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {
if(ReportContext.Current != null) {
((XRLabel)sender).Text = ReportContext.Current.UserEmail;
}
}
The report context information is available only when a report is being viewed on a client. When a report is generated by the Scheduler, the ReportContext.Current property will return null.
Access Data Source Settings
The following code handles a report’s DataSourceDemanded event to access the report’s data source in scripts.
private void XtraReport_DataSourceDemanded(object sender, EventArgs e) {
var report = sender as XtraReport;
var dataSource = report.DataSource as
DevExpress.ReportServer.Infrastructure.Data.ReportServerDataSource;
dataSource.Filters["Products"] = "[CategoryID] = " + report.Parameters["CategoryId"].Value;
}
The following code accesses and customizes parameters of a stored procedure in scripts.
using System.Linq;
private void XtraReport_DataSourceDemanded(object sender, EventArgs e) {
var report = sender as XtraReport;
var dataSource = report.DataSource as
DevExpress.ReportServer.Infrastructure.Data.ReportServerDataSource;
var Beginning_Date = dataSource.Parameters["Sales by Year"].First(p =>
p.Name.Equals("@Beginning_Date"));
var Ending_Date = dataSource.Parameters["Sales by Year"].First(p =>
p.Name.Equals("@Ending_Date"));
if (report.Parameters[0].Value.ToString() == "Today") {
var now = DateTime.Now;
Beginning_Date.Value = new DateTime(now.Year, now.Month, now.Day);
Ending_Date.Value = ((DateTime)Beginning_Date.Value).AddDays(1).AddTicks(-1);
}
}
The following code accesses the settings of a multi-value data source parameter and selects all available values in the ParametersRequestBeforeShow event handler.
using System.Linq;
using DevExpress.XtraReports.Parameters;
using DevExpress.Data.Browsing;
using DevExpress.ReportServer.Infrastructure.Data;
private void XtraReport_ParametersRequestBeforeShow(object sender, ParametersRequestEventArgs e) {
var report = sender as XtraReport;
var parameter = report.Parameters["CategoryNames"];
var paramSource = ((DynamicListLookUpSettings)parameter.LookUpSettings).DataSource
as ReportServerDataSource;
((IListAdapter)paramSource).FillList(null);
var dataContext = ((IServiceProvider)report).GetService(typeof(DataContext)) as DataContext;
var values = LookUpHelper.GetLookUpValues(parameter.LookUpSettings, dataContext).Select(x =>
(string)x.Value).ToArray();
parameter.Value = values;
}