These release notes reflect the changes with respect to ReportServer 3.0.5.
The scheduling mechanism is greatly extended in ReportServer 3.0.6. This is a step on the way to the future n:m scheduling mechanism (n reports to m recipients in a single job). The scheduler administrator is able to set three different scheduling actors:
In the following screenshot you can see the new scheduling dialog.
Conditional scheduling is much more flexible and powerful in ReportServer 3.0.6. The administrator is able to create predefined scheduled conditions by scripting. The user just has to select the condition needed and that's it. No more formula typing for the user, which improves user experience and avoids common errors. Of course, the previous scheduling mechanism is further supported.
As a standard predefined scheduler condition, we offer the "not empty" condition shown in the following screenshot.
As you can see, the report is only executed if the report is not empty.
It is important to emphasize that completely new conditions may be created by scripting. As an example, please take a look at the following simple script:
import net.datenwerke.rs.condition.service.condition.hooks.ConditionProviderHook;
import net.datenwerke.rs.condition.client.condition.dto.SimpleCondition;
import java.util.Calendar;
def HOOK_NAME = "IS_WORKINGDAY_HOOK"
def callback = [
provideConditionFor: { report ->
SimpleCondition cond = new SimpleCondition();
cond.setKey(HOOK_NAME);
cond.setName("Is working day");
cond.setDescription("Actions are executed if today is a working day");
return cond; },
consumes: { key -> return HOOK_NAME.equals(key); },
execute: { key, expression, user, rjob ->
Calendar c1 = Calendar.getInstance();
c1.setTime(new Date());
return ( c1.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY ||
c1.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY ) ? false: true;
},
isBeforeActions: { -> return true; },
isBeforeJob: { -> return true; },
] as ConditionProviderHook
GLOBALS.services.callbackRegistry.attachHook(HOOK_NAME, ConditionProviderHook.class, callback)
The results are shown in the following screenshot:
Of course, predefined conditions may be combined with another predefined conditions and with other (user-defined) conditions. For example:
In order to find objects using the terminal, we are consolidating the so called object resolver queries. These are standard ways of locating objects (entities) in ReportServer, e.g. Reports, Users, Groups, etc. In ReportServer 3.0.6 and further versions, more and more commands will support object resolver queries. Entities are stored objects such as reports, users or TeamSpaces. You can find entities by searching for classes annotated with "@Entity". You can also find a list of all entities in our ReportServer SourceForge project https://sourceforge.net/projects/dw-rs/. Download the latest apidocs file from the src directory for this.
Currently, there are three object resolvers:
We will illustrate these object resolvers by using the locate command. Any other command supporting object resolvers works analogously to the examples provided below.
The locate command allows you, as its name suggests, to locate entities by using an object resolver query. Refer to the locate command documentation for more information on this.
The ID object resolver uses an entity ID for locating an entity. Since entity IDs are unique, the query resolves to zero or one entity. The syntax is: "id:EntityType:entityId" where "EntityType" is the specific entity class, e.g. "Report" or "TeamSpace". Refer to the entity list mentioned above for the specific entity types. "entityId" is the specific entity ID. E.g.:
reportserver$ locate id:TableReport:123
Report Root/Dynamic Lists/myReport (Reportmanager)
The path resolver requires a Virtual File System path for locating the specific entity. Note that the path requires quotation marks if it contains spaces. E.g.:
reportserver$ locate "/reportmanager/Dynamic Lists/myReport"
Report Root/Dynamic Lists/myReport (Reportmanager)
You can also insert a relative path to the current location, e.g.:
reportserver$ locate myReport
Report Root/Dynamic Lists/myReport (Reportmanager)
Further, you can use an HQL query (Hibernate Query Language) for locating the needed entity or group of entities. Refer to https://docs.jboss.org/hibernate/orm/5.0/userguide/en-US/html/ch13.html for the HQL documentation. The syntax is: "hql:query" where the "query" is a valid select HQL query. Since HQL queries have blank spaces, quotation marks are needed. E.g.:
reportserver$ locate "hql:from TableReport where id=123"
Report Root/Dynamic Lists/myReport (Reportmanager)
You can also search for entity attributes, e.g.:
reportserver$ locate "hql:from TableReport where name like '%myReport%'"
Report Root/Dynamic Lists/myReport (Reportmanager)
Report Root/myReport2 (Reportmanager)
Using ReportServer with a large number of users imposes some challenges on the software regarding user experience. We have identified some issues with a large number of nodes (approx. 100 000) and improved performance in ReportServer 3.0.6 in many cases:
Please note that we have still some performance issues with large number of nodes, which we will handle in next reportserver versions. Stay tuned for this.
With ReportServer 3.0.6, support for more than 34 languages will be added to the existing language support of 28 languages. So, in total, 62 languages are supported. Please note that this was done in a semi-automatic manner. So if you created a new language version, or improved an existing one, send us your excel language spreadsheet and we will include it into the official build. If you send us translations please include a short statement that you provide the translation under a creative commons zero (CC0 – http://creativecommons.org/publicdomain/zero/1.0/) license. More information on language support here.
Note that you can filter the languages shown to the user with the new configuration property "locales" in main/localization.cf. Refer to the internal configuration changes for this.
RS-2199: Here you can find an example hook that modifies the PDFRenderOption in the BIRT PDF export to false:
import net.datenwerke.rs.birt.service.reportengine.hooks.AdaptBirtRenderOptionsHook;
import org.eclipse.birt.report.engine.api.IPDFRenderOption;
def HOOK_NAME = "MY_BIRT_EXPORT_HOOK"
def callback = [
adapt: { options ->
options.setOption(IPDFRenderOption.FIT_TO_PAGE, false);
return options; }
] as AdaptBirtRenderOptionsHook
GLOBALS.services.callbackRegistry.attachHook(HOOK_NAME, AdaptBirtRenderOptionsHook.class, callback)
TeamSpace members and group members can now be administrated via terminal via "teamspacemod" and "groupmod" terminal commands. These work analogously to each other. Some examples:
Add three members (two users and one group) to the TeamSpace with id 123:
teamspacemod addmembers id:TeamSpace:123 id:User:456 "hql:from Group where id=789" "/usermanager/myOU/myUser"
Deletes all members from the group with id 123:
groupmod addmembers -c id:Group:123
More details can be found in the administration guide.
RS-3245: We improved and closed a security issue in the ​hookldappam.groovy demo script. Please modify your script accordingly.
You can find the new script here: https://reportserver.net/en/guides/script/chapters/hookldappamgroovy/ The option "ALLOW_LOCAL_USERS" can be used to allow or disallow local users login.
The following configuration files changed.
RS-3300: The option "senderName" was added in order to allow setting the sender's name in emails sent by ReportServer if the option "forceSender" is set to true.
Following is a sample configuration
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<smtp>
<host>mail.infofabrik.net</host>
<port>25</port>
<!--<username>rs@infofabrik.net</username>
<password></password>
-->
<ssl>false</ssl>
<tls>
<enable>false</enable>
<require>false</require>
</tls>
</smtp>
<mail>
<sender>rs@infofabrik.net</sender>
<senderName>ReportServer</senderName>
<forceSender>true</forceSender>
<encryptionPolicy>allow_mixed</encryptionPolicy>
</mail>
</configuration>
RS-3168: The option "locales" was added in order to allow filtering the languages shown in the language selection box.
Following is a sample configuration
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<localization>
<default>en</default>
<locales>en,fr,de</locales>
<format>
<!--
<shortDatePattern></shortDatePattern>
<longDatePattern></longDatePattern>
<shortTimePattern></shortTimePattern>
<longTimePattern></longTimePattern>
<shortDateTimePattern></shortDateTimePattern>
<longDateTimePattern></longDateTimePattern>
<numberPattern></numberPattern>
<currencyPattern></currencyPattern>
<integerPattern></integerPattern>
<percentPattern></percentPattern>
-->
</format>
</localization>
</configuration>
RS-1953 | New Feature | Extend text parameters to allow for NULL return on empty strings |
RS-2199 | New Feature | Allow to provide hook for modifying BIRT Export Options (e.g., PDFRenderOption) |
RS-2217 | New Feature | Provide predefined scheduler condition to allow execution to "skip on empty" |
RS-2347 | New Feature | Allow to set aggregation in dynamic list preview context menu |
RS-2372 | New Feature | Add owner(s) to scheduler and allow to change these owner(s) |
RS-2424 | New Feature | Allow providing hookable predefined scheduler conditions |
RS-2973 | New Feature | Allow parameters in Saiku Mondrian cubes' sql queries |
RS-3109 | New Feature | locate command supports object resolver queries |
RS-3117 | New Feature | rcondition remove command supports object resolver queries |
RS-3120 | New Feature | rcondition create command: support report id syntax without object resolver query |
RS-3126 | New Feature | The scheduler user/executor should be able to be changed |
RS-3135 | New Feature | Provide scheduling admin area with "executor" and "owner" fields for filtering |
RS-3138 | New Feature | New field "scheduled by" for scheduled jobs. This field is now separated from the old "user" field, since the user/executor can now be changed. |
RS-3141 | New Feature | New scheduler filter field: "scheduled by" |
RS-3145 | New Feature | Japanese language support |
RS-3146 | New Feature | Korean language support |
RS-3151 | New Feature | Hindi language support |
RS-3152 | New Feature | Bengali language support |
RS-3153 | New Feature | Thai language support |
RS-3154 | New Feature | Malaysian language support |
RS-3155 | New Feature | Norwegian language support |
RS-3156 | New Feature | Icelandic language support |
RS-3157 | New Feature | Serbian language support |
RS-3158 | New Feature | Luxembourgish language support |
RS-3168 | New Feature | New configuration property in localization.cf: "locales". This property filters available languages. E.g. <locales>en,fr,de</locales> |
RS-3177 | New Feature | Vietnamese language support |
RS-3178 | New Feature | Afrikaans language support |
RS-3188 | New Feature | Albanian language support |
RS-3189 | New Feature | Armenian language support |
RS-3190 | New Feature | Basque language support |
RS-3191 | New Feature | Bosnian language support |
RS-3192 | New Feature | Georgian language support |
RS-3193 | New Feature | Macedonian language support |
RS-3194 | New Feature | Myanmar language support |
RS-3195 | New Feature | Laotian language support |
RS-3196 | New Feature | Ukrainian language support |
RS-3197 | New Feature | Indonesian language support |
RS-3198 | New Feature | Belorussian language support |
RS-3199 | New Feature | Uzbek language support |
RS-3200 | New Feature | Kazakh language support |
RS-3201 | New Feature | Nepali language support |
RS-3202 | New Feature | Javanese language support |
RS-3203 | New Feature | Mongolian language support |
RS-3204 | New Feature | Catalan language support |
RS-3205 | New Feature | Scottish Gaelic language support |
RS-3206 | New Feature | Tamil language support |
RS-3207 | New Feature | Singhalese language support |
RS-3208 | New Feature | Tagalog (Filipino) language support |
RS-3209 | New Feature | Khmer language support |
RS-3237 | New Feature | groupmod addmembers command: Allow to add users, groups, and OUs to group via terminal |
RS-3238 | New Feature | Allow to remove specific group members via terminal using the groupmod -c command |
RS-3250 | New Feature | Allow to remove specific teamspace members via terminal using the teamspacemod -c command |
RS-3272 | New Feature | Tree selection dialog loads dynamically only the visible children of visible nodes |
RS-3274 | New Feature | Tree selection dialog loads only the needed node types |
RS-3275 | New Feature | Allow the search to filter results on classes and their inherited classes |
RS-3280 | New Feature | Provide mappings between Dto and Dto2PosoMapper classes |
RS-3291 | New Feature | Provide form user tree selection field |
RS-3318 | New Feature | Check that the scheduler job executor is included in the owner list |
RS-3319 | New Feature | Check that all scheduler job owners have executing rights on the scheduled report |
RS-3351 | New Feature | Show both "executor" and "scheduled by" in scheduler admin view |
RS-2203 | Improvement | Allow pkg command to return its results to the terminal |
RS-2271 | Improvement | Show nicer error message if a wrongly formatted file is uploaded for import |
RS-2388 | Improvement | Indicate that file has been saved if a file is changed via the Edit file view. |
RS-3122 | Improvement | Consolidate scheduler permission checks |
RS-3143 | Improvement | Provide new field "scheduledBy" in script execution jobs |
RS-3144 | Improvement | Clear "scheduled by" job field on user removal |
RS-3159 | Improvement | Allow only scheduler admins to change the schedule executor |
RS-3160 | Improvement | Set the scheduler "scheduledBy" field when the user is removed and is contained in an active job |
RS-3174 | Improvement | ServletRequest logout in reportserver logout |
RS-3231 | Improvement | Provide Mondrian overrides in source files |
RS-3241 | Improvement | Allow "Add user to group" dialog to load stripped down data from the database |
RS-3242 | Improvement | Allow "Add group to group" dialog to load stripped down data from the database |
RS-3243 | Improvement | Load only OUs in "add OUs to group" dialog |
RS-3249 | Improvement | Extend teamspacemod addusers command to allow adding groups to teamspace. Rename "addusers" to "addmembers". |
RS-3259 | Improvement | Change internal demo jdbc driver to MariaDB |
RS-3262 | Improvement | Allow dragging users and groups to stripped down components in group administration |
RS-3267 | Improvement | Replace "Add ou to group" dialog with dynamic node loading dialog |
RS-3269 | Improvement | Speed up loading complete user tree |
RS-3270 | Improvement | Provide StrippedDownOrganisationalUnit analogous to StrippedDownUser, StrippedDownGroup |
RS-3278 | Improvement | Unify tree selection dialog and main node selection view |
RS-3284 | Improvement | Replace "Add user to group" and "group to group" dialogs with dynamic node loading dialog |
RS-3285 | Improvement | Replace TeamSpace "Add user to group" and "group to group" dialogs with dynamic node loading dialog |
RS-3286 | Improvement | Replace "su" dialog with dynamic node loading dialog |
RS-3289 | Improvement | Replace user selection dialogs in "scheduler" window with dynamic node loading dialogs |
RS-3293 | Improvement | Optimization of "search" functionality taking into account the limit set |
RS-3300 | Improvement | Allow to specify default sender name along with default sender email address in mail.cf |
RS-2202 | Bug | pkg command confirms "ok" even if script throws errors |
RS-2423 | Bug | Allow removing reports referenced in conditions |
RS-2470 | Bug | Users cannot be removed if they have a bookmark dadget |
RS-2805 | Bug | Items and menus are not shown over PDF in IE |
RS-2902 | Bug | Deleting a report does not delete the teamspace references after asking if deletion should be forced |
RS-3104 | Bug | locate command is not showing any results |
RS-3108 | Bug | Edit scheduler dialog not shown when report has properties set |
RS-3111 | Bug | locate command is not working with quotation marks in object resolver query |
RS-3112 | Bug | rcondition create command: incorrect name and key argument order |
RS-3115 | Bug | rcondition create command: bug using some object resolver queries |
RS-3125 | Bug | Exception when deleting a user having scheduled report execution tasks |
RS-3128 | Bug | NPE when displaying scheduler information with the executor user being previously deleted |
RS-3130 | Bug | Exception when deleting a user having scheduled script execution tasks |
RS-3132 | Bug | Archived scheduler jobs with current user as owner and null as executor are not shown in the job list |
RS-3140 | Bug | Client-side filtering bug in scheduling admin area: the "from user" and "to user" fields copy their values into the other field |
RS-3166 | Bug | Audit logs: change "report" to "report_id" for consistency |
RS-3222 | Bug | Count und count distinct aggregations are not working correctly in pivot reports |
RS-3223 | Bug | Oracle numeric overflow in some pivot/Mondrian reports with count measures |
RS-3226 | Bug | Variant "Properties", "Report Properties" and "Metadata" tabs are not being shown and cannot be edited, including write and configuration protection. |
RS-3230 | Bug | Dynamic list sorting is not working with MariaDB |
RS-3245 | Bug | Improvements and security issue fix in hookldappam demo script |
RS-3246 | Bug | Bug while trying to edit reportserver files in the UI |
RS-3261 | Bug | Connection leak in Jasper reports |
RS-3292 | Bug | "Cannot find property lastname" error during search when user's lastname or forename is null |
RS-3298 | Bug | Query preview in datasource parameters throws an exception for reports different than dynamic lists |
RS-3317 | Bug | Tree dialog search is not finding entries in some cases |
RS-3327 | Bug | NPE in some "tree expand all" cases |
RS-3328 | Bug | Incorrect behavior in tree report variant expansion |
RS-3343 | Bug | NPE in Mondrian Reports with empty queries |
RS-3344 | Bug | Exception in Mondrian Reports with queries containing both SQL and Mondrian fields |
RS-3345 | Bug | Search index is not adding elements if these are hibernate proxys |
RS-3346 | Bug | Consolidate external jar overrides |
RS-3347 | Bug | Exception in user search if teamspace elements found along with tree elements |
RS-3348 | Bug | Log output not working in some cases |
RS-3349 | Bug | Reports with conditions are not being correctly evaluated after upgrade |
RS-3330 | Improvement | Validate parameters when clicking on report export buttons |
RS-3354 | Bug | Some entities are not being indexed correctly for the search |
RS-3373 | Bug | Children of teamspace folders are not loading in scheduler configuration window |
RS-3379 | Bug | Search is not finding teamspace folders in scheduler configuration window |
RS-3381 | Bug | Search is not finding entries in some cases |
RS-3383 | Bug | Problems with upgrade script regarding lower and uppercase |
RS-3386 | Bug | Installing additional report executors in the client-side is not working |