Translate

Showing posts with label tutorial. Show all posts
Showing posts with label tutorial. Show all posts

Wednesday, 11 February 2015

Setting mail account for Subscription of scheduled Jobs in JasperServer.


I wanted to document the process from a long time but due to crunch of time I could not, but now I will like to explain the process in simple easy to follow steps.

First of all I would like to give an idea to problem addressed in the blog, basically when a report runs as a daily status or daily count one need not run it manually it could be scheduled, but when the report is scheduled the export in desired form is exported on jasper server.

But wait a minute do we really login and see what the results came as in the PDF, Excel etc. export, no we need not the problem is handled by mail subscription attached to the scheduler, which will automatically send the Exports to the subscribers on their email accounts and send a confirmation to the administrator.

So lets cut the explanation and lets jump directly into how to do.

Prerequisites -

1. You should have working copy of JasperServer community/pro
2. You should have uploaded a report to the server
3. Choose you favourite text editor  (Windows(default) - Notepad/MacOS(default) - TextEdit)
4. Shut down the jasper server so that no sort of errors come in case of Editing/Saving documents.

after following the above prerequisites now we head on to edit two files as follows.
Both these files will be found at the location
<directory of Jasperserver on Disk>/apache-tomcat/webapps/jasperserver/WEB-INF/

1. js.quartz.properties
   - Edit the file with the Text Editor
 
Change the portion of the document as (Please select your own server details I have used a gmail account )

report.scheduler.mail.sender.host=smtp.gmail.com
report.scheduler.mail.sender.username=testpanda@gmail.com
report.scheduler.mail.sender.password=password
report.scheduler.mail.sender.from= testpand@gmail.com
report.scheduler.mail.sender.protocol= smtp
report.scheduler.mail.sender.port= 587
  - Make the changes and save the file.

2.   applicationContext-report-scheduling.xml

  -  Locate the bean reportSchedulerMailSender
  -  Locate the property javaMailProperties
  -  Do the changes as below - This will enable java to interact the smtp/startls authentication.      

         <props>
                <prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
            </props>
  - Now save the document.

Now the report subscription is ready for run, just start the Jasper Server and you are good to go.

Cheers!!

Tuesday, 20 January 2015

How to export and import a Jasper Server Repository on a remote system

In this blog I have explained the steps to import and export the JasperServer Repository (In the steps below I have used a Remote Linux Machines accessed via windows machine)

Before following the steps there would be requirement of following softwares-
1. WinSCP - To browse the files in Linux machine
2. PuTTy - To run the commands for export/import in the Linux shell



Steps Export reports in Jasper Reports

1. Open PuTTy - and key in the IP address 
2. Enter the username and password.
3. Navigate to the folder /opt/jasperreport-server-5.0/buildomatic
4. Run the command  ./js-export.sh --uris <Path of the Report>  --output-dir <Name of the folder to be exported>
5. Open the WinSCP, and key in the  IP Address as well as the credentials and set the Protocol as SFTP .
6. Navigate to the folder /opt/jasperreport-server-5.0/buildomatic
7. Drag and drop the folder created earlier to the local machine.



Steps Import reports in Jasper Reports

1. Open the WinSCP, and key in the  IP Address as well as the credentials and set the Protocol as SFTP .
2. Navigate to the folder /opt/jasperreport-server-5.0/buildomatic
3. Drag and drop the folder downloaded with the report.
4. Now Open PuTTy - and key in the IP address 
5. Enter the username and password.
6. Navigate to the folder /opt/jasperreport-server-5.0/buildomatic
7. Run the command  ./js-import.sh --input-dir <name of the folder copied earlier>

Monday, 12 January 2015

Fresh setup of Jasper Reports from scratch - For beginners

I have been thinking to compile  a document which outlines the complete process of installation and setup of the connection because generally when one starts they do not find much of material and they tend to get stuck on a trivial issue.

So the post will have two portions, namely Installation and Setup.


Installation 

This document will apprise you with the basic installation software, which would act as a prerequisite to run Jasper Report.
  1. Java –
    As Jasper Reports is built on Java platform, so a proper installation of Java Development kit (jdk) is required. For official steps to install java one can refer to the link
    https://www.java.com/en/download/help/windows_manual_download.xml
  2. iReport Designer –
    This is a third party Jasper Report designing software. iReport is the most popular visual designer tool for JasperReports Library and JasperReports Server (Business Intelligence).
    The software can be downloaded in an exe run able format for windows machine, or other types of files as per the platform demands.
    http://community.jaspersoft.com/project/ireport-designer/releases


  3. Jasper Server –
    This is the software which acts as the interface which provides web touch to the reports rather makes it interactive in terms of external links and the drill downs
    Below is the link from where the file could be downloaded.
    http://community.jaspersoft.com/project/jasperreports-server/releases

  4. Database  Server -
    The database server or the datasource which serves the purpose of feeding data to the report, in this projects case the setup was in the SQL Server 2008, which could vary from project to project .
     
  5. Netbeans(Optional) –

