VBScript expressions are widely used throughout a report definition to retrieve, calculate, display, group, sort, filter, parameterize, and format the contents of a report. Some expressions are created for you automatically (for example, when you drag a field from the Toolbox onto a section of your report, an expression that retrieves the value of that field is displayed in the text box). However, in most cases, you create your own expressions to provide more functionality to your report.
Note the following differences between VBScript expressions and statements:
Field1.Text.Expression = "iif( 1=1, 1+2, 1+3 )"
c1FlexReport.OnOpen = "if 1=1 then msgbox("OK!!!") else msgbox("ooops")"
C1FlexReport relies on VBScript to evaluate expressions in calculated fields and to handle report events.
VBScript is a full-featured language, and you have access to all its methods and functions when writing C1FlexReport expressions. For the intrinsic features of the VBScript language, refer to the Microsoft Developer's Network (MSDN).
Global Scripts can be written in the new VBScript Editor. This editor allows users to define VBScript functions and subroutines that are accessible throughout the report. To directly access the VBScript Editor, press F7 and to close the editor and save the changes, use the shortcut key Ctrl+W. Users can switch between scripts and also change options such as fonts or colors within the editor. The editor also makes the scripting experience intuitive and easy for developers with advanced features such as syntax check, pre-defined VBScript functions, and rearranged scripting functions.
To write global scripts using VBScript Editor option,
function Backcolor()
Detail.Backcolor=rgb(255,0,0)
end function
You can also write global scripts using GlobalScripts property of FlexReportDesigner as follows:
So, you have defined a global function 'Backcolor()', which can be used throughout the report.
The VBScript Editor has the following additional features:
C1FlexReport extends VBScript by exposing additional objects, variables, and functions. These extensions are described in the following sections.
Aggregate functions are used to summarize data over the group being rendered. When used in a report header field, these expressions return aggregates over the entire dataset. When used in group headers or footers, they return the aggregate for the group.
All FlexReport aggregate functions take two arguments:
FlexReport defines the following aggregate functions:
Function | Description |
---|---|
Avg | Average value of the expression within the current group. For example, the following expression calculates the average sales for the whole group and the average sales for a certain type of product: Avg(SalesAmount) |
Sum | Sum of all values in the group. |
Count | Count of records in the group with non-null values. Use an asterisk for the expression to include all records. For example, the following expressions count the number of employees with valid (non-null) addresses and the total number of employees: Count(Employees.Address) |
CountDistinct | Count of records in the group with distinct non-null values. |
Min, Max | Minimum and maximum values for the expression. For example: "Min Sale = " & Max(SaleAmount) |
Range | Range between minimum and maximum values for the expression. |
StDev, Var | Standard deviation and variance of the expression in the current group. The values are calculated using the sample (n-1) formulas, as in SQL and Microsoft Excel. |
StDevP, VarP | Standard deviation and variance of the expression in the current group. These values are calculated using the population (n) formulas, as in SQL and Microsoft Excel. |
Median | Returns median from the values in the group. |
Mode | Returns mode from the values in the group. |
To use the aggregate functions, add a calculated field to a Header or Footer section, and assign the expression to the field's Text property.
For example, the "Employee Sales by Country" report in the sample NWind.xml file contains several aggregate fields. The report groups records by Country and by Employee.
The SalespersonTotal field in the Footer section of the Employee group contains the following expression:
=Sum([SaleAmount])
Because the field is in the Employee group footer, the expression returns the total sales for the current employee.
The CountryTotal and GrandTotal fields contain exactly the same expression. However, because these fields are in the Country group footer and report footer, the expression returns the total sales for the current country and for the entire recordset.
You may need to refer to a higher-level aggregate from within a group. For example, in the "Employee Sales by Country" report, there is a field that shows sales in the current country as a percentage of the grand total. Since all aggregates calculated within a country group refer to the current country, the report cannot calculate this directly. Instead, the PercentOfGrandTotal field uses the following expression:
=[CountryTotal]/[GrandTotal]
CountryTotal and GrandTotal are fields located in the Country and Report Footer sections. Therefore, CountryTotal holds the total for the current country and GrandTotal holds the total for the whole recordset.
It is important to realize that evaluating aggregate functions is time-consuming, since it requires the control to traverse the recordset. Because of this, you should try to use aggregate functions in a few calculated fields only. Other fields can then read the aggregate value directly from these fields, rather than evaluating the aggregate expression again.
For example, the "Employee Sales by Country" report in the NorthWind database has a detail field, PercentOfCountryTotal, that shows each sale as a percentage of the country's total sales. This field contains the following expression:
=[SaleAmount]/[CountryTotal]
SaleAmount is a reference to a recordset field, which varies for each detail record. CountryTotal is a reference to a report field that contains an aggregate function. When the control evaluates this expression, it gets the aggregate value directly from the report field, and does not recalculate the aggregate.
For the complete report, see report "Employee Sales by Country" in the Nwind.xml report definition file, which is available in the ComponentOne Samples folder.