# Config File XML Reference

This reference guide describes the structure of the config file XML elements. Use this guide if you build or edit your config XML directly, without using the Admin Console.

Note: For the "settings" nodes within <general></general>, see Config File and API Setting Reference.

The config file's outer nodes are as follows:

    <?xml version="1.0" standalone="yes"?>
    <webreports></webreports>

All following nodes are within the <webreports> element.

### About this guide

XML objects are represented in tables with the following format:

Node | Description | Type | Required

Node is the XML node name. Nodes in bold font are objects, which are represented in a below table.

Description is the Admin Console field. If there is no mapped field, or the field is implicit, the description is in italic font.

Type is the value type. If the type is a constant or enum, the possible values are listed below the table. Constants are case sensitive.

Required indicates whether the node requires a value. (1+) indicates that there can be multiple nodes.

# Data Sources

Outer node: <datasource></datasource>

Node | Description | Type | Required
id | Unique Id | int | yes
name | Name | string | yes
dbtype | Type | constant | yes
dataconnstr | Connection String | string | yes
schema | Schema/Owner Name | string | no
odbcdelim | Column Delimiter(s) | string | no

Possible values for dbtype: mssql, mysql, oracle, postgres, db2, informix, websvc, assembly, file, msolap, odbc

### Example

    <datasource>
      <id>0</id>
      <name>Northwind</name>
      <dbtype>odbc</dbtype>
      <schema>dbo</dbtype>
      <dataconnstr>DRIVER=SQLite3 ODBC Driver;Database=C:\Northwind.sqlite;</dataconnstr>
      <odbcdelim>`</odbcdelim>
    </datasource>

# Data Objects

Outer node: <entity></entity>

Node | Description | Type | Required
id | Id | string | no
entity_name | Alias | string | no
db_name | Name | string | yes
sql_stmt | Custom SQL Object | string | no
category | Category | string | no
datasource_id | Id of data source | int | yes
object_type | Object type | constant | yes
schema_access_type | Schema Access Type | constant | no
key | Unique Key Fields | object | yes (1+)
param | Parameters | object | no (1+)
tenant | Tenant Columns | object | no (1+)
filter_dropdown | Filter Dropdown Object | object | no
column_metadata | Column Metadata | object | no (1+)
transform | Vertical table transform | object | no
affinity | (v2018.1+) Report or config affinity | constant | no
suppress_sort_filter | (v2018.1+) Suppress Sort and Filter | boolean | no

Possible values for object_type: table, view, procedure, function, assembly, sqlstmt, websvc, file

Possible values for schema_access_type: Metadata, Datasource

Possible values for affinity: Global, Report

### key

Node | Description | Type | Required
col_name | Column name | string | yes

### param

Node | Description | Type | Required
id | Parameter name | string | yes

### tenant

Node | Description | Type | Required
col_name | Column name | string | yes
parameter_id | Parameter name | string | yes

### filter_dropdown

Node | Description | Type | Required
db_name | Data object name | string | yes
sql_stmt | SQL statement | string | no
datasource_id | Id of data source | int | yes
object_type | Object type | constant | yes

Possible values for object_type: table, view, procedure, function, assembly, sqlstmt, websvc, file

### column_metadata

Node | Description | Type | Required
col_source | Specify as custom col | constant | no
col_name | Column name | string | yes
col_description | Column Description | string | no
col_type | Data Type | constant | no
col_alias | Column Alias | string | no
visible | Visible | bool | no
filterable | Filterable | constant | no
sortable | Sortable | bool | no
col_sortandgroupbyvalue | Sort and Group-By Value | string | no
col_value | Column Value | string | no

Possible values for col_source: ExagoFormula

Possible values for col_type: string, date, datetime, time, int, decimal, image, float, boolean, guid, currency

Possible values for filterable: All, Dynamic, Static, None

### transform

Node | Description | Type | Required
col_name | Data field names column | string | yes
val_name | Data values column | string | yes
datatype_name | Data types column | string | no
non_transform_col | Fields exempt from transform | object | no

### non_transform_col

Node | Description | Type | Required
col_name | Data field name | string | yes
data_type | Data type | enum | no

Possible values for data_type: 0: string, 1: date, 2: datetime, 3: time, 4: integer, 5: decimal, 6: float, 7: bit, 8: guid, 9: image, 10: currency

### Example

    <entity>
      <id>ODE</id>
      <entity_name>OrderDetails</entity_name>
      <db_name>OrderDetail</db_name>
      <sql_stmt>SELECT *</sql_stmt>
      <category>Order Information</category>
      <datasource_id>1</datasource_id>
      <object_type>table</object_type>
      <key>
        <col_name>OrderId</col_name>
      </key>
      <key>
        <col_name>ProductId</col_name>
      </key>
      <param>
        <id>count</id>
      </param>
      <tenant>
        <col_name>CategoryName</col_name>
        <parameter_id>count</parameter_id>
      </tenant>
      <filter_dropdown>
        <db_name>Category</db_name>
        <sql_stmt>SELECT *</sql_stmt>
        <datasource_id>-1</datasource_id>
        <object_type>table</object_type>
      </filter_dropdown>
      <column_metadata>
        <col_source>ExagoFormula</col_source>
        <col_name>Total</col_name>
        <col_type>currency</col_type>
        <col_alias>Total</col_alias>
        <filterable>false</filterable>
        <col_value>{ODE.Quantity}*({ODE.UnitPrice}-{ODE.Discount})</col_value>
      </column_metadata>
      <column_metadata>
        <col_name>UnitPrice</col_name>
        <col_type>currency</col_type>
      </column_metadata>
    </entity>

# Joins

Outer node: <join></join>

Note: For entity names, use Id if set, otherwise use db_name.

Node | Description | Type | Required
entity_from_name | From object (left) | string | yes
entity_to_name | To object (right) | string | yes
join_type | Join Type | constant | yes
relation_type | Relation Type | constant | yes
weight | Weight | int | yes
joincol | Join Columns (deprecated in v2017.2) | object | yes (1+)
clause | Join Clause (v2017.2+) | object | yes (1+)
affinity | Join affinity (v2018.1+) | constant | yes

Possible values for join_type: inner, leftouter, rightouter, fullouter

Possible values for relation_type: 11: one to one, 1M: one to many

Possible values for affinity: Global, Report

### joincol (deprecated in v2017.2)

Node | Description | Type | Required
col_from_name | From column (left) | string | yes
col_to_name | To column (right) | string | yes

### clause (v2017.2+)

Node | Description | Type | Required
left_entity | From object (left) (v2017.3+) * | string | no
left_side | From expression (left) | string | yes
right_side | To expression (right) | string | yes
conjunction | Joining conjunction | constant | yes
comparison | Comparison operator | constant | yes
left_side_type | From expression type | constant | yes
right_side_type | To expression type | constant | yes
level | Parenthesis nesting level | int | yes

* left_entity overrides the base (implicit) from object entity_from_name for the specific join clause; this is necessary for some uses of the IN operator

Possible values for conjunction: AND, OR

Possible values for comparison: EQ (=), NE (<>), LT (<), GT (>), LE (<=), GE (>=), IN

Possible values for left_side_type, right_side_type: Column, Constant, SubQuery, Expression

### Example

    <join>
      <entity_from_name>PRO</entity_from_name>
      <entity_to_name>CAT</entity_to_name>
      <clause>
        <left_side>ProductId</left_side>
        <right_side>CategoryId</right_side>
        <conjunction>AND</conjunction>
        <comparison>EQ</comparison>
        <right_side_type>Column</right_side_type>
        <left_side_type>Column</left_side_type>
        <level>0</level>
      </clause>
    </join>

# Parameters

Outer node: <parameter></parameter>

Node | Description | Type | Required
id | Name | string | yes
data_type | Type | constant | yes
value | Value | string | no
hidden | Hidden | bool | yes
prompt_text | Prompt Text | string | no
parameter_dropdown | Parameter Dropdown Object | object | no

Possible values for data_type: string, date, integer, decimal

### parameter_dropdown

Node | Description | Type | Required
db_name | Database object name | string | yes
sql_stmt | SQL statement | string | no
datasource_id | Unique Id of data source | int | yes
object_type | Object type | constant | yes
value_field | Value Field | string | yes
display_value_field | Display Value Field | string | no
display_data_type | Display Type | constant | yes
sp_params | Stored proc parameters | string | no

Possible values for object_type: table, view, procedure, function, assembly, sqlstmt, websvc, file

Possible values for display_data_type: string, date, integer, decimal

### Example

    <parameter>
      <id>count</id>
      <data_type>integer</data_type>
      <hidden>False</hidden>
      <prompt_text />
      <parameter_dropdown>
        <db_name>Category</db_name>
        <sql_stmt />
        <datasource_id>1</datasource_id>
        <object_type>view</object_type>
        <value_field>Category_View</value_field>
        <display_value_field />
        <display_data_type>string</display_data_type>
        <sp_params />
      </parameter_dropdown>
    </parameter>

# Roles

Outer node: <role></role>

Node | Description | Type | Required
id | ID | string | yes
active | Active | bool | yes
rolegeneral | General settings | object | yes
security | Security settings | object | yes

### rolegeneral

Node | Description | Type | Required
reportpath | Report Path | string | no
dateformat | Date Format | string | no
timeformat | Time Format | string | no
datetimeformat | DateTime Format | string | no
separatorsymbol | Numeric Separator Symbol | string | no
currencysymbol | Numeric Currency Symbol | string | no
readfiltervalues | Read Database for Filter Values | bool | no
dbtimeout | Database Timeout | int | yes
showgrid | Show Grid Lines in Report Viewer | bool | no
showcrosstabreports | Allow Creation/Editing of Crosstab Reports | bool | no
showdashboardreports | Allow Creation/Editing of Dashboard Reports | bool | no
showchainedreports | Allow Creation/Editing of Chained Reports | bool | no
showexpressviews | Allow Creation/Editing of ExpressViews | bool | no
allowexpressviewliveedit | Allow Editing ExpressView with Live Data | bool | no
showexpressreports | Allow Creation/Editing of Express Reports | bool | no
showexpressreportsgrouping | Show Grouping | bool | no
showexpressreportsformulabutton | Show Formula Button | bool | no
showexpressreportsstylingtoolbar | Show Styling Toolbar | bool | no
showexpressreportsthemes | Show Themes | bool | no
showadvancedreports | Allow Creation/Editing of Advanced Reports | bool | no
showschedulereports | Show Report Scheduling Option | bool | no
showschedulereportsmanager | Show Schedule Reports Manager | bool | no
schedulemanagerviewlevel | Scheduler Manager User View Level | constant | no
showschedulereportsemail | Show Email Report Options | bool | no
decimalsymbol | Numeric Decimal Symbol | string | no
languagefile | Language File | string | no
servertimezoneoffset | Server Time Zone Offset | int | no
showdashboardnewvisualizationbutton | Allow Creation/Editing of Dashboard Visualizations | bool | no
(v2018.1+) allowreportcustomsqlobjects | Allow Creation of Custom SQL Objects in Advanced Reports | bool | no

Possible values for schedulemanagerviewlevel: user, company, all

### security

Node | Description | Type | Required
folders | Folder Security | object | yes
dataobjects | Data Object Security | object | yes
dataobjectrows | Data Row Security | object | no
(v2018.1+) includereportcustomsqlobjects | Allow User to View Report-Level Custom SQL Objects | bool | no

### folders

Node | Description | Type | Required
include_all | Include All Folders | bool | yes
read_only | All Folders Read Only | bool | yes
allow_management | Allow Folder Management | bool | yes
folder | Folders | object | no (1+)

### folder

Node | Description | Type | Required
name | Folder Name | string | yes
read_only | Read Only | bool | yes
propagate | Propagate status to sub-folders | bool | yes

### dataobjects

Node | Description | Type | Required
include_all | Include All Data Objects | bool | yes
dataobject | Objects | object | no (1+)

### dataobject

Note: For name, use Id if set, otherwise use db_name.

Node | Description | Type | Required
name | Data Object Name | string | yes

### dataobjectrows

Node | Description | Type | Required
dataobjectrow | Filters | object | no (1+)

### dataobjectrow

Note: For name, use Id if set, otherwise use db_name.

Node | Description | Type | Required
name | Data Object Name | string | yes
filter | Filter String | string | yes

### Example

    <role>
      <id>Test</id>
      <active>False</active>
      <rolegeneral>
        <reportpath>asraaweweweasd</reportpath>
        <dateformat />
        <timeformat />
        <datetimeformat />
        <separatorsymbol>,</separatorsymbol>
        <currencysymbol>$</currencysymbol>
        <readfiltervalues />
        <dbtimeout>0</dbtimeout>
        <showgrid />
        <showcrosstabreports />
        <showdashboardreports />
        <showchainedreports />
        <showexpressviews />
        <allowexpressviewliveedit />
        <showexpressreports />
        <showexpressreportsgrouping />
        <showexpressreportsformulabutton />
        <showexpressreportsstylingtoolbar />
        <showexpressreportsthemes />
        <showadvancedreports />
        <showschedulereports />
        <showschedulereportsmanager />
        <schedulemanagerviewlevel />
        <showschedulereportsemail />
        <decimalsymbol>.</decimalsymbol>
        <languagefile />
        <servertimezoneoffset>1</servertimezoneoffset>
        <showdashboardnewvisualizationbutton />
      </rolegeneral>
      <security>
        <folders>
          <include_all>True</include_all>
          <read_only>False</read_only>
          <allow_management>True</allow_management>
          <folder>
            <name>Examples</name>
            <read_only>False</read_only>
            <propagate>True</propagate>
          </folder>
        </folders>
        <dataobjects>
          <include_all>False</include_all>
          <dataobject>
            <name>CAT</name>
          </dataobject>
        </dataobjects>
        <dataobjectrows>
          <dataobjectrow>
            <name>CAT</name>
            <filter>heyho</filter>
          </dataobjectrow>
        </dataobjectrows>
      </security>
    </role>

# Functions

Outer node: <function></function>

Note: Functions and Filter Functions use the same xml syntax. Filter functions have weight > 0 (which indicates its order in the filter list).

Node | Description | Type | Required
name | Name | string | yes
description | Description | string | no
category | Category | constant | no
min_args | Minimum Number of Arguments (deprecated in v2017.2) | int | no
max_args | Maximum Number of Arguments (deprecated in v2017.2) | int | no
arguments_json | (v2017.2+) Arguments information | json object | yes
variable_arguments | (v2017.2+) Variable Argument Count | bool | yes
available_in | Formula or filter function | enum | yes
filter_return_type | Filter Type | constant | no
weight | List Order | int | yes
language | Language | constant | yes
program_code | Program Code | string | yes
reference | References | object | no (1+)
namespace | Namespaces | object | no (1+)

Possible values for category: Aggregate, Operators, Logical, Date, Financial, Database, Arithmetic, String, Formatting, Other

Possible values for available_in: 0: Unavailable, 1: Formula, 2: Filter

Possible values for filter_return_type: date, string, integer, decimal

Possible values for language: CSharp, JavaScript, VB

### reference

Node | Description | Type | Required
name | Reference name | string | yes

### namespace

Node | Description | Type | Required
name | Namespace name | string | yes

### arguments_json

(v2017.2+) A JSON-formatted array of objects with the following format:

Property | Description | Type | Required
Name | Name | string | yes
Required | Required | bool | yes
Description | Description | string | yes

### Example

    <function>
      <name>IncrementBy</name>
      <description>Count up by value steps.</description>
      <category>Other</category>
      <arguments_json>[{"Name":"counter","Required":false,"Description":"Number to increment by. Default: 1."}]</arguments_json>
      <variable_arguments>false</variable_arguments>
      <available_in>1</available_in>
      <filter_return_type>String</filter_return_type>
      <weight>0</weight>
      <language>CSharp</language>
      <program_code>return Extensions.CustomFunctions.IncrementBy(sessionInfo, args);</program_code>
      <reference>
        <name>Extensions.dll</name>
      </reference>
    </function>

# Server Events

Outer node: <serverevent></serverevent>

Node | Description | Type | Required
name | Name | string | yes
id | Unique Id | int | yes
event_type | Global Event | constant | yes
datasource_id | Id of assembly data source | int | no
func_name | Assembly function name | string | no
language | Language | constant | no
program_code | Program code | string | no
reference | References | object | no (1+)
namespace | Namespaces | object | no (1+)

Possible values for event_type: None, or see List of Server Events.

Possible values for language: CSharp, JavaScript, VB

### reference

Node | Description | Type | Required
name | Reference name | string | yes

### namespace

Node | Description | Type | Required
name | Namespace name | string | yes

### Example

    <serverevent>
      <name>ExpandAllFolders</name>
      <id>0</id>
      <event_type>OnAfterLoadReportsList</event_type>
      <language>CSharp</language>
      <program_code>Extensions.ServerEvents.ExpandAllFolders(sessionInfo, (TreeNodeCollection)args[0]);
    return null;</program_code>
      <reference>
        <name>Extensions.dll</name>
      </reference>
      <reference>
        <name>WebReports.dll</name>
      </reference>
      <namespace>
        <name>WebReports.UI.Controls</name>
      </namespace>
    </serverevent>

# Action Events

Outer node: <actionevent></actionevent>

Node | Description | Type | Required
name | Name | string | yes
id | Unique Id | int | yes
event_type | Global Event Type | constant | yes
datasource_id | Id of assembly data source | int | no
func_name | Assembly function name | string | no
user_action | Event Type | constant | yes
language | Language | constant | no
program_code | Program code | string | no
uiaction | Assigned UI Item(s) | object | no (1+)
reference | References | object | no (1+)
namespace | Namespaces | object | no (1+)

Possible values for event_type: None, or see Global Action Events.

Possible values for user_action: None, Load, Click

Possible values for language: CSharp, JavaScript, VB

### uiaction

Node | Description | Type | Required
element_id | Element Id | constant | yes

Possible values for element_id: See Identifying Actionable UI Elements.

### reference

Node | Description | Type | Required
name | Reference name | string | yes

### namespace

Node | Description | Type | Required
name | Namespace name | string | yes

### Example

    <actionevent>
      <name>DoubleClick</name>
      <id>0</id>
      <event_type>OnDoubleClickReport</event_type>
      <user_action>Click</user_action>
      <language>CSharp</language>
      <program_code>return Extensions.ActionEvents.DoubleClick(sessionInfo);</program_code>
      <uiaction>
        <element_id>RunReportBtn</element_id>
      </uiaction>
      <reference>
        <name>Extensions.dll</name>
      </reference>
    </actionevent>

# Custom Options

Outer node: <customoption></customoption>

Node | Description | Type | Required
option_id | Id | string | yes
option_type | Type | constant | yes
option_list_item | Option list item | object | no (1+)

Possible values for option_type: Int, Decimal, Bool, Text, List

### option_list_item

Node | Description | Type | Required
option_list_item_id | List item Id | string | yes

### Example

    <customoption>
      <option_id>Hello</option_id>
      <option_type>List</option_type>
      <option_list_item>
        <option_list_item_id>World</option_list_item>
      </option_list_item>
    </customoption>