Netbeans is the development environment where in you could create sciptlets for customization purposes in the Jasper Reports. You could even go on to make customizations on the charts, where in you could use the
https://netbeans.org/downloads/ (Download the SE version)



Setup and Connection

Below are the steps for the setup, which would act as a prerequisite to run Jasper Report.
  1. Java –
    Download and install java 7, please do mind not to install Java 8 as it is yet not supported by iReport.
  2. iReport Designer –
    After installing the iReport, first thing you need to do is that the inclusion of java connector

    Below is the process to include the Java Connector

    i.  Download the Java connector for the Datasource, as we have the SQL Server datasource we need to download
    http://www.java2s.com/Code/Jar/s/Downloadsqljdbc120jar.htm
    For more info on the Connector follow the link -- https://docs.oracle.com/cd/E19501-01/819-3658/gcfoy/index.html

    ii.  Navigate to Tools—> Options  Classpath
    And select the Add JAR, and then browse to the downloaded path of the connector

    Now we  need to add a JDBC datasource

    i. Click on  the icon shown below on the top of the iReport window




  1. ii.  In the popup select New  Select The Datasource type as Database JDBC Connection

    iii. Now Enter the name of the connection, select the SQL Server driver and enter the name of the database in the url of the database, also key in your credentials, refer to the screenshot below





    iv. Now test the connection, it will say the connection successful.

    We are now ready to create reports.

  2. Jasper Server –
    After installation in order to run Jasper Server open the browser and key in
    localhost:8080/jasperserver
    Then login using the credentials jasperadmin/jasperadmin

    Then setup the connection, righ click on the node and add a datasource
    Enter the details below,  for the connector and setup the datasource.



The above steps are pretty basic and gives a fair idea as to what all basic necessities are there to process the installation and setup.

Thursday, 6 March 2014

Cascading Parameters in Jasper Reports

Cascading, what does one mean by saying cascading, literally it means anything that resembles a waterfall or especially seeming to flow. Now where to implement this in Jasper Reports?    

Right, it could be used in parameters, or rather the filters which are dependent on each other. You can find these kind of filters in online shopping websites, wherein we can choose on various filters like if we want to buy the laptop first filter would be Laptop next filter would be the company chosen among the companies which sell Laptops, and then we chose for the specifications like processor,ram etc. each have separate filters but the boundaries of the parameter depends on the previous parameter.

Before getting into the setup of Cascading Parameters in Jasper Report there are few things which we need to know before hand - 
Usage of     $X{IN, feild, parameter} in the SQL Query used in the Where clause, which filters the data based on the selection. Let me go one by one in explaining the components
field - Now this is the field in the database upon which the find will be done
parameter - Now this is the parameter selected by user and will be queried or looked in the field. This enable for multi select also in the parameters.

Now in  order to achieve this in Jasper Reports we need to follow few steps.

  1. First of all you need to design a Jasper Report and identify the parameters to be cascaded
  2. Then we need to define the expression for parameters,  and mind one thing that each of the parameter need to be of type java.util.collection if you want to enable multi- select.
  3. Next and very important thing is that the cascading parameters could not be tested in iReport / JasperSoft Studio, this  needs to be deployed on Jasper Server in order to check the correct functionality. Though could be run in iReport or JasperReports with default values hardcoded.



I have created a working sample which could be simply deployed, and checked for the functionality and working.
The Zip file could be downloaded from here  - LINK TO ZIP FILE

The Zip file contains
1. Cascade Parameter Report (JRXML File)
2. SQL DUMP, could be extracted using MySQL or any other tool
3. Table Creation Script in a notepad file, this will allow you to create the require table in the database.

For setting up the sample report you need to-
1. Create a schema in you database and create the table using the script command
2. Then run the JRXML file using iReport/Jaspersoft Studio
3. Then set the datasource referring to Persons table in the database.
4. Then deploy the JRXML  on the Jasper Server, and set the datasource and input controls. Do remember the names of the parameters used in the report should exactly match the input controls declared on the Jasper Server.

If you miss on some step then you could follow a YouTube video of mine which  will serve as a tutorial.
Below is the video where in you could see all the steps.




