Professional Documents
Culture Documents
Configuration Guide
Thorsten J. Krause
Arno Mittelbach
datenwerke, 2015
http://www.datenwerke.net/
http://www.reportserver.net/
Contents
Contents
1 Preamble
1.1 Target audience . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
3
2 Installation
2.1 Installation using the Windows Installer . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Manual Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
7
8
3 Configuration Files
3.1 persistence.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 reportserver.properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
13
16
4 Configuration
4.1 Datasources . . . . . . . . . .
4.2 Export settings . . . . . . . . .
4.3 UI Customization . . . . . . .
4.4 Extensions . . . . . . . . . . .
4.5 Executing Reports using URLs
4.6 Misc Settings . . . . . . . . .
4.7 Security related properties . . .
.
.
.
.
.
.
.
21
22
29
30
35
35
36
37
43
43
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Chapter 1
Preamble
Business Intelligence (BI) describes the ability to jointly analyze all of a companys data, distilling
relevant information to be used to foster better business decisions. The foundation of any BI
solution is the careful preprocessing of existing data, for example, in a data warehouse. ReportServer
acts as the gateway between end-users and the collected data, allowing users to efficiently access
and analyze exactly the data they need. From print-ready evaluations to fine-grained ad-hoc
reporting; ReportServer provides you with the tools to support your daily work.
1.1
Target audience
This document is written for future ReportServer administrators, as well as those who are tasked
with initially setting up the system. This document covers the installation and basic configuration
of ReportServer. Separate manuals and instructions illustrate the various aspects of ReportServer.
You can purchase the various guides from http://www.reportserver.net.
ReportServer Configuration Guide: Describes the installation of ReportServer as well as the basic
configuration options. The configuration guide is freely available.
ReportServer User Guide: The user guide describes ReportServer from the point of view of the
ultimate user. It includes an in-depth coverage of dynamic lists (ReportServers adhoc reporting solution), execution of reports, scheduling of reports, and much more.
ReportServer Administrator Guide: The administrator guide describes ReportServer from the
point of view of administrators that are tasked with maintaining the daily operation of the
reporting platform including the development of reports, managing users and permissions,
monitoring the system state, and much more.
ReportServer Scripting Guide: The ReportServer scripting guide covers the scripting capabilities
of ReportServer which can be used for building complex reports as well as for extending
the functionality of ReportServer or performing critical maintenance tasks. It extends the
introduction to these topics given in the administrator guide.
In addition to the available manuals we regularly publish tutorials and best practices on our blog
http://blog.datenwerke.net and are active in the ReportServer community forum http://
3
1. Preamble
forum.reportserver.net. For custom support take a look at our support packages which are
available from http://shop.datenwerke.net.
Chapter 2
Installation
ReportServer is a web-application based on the Java Servlet technology and thus run in an application server (such as Apache Tomcat). Being a web-application ReportServer supports any
operating systems that can has a java runtime environment and for which an application server
available. Any application relevant metadata is stored in a relational database.
ReportServer is distributed as a zip-archive to deploy in your application server. Additionally a windows installer package is available for the use with Microsoft Windows. This package bundles everything needed to run ReportServer and optionally installs Java, Apache Tomcat and the PostgreSQL
database. You can download ReportServer from http://sourceforge.net/projects/dw-rs.
We describe the installation using the Windows Installer in Section 2.1 and the manual installation
in Section 2.2.
Remark.
For production use we recommend the manual installation (i.e., not using the
automatic Windows installer).
2.1
If you choose to install ReportServer using the Windows installer you are guided through the various
steps of the installation process. The installer is primarily meant to provide a quick and easy way to
get ReportServer runnig and the configuration is not optimized for production use. For production
use we recommend a manual installation of the application server, so you can adjust all required
settings to your environment.
The installation process using the installer basically requires you to make two decisions: 1) whether
you want to use an existing Tomcat or install Tomcat and 2) whether to use an existing database or
install PostgreSQL. The installer also installs an uninstaller that allows you to remove any installed
files and we recommend to use the bundled tomcat and PostgreSQL.
Tomcat
The installer will configure ReportServer to run with the Apache Tomcat (http://tomcat.apache.
org/) application server. You can either have the installer set up Tomcat for you, or use an already
7
2. Installation
installed Tomcat instance. If you choose not to have Tomcat installed automatically, you must
specify its installation directory as well as the external URL of the system. The external URL is
the URL used to access your system over the network.
Database Selection
You can either install ReportServer together with a preconfigured PostgreSQL database or use an
existing relational database system.
If you choose to use an existing database system, you need to manually create the necessary
schema (see Section Setup the database on page 9) and note that you should create the schema
before you start the installation process. Also note that depending on the database system used,
you need to manually install the corresponding jdbc driver (see Section Installation of the JDBC
driver on page 9). Finally you need to configure the database connection for ReportServer. The
configuration goes into the file META-INF/persistance.xml which the installer will automatically
create.
After the installation is complete you can access ReportServer via the displayed URL (e.g., http:
//localhost:8080/reportserver). ReportServer has generated the root user with which you
can login: username: root, password: root.
2.2
Manual Installation
The manual installation is the preferred way to install ReportServer as this allows you to fine tune
the installation process to your environment. In this case the installation process is comprised of
the following three parts:
1.
Installation Prerequisits
Java Runtime Environment ( JRE )
Application Server
Database
3.
If the host computer supports it, you should use the 64-bit edition.
//tomcat.apache.org/).
In order to smoothly run ReportServer it is necessary to provide the application server with sufficient
memory which usually means that you have to change the increase the default values. Otherwise,
ReportServer might not start or your users might experience performance problems. The following
recommendations are to be understand as lower bounds. Depending on your environment (the
types of reports that you want to run and the number of users the system is to handle) you might
need to increase these (especially the available heap size).
We recommend to set the available permanent generation space (PermGenSpace) to at least
256mb (better 512mb). The maximal available heap size should be at least 1.5gb.
Furthermore, the encoding should be set to UTF8.
A sample configuration of the VM might look as follows:
- Xmx1548M
- XX : MaxPermSize =512 M
- Dfile . encoding = UTF8
2. Installation
portServer has generated the root user with which you can login:
username : root
password : root
11
Chapter 3
Configuration Files
ReportServer has only two (external) config files which hold information on the database connection
as well as information on available authentication methods. All other configuration is done from
within ReportServer. The file persistence.xml (in directory WEB-INF/classes/META-INF) holds
information on the database connection that is used by ReportServer. The configuration file
reportserver.properties (in the directory WEB-INF/classes) holds information about available
authentication schemes, as well as, cryptogrpahy related properties.
3.1
persistence.xml
ReportServer uses the Java Persistence API (JPA) to abstract from the actual database system
when storing application data. The necessary configuration is made in the persistence.xml
config file.
Example
<? xml version ="1.0" encoding =" UTF -8" standalone =" no " ? >
< persistence xmlns = " http :// java . sun . com / xml / ns / persistence "
xmlns : xsi = " http :// www . w3 . org /2001/ XMLSchema - instance " version = " 1.0 "
xsi : schemaLocation = " http :// java . sun . com / xml / ns / persistence
http :// java . sun . com / xml / ns / persistence / persistence_1_0 . xsd " >
< persistence - unit name = " reportServerPU " transaction - type = " RESOURCE_LOCAL " >
< class > net . datenwerke . rs . dashboard . service . dashboard . dagets . Fav oriteL istEnt ry </
class >
...
< properties >
< property name = " hibernate . dialect "
value = " org . hibernate . dialect . Postgr eSQLDi alect " / >
< property name = " hibernate . connection . driver_class " value = " org . postgresql . Driver "
/>
< property name = " hibernate . connection . url "
value = " jdbc : postgresql :// localhost / postgres " / >
< property name = " hibernate . connection . username " value = " rs " / >
< property name = " hibernate . connection . password " value = " rs " / >
....
</ properties >
</ persistence - unit >
</ persistence >
The file consists of two parts that are both contained within the <persistence-unit> tag. The
<classes> section lists the entity classes used by ReportServer. This part should not be changed.
13
3. Configuration Files
The properties within the tag <properties> specify the JPA configuration.
When changing the file, make sure that the XML syntax is maintained. Furthermore,
lines beginning with <class... should not be changed
the file should be stored in UTF-8 encoding.
Connection properties
ReportServer supports all databases, that are supported by Hibernate. A list of the database
systems supported by Hibernate can be found on the hibernate webpages1 . We recommend to run
ReportServer on one of the following databases for which we now give example configurations:
Example config for MySQL
< property name = " hibernate . dialect " value = " net . datenwerke . rs . utils . hibernate .
MySQL5Dialect " / >
< property name = " hibernate . connection . driver_class " value = " com . mysql . jdbc . Driver " / >
< property name = " hibernate . connection . url "
value = " jdbc : mysql :// localhost :3306/ reportserver " / >
< property name = " hibernate . connection . username " value = " rs " / >
< property name = " hibernate . connection . password " value = " rs " / >
< property name = " hibernate . connection . autocommit " value = " false " / >
https://community.jboss.org/wiki/SupportedDatabases2
14
3.1. persistence.xml
< property name = " hibernate . connection . autocommit " value = " false " / >
Note, that the JDBC driver corresponding to your database must be copied to the directory
path_to_webapps/reportserver/WEB-INF/lib.
ReportServer ships with the JDBC drivers for MySQL, H2, and PostgreSQL.
Debug settings
< property name = " hibernate . show_sql " value = " false " / >
< property name = " hibernate . format_sql " value = " true " / >
name = " hibernate . c3p0 . ac quire_ increm ent " value = " 5 " / >
name = " hibernate . c3p0 . idle_test_period " value = " 60 " / >
name = " hibernate . c3p0 . timeout " value = " 3600 " / >
name = " hibernate . c3p0 . max_size " value = " 30 " / >
name = " hibernate . c3p0 . max_statements " value = " 0 " / >
name = " hibernate . c3p0 . min_size " value = " 5 " / >
Description
Defines how many connections are acquired simultaniously by c3p0, if
all connections currently in the pool are busy.
If not zero, C3P0 will test idle connections in this intervall.
Number of seconds a pooled connection can remain idle before it is
discarded. Zero means that idle connections are never discarded.
Maximum number of connections in the pool.
Maximal size of the statement cache. Zero means that statements
should not be cached.
The minimum number of connections to be kept in the pool.
15
3. Configuration Files
Search settings
ReportServer can keep its search index either in memory or outsource it to disk. For this set the
value either to buttonram or filesystem.
< property name = " hibernate . search . default . di rec to ry _p ro vi de r " value = "
ram " / >
Note that in case the search index is stored to disk that you need to provide a path to where the
search index should be stored.
< property name = " hibernate . search . default . indexBase " value = " tmp /
lucene / indexes " / >
Further note, that if the search index is kept in memory that it needs to be recreated on a ReportServer restart.
The property
< property name = " hibernate . search . analyzer "
value = " net . datenwerke . rs . search . service . search . RsSearchAnalyzer "
/>
configures the analyzer that is to be used to create the search index. The analyzer is used to
split text into segments that are useful for indexing. Normally, the analzyer should not need to be
changed. Further information on Hibernate search can be found at http://www.hibernate.org/
subprojects/search.html.
3.2
reportserver.properties
The config file reportserver.properties contains settings which are needed at ReportServer
statup time as well as settings concerning cryptographic functionality. All properties are stored as
attribute value pairs.
Excerpt from the reportserver.properties file
rs . crypto . pbe . passphrase = The Passphrase
rs . crypto . pbe . keylength = 128
16
3.2. reportserver.properties
Crypto settings
Passwords (such as, for example, datasource passwords) that are stored in ReportServer will be
encrypted. ReportServer uses AES and password based encryption. For this, you need to configure
the following properties:
rs.crypto.pbe.salt
the salt that is used on key generation by the password based encryption method. This value should
be set to a long random string.
rs.crypto.pbe.keylength
The key size used. Keep in mind that key sizes over 128 require the Java Cryptography Extension
(JCE) Unlimited Strength Jurisdiction Policy Files. For more information, see http://www.oracle.
com/technetwork/java/javase/downloads/index.html.
For secure storage of user passwords ReportServer uses the salted HMAC construction.
rs.crypto.passwordhasher.hmac.passphrase
Defines the static part of the salt for the salted HMAC construction. This value should be set to
a long random string.
Authentication settings
ReportServer supports several methods for user authentication. The different methods can also be
combined.
rs.authenticator.pams
This parameter defines which authentication methods are to be used. The individual values are
separated by a colon.
The following authenticator modules are available
net.datenwerke.rs.authenticator.service.pam.UserPasswordPAM
This is the standard mechanism and allows users to authenticate using a username and password.
Note: with this authentication method username and password are sent to the server in the clear.
Thus, this method should only be used over a secure channel (such as TLS/SSL). If you are not
in a secured environment choose the ChallengeResponsePAM instead.
net.datenwerke.rs.authenticator.service.pam.IPRestrictionPAM
With this method you can restrict the set of IP addresses that can access ReportServer. The
allowed address ranges are configured in rs.authenticator.iprestriction.addresses. The
individual values are separated by a colon. Example: rs.authenticator.iprestriction.addresses =
127.0.0.1/32:192.168.1.0/24
17
3. Configuration Files
net.datenwerke.rs.authenticator.service.pam.EveryoneIsRootPAM
This method will disable authentication and log in all users as root.
net.datenwerke.rs.authenticator.cr.service.pam.ChallengeResponsePAM
This method is similar to the UserPasswordPAM but the password is transmitted securely to the
server. In cases where the connection is not secured via SSL this is the recommended authentication
method. Note though, that this requires the client browser to perform cryptographic tasks which
may be slow on non-up-to-date browsers.
net.datenwerke.rs.authenticator.service.pam.ClientCertificateMatchEmailPAM
If your organisation uses x509 certificates, you can use this method to allow users to log in with
their client certificates.
rs.authenticator.pam.ClientCertificateMatchEmailPAM.debug
This parameter allows to enable debug mode for client certificate authentication.
rs.authenticator.blockroot
Setting this to true disables direct access using the root user. This is recommended for production
environments. Note that you can switch to the root user using sudo if you need to perform
administrative tasks (and you have the corresponding privileges). Further information on sudo can
be found in the administration guide.
18
Chapter 4
Configuration
ReportServer is now up and running. In the following section we describe configuration options
affecting the operation of ReportServer. The present document should be considered as a reference
containing a brief description of the various configuration options. Keep in mind that the settings
described here affect all areas of ReportServer which to describe is beyond the scope of this config
guide. See the administrators and users guide for further information to the various areas of
ReportServer.
All configuration files described in this section can be found in ReportServers internal filesystem.
You can access the internal filesystem using the administration module (administration/ file system)
or using the terminal: you can open the terminal by pressing CTRL+ALT+T.
By using the command editTextFile you can edit files directly from the terminal. You can also
create new files using the command createTextFile. For further information on the workings of
the terminal see the administrators guide. Using the graphical user interface, you can select files
similar to selecting files when working in the Explorer in your operating system. To do this, go to
administration/file system. To edit a file, choose the tab Edit file.
Please note, that after changing a config file you need to run the terminal command config
reload for the change to take effect.
Configuration files in ReportServer are defined in an XML format. Note that XML files can only
then be read and processed if they are well-formed. Here are a few basic rules for XML files:
Examples:
each XML file has a single root element. In ReportServer all configuration files have the root
element <configuration>
every element with content consists of an opening and a closing tag: for example, <tag>Here
is some content</tag>
elements without any content can be opened and closed with a single tag of the form <tag/>.
21
4. Configuration
Tags must be correctly nested, e.g., the following is not allowed <a>text<b>more</a>text</b>.
elements may not have multiple attributes with the same name
attribute values must be written in double quotes <tag someAttribute="value"/>
tags and attributes (and values) are case sensitive.
4.1
Datasources
22
4.1. Datasources
If you now create a datasource of type datasourcebundle you can specify a datasource for each of
the defined keys. If you select a datasourcebundle as data source for a report, then the actual data
source will only be determined at execution time, that is, the report will be executed using the data
source corresponding to the users selection on login. Note that scheduled reports will always be
run with the first data source in the list.
Internal database
The internal database is used, for example, for the intermediate storage of CSV data sources. Data
from CSV data sources is transferred automatically before use into the internal database. Thus,
all features of the dynamic list are available when using CSV data sources. Similarly is the internal
DB used to store the results of scripted data sources. The corresponding settings can be made in
the configuration file /fileserver/etc/datasources/internaldb.cf.
23
4. Configuration
You can defined where the internal database should be stored using the parameter location (<
location>dbtmp</location>). In this example, the internal db is stored in a directory dbtmp
below the directory webapps/reportserver. Keep in mind that the application server needs to
be able to write to this directory. If you do not specify the parameter location, ReportServer will
keep the internal database in memory.
By default, ReportServer encrypts files of the internal data source. The following parameters
< encryption >
< disable > false </ disable >
< password > SecretPassphrase </ password >
</ encryption >
Demodata
ReportServer comes with the option to install a demo database, which is the base for the demo report shipped with ReportServer. The demo data will be installed in the internal database. To install
the demo data on startup change the config file /fileserver/etc/datasources/internaldb.cf
to include the tag <installdemodata>true</installdemodata>. A sample configuration could,
for example, look like:
< configuration >
< internaldb >
< location > dbtmp </ location >
< encryption >
< disable > false </ disable >
< password > SecretPassphrase </ password >
</ encryption >
< installdemodata > true </ installdemodata >
</ internaldb >
</ configuration >
Note that this change will only take effect after a restart of ReportServer. To load the demo data
during runtime you can alternatively use the following script:
import net . datenwerke . rs . core . service . internaldb . In ternal DbServ ice
GLOBALS . getRsService ( I nterna lDbSer vice . class ) . initDemoDatabase ()
24
4.1. Datasources
To execute the script, copy the two lines to a file beneath the bin directory. Then open the terminal
(CTRL+ALT+T), go to the directory to where you placed the script (for example cd /fileserver
/bin/tmp) and execute the script via exec theScriptsName.
Tip.
In general it is good practice to have parameter queries optimized such that they run
very fast such as to provide a good user experience.
The post-processing feature, for example, allows to switch parameter values or perform complex
string operations. Learn more about data source parameter post-processing in the parameter
chapter in the administrators guide.
25
4. Configuration
Dynamic Lists
In Dynamic Lists, users can use Computed Columns. Computed collumns allow users to extend
the list of columns by fields which do not exist in the source but which can be constructed from
existing fields. Computed Columns are based on SQL.
In /fileserver/etc/dynamiclists/computedcolumn.cf you can specify which SQL functions
can be used with Computed Columns.
Add those functions that may be used by your users.
Example:
<function>abs</function>
If you are using SSL or TLS please also specify these values. Next, configure the return address
and encryption policy.
< mail >
< sender > rs @yourm ailser ver . com </ sender >
< encryptionPolicy > allow_mixed </ encryptionPolicy >
</ mail >
26
4.1. Datasources
The encryption policy controls whether or not mails have to be encrypted or whether it is ok to send
mails unencrypted if a users public key is not specified. Choose between strict and allow_mixed.
Note that if you choose strict then mails to users that do not have public key registered with
ReportServer will not receive any messages.
Scheduler settings
ReportServer comes with a powerful scheduler. ReportServers scheduler allows you to schedule
the execution of reports. The executed report can then either be emailed or stored in a folder in a
Teamspace.
The schedule and report recipients are user provided on scheduling. You can configure the messages
that ReportServer will send out on certain events. Each message can be customized to your
specifications.
ReportServer will send out the following emails:
email with attached completed report (mailaction),
email if a report has been placed into a Teamspace (fileaction),
email on schedule (notification - scheduled),
email if a schedule job is revoked (notification - unscheduled),
email if a scheduled job failed (notification - failed)
The following configurations are done in the file /fileserver/etc/scheduler/scheduler.cf.
To include information such as the user who created the schedule entry, the reports name etc.
in your message you can use a variety of expressions. Substitutions are defined in the ReportServer
formula language. You will find further information about the ReportServer formula language in
the Administrators, as well as in the User Guide.
Available Substitutions
Expression
${report.getName()}
${report.getDescription()}
${report.report.getKey()}
${report.getId()}
${user.getUsername()}
${user.getFirstname()}
${user.getLastname()}
${user.getEmail()}
${user.getTitle()}
${user.getId()}
${teamspace.getName()}
Description
reports name
reports description
reports key
reports ID
username
first name of user
last name of user
users email address
users title
id of user
name of Teamspace
27
4. Configuration
${folder.getName()}
${message}
${subject}
${recipients}
${filename}
${nextDates}
${RS_CURRENT_DATE}
${errMsg}
${stacktrace}
If you would like to send emails in the HTML format please set the corresponding html attribute
to true.
In case you do not want to have one or more notifications, you can disable the individual notifications
using the disabled attribute:
28
< fileaction disabled = " true " html = " false " >
If you do not want to use the scheduler you can disable it using
< properties >
< disabled > true </ disabled >
</ properties >
Keep in mind that this change will only take effect after reboot. To enable or disable the scheduler
while ReportServer is running, use the terminal command scheduler daemon start/stop. We
refer to the Administration Guide for more information.
4.2
Export settings
Regarding the export to PDF and Microsoft Excel, there are several options that you can set.
In /fileserver/etc/exportfilecmd/excelexport.cf you can specify in which format Excel
documents are to be exported. You can choose between the old XLS and the current XLSX format.
If you have selected the XLSX format, ReportServer allows to stream the data to the client. This
means, that the chunks of resulting Excel file are sent to the user while it is still being created.
Streaming result files can significantly reduce processing time.
To specify the Excel format and whether or not to use streaming, adjust the following parameters:
< format > xlsx </ format >
< stream > true </ stream >
You can specifiy document properties (title, creator and author) of PDF files in the configuration
fiel /fileserver/etc/exportfilecmd/metadata.cf. The texts specified here will be included in
newly generated PDF files.
Modify the following parameters:
< title > title </ title >
< creator > ReportServer </ creator >
< author > ReportServer </ author >
As with email notifactions you can use substitutions to dynamically populate the fields. The
following substitutions are available:
Available Substitutions
Expression
${user.getUsername()}
${user.getFirstname()}
${user.getLastname()}
${user.getEmail()}
${user.getTitle()}
${user.getId()}
Description
username
users first name
users last name
users email address
users title
users id
You can further specifiy the default character set used by ReportServer. In the configuration
file /fileserver/etc/main/main.cf you will find the option charset. By default, the charset
29
4. Configuration
ISO-8859-1 is used.
4.3
UI Customization
In this section we cover the possibilities of customizing the user interface. ReportServer provides
the following customization options:
Specifying the default language,
Customizing error messages,
customize PDF preview,
customize the report documentation,
add tabs based on context
Further customization options are available with the use of ReportServer scripts. More information
on ReportServer scripts can be found in the Administration Guide.
4.3. UI Customization
4. Configuration
The documentation report itself is a script report. It creates the documentation automatically from
the available metadata.
You can customize this report or use a completely different report (for example, if you want to
display additional information from other sources).
The ID of the documentation report is configured in /fileserver/etc/reportdoku/doku.cf.
Note that the documentation report must be given a parameter reportId. Having configured the
documentation report you can now create a report documentation by opening a report (e.g., from
a Teamspace) and clicking on the button display report documentation.
You can also directly display the documentation report in a tab in the Teamspace. For this, you
need to configure a view in the /fileserver/etc/ui/urlview.cf config file. This is explained
in the next section.
Tabs to be displayed in the administration module go into the adminviews tags and tabs for the
Teamspace are put within the objectinfo tags, respectively. To add a new tab, you define a view
tag. For adding a tab to the Teamspace whenever a report is selected add the following view tag
to objectinfo.
< view >
< types >
net . datenwerke . rs . tsreportarea . client . tsreportarea . dto .
TsDiskReportReferenceDto
</ types >
< name > Report Information </ name >
< url >
reportserver / reportexport ? key = DOKU & amp ; format = html & amp ;
p_reportId = $ { reportId }
</ url >
</ view >
32
4.3. UI Customization
By this, you can add as many tabs as you like. Using <types> you control the objects for which
the tab will be added. The following types are available in Teamspaces.
Types
net.datenwerke.rs.tsreportarea.client.tsreportarea.dto.AbstractTsDiskNodeDto
All exported reports which were, for example, created by the scheduler.
The name field defines the tabs name. The url is the address that is displayed. This also allows
you to access external addresses, that are then displayed within the tab.
For the report documentation you must enter the following URL:
reportserver/reportexport?key=DOKUBERICHT&format=html&p_reportId=${reportId}
The following replacements are available for defining the url: ${id} (the objects id), and ${type}
(the objects type). Note that Teamspaces do only contain report references. Thus the replacement
${id} will contain the id of the reference rather than the id of the referenced report. For this,
there is the special replacmenet called ${reportId} which is only available for report references.
You can find more information about how reports can be accessed using a URL in the Administrators Guide.
Similarly, to the report documentation in the Teamspace you can display additional information
on any selected object in the administration module. In the administration module you can add
tabs to objects in the report management, user management, dadget management, datasource
management and fileserver modules. These are configured within the <adminviews> tag.
The following tables describe which types can be used. Note that the type must be used together
with the corresponding prefix.
4. Configuration
Type
AbstractReportManagerNodeDto
ReportDto
ReportFolderDto
Description
All objects in the report management tree
reports
folders
Description
All objects in the user management tree
users
groups
organisational units (folders)
Description
All objects in the file server
folders
files
Description
all objects in data source management
folders
data sources
Description
All objects in the dashboard tree
dashboards
folders
The following example would display a tab User Information which displays the website at Url
http://www.mycompany.com/employe.
< adminviews >
< view >
< types > net . datenwerke . security . client . usermanager . dto . UserDto </
types >
< name > User Information </ name >
34
4.4. Extensions
< url > http :// www . mycompany . com / employe = $ { id } </ url >
</ view >
</ adminviews >
4.4
Extensions
ReportServer has a modular design which allows you to easily extend it. The extension points
are called hooks. Extensions are written in groovy (groovy.codehaus.org) and can hook into
various places in ReportServer. In order to use scripts, you must configure certain properties in the
configuration file /fileserver/etc/scripting/scripting.cf.
This file controls whether scripts are enabled to begin with. Furthermore, you have to specify a
path (in the internal filesystem) beneath which scripts can be placed (this helps to allow users to
create/edit files in the file system without giving them the rights to write scripts). Finally, you can
name a script which is executed on ReportServer startup and one which is executed whenever a
user logs in.
< scripting >
< enable > true </ enable >
< restrict >
< location > bin </ location >
</ restrict >
< startup >
< login > fileserver / bin / onlogin . rs </ login >
< rs > fileserver / bin / onstartup . rs </ rs >
</ startup >
</ scripting >
In the above example we allow scripts only in the bin folder (and subfolders). We defined the script
fileserver/bin/onlogin.rs as the script that is executed whenever a user logs in (note that
the script is executed with the current user, that is, the user that logged in and thus the user must
have the rights to execute this script). The second, on startup script is executed without any user.
The onstartup and onlogin scripts shipped with the ReportServer demo data allow you to easily
execute your own scripts. The onstartup script executes all scripts in the folder /fileserver/bin/
onstartup.d. Likewise, the onlogin.rs script executes all scripts within /fileserver/bin/
onlogin.d.
Further information on ReportServer scripts can be found in the administration guide and the
specialized scripting guide.
4.5
You can configure ReportServer to allow other applications to call reports or to include reports
into external websites. For this ReportServer allows to call and configure reports directly using a
specific URL. You can find more information about how reports can be accessed using a URL in
the administrators guide.
35
4. Configuration
In this section we will describe how ReportServer can be configured such that certain reports can
be accessed without the need for authentication.
The following configuration goes into /fileserver/etc/misc/httpauthexecute.cf.
First, you have to specify a username and a password which are passed to ReportServer using the
URL. Note that the username does not have to correspond to a user registered with ReportServer.
Having the username and password provides a rudimentary level of security. Note, however, that
this can only be secure, if the corresponding HTTP requests are over an encrypted channel (i.e.,
for example, use SSL).
< username > user </ username >
< password > pass </ password >
In this case the username is set to user and the password is set to pass. Username and password
must be specified in any request using the url parameters user and password.
The following properties define which reports can be accessed using this method. Allowing a
report to be accessed can be done using the reports id or its key. Multiple keys/ids are specified
comma-separated.
< registered >
< ids >1 </ ids >
< ids >2 </ ids >
< ids >4 </ ids >
< keys > foo </ keys >
< keys > bar </ keys >
</ registered >
Finally, you must define a user with which the reports are to be executed. Note that the user must
have sufficient privileges to actually run the reports.
< executeuser >
< id > 123 </ id >
</ executeuser >
Note that now anyone knowing the above specified username and password can execute the here
speciefied reports.
4.6
Misc Settings
ReportServer needs a directory to store temporary files. You can define the directory to use in
/filserver/etc/main/main.cf. Furthermore, you can specify a maximum lifetime (in seconds)
of temporary files in the directory.
< tempdir > tempdir </ tempdir >
< tempfile >
< lifetime > 3600 </ lifetime >
</ tempfile >
36
Maintenance Tasks
ReportServer performs certain maintenance tasks from time to time. You can define the interval
(in ms) with which ReportServer will execute these.
< maintenance >
< tasks >
< interval > 600000 </ interval >
</ tasks >
</ maintenance >
4.7
In the example the expression getClass is prohibited. Multiple expressions are comma separated.
Configuring cryptography
The file /fileserver/etc/security/crypto.cf defines various cryptography related options.
The <cryptocredentials> section defines how cryptographic credentials, such as private keys and
certificates are retireved for various ReportServer modules.
To do so, a provider is specified for each module.
A provider is defined by specifying the name of the handler-class and some additional attributes.
< provider type = " signature " >
< class >
net . datenwerke . rs . incubator . service . crypto .
FileServerKeyStoreKryptoCredentialProvider
</ class >
< alias > rs </ alias >
< secret > secret </ secret >
< type > jks </ type >
< location >/ fileserver / keystore . jks </ location >
37
4. Configuration
This configures the default handler, which tries to load key-material from a file within the fileserver.
Providers can be specified for these types:
signature: a keystore that holds the private key, ReportServer uses when sending signed emails
user: a keystore that holds public keys and certificates of ReportServer users. This is used, when
sending encrypted emails. An alternate method to provide key material is by using a custom script,
that retrieves the keys e.g. from a corporate directory.
The parameter maxage defines the number of days a password remains valid. The parameter minage
denotes that a password may be changed at most every day. Minlength defines the minimal length
of passwords.
The property <historysize>6</historysize> denotes that the last 6 passwords may not be used
when changing the password.
You can define a threshold on the number of failed login attempts after which a user account is
blocked. This is done using <lockoutthreshold>3</lockoutthreshold>. <lockoutresettimeout
>60</lockoutresettimeout> specifies the time after wich automatically locked accounts can be
used again.
The characterset definitions specify which characters for a password are approved and how many
characters from a particular group must be used.
< characterset > 0123456789 </ characterset >
< choosemin >2 </ choosemin >
< characterset > a b c d e f g h i j k l m n o p q r s t u v w x y z </ characterset >
< choosemin >1 </ choosemin >
< characterset > A B C D E F G H I J K L M N O P Q R S T U V W X Y Z </ characterset >
< choosemin >1 </ choosemin >
< characterset >! $ %&;/=?*:.; , -\ _ +~# @ </ characterset >
< choosemin >2 </ choosemin >
38
In the above example, it is specified that from the first and last group (the digits and special
characters) at least 2 characters must be used. From the two remaining groups at least a single
character must be used.
Note that the specified number denotes a lower bound on the characters chosen from this group.
User activation
Users can be activated by administrators using the user manager. On this, the user will receivean
email with an automatically generated (single use) password (note that for this the mail server
must be correctly configured). After the first login, the user must change the password according
to the password policy.
You can customize the email sent to the user in the configuration file /fileserver/etc/security/
activateuser.cf.
< security >
< activateaccount >
< email >
< subject > Your ReportServer account details </ subject >
< text >
Username : $ { user . getUsername () }
Password : $ { password }
</ text >
</ email >
</ activateaccount >
</ security >
Description
username
users first name
Last name of user
users email address
users title
users id
the generated password
the URL under which ReportServer can be accessed
39
4. Configuration
The file hostkey.pem should contain the servers certificate. The path should be defined absolutely
(e.g., C:/path/to/hostkey.pem)
Note that changes will only take effect after restarting ReportServer. If you do not want to start
the SFTP server simply supply an invalid path.
40
Appendix A
Configuration Files
datasources/databasebundle.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
<! - ReportServer Configuration File
filename : datasources / databasebundle . cf
Configures available datasource keys in datasource bundles
-- >
< configuration >
< bundletype >
< name > BaseBundle </ name >
< keys >
< key > Prod </ key >
< key > Test </ key >
</ keys >
</ bundletype >
</ configuration >
datasources/datasources.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
<! - ReportServer Configuration File
filename : datasources / datasources . cf
Allows to configure a default datasource for easy access .
-- >
< configuration >
< datasource >
< d e f a u l t D a t a s o u r c e N a m e > Demodaten </ d e f a u l t D a t a s o u r c e N a m e >
</ datasource >
</ configuration >
datasources/internaldb.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
<! - ReportServer Configuration File
filename : datasources / internaldb . cf
43
datasources/parameter.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< parameter >
< datasource >
< querytimeout > 60 </ querytimeout >
< postprocessing >
< enable > true </ enable >
</ postprocessing >
</ datasource >
</ parameter >
</ configuration >
datasources/pool.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< pool >
< defaultconfig >
< maxPoolSize > 40 </ maxPoolSize >
< initialPoolSize > 10 </ initialPoolSize >
< a c q u i r e R e t r y A t t e m p t s > 10 </ a c q u i r e R e t r y A t t e m p t s >
< ac quireR etryDe lay > 500 </ ac quireRe tryDel ay >
< checkoutTimeout > 60000 </ checkoutTimeout >
< maxConnectionAge > 7200 </ maxConnectionAge >
< maxIdleTime > 3600 </ maxIdleTime >
</ defaultconfig >
</ pool >
</ configuration >
datasources/sql.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< sql >
< incondition >
< maxsize > 1000 </ maxsize >
</ incondition >
</ sql >
</ configuration >
dynamiclists/computedcolumn.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< functions >
< function > abs </ function >
< function > ceil </ function >
< function > floor </ function >
< function > mod </ function >
< function > power </ function >
< function > round </ function >
44
exportfilemd/excelexport.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< xls >
< format > xlsx </ format >
< stream > true </ stream >
</ xls >
</ configuration >
exportfilemd/metadata.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< exportmetadata >
< title > Title </ title >
< creator > ReportServer </ creator >
< author > ReportServer </ author >
</ exportmetadata >
</ configuration >
mail/mail.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< smtp >
< host > mail . datenwerke . net </ host >
< port > 25 </ port >
<! - - < username > rs@datenwerke . net </ username >
< password > </ password >
45
-- >
< ssl > false </ ssl >
< tls >
< enable > false </ enable >
< require > false </ require >
</ tls >
</ smtp >
< mail >
< sender > rs@datenwerke . net </ sender >
< encryptionPolicy > allow_mixed </ encryptionPolicy >
</ mail >
</ configuration >
main/localization.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< localization >
< default > de </ default >
</ localization >
</ configuration >
main/main.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< install >
< basedata > true </ basedata >
</ install >
< default >
< charset >ISO -8859 -1 </ charset >
</ default >
< tempdir > tempdir </ tempdir >
< tempfile >
< lifetime > 3600 </ lifetime >
</ tempfile >
< maintenance >
< tasks >
< interval > 600000 </ interval >
</ tasks >
</ maintenance >
< search >
< timeout > 5000 </ timeout >
</ search >
< pagetitle > ReportServer </ pagetitle >
</ configuration >
main/templates.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< errors >
< html >& lt ;! DOCTYPE html PUBLIC & quot ; -// W3C // DTD HTML 4.01// EN & quot ; & quot ; http ://
www . w3 . org / TR / html4 / strict . dtd & quot ;& gt ;
& lt ; html & gt ;
& lt ; meta http - equiv =& quot ; content - type & quot ; content =& quot ; text / html ; charset = UTF -8& quot
;& gt ;
& lt ; head & gt ;
& lt ; title & gt ; $ { msgs [ net . datenwerke . rs . core . client . locale . ReportServerMessages ][
htmlErrorPageTitle ]}& lt ;/ title & gt ;
& lt ; link type =& quot ; text / css & quot ; rel =& quot ; stylesheet & quot ; href =& quot ;/ ReportServer .
css & quot ;& gt ;
& lt ; link rel =& quot ; stylesheet & quot ; type =& quot ; text / css & quot ; href =& quot ;/ resources / css /
reportserver . css & quot ; /& gt ;
46
& lt ; link rel =& quot ; stylesheet & quot ; type =& quot ; text / css & quot ; href =& quot ;/ resources / css /
modulespecific . css & quot ; /& gt ;
& lt ;/ head & gt ;
& lt ; body class =& quot ; errorpage & quot ;& gt ;
& lt ; div class =& quot ; errorpage - header & quot ;& gt ; $ { msgs [ net . datenwerke . rs . core . client .
locale . ReportServerMessages ][ htmlErrorPageHeading ]} $ { headline }& lt ;/ div & gt ;
& lt ; div class =& quot ; errorpage - msg & quot ;& gt ; $ { msg }& lt ;/ div & gt ;
& lt ; div class =& quot ; errorpage - todo & quot ;& gt ; $ { msgs [ net . datenwerke . rs . core . client . locale
. ReportServerMessages ][ htmlErrorInstructions ]}& lt ;/ div & gt ;
& lt ; div class =& quot ; errorpage - stacktrace - header & quot ;& gt ; $ { msgs [ net . datenwerke . rs . core .
client . locale . ReportServerMessages ][ htmlErrorPageDetailSectionHeader ]}& lt ;/ div &
gt ;
& lt ; div class =& quot ; errorpage - stacktrace & quot ;& gt ; $ { stacktrace }& lt ;/ div & gt ;
& lt ;/ body & gt ;
& lt ;/ html & gt ; </ html >
</ errors >
</ configuration >
misc/httpauthexecute.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< servlet >
< httpauthexecute >
< username / >
< password / >
< registered >
< ids / >
< keys / >
</ registered >
< executeuser >
< id / >
</ executeuser >
</ httpauthexecute >
</ servlet >
</ configuration >
misc/misc.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< database >
< oracle >
< filter >
< convertclobs > true </ convertclobs >
</ filter >
</ oracle >
</ database >
< remoteaccess >
< sftp >
< keylocation > tmpres / hostkey . pem </ keylocation >
< port > 8022 </ port >
</ sftp >
</ remoteaccess >
</ configuration >
reportdoku/doku.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< report >
< key > DOKUBERICHT </ key >
</ report >
</ configuration >
47
reportengines/reportengines.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< birt >
< library >
< folder >
< id >1 </ id >
</ folder >
</ library >
< enable > true </ enable >
</ birt >
< jasper >
< enable > true </ enable >
< allowedlanguages > groovy </ allowedlanguages >
</ jasper >
</ configuration >
scheduler/scheduler.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< scheduler >
< mailaction html = " false " >
< subject > ReportServer : $ { subject } </ subject >
< text >$ { msgs [ net . datenwerke . rs . scheduler . client . scheduler . locale .
SchedulerMessages ][ mailactionMsgText ]}
$ { msgs [ net . datenwerke . rs . scheduler . client . scheduler . locale . SchedulerMessages ][
labelReport ]} $ { report . getName () }
$ { msgs [ net . datenwerke . rs . scheduler . client . scheduler . locale . SchedulerMessages ][
labelMessage ]} $ { message }
</ text >
< attachment >
< name >rep - $ { report . getName () } - $ { RS_CURRENT_DATE } </ name >
</ attachment >
</ mailaction >
< fileaction disabled = " false " html = " false " >
< subject > ReportServer : $ { msgs [ net . datenwerke . rs . scheduler . client . scheduler .
locale . SchedulerMessages ][ fileactionMsgSubject ]} </ subject >
< text >$ { msgs [ net . datenwerke . rs . scheduler . client . scheduler . locale .
SchedulerMessages ][ fileactionMsgText ]}
$ { msgs [ net . datenwerke . rs . scheduler . client . scheduler . locale . SchedulerMessages ][
labelReport ]} $ { report . getName () }
$ { msgs [ net . datenwerke . rs . scheduler . client . scheduler . locale . SchedulerMessages ][
labelFilename ]} $ { filename }
$ { msgs [ net . datenwerke . rs . scheduler . client . scheduler . locale . SchedulerMessages ][
labelDescription ]} $ { description }
$ { msgs [ net . datenwerke . rs . scheduler . client . scheduler . locale . SchedulerMessages ][
labelTeamspace ]} $ { teamspace . getName () }
$ { msgs [ net . datenwerke . rs . scheduler . client . scheduler . locale . SchedulerMessages ][
labelFolder ]} $ { folder . getName () }
</ text >
</ fileaction >
< notification disabled = " false " html = " false " >
< scheduled >
< subject > ReportServer : $ { msgs [ net . datenwerke . rs . scheduler . client . scheduler .
locale . SchedulerMessages ][ notificationMsgScheduledSubject ]} </
subject >
< text >$ { msgs [ net . datenwerke . rs . scheduler . client . scheduler . locale .
SchedulerMessages ][ notificationMsgScheduledText ]}
$ { msgs [ net . datenwerke . rs . scheduler . client . scheduler . locale . SchedulerMessages ][
labelReport ]} $ { report . getName () }
48
scripting/scripting.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< scripting >
< enable > true </ enable >
< restrict >
< location > bin </ location >
</ restrict >
< startup >
< login > fileserver / bin / onlogin . d </ login >
< rs > fileserver / bin / onstartup . d </ rs >
</ startup >
</ scripting >
</ configuration >
security/activateuser.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< security >
< activateaccount >
< email >
< subject >$ { msgs [ net . datenwerke . rs . passwordpolicy . service . locale .
PasswordPolicyMessages ][ activateEmailSubject ]} </ subject >
49
security/crypto.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< cr yptocr edenti als >
<! - < provider type =" signature " >
< class > net . datenwerke . rs . incubator . service . crypto .
F i l e S e r v e r K e y S t o r e K r y p t o C r e d e n t i a l P r o v i d e r </ class >
< alias > rs </ alias >
< secret > secret </ secret >
< type > jks </ type >
< location >/ fileserver / keystore . jks </ location >
</ provider >
< provider type =" sftp " >
< class > net . datenwerke . rs . incubator . service . crypto .
F i l e S e r v e r K e y S t o r e K r y p t o C r e d e n t i a l P r o v i d e r </ class >
< alias / >
< secret / >
< type / >
< location / >
</ provider >
< provider type =" user " >
< class > net . datenwerke . rs . incubator . service . crypto .
F i l e S e r v e r K e y S t o r e K r y p t o C r e d e n t i a l P r o v i d e r </ class >
< alias > rs </ alias >
< secret > secret </ secret >
< type > jks </ type >
< location >/ fileserver / keystore - usr . jks </ location >
</ provider >
-- >
</ cry ptocre dentia ls >
< pbe >
< salt > The salt to be used for encryption . This should simply be a long string . </
salt >
< passphrase > The Passphrase </ passphrase >
< keylength > 128 </ keylength >
</ pbe >
50
security/misc.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< juel >
< expression >
< blacklist > getClass </ blacklist >
</ expression >
</ juel >
</ configuration >
security/passwordpolicy.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< rs >
< security >
< passwordpolicy >
< bs ipassw ordpol icy >
< pswd >
< maxage > 32000 </ maxage >
< minage >1 </ minage >
< minlength >8 </ minlength >
</ pswd >
< historysize >6 </ historysize >
< lockoutthreshold >3 </ lockoutthreshold >
< lo c k ou t r es e t ti m e ou t > 60 </ lo c k ou t r es e t ti m e ou t >
< characterset > 0123456789 </ characterset >
< choosemin >1 </ choosemin >
< characterset > a b c d e f g h i j k l m n o p q r s t u v w x y z </ characterset >
< choosemin >1 </ choosemin >
< characterset > A B C D E F G H I J K L M N O P Q R S T U V W X Y Z </ characterset >
< choosemin >1 </ choosemin >
< characterset >! $ %&;/=?*:.; , -\ _ +~# @ </ characterset >
< choosemin >1 </ choosemin >
</ bs ipassw ordpol icy >
</ passwordpolicy >
</ security >
</ rs >
</ configuration >
terminal/alias.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< cmdaliases >
< entry >
< alias > ll </ alias >
< command > ls -l </ command >
</ entry >
</ cmdaliases >
</ configuration >
ui/previews.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< pdf >
< forcelegacy > false </ forcelegacy >
</ pdf >
51
ui/ui.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< contexthelp enable = " false " / >
</ configuration >
ui/urlview.cf
<? xml version ="1.0" encoding =" UTF -8" ? >
< configuration >
< adminviews >
<! - - < view >
< types > net . datenwerke . rs . core . client . reportmanager . dto . reports . ReportDto / types >
< name > Eine URL </ name >
<url >/ reportserver / lala / id = $ { id }& amp ; type = $ { type } </ url >
</ view > -- >
</ adminviews >
< objectinfo >
< view >
< types > net . datenwerke . rs . tsreportarea . client . tsreportarea . dto .
T s D i s k R e p o r t R e f e r e n c e D t o </ types >
< name >$ { msgs [ net . datenwerke . rs . core . service . urlview . locale . UrlViewMessages ][
info ]} </ name >
< url > reportserver / reportexport ? key = DOKUBERICHT & amp ; format = html & amp ; p_reportId = $ {
reportId } </ url >
</ view >
< view >
< types > net . datenwerke . rs . tsreportarea . client . tsreportarea . dto .
T s D i s k R e p o r t R e f e r e n c e D t o </ types >
< name >$ { msgs [ net . datenwerke . rs . core . service . urlview . locale . UrlViewMessages ][
history ]} </ name >
< url > reportserver / reportexport ? key = REVISIONS & amp ; format = html & amp ; p_reportId = $ {
reportId } </ url >
</ view >
< view >
< types > net . datenwerke . rs . tsreportarea . client . tsreportarea . dto .
T s D i s k R e p o r t R e f e r e n c e D t o </ types >
< name >$ { msgs [ net . datenwerke . rs . core . service . urlview . locale . UrlViewMessages ][
preview ]} </ name >
< url > rs : reportpreview :// $ { reportId } </ url >
</ view >
</ objectinfo >
</ configuration >
52