JasperReports একটি শক্তিশালী ওপেন সোর্স রিপোর্টিং টুল যা Java অ্যাপ্লিকেশনগুলিতে রিপোর্ট তৈরি করতে ব্যবহৃত হয়। JasperReports-এ runtime data management এবং dynamic data binding গুরুত্বপূর্ণ ভূমিকা পালন করে, কারণ এগুলি রিপোর্টের কার্যকারিতা এবং ডাইনামিক ডেটা প্রক্রিয়াকরণ নিশ্চিত করতে সাহায্য করে।
এই নিবন্ধে আমরা runtime data management এবং dynamic data binding নিয়ে আলোচনা করব এবং দেখাবো কীভাবে JasperReports-এ ডাইনামিক ডেটা ম্যানেজমেন্ট করা যায় এবং ডেটাকে রিয়েল টাইমে রিপোর্টে bind করা যায়।
1. Runtime Data Management in JasperReports
Runtime data management বলতে বোঝায় রিপোর্টের সময় ডেটা প্রক্রিয়াকরণ এবং পরিবর্তন করার প্রক্রিয়া। JasperReports-এ রিপোর্ট fill করার সময় runtime data ব্যবহৃত হয়, এবং এই ডেটা parameters, fields, এবং variables এর মাধ্যমে রিপোর্টে যোগ করা হয়।
Steps for Runtime Data Management:
- JasperReports Parameters:
- Parameters হল runtime data যা রিপোর্টের সময় dynamically পাস করা হয়। এগুলি বিভিন্ন ব্যবহারকারী ইনপুট বা কনফিগারেশন থেকে আসতে পারে এবং রিপোর্টের আউটপুট পরিবর্তন করতে সাহায্য করে।
- Fields:
- Fields হল ডেটা সোর্স থেকে আসা ডেটা যা রিপোর্টে display করা হয়।
- Variables:
- Variables হল ডাইনামিকভাবে গণনা করা মান, যেমন sum, average, count ইত্যাদি।
- Data Source:
- Data Source হল সেই উৎস যেখানে থেকে ডেটা runtime সময়ে আসে, যেমন JDBC, CSV, XML, বা JavaBeans।
2. Dynamic Data Binding in JasperReports
Dynamic Data Binding JasperReports-এ একটি পদ্ধতি যেখানে রিপোর্টের বিভিন্ন অংশে ডেটা ডাইনামিকভাবে বাইন্ড করা হয়। এটি মূলত parameters, fields, এবং variables এর মাধ্যমে রিপোর্টের সময় dynamic ডেটা সংযুক্ত করার প্রক্রিয়া।
Dynamic Data Binding Process:
- Binding Fields to Data Source:
- আপনি ডেটা সোর্স থেকে fields কে bind করতে পারেন, যা পরে রিপোর্টে dynamic data হিসেবে প্রদর্শিত হবে।
- Using Parameters for Dynamic Data Binding:
- Parameters ব্যবহার করে ডাইনামিক ইনপুট পাস করা হয়, যেমন ব্যবহারকারী যখন একটি নির্দিষ্ট date range বা category নির্বাচন করে, তখন সেই মান রিপোর্টে bind হয়ে যায়।
- Filling Reports with Dynamic Data:
- JasperFillManager ব্যবহার করে parameters এবং data source থেকে ডেটা রিপোর্টে ফিল করা হয়।
Dynamic Data Binding Example:
এখানে একটি উদাহরণ দেখানো হয়েছে যেখানে JDBC Data Source থেকে ডেটা dynamic binding করা হয়েছে এবং রিপোর্টে parameters পাস করা হয়েছে:
JRXML ফাইল (Dynamic Data Binding Example):
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name="SalesReport" pageWidth="595" pageHeight="842"
columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<!-- Parameters for dynamic data binding -->
<parameter name="StartDate" class="java.util.Date"/>
<parameter name="EndDate" class="java.util.Date"/>
<!-- Column Header Band -->
<columnHeader>
<band height="30">
<staticText>
<reportElement x="0" y="0" width="180" height="30"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Product Name]]></text>
</staticText>
<staticText>
<reportElement x="180" y="0" width="100" height="30"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Sales]]></text>
</staticText>
<staticText>
<reportElement x="280" y="0" width="100" height="30"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Quantity]]></text>
</staticText>
</band>
</columnHeader>
<!-- Detail Band -->
<detail>
<band height="30">
<textField>
<reportElement x="0" y="0" width="180" height="30"/>
<textFieldExpression><![CDATA[$F{product_name}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="180" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA[$F{sales}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="280" y="0" width="100" height="30"/>
<textFieldExpression><![CDATA[$F{quantity}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
Java Code for Dynamic Data Binding:
import net.sf.jasperreports.engine.*;
import java.sql.*;
import java.util.*;
public class DynamicDataBindingExample {
public static void main(String[] args) {
try {
// Compile JRXML file to JasperReport
JasperReport jasperReport = JasperCompileManager.compileReport("SalesReport.jrxml");
// JDBC connection setup
String url = "jdbc:mysql://localhost:3306/salesdb";
String username = "root";
String password = "password";
Connection connection = DriverManager.getConnection(url, username, password);
// Parameters to be passed to the report
Map<String, Object> parameters = new HashMap<>();
parameters.put("StartDate", new Date());
parameters.put("EndDate", new Date());
// Query to fetch data for the report
String query = "SELECT product_name, sales, quantity FROM sales WHERE sale_date BETWEEN ? AND ?";
PreparedStatement stmt = connection.prepareStatement(query);
stmt.setDate(1, new java.sql.Date(System.currentTimeMillis())); // Start Date
stmt.setDate(2, new java.sql.Date(System.currentTimeMillis())); // End Date
ResultSet resultSet = stmt.executeQuery();
// JRResultSetDataSource for dynamic data binding
JRResultSetDataSource jrDataSource = new JRResultSetDataSource(resultSet);
// Fill the report with data
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, jrDataSource);
// Export the report to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "dynamic_sales_report.pdf");
System.out.println("Report generated successfully!");
} catch (SQLException | JRException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- Parameters: StartDate এবং EndDate রিপোর্টে dynamic ইনপুট হিসাবে পাঠানো হয়েছে।
- JDBC DataSource: রিপোর্টের জন্য ডেটা JDBC থেকে PreparedStatement ব্যবহার করে ডাইনামিকভাবে আনা হয়েছে এবং তা JRResultSetDataSource মাধ্যমে রিপোর্টে পাঠানো হয়েছে।
- JRResultSetDataSource ব্যবহার করে ডেটা ResultSet থেকে সরাসরি রিপোর্টে bind করা হয়েছে।
3. Runtime Data Management in JasperReports
JasperReports-এ runtime data management রিপোর্টের dynamic nature এবং interactive features নিশ্চিত করতে ব্যবহৃত হয়। এর মধ্যে parameters, fields, variables এবং subreports এর ব্যবহারে real-time data processing করা সম্ভব।
Key Concepts of Runtime Data Management:
- Parameters:
- Parameters রিপোর্টের সময় dynamic ইনপুট হিসেবে ব্যবহৃত হয়। এগুলি ব্যবহারকারী ইনপুট বা অ্যাপ্লিকেশন থেকে মান গ্রহণ করতে পারে।
- Fields:
- Fields হল ডেটা সোর্স থেকে আসা ডেটা যা রিপোর্টে ডিসপ্লে করা হয়।
- Variables:
- Variables ডাইনামিকভাবে গণনা করা মান, যেমন sum, count, average ইত্যাদি।
- Subreports:
- যখন রিপোর্টের মধ্যে অন্য একটি রিপোর্ট অন্তর্ভুক্ত করতে হয়, তখন subreports ব্যবহার করা হয়।
- JasperReports-এ runtime data management এবং dynamic data binding রিপোর্টের flexibility এবং interactivity বৃদ্ধি করে।
- Parameters, fields, variables, এবং subreports ব্যবহার করে আপনি রিপোর্টে real-time data প্রবাহ এবং dynamic data updates পরিচালনা করতে পারেন।
- JDBC, JavaBeans, CSV বা XML ডেটা সোর্সের মাধ্যমে রিপোর্টে ডাইনামিক ডেটা ইনপুট করা সম্ভব এবং তা JRXML ফাইলের মাধ্যমে কাস্টমাইজ করা যায়।
Read more