Have any questions?
+44 1234 567 890
Script datasinks
Script datasinks are your swiss army knife when it comes to sending your reports/your data to custom locations or when you need any logic or any additional files. Basically, you can use script datasinks to send your reports/your data to virtually any location you may need. Refer to the following screenshots.


An example script datasink is shown below. It creates a ZIP containing the report/the data, adds the groovy script to the ZIP and sends this per email to a given user list.
package net.datenwerke.rs.samples.tools.email import net.datenwerke.rs.core.service.mail.MailBuilderFactory import net.datenwerke.rs.core.service.mail.MailService import net.datenwerke.security.service.usermanager.UserManagerService import net.datenwerke.rs.utils.misc.MimeUtils import net.datenwerke.rs.core.service.mail.SimpleAttachment import java.nio.file.Paths import java.time.LocalDateTime /** * scriptDatasinkPerEmail.groovy * Version: 1.0.2 * Type: Script datasink * Last tested with: ReportServer 4.3.0 * Sends a given report/given files per email * and includes the script groovy file in the ZIP. */ def mailBuilder = GLOBALS.getInstance(MailBuilderFactory) def mailService = GLOBALS.getInstance(MailService) def userService = GLOBALS.getInstance(UserManagerService) def mimeUtils = GLOBALS.getInstance(MimeUtils) // the user ids. They have to exist and the ids are passed as long (L) def to = [123L] def subject = 'Script datasink' def content = "ReportServer script datasink $" // name of the zip def attachmentFilename = 'data.zip' def attachments = [ new SimpleAttachment(data, // you can also use report mimeUtils.getMimeTypeByExtension(datasinkConfiguration.filename), datasinkConfiguration.filename), // add the script new SimpleAttachment(script.data, script.contentType, script.name) ] def mail = mailBuilder.create( subject, content, to.collect) .withAttachments(attachments) .withZippedAttachments(attachmentFilename) .build() mailService.sendMail mail
Test LDAP GUID configuration via “ldaptest guid” terminal command
You can now test your LDAP GUID configuration as shown in the following screenshots. This helps troubleshooting LDAP problems/incorrect configuration together with the the other ldaptest commands described here.
The first screenshot shows an incorrect GUID configuration, as “objectGUID_2” does not exist.

After correcting the property to “objectGUID”, the correct GUIDs are shown in the next screenshot.

Integrate LDAP authentication
As of ReportServer 4.3.0, LDAP authentication is supported out-of-the-box. For using it, you have to install the net.datenwerke.rs.ldap.service.ldap.pam.LdapPAM or net.datenwerke. rs.ldap.service.ldap.pam.LdapPAMAuthoritative PAM in your reportserver.properties configuration file as described here.

Further, the ldap.cf configuration file was adapted in order to configure if local users are allowed to authenticate alongside with LDAP users:
<authentication> <allowLocalUsers>true</allowLocalUsers> </authentication>
The complete ldap.cf configuration file is shown below.
<?xml version="1.0" encoding="UTF-8"?> <!-- ReportServer Configuration File filename: sso/ldap.cf Configures LDAP --> <configuration> <provider> <host>directory.example.com</host> <port>389</port> </provider> <security> <!-- Allowed values are: none/starttls/ssl Recommended is starttls. --> <encryption>none</encryption> <principal>CN=ldaptest,CN=Users,DC=directory,DC=example,DC=com</principal> <credentials>password</credentials> </security> <base>OU=EXAMPLE,DC=directory,DC=example,DC=com</base> <filter>(|(objectClass=organizationalUnit)(objectClass=user)(objectClass=group))</filter> <externalDir>/usermanager/external</externalDir> <writeProtection>true</writeProtection> <includeNamespace>false</includeNamespace> <logResultingTree>false</logResultingTree> <flattenTree>false</flattenTree> <attributes> <objectClass>objectClass</objectClass> <guid>entryUUID</guid> <organizationalUnit> <objectClass>organizationalUnit</objectClass> <name>name</name> </organizationalUnit> <group> <objectClass>group</objectClass> <name>name</name> <member>member</member> </group> <user> <objectClass>inetOrgPerson</objectClass> <firstname>givenName</firstname> <lastname>sn</lastname> <username>sAMAccountName</username> <mail>mail</mail> </user> <additional> <!-- You can request additional attributes including them here as: <attribute>myAttribute1</attribute> <attribute>myAttribute2</attribute> --> </additional> </attributes> <authentication> <allowLocalUsers>true</allowLocalUsers> </authentication> </configuration>