Please put your views or questions or suggestions below, I will be more than happy to hear them.Happy Coding!!

Friday, 20 December 2013

How to set datasource in iReport using a JRDatasource Provider as well as custom JRDataSource - Along with sample and Video Tutorial

JRDataSource is interface that represents the abstract representation of a JasperReports data source. All data source types must implement this interface.

We could create   JRDatasource using java code, but there is a stipulation that the class made as the datasource needs to implement JRDataSource interface.

Now, in this article I will talk about:
1. Setting the datasource using custom JRDataSource.
2. Setting the datasource using JRDataSourceProvider.

To start with, 
Setting the datasource using custom JRDataSource.
The prerequisites for the creating a custom datasource are:
1. JRDataSource
2. Factory class setting the JRDataSource.



Setting the datasource using JRDataSourceProvider
The prerequisites for the creating a custom datasource are:
1. JRDataSource
2. JRDataSourceProvider implemented class.


For showing setting of each of the methods I have created a youtube video.
                                                ==VIDEO LINK==

In the sample I have created, what I intend to do is that I want to know the names, is directory(boolean true/false) and the size on disk, of the folder whose path is passed in the constructor of the datasource. Now in my datasource I have 3 columns NAME, SIZE and IS_DIRECTORY.

In both the cases we need to create a JRDatasource class .. that is the class which implements JRDataSource, so in the sample it looks like this 

/**
* JR DataSource Class
* @author Ankur Gupta
*/
public class JRFileSystemDataSource implements JRDataSource {
File[] files = null;
int index = -1;
public JRFileSystemDataSource(String path) {
File dir = new File(path);
if (dir.exists() && dir.isDirectory()) {
files = dir.listFiles();
}
}

@Override
public boolean next() throws JRException {
index++;
if (files != null && index < files.length) {
return true;
}
return false;
}

@Override
public Object getFieldValue(JRField jrf) throws JRException {
File f = files[index];
if (f == null) {
return null;
}
if (jrf.getName().equals("name")) {
return f.getName();
} else if (jrf.getName().equals("IS_DIRECTORY")) {
return new Boolean(f.isDirectory());
} else if (jrf.getName().equals("totalSpace")) {
return new Long(f.length());
}
// Field not found...
return null;
}

/**
* This method is responsible for setting the field names in the provider.(Required for the provider)
* @return
*/
public static String[] fieldNames() {
String[] fieldNames = {"name", "IS_DIRECTORY", "totalSpace"};
return fieldNames;
}
}
CODE SCRIPTLET #1
The  fieldNames()  method is not required for custom JRDataSource , but is required for JRDataSource Provider.

Now for the custom JRDatasource
1. The JRDataSource as shown above.(Remove the last method not required.)
2. The Factory Class for the custom JRDataSource looks like.

/**
*
* @author Ankur Gupta
*/
public class FactoryClassDataSource {

/**
* Factory Class responsible for setting the JRdatasource.
* @return
*/
public static JRDataSource generateDS(){
return new JRFileSystemDataSource("Path of the desired folder");
}
}
CODE SCRIPTLET #2

This is it, now you can compile these two classes , and place the jar file in the class path.

Now for the  JRDatasource Provider.
1. The JRDataSource as shown as above in the code scriptet #1.
2. Next is the JRDataSourceProvider class shown as below.


/**
* JRDatasource Provider
* @author Ankur Gupta
*/
public class JRFileSystemDataSourceProvider implements JRDataSourceProvider{

@Override
public boolean supportsGetFieldsOperation() {
return false;
}

@Override
public JRField[] getFields(JasperReport jr) throws JRException, UnsupportedOperationException {

ArrayList fields = new ArrayList();
String [] fieldNames = JRFileSystemDataSource.fieldNames();
for (String s : fieldNames) {
JRDesignField field = new JRDesignField();
field.setName(s);
field.setValueClassName("java.lang.String");
fields.add(field);
}
return (JRField[]) fields.toArray(new JRField[fields.size()]);
}

@Override
public JRDataSource create(JasperReport jr) throws JRException {
return new JRFileSystemDataSource("Enter the path of folder");
}

@Override
public void dispose(JRDataSource jrds) throws JRException {
}

}
CODE SCRIPTLET #3

Now, you can compile the classes and get the jar and place it in the classpath of iReport.

This was the portion you need to complete in creating the JAR file, now we need to set the datasource in thr iReport .
For setting the datasource as custom JRDataSource, you need to enter the qualified path of the factory class. In iReport it looks like :

 
Custom JRDataSource

Now you need to create the fields in the iReport by doing a right click on the field node and remember that the name of the field should be same as in the datasource . In the sample we need to create 3 fields as  name, IS_DIRECRTORY,totalSpace. 
And then place these fields in the detail section of the report and then preview the report and then you could see the contents of the folder(In the sample the folder path is set to C drive.)

For setting the datasource as JRDataSourceProvider, you need to set datasource by selecting to create a new datasource of type JRDataSourceProvider. In the sample it looks like
JRDataSourceProvider

Now the difference in the custom JRDataSource and JRDataSource Provider is that in this function you will not be worried for creating the field  you could directly fetch it by going to the Report query, navigate to DataSource Provider tab and click on Get Fields from dataSource , it will display all the fields in case of this sample it look like :



You then use the fields in the report and you can obtain similar structure of folder.


Here is the sample ZIP file 

                                                              ==ZIP FILE==
This ZIP  file will contain
1, TestRun PDF
2. JRXMLs for both the custonm JRDataSource as well  as JRDataSource Provider
3, JAR file which is needed to be placed in the classpath of iReport.

You could follow the video and sample and learn how to set the datasource with JRDataSource easily.

Please put you questions or demands for clarification in the comments section below.

Happy Coding.,,,!!!

How to set JavaBean set as Datasource in iReports, along with a working sample.

Java beans are practically, classes that encapsulate many objects into a single object (the bean). This is pretty simple to create and could easily hold lots of data in them. They are serializable, have a 0-argument constructor, and allow access to properties using getter and setter methods.

In a nutshell, java bean is easy to use methodology to obtain data. Now the task in hand is that how to use this bean in our reports . For setting the bean in reports there are few prerequisites, 

  1. There should be a Bean class
  2. There should be a factory class which returns the collection/array of the beans
iReport provides two options, either it could read from collection of beans or array of beans. First of all we need a bean, so below is how the bean looks like.
/**
* Bean
*
* @author Ankur Gupta
*/
public class PersonBean {
private String name = "";
private int age = 0;
public PersonBean(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
}

Now you need to create a factory class which contains the function which returns the bean.There are two ways to do that :
1. Collection of bean

/**
* Responsible for filling values in the Bean and return it as collection of bean.
*
* @author Ankur Gupta
*/
public class TestFactory {

public static java.util.Collection generateCollection() {
// Creates the collection
java.util.Vector collection = new java.util.Vector();

// Adds the values in the bean and adds it into the collection
collection.add(new PersonBean("Ted", 20));
collection.add(new PersonBean("Jack", 34));
collection.add(new PersonBean("Bob", 56));
collection.add(new PersonBean("Alice", 12));
collection.add(new PersonBean("Robin", 22));
collection.add(new PersonBean("Peter", 28));

// returns the collection of beans.
return collection;
}
}
2. Array of Beans

/**
* Responsible for filling values in the Bean and return it as collection of bean.
*
* @author Ankur Gupta
*/
public class TestFactory {

// Creates the Arraylist
PersonBean[] list = new PersonBean[6];

// Adds the values in the bean and adds it into the Array
list[0]= (new PersonBean("Ted", 20));
list[1]= (new PersonBean("Jack", 34));
list[2]= (new PersonBean("Bob", 56));
list[3]= (new PersonBean("Alice", 12));
list[4]= (new PersonBean("Robin", 22));
list[5]= (new PersonBean("Peter", 28));

// returns the Array of beans.
return list;
}
}

Now, we need to compile these files  and put the generated jar file in the classpath of the iReport.

Next we need to set the datasource, by adding datasource Java Bean set as datasource and fill in the Factory class as well as the function which generates the bean as array or collection, whichever suits our purpose.

In this case:
Factory class  :  javabeanset.TestFactory
Generating function: generateBeanArray/generateCollection (based upon collection or array)
Below are some screen shots.

Array of JavaBeans



Collection of JavaBeans

You can follow the video link for setting javabeans as datasource.  Here is the Youtube video made by me which gives a complete walkthrough to set the datasource as javabean with the help of a sample report also.

                                                                   ==The video link==



I have made a sample in the video itself here is zip file which contains:
1, Jar File (You need to place this in your classpath)
2. JRXML File
3. Set datasource as shown in the video and insert the values provided in the above screenshots.
4. Test Run PDF(PDF output of the Sample report)
                                                            == ZIP Sample File ==
Follow all the steps in order to get the sample working.


Hope this clears your doubt for this topic. Still if you face any issues or problems then you can add a comment below .

Happy Coding.!!