JasperReports-এ Report Parameters এবং User Input ব্যবস্থাপনা রিপোর্টের কাস্টমাইজেশন এবং ডাইনামিক রিপোর্ট তৈরি করার জন্য অত্যন্ত গুরুত্বপূর্ণ। Parameters ব্যবহার করে আপনি রিপোর্টের ডেটা, আউটপুট ফরম্যাট এবং অন্যান্য বৈশিষ্ট্য পরিবর্তন করতে পারেন, যা ব্যবহারকারী থেকে ইনপুট নেওয়ার মাধ্যমে করা হয়।
এই নিবন্ধে, আমরা JasperReports-এ parameters এবং user input ব্যবস্থাপনা কিভাবে কার্যকরভাবে ব্যবহার করা যায় তা আলোচনা করব।
1. Report Parameters in JasperReports
Parameters হল এমন পরিবর্তনশীল ডেটা যা রিপোর্টে ডাইনামিক ইনপুট হিসেবে প্রেরণ করা হয়। যখন রিপোর্ট চালানো হয়, তখন ব্যবহারকারী বা অ্যাপ্লিকেশন থেকে parameters এর মান প্রদান করা হয় এবং সেই মান রিপোর্টে ব্যবহৃত হয়।
Types of Parameters:
- Static Parameters: স্ট্যাটিক মান যা একবার রিপোর্টের রেন্ডারিংয়ের সময় ব্যবহার করা হয়।
- Dynamic Parameters: ডাইনামিক মান যা রিপোর্ট রান করার সময় ব্যবহারকারী বা অন্য ডেটা সোর্স থেকে প্রাপ্ত হয়।
Parameter Declaration:
JasperReports-এর JRXML ফাইলে parameter ডিক্লেয়ার করা হয়। এই parameters রিপোর্টের মধ্যে প্রেরিত ডেটা প্রক্রিয়ার জন্য ব্যবহৃত হয়।
<parameter name="StartDate" class="java.util.Date"/>
<parameter name="EndDate" class="java.util.Date"/>
এখানে, StartDate এবং EndDate দুটি parameter যা রিপোর্টের সময় ব্যবহারকারীর থেকে ইনপুট নেওয়া হবে।
Example of Parameter in JRXML:
<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">
<parameter name="StartDate" class="java.util.Date"/>
<parameter name="EndDate" class="java.util.Date"/>
<queryString language="SQL">
<![CDATA[SELECT * FROM sales WHERE sale_date BETWEEN $P{StartDate} AND $P{EndDate}]]>
</queryString>
</jasperReport>
এখানে, $P{StartDate} এবং $P{EndDate} হল parameter expressions যা SQL query-তে ডেটা ফিল্টার করার জন্য ব্যবহৃত হবে।
2. Passing Parameters from Java Code
আপনি যখন Java কোড থেকে JasperReports-এর রিপোর্ট ফিল করবেন, তখন parameters পাঠানোর জন্য Map<String, Object> ব্যবহার করতে পারেন।
Example: Passing Parameters from Java:
import net.sf.jasperreports.engine.*;
import java.util.*;
import java.util.Date;
public class JasperReportsWithParameters {
public static void main(String[] args) {
try {
// Compile the report
String reportPath = "path/to/report.jasper"; // compiled .jasper file
JasperReport jasperReport = (JasperReport) JRLoader.loadObjectFromFile(reportPath);
// Create parameters map
Map<String, Object> parameters = new HashMap<>();
parameters.put("StartDate", new Date(2022, 1, 1));
parameters.put("EndDate", new Date(2022, 12, 31));
// Fill the report with data and parameters
JRDataSource dataSource = new JREmptyDataSource(); // example data source
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource);
// Export to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "output/report_with_parameters.pdf");
System.out.println("Report generated successfully with parameters.");
} catch (JRException e) {
e.printStackTrace();
}
}
}
Explanation:
parameters.put("StartDate", new Date(2022, 1, 1)): এটি StartDate parameter এর জন্য একটি মান প্রদান করছে।JasperFillManager.fillReport(): এই মেথডটি রিপোর্টটি ফিল করতে ব্যবহৃত হয়, যেখানে parameters এবং data source প্রদান করা হয়।JasperExportManager.exportReportToPdfFile(): রিপোর্টটি PDF ফরম্যাটে এক্সপোর্ট করার জন্য ব্যবহৃত হয়।
3. User Input for Parameters
JasperReports ব্যবহারকারীর থেকে ইনপুট গ্রহণ করার জন্য JasperReports Studio বা Java-based application-এ ডাইনামিকভাবে parameters ইনপুট নিতে পারে। User Input এর মাধ্যমে রিপোর্টটি কাস্টমাইজ করা সম্ভব।
Example: User Input for Parameters:
Step 1: Create Report with Parameters:
প্রথমে, রিপোর্টে parameters যুক্ত করতে হবে যা ব্যবহারকারী ইনপুট হিসাবে গ্রহণ করবে।
<parameter name="UserRegion" class="java.lang.String"/>
Step 2: Use Scanner for User Input in Java:
ব্যবহারকারীর থেকে ইনপুট গ্রহণ করতে Scanner ক্লাস ব্যবহার করা হয়।
import net.sf.jasperreports.engine.*;
import java.util.*;
import java.util.Scanner;
public class JasperReportsWithUserInput {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Get user input for parameters
System.out.print("Enter Start Date (yyyy-mm-dd): ");
String startDate = scanner.nextLine();
System.out.print("Enter End Date (yyyy-mm-dd): ");
String endDate = scanner.nextLine();
// Compile the report
try {
String reportPath = "path/to/report.jasper"; // compiled .jasper file
JasperReport jasperReport = (JasperReport) JRLoader.loadObjectFromFile(reportPath);
// Create parameters map
Map<String, Object> parameters = new HashMap<>();
parameters.put("StartDate", startDate);
parameters.put("EndDate", endDate);
// Fill the report with data
JRDataSource dataSource = new JREmptyDataSource();
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource);
// Export to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "output/report_with_user_input.pdf");
System.out.println("Report generated successfully with user input.");
} catch (JRException e) {
e.printStackTrace();
}
}
}
Explanation:
- Scanner ব্যবহার করে ব্যবহারকারী থেকে StartDate এবং EndDate ইনপুট নেওয়া হচ্ছে।
- এই ইনপুটগুলি parameters হিসেবে পাঠানো হচ্ছে, যা রিপোর্টে প্রক্রিয়া করা হবে।
4. Default Values for Parameters
কখনো কখনো আপনাকে parameters এর জন্য default values সেট করতে হতে পারে, যা ব্যবহারকারী ইনপুট না দিলে ব্যবহার হবে। JasperReports-এ default values সেট করা সহজ।
Example: Default Parameter Value:
<parameter name="StartDate" class="java.util.Date">
<defaultValueExpression><![CDATA[new java.util.Date()]]></defaultValueExpression>
</parameter>
এখানে, যদি ব্যবহারকারী StartDate প্রদান না করে, তবে বর্তমান date ডিফল্ট হিসেবে গ্রহণ করা হবে।
5. Parameter Types and Expressions
JasperReports-এ parameters বিভিন্ন ধরনের ডেটা গ্রহণ করতে পারে, যেমন String, Integer, Date, এবং Boolean। আপনি expressions ব্যবহার করে parameters এর মান কাস্টমাইজ বা পরিবর্তন করতে পারেন।
Example: Expression for a Parameter:
<parameter name="DiscountRate" class="java.lang.Double">
<defaultValueExpression><![CDATA[0.1]]></defaultValueExpression> <!-- Default discount rate -->
</parameter>
এখানে, DiscountRate parameter এর জন্য ডিফল্ট মান 0.1 (10%) দেওয়া হয়েছে।
JasperReports-এ Report Parameters এবং User Input ব্যবস্থাপনা একটি গুরুত্বপূর্ণ ফিচার, যা রিপোর্টকে dynamic এবং customized করতে সাহায্য করে। এই ফিচারগুলি ব্যবহার করে আপনি:
- Dynamic Reports তৈরি করতে পারেন যা ব্যবহারকারীর ইনপুট বা প্যারামিটার অনুযায়ী কাস্টমাইজড।
- Parameters দিয়ে data filtering এবং calculation করতে পারেন।
- User Input গ্রহণ করতে পারেন এবং সেই ইনপুট রিপোর্টের বিভিন্ন দিক কাস্টমাইজ করতে সাহায্য করে।
এটি রিপোর্ট তৈরির প্রক্রিয়ায় flexibility এবং interactivity নিয়ে আসে, যা ব্যবহারকারীর জন্য আরও কার্যকর এবং উপকারী রিপোর্ট তৈরি করতে সহায়তা করে।
JasperReports একটি শক্তিশালী রিপোর্টিং লাইব্রেরি যা dynamic reports তৈরি করতে ব্যবহার করা হয়। আপনি রিপোর্টের সময় User Input গ্রহণ করতে parameters ব্যবহার করতে পারেন। Parameters হল সেই পরিবর্তনশীল মান যা রিপোর্টের রেন্ডারিং (rendering) প্রক্রিয়া শুরু করার আগে ব্যবহারকারী বা অ্যাপ্লিকেশন থেকে গ্রহণ করা হয়। এগুলি সাধারণত filters, search criteria, date ranges, বা user selections হিসেবে ব্যবহৃত হয়।
এই নিবন্ধে আমরা JasperReports-এ report parameters ব্যবহার করে user input নেওয়া এবং রিপোর্টে parameters পাঠানোর প্রক্রিয়া আলোচনা করব।
Report Parameters কিভাবে কাজ করে?
- Parameter Definition: প্রথমে রিপোর্টে parameter ডিফাইন করতে হয়, যেমন ব্যবহারকারী কী ধরণের ইনপুট প্রদান করবে (যেমন: তারিখ, নাম, সংখ্যা ইত্যাদি)।
- User Input: রিপোর্ট চলাকালীন parameter ইনপুট প্রদান করা হয়।
- Data Filtering: সেই ইনপুটটি data source বা query এ ব্যবহার করা হয় রিপোর্টের জন্য ডেটা নির্বাচন করতে।
- Report Generation: রিপোর্টটি parameter values নিয়ে তৈরি করা হয় এবং আউটপুট হিসাবে প্রিন্ট করা হয়।
JasperReports Studio তে Parameter তৈরি করা
JasperReports Studio তে parameters খুব সহজেই তৈরি করা যায়। আপনি parameter এর ধরণ (যেমন, String, Date, Integer, ইত্যাদি) এবং default value কনফিগার করতে পারেন।
Parameter তৈরি করার ধাপ:
- JasperReports Studio খুলুন এবং নতুন রিপোর্ট তৈরি করুন।
- রিপোর্টের parameters ট্যাব নির্বাচন করুন।
- New Parameter বোতাম ক্লিক করে একটি নতুন parameter তৈরি করুন।
- Name এবং Type নির্বাচন করুন (যেমন: String, Integer, Date ইত্যাদি)।
- Default Value Expression বা User Input প্রদান করতে পারেন।
Example: Date Range Filter Parameter
ধরা যাক, আপনি একটি রিপোর্ট তৈরি করতে চান যা একটি date range দ্বারা sales ডেটা ফিল্টার করবে।
Step 1: Parameter Definition in JRXML
প্রথমে, JRXML ফাইলে parameter ডিফাইন করতে হবে:
<parameter name="StartDate" class="java.util.Date"/>
<parameter name="EndDate" class="java.util.Date"/>
এখানে, StartDate এবং EndDate দুটি parameter তৈরি করা হয়েছে যেগুলো ব্যবহারকারীর কাছ থেকে ইনপুট নেওয়া হবে।
Step 2: SQL Query with Parameters
পরবর্তীতে, এই parameters ব্যবহার করে SQL query তৈরি করুন। উদাহরণস্বরূপ:
<queryString>
<![CDATA[
SELECT * FROM sales WHERE sale_date BETWEEN $P{StartDate} AND $P{EndDate}
]]>
</queryString>
এখানে, SQL query তে $P{StartDate} এবং $P{EndDate} placeholders হিসেবে ব্যবহার করা হয়েছে। এগুলো রিপোর্টের parameters হিসেবে কাজ করবে এবং ব্যবহারকারী যখন রিপোর্টটি চালাবে তখন এই ইনপুটগুলি পাস করা হবে।
Step 3: Fill the Report with Parameters
Java Code থেকে আপনি এই parameters পাঠাতে পারবেন। নিচে একটি উদাহরণ দেওয়া হলো:
import net.sf.jasperreports.engine.*;
import java.util.*;
import java.text.SimpleDateFormat;
public class ReportWithParameter {
public static void main(String[] args) {
try {
// Set up parameters
Map<String, Object> parameters = new HashMap<>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// Set start and end dates
parameters.put("StartDate", sdf.parse("2024-01-01"));
parameters.put("EndDate", sdf.parse("2024-12-31"));
// Compile the report
JasperReport jasperReport = JasperCompileManager.compileReport("path/to/report.jrxml");
// Fill the report with parameters and data
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JREmptyDataSource());
// Export the report to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "output/sales_report.pdf");
System.out.println("Report generated successfully!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
এখানে, আমরা parameters হিসাবে StartDate এবং EndDate সেট করেছি, যা রিপোর্ট ফিলিংয়ের সময় SQL query-তে ব্যবহার করা হবে।
User Input নেওয়া (Dynamic Parameters)
JasperReports Studio তে parameters তৈরি করার সময়, আপনি একটি dynamic user input নিতে পারেন। যেমন একটি date picker বা text field ব্যবহার করে ব্যবহারকারী এই parameters এর মান ইনপুট করতে পারে।
Step 1: Parameter UI Configuration
JasperReports Studio তে আপনি parameters এর UI কনফিগার করতে পারেন:
- Parameter Type: String, Date, Integer, Double, ইত্যাদি।
- Input Prompt: ব্যবহারকারীর জন্য একটি prompt তৈরি করুন যা তাকে ইনপুট দিতে প্রম্পট করবে। যেমন: "Enter Start Date" বা "Enter End Date"।
- Default Value: আপনি default value সেট করতে পারেন যদি ব্যবহারকারী কোন ইনপুট না দেন।
Step 2: Parameter Value Prompt
একটি TextField বা DatePicker ব্যবহার করে ব্যবহারকারী ইনপুট দিতে পারবেন:
- DateRange: ব্যবহারকারী যখন StartDate এবং EndDate ইনপুট করে, তখন সেই মানগুলি রিপোর্টের parameters হিসেবে পাঠানো হবে।
Report Parameters এর ধরণ
JasperReports এ parameters সাধারণত বিভিন্ন ধরণের হতে পারে। নিচে তাদের কিছু উদাহরণ দেওয়া হলো:
- String Parameters:
- ব্যবহারকারী নাম, অবস্থান, ইত্যাদি ইনপুট দিতে পারে।
<parameter name="Name" class="java.lang.String"/>
- Integer Parameters:
- সংখ্যা সম্পর্কিত ইনপুট, যেমন: প্রোডাক্ট কোড, সংখ্যা, পরিমাণ ইত্যাদি।
<parameter name="Quantity" class="java.lang.Integer"/>
- Date Parameters:
- Date ইনপুট যেমন: রেজিস্ট্রেশন তারিখ, অর্ডার তারিখ ইত্যাদি।
<parameter name="OrderDate" class="java.util.Date"/>
- Boolean Parameters:
- Boolean প্যারামিটার, যেমন: রিপোর্টটি দেখানো উচিত কি না, ফিল্টার প্রয়োগ করা উচিত কি না।
<parameter name="IncludeDetails" class="java.lang.Boolean"/>
JasperReports Studio তে Parameter Handling
JasperReports Studio তে parameters ব্যবহারের জন্য:
- Report Parameters উইন্ডো থেকে নতুন parameter তৈরি করুন।
- Prompting for User Input করতে Input Controls ব্যবহার করুন (যেমন: TextBox, DatePicker, ComboBox)।
- Parameters এর default values অথবা dynamic values সেট করুন।
- SQL Queries বা Expressions-এ parameters ব্যবহার করুন।
JasperReports-এ Report Parameters ব্যবহার করে আপনি user input নিতে পারেন যা রিপোর্টের কাস্টমাইজেশন এবং dynamic data ফিল্টারিংয়ের জন্য অত্যন্ত গুরুত্বপূর্ণ। এটি আপনার রিপোর্টকে আরও ইন্টারেক্টিভ এবং ব্যবহারকারী-বান্ধব করে তোলে। রিপোর্ট তৈরির সময় parameters ব্যবহার করে আপনি date ranges, filters, user preferences ইত্যাদি ইনপুট নিতে পারবেন এবং সেই অনুযায়ী ডেটা প্রদর্শন করতে পারবেন।
JasperReports Studio এবং Java code ব্যবহারের মাধ্যমে আপনি সহজেই dynamic reports তৈরি করতে পারেন, যেখানে ব্যবহারকারী তাদের প্রয়োজনীয় ইনপুট দিয়ে রিপোর্টের আউটপুট কাস্টমাইজ করতে পারবেন।
JasperReports-এ Dynamic Query Generation করা খুবই গুরুত্বপূর্ণ, বিশেষ করে যখন আপনি ব্যবহারকারীর ইনপুট বা বিভিন্ন শর্তের ভিত্তিতে রিপোর্টের ডেটা লোড করতে চান। Parameters ব্যবহার করে আপনি dynamic SQL queries তৈরি করতে পারেন, যা রিপোর্টের ডেটা কাস্টমাইজ করার জন্য ব্যবহার করা হয়।
Dynamic Query Generation এর ধারণা
Dynamic queries হল এমন SQL প্রশ্ন যা runtime-এ পরিবর্তিত হয় এবং এর মান parameters দ্বারা নিয়ন্ত্রিত হয়। উদাহরণস্বরূপ, আপনি যদি একটি রিপোর্ট তৈরি করতে চান যা নির্দিষ্ট date range, region, বা employee type এর ভিত্তিতে ডেটা ফিল্টার করবে, তবে আপনি parameters ব্যবহার করে SQL প্রশ্ন তৈরি করতে পারেন।
JasperReports-এ parameters ব্যবহার করে আপনি dynamic SQL queries তৈরি করতে পারেন যা রিপোর্টের ভিন্ন ভিন্ন শর্ত অনুযায়ী ডেটা সরবরাহ করবে। এই প্রক্রিয়া সাধারণত JDBC ডেটা সোর্সে ব্যবহৃত হয়।
Parameters ব্যবহার করে Dynamic Query Generation
1. Parameter Definition in JRXML
প্রথমে আপনাকে JRXML ফাইলে parameters ডিফাইন করতে হবে। parameters রিপোর্টের runtime-এ input হিসেবে কাজ করে।
<parameter name="StartDate" class="java.util.Date"/>
<parameter name="EndDate" class="java.util.Date"/>
<parameter name="Region" class="java.lang.String"/>
এখানে, StartDate, EndDate, এবং Region হল parameters যা রিপোর্টের runtime-এ ব্যবহারকারীর ইনপুট বা ডেটাবেস কোয়েরি থেকে গ্রহণ করা হবে।
2. Dynamic Query Generation with Parameters
একটি SQL query তৈরি করা হবে যা runtime-এ parameters এর মান অনুযায়ী filter হবে।
<queryString language="SQL">
<![CDATA[
SELECT id, name, salary, hire_date
FROM employees
WHERE hire_date BETWEEN $P{StartDate} AND $P{EndDate}
AND region = $P{Region}
]]>
</queryString>
এখানে:
- $P{StartDate} এবং $P{EndDate} হচ্ছে parameters যা date range নির্ধারণ করবে।
- $P{Region} parameter হল Region এর উপর ভিত্তি করে ডেটা ফিল্টার করবে।
Note: CDATA ট্যাগ ব্যবহার করা হয় যাতে SQL কোয়েরি সঠিকভাবে পরিবেশন করা হয়।
3. Filling the Report with Parameters
আপনি Java কোডে parameters সেট করে রিপোর্টে ডেটা ফিল করতে পারেন।
import net.sf.jasperreports.engine.*;
import java.util.*;
public class DynamicQueryExample {
public static void main(String[] args) {
try {
// Compile the JRXML file into a JasperReport object
JasperReport jasperReport = JasperCompileManager.compileReport("path/to/report.jrxml");
// Parameters to be passed to the report
Map<String, Object> parameters = new HashMap<>();
parameters.put("StartDate", new Date(2023, 01, 01)); // Start date
parameters.put("EndDate", new Date(2023, 12, 31)); // End date
parameters.put("Region", "North"); // Region
// Fill the report with data using parameters
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, getDatabaseConnection());
// Export the report to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "output/report.pdf");
System.out.println("Report generated successfully!");
} catch (JRException e) {
e.printStackTrace();
}
}
private static java.sql.Connection getDatabaseConnection() {
// Return a valid JDBC connection (example with JDBC)
return DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "user", "password");
}
}
এখানে:
- parameters.put("StartDate", ...), parameters.put("EndDate", ...), এবং parameters.put("Region", ...) এর মাধ্যমে parameters এর মান সেট করা হচ্ছে।
- JasperFillManager.fillReport() মেথডে parameters এবং data source পাঠানো হচ্ছে, যার মাধ্যমে রিপোর্টে ডেটা যোগ হবে।
4. Dynamic Query Example for Complex Conditions
ধরুন, আপনি একটি রিপোর্ট তৈরি করতে চান যা date range এবং region এর ভিত্তিতে salary ফিল্টার করবে। এবং আপনি চাইলে salary range ও যুক্ত করতে পারেন।
<queryString language="SQL">
<![CDATA[
SELECT id, name, salary, hire_date
FROM employees
WHERE hire_date BETWEEN $P{StartDate} AND $P{EndDate}
AND region = $P{Region}
AND salary BETWEEN $P{MinSalary} AND $P{MaxSalary}
]]>
</queryString>
এখানে, $P{MinSalary} এবং $P{MaxSalary} parameters ব্যবহার করে salary range ফিল্টার করা হচ্ছে।
Java Code to Pass Additional Parameters
Map<String, Object> parameters = new HashMap<>();
parameters.put("StartDate", new Date(2023, 01, 01)); // Start date
parameters.put("EndDate", new Date(2023, 12, 31)); // End date
parameters.put("Region", "North"); // Region
parameters.put("MinSalary", 30000); // Min salary
parameters.put("MaxSalary", 80000); // Max salary
5. Using SQL Functions with Parameters
JasperReports-এ SQL functions (যেমন COUNT, SUM, AVG, MAX, MIN) এবং group by ব্যবহার করাও খুব সহজ, এবং এগুলি parameters এর সাথে মিলে আরও শক্তিশালী রিপোর্ট তৈরি করতে পারে।
<queryString language="SQL">
<![CDATA[
SELECT department, COUNT(*) AS employee_count, AVG(salary) AS avg_salary
FROM employees
WHERE hire_date BETWEEN $P{StartDate} AND $P{EndDate}
AND region = $P{Region}
GROUP BY department
]]>
</queryString>
এখানে COUNT(*) এবং AVG(salary) ব্যবহার করা হয়েছে এবং এটি StartDate, EndDate, এবং Region parameters অনুযায়ী ডেটা কাস্টমাইজ করবে।
6. Using Dynamic Query with Multiple Data Sources
কিছু সময়, আপনাকে একাধিক ডেটা সোর্সের মাধ্যমে ডেটা রেন্ডার করতে হতে পারে, যেমন JDBC এবং CSV একসাথে। আপনি parameters ব্যবহার করে একাধিক সোর্স থেকে ডেটা সংগ্রহ করে রিপোর্ট তৈরি করতে পারেন।
<queryString language="SQL">
<![CDATA[
SELECT name, address FROM employees
WHERE region = $P{Region}
]]>
</queryString>
এবং একাধিক ডেটা সোর্সে ডেটা পাঠানোর জন্য:
Map<String, Object> parameters = new HashMap<>();
parameters.put("Region", "North");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, getJDBCConnection());
- JasperReports-এ dynamic query generation করার জন্য parameters খুবই গুরুত্বপূর্ণ। আপনি parameters ব্যবহার করে SQL queries কাস্টমাইজ করতে পারেন যা রিপোর্টের জন্য ডেটা পরিবর্তন করবে।
- Parameters যেমন StartDate, EndDate, Region, Salary Range, এবং অন্যান্য শর্তের মাধ্যমে ডেটাকে কাস্টমাইজ এবং ফিল্টার করা যেতে পারে।
- JasperReports-এ parameters ব্যবহার করে dynamic reports তৈরি করা যায়, যা রিপোর্টের বিভিন্ন ভিউ তৈরি করতে সাহায্য করে।
এই প্রক্রিয়ায়, আপনি সহজে ব্যবহারকারীর ইনপুট বা অ্যাপ্লিকেশন থেকে প্রেরিত তথ্যের উপর ভিত্তি করে রিপোর্টে ডেটা কাস্টমাইজ করতে পারবেন।
JasperReports একটি অত্যন্ত শক্তিশালী রিপোর্টিং টুল যা Java-এ রিপোর্ট তৈরি, কাস্টমাইজ এবং এক্সপোর্ট করতে ব্যবহৃত হয়। এক্ষেত্রে, User-driven Reports তৈরি করার জন্য, ব্যবহারকারীরা dynamic input প্রদান করতে পারে, যা রিপোর্টের আউটপুট পরিবর্তন করবে। ব্যবহারকারীর ইনপুট নেওয়ার জন্য সাধারণত Custom Input Forms ব্যবহৃত হয়, যার মাধ্যমে ব্যবহারকারী নির্দিষ্ট parameters প্রদান করতে পারে, যেমন date range, product type, location, ইত্যাদি।
এই নিবন্ধে, আমরা JasperReports-এ Custom Input Form তৈরি এবং User-driven Reports তৈরি করার জন্য parameters ব্যবহার সম্পর্কে আলোচনা করব।
1. Parameters in JasperReports: Concept and Usage
Parameters হল সেই ডেটা, যা রিপোর্টের সময় ব্যবহারকারী বা অ্যাপ্লিকেশন থেকে আসা ইনপুট হিসাবে রিপোর্টে প্রেরিত হয়। JasperReports-এ parameters ব্যবহার করে আপনি dynamic reports তৈরি করতে পারেন, যেখানে ব্যবহারকারীর ইনপুট অনুযায়ী ডেটা পরিবর্তন হয়।
Common Use Cases for Parameters:
- Date Range: ব্যবহারকারী যদি নির্দিষ্ট সময়সীমা নির্ধারণ করতে চান, যেমন start date এবং end date।
- Category or Region Filter: ব্যবহারকারী যদি নির্দিষ্ট বিভাগ বা অঞ্চল নির্বাচন করতে চান।
- Custom Queries: রিপোর্টে dynamic queries ব্যবহার করা যাতে ব্যবহারকারীর ইনপুটের উপর ভিত্তি করে ডেটা আনা হয়।
Parameter Declaration in JRXML:
Parameters সাধারণত JRXML ফাইলে ডিফাইন করা হয়।
<parameter name="StartDate" class="java.util.Date"/>
<parameter name="EndDate" class="java.util.Date"/>
<parameter name="Region" class="java.lang.String"/>
এখানে, StartDate, EndDate, এবং Region হলো প্যারামিটার যেগুলি রিপোর্টের জন্য ইনপুট হিসাবে ব্যবহৃত হবে।
2. Custom Input Form for User-Driven Reports
একটি Custom Input Form তৈরি করতে হলে আপনাকে একটি UI তৈরি করতে হবে যা ব্যবহারকারীকে ইনপুট প্রদান করার সুযোগ দেবে। সাধারণত Swing, JavaFX, বা Servlet/JSP ব্যবহার করে এমন ইনপুট ফর্ম তৈরি করা হয়।
Swing Input Form Example:
এখানে একটি সহজ Swing ফর্ম উদাহরণ দেওয়া হলো যা ব্যবহারকারীর কাছ থেকে date range এবং region ইনপুট নেবে এবং সেই অনুযায়ী রিপোর্ট তৈরি করবে।
import javax.swing.*;
import java.awt.*;
import java.util.Date;
import net.sf.jasperreports.engine.*;
import java.util.*;
public class ReportInputForm extends JFrame {
private JTextField startDateField;
private JTextField endDateField;
private JTextField regionField;
public ReportInputForm() {
setTitle("User Input Form for Report");
setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Add components to the form
add(new JLabel("Start Date (YYYY-MM-DD):"));
startDateField = new JTextField(10);
add(startDateField);
add(new JLabel("End Date (YYYY-MM-DD):"));
endDateField = new JTextField(10);
add(endDateField);
add(new JLabel("Region:"));
regionField = new JTextField(10);
add(regionField);
JButton generateButton = new JButton("Generate Report");
generateButton.addActionListener(e -> generateReport());
add(generateButton);
pack();
setVisible(true);
}
private void generateReport() {
try {
// Get input values from the form
Date startDate = new SimpleDateFormat("yyyy-MM-dd").parse(startDateField.getText());
Date endDate = new SimpleDateFormat("yyyy-MM-dd").parse(endDateField.getText());
String region = regionField.getText();
// Define parameters
Map<String, Object> parameters = new HashMap<>();
parameters.put("StartDate", startDate);
parameters.put("EndDate", endDate);
parameters.put("Region", region);
// Compile the report
JasperReport jasperReport = JasperCompileManager.compileReport("path/to/your_report.jrxml");
// Fill the report with data
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JREmptyDataSource());
// Export the report to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "output/report.pdf");
JOptionPane.showMessageDialog(this, "Report Generated Successfully!");
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "Error generating report: " + e.getMessage());
}
}
public static void main(String[] args) {
new ReportInputForm();
}
}
Explanation:
- Swing Input Form: এখানে একটি Swing ফর্ম তৈরি করা হয়েছে, যেখানে ব্যবহারকারী start date, end date, এবং region ইনপুট হিসেবে দিতে পারবেন।
- Generate Report Button: ব্যবহারকারী Generate Report বাটন ক্লিক করলে, রিপোর্ট তৈরির জন্য ইনপুট প্যারামিটারগুলি JasperReport ফাইলে পাঠানো হবে।
3. Dynamic Query Generation Using Parameters
JasperReports-এ dynamic queries তৈরি করতে, আপনি parameters ব্যবহার করে SQL প্রশ্নে পরিবর্তনশীল মান যোগ করতে পারেন। উদাহরণস্বরূপ, ব্যবহারকারীর পছন্দ অনুযায়ী date range বা region এর উপর ভিত্তি করে ডেটা ফিল্টার করা যাবে।
Dynamic Query Example:
ধরা যাক, আপনি একটি JDBC রিপোর্ট তৈরি করছেন, যেখানে StartDate, EndDate, এবং Region প্যারামিটারগুলো ব্যবহার করা হবে SQL query তে।
<queryString>
<![CDATA[
SELECT * FROM employee
WHERE hire_date BETWEEN $P{StartDate} AND $P{EndDate}
AND region = $P{Region}
]]>
</queryString>
এখানে, $P{StartDate}, $P{EndDate}, এবং $P{Region} হল প্যারামিটার যা রিপোর্টের সময় ব্যবহারকারীর ইনপুট অনুযায়ী পরিবর্তিত হবে। $P এর মাধ্যমে আপনি প্যারামিটার রেফারেন্স করেন, যা SQL প্রশ্নে পরিবর্তনশীল মান হিসেবে ব্যবহৃত হয়।
Example of Passing Parameters to the Report:
Map<String, Object> parameters = new HashMap<>();
parameters.put("StartDate", startDate); // date from user input
parameters.put("EndDate", endDate); // date from user input
parameters.put("Region", region); // region from user input
JasperReport jasperReport = JasperCompileManager.compileReport("path/to/your_report.jrxml");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, connection);
এখানে, JasperFillManager.fillReport() মেথডের মাধ্যমে প্যারামিটার পাঠানো হচ্ছে এবং JDBC connection ব্যবহার করা হচ্ছে ডেটা ফেচ করার জন্য।
4. User-driven Reports in Web Applications (Using JSP/Servlet)
যদি আপনি JasperReports কে web applications (যেমন JSP বা Servlet) এর মাধ্যমে ব্যবহার করতে চান, তখনও আপনি user-driven reports তৈরি করতে পারেন। ব্যবহারকারী ইনপুট ফর্মের মাধ্যমে প্যারামিটার প্রদান করবে এবং সেই অনুযায়ী রিপোর্ট তৈরি করা হবে।
JSP Example for User-driven Reports:
<form action="GenerateReport" method="post">
Start Date: <input type="text" name="startDate" />
End Date: <input type="text" name="endDate" />
Region: <input type="text" name="region" />
<input type="submit" value="Generate Report" />
</form>
Servlet Example to Handle Report Generation:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import net.sf.jasperreports.engine.*;
import java.util.*;
public class ReportGeneratorServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
String startDate = request.getParameter("startDate");
String endDate = request.getParameter("endDate");
String region = request.getParameter("region");
Map<String, Object> parameters = new HashMap<>();
parameters.put("StartDate", startDate);
parameters.put("EndDate", endDate);
parameters.put("Region", region);
JasperReport jasperReport = JasperCompileManager.compileReport("path/to/your_report.jrxml");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JREmptyDataSource());
response.setContentType("application/pdf");
ServletOutputStream outputStream = response.getOutputStream();
JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Explanation:
- JSP ফর্মে ব্যবহারকারী ইনপুট প্রদান করে, যা POST রিকোয়েস্ট হিসেবে Servlet-এ পাঠানো হয়।
- Servlet প্যারামিটার গ্রহণ করে JasperReports-এ রিপোর্ট তৈরি করে এবং PDF ফরম্যাটে ক্লায়েন্ট ব্রাউজারে পাঠিয়ে দেয়।
- JasperReports-এ parameters ব্যবহার করে আপনি dynamic reports তৈরি করতে পারেন, যেখানে ব্যবহারকারীর ইনপুট অনুযায়ী ডেটা বা রিপোর্ট কাস্টমাইজ করা হয়।
- Custom Input Forms ব্যবহার করে আপনি date range, region, category ইত্যাদি প্যারামিটার ব্যবহারকারী থেকে ইনপুট হিসেবে নিতে পারেন এবং রিপোর্টের আউটপুট পরিবর্তন করতে পারেন।
- Dynamic Query Generation এবং User-driven Reports তৈরির জন্য প্যারামিটার ব্যবহার করা খুবই কার্যকর, এবং এটি আপনার রিপোর্ট তৈরির প্রক্রিয়াকে আরও ফ্লেক্সিবল ও ইন্টারঅ্যাকটিভ করে তোলে।
JasperReports-এ optional parameters এবং default values ব্যবহার করা রিপোর্ট ডিজাইন এবং কাস্টমাইজেশনের জন্য খুবই গুরুত্বপূর্ণ। Parameters একটি রিপোর্টে dynamic ডেটা ইনপুট করতে ব্যবহৃত হয়, এবং যখন আপনি কিছু optional parameters ব্যবহার করতে চান, তখন আপনি সেই প্যারামিটারগুলোর জন্য default values সেট করতে পারেন। এটি ব্যবহারকারীদের জন্য রিপোর্ট তৈরির প্রক্রিয়াকে আরও সহজ এবং নমনীয় করে তোলে।
1. Optional Parameters in JasperReports
Optional parameters হল এমন প্যারামিটার যা ব্যবহারকারী দেয়ার প্রয়োজন না হলে রিপোর্টের আউটপুটে কোন প্রভাব ফেলবে না। এগুলি রিপোর্টের মধ্যে dynamic কন্ডিশনাল লজিক তৈরি করতে সাহায্য করে। যখন একটি প্যারামিটার optional হয়, তখন আপনি সেই প্যারামিটারটির মান না দিলেও রিপোর্টটি সফলভাবে তৈরি হবে।
Optional Parameters কিভাবে কাজ করে:
- রিপোর্টের JRXML ফাইলে প্যারামিটারটি ঘোষণা করুন।
- Fill Report করার সময় প্যারামিটারটি null বা একটি নির্দিষ্ট মান প্রদান করুন।
- রিপোর্টের মধ্যে এই প্যারামিটারটি null চেক করা এবং প্রাসঙ্গিকভাবে ব্যবহার করা হয়।
Example: Optional Parameter in JRXML
<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="EmployeeReport" language="java" pageWidth="595" pageHeight="842"
columnWidth="515" leftMargin="50" rightMargin="50" topMargin="50" bottomMargin="50">
<!-- Optional Parameter -->
<parameter name="Department" class="java.lang.String"/>
<!-- Fields and Report Design -->
<field name="employee_name" class="java.lang.String"/>
<field name="employee_department" class="java.lang.String"/>
<!-- Title Section -->
<title>
<band height="50">
<staticText>
<reportElement x="0" y="0" width="515" height="50"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Employee Report]]></text>
</staticText>
</band>
</title>
<!-- Detail Section -->
<detail>
<band height="20">
<textField>
<reportElement x="0" y="0" width="170" height="20"/>
<textFieldExpression><![CDATA[$F{employee_name}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="170" y="0" width="170" height="20"/>
<textFieldExpression><![CDATA[$F{employee_department}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
How Optional Parameters Work:
- এখানে, Department প্যারামিটারটি optional হিসেবে ব্যবহৃত হচ্ছে, অর্থাৎ এটি যদি null থাকে, তবুও রিপোর্টটি সঠিকভাবে চলতে থাকবে।
- রিপোর্টের মধ্যে
employee_departmentফিল্ডের জন্য একটি conditional logic যোগ করা যেতে পারে যাতে এটি শুধুমাত্র Department প্যারামিটার দেওয়া হলে কাজ করে। অন্যথায়, এটি রিপোর্টের সব রেকর্ড দেখাবে।
2. Default Values for Parameters
Default values সেট করার মাধ্যমে আপনি নির্দিষ্ট প্যারামিটারগুলোর জন্য একটি প্রাথমিক মান নির্ধারণ করতে পারেন। এটি বিশেষভাবে ব্যবহারীকের ইনপুটের প্রয়োজন না হলে বা ইনপুট না দেওয়ার ক্ষেত্রে কার্যকরী।
How to Set Default Values for Parameters
- JRXML ফাইলে default value সেট করা হয়।
- Filling the report সময় null বা default মান ব্যবহার করা হয়।
Setting Default Values in JRXML
আপনি default value এবং optional প্যারামিটারগুলি সেট করতে পারেন ট্যাগের মধ্যে। defaultValueExpression ব্যবহার করে আপনি একটি প্যারামিটার এর মান আগে থেকেই নির্ধারণ করতে পারেন।
Example of Default Values in JRXML:
<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="EmployeeReport" language="java" pageWidth="595" pageHeight="842"
columnWidth="515" leftMargin="50" rightMargin="50" topMargin="50" bottomMargin="50">
<!-- Parameter with Default Value -->
<parameter name="Department" class="java.lang.String">
<defaultValueExpression><![CDATA["HR"]]></defaultValueExpression>
</parameter>
<!-- Fields and Report Design -->
<field name="employee_name" class="java.lang.String"/>
<field name="employee_department" class="java.lang.String"/>
<!-- Title Section -->
<title>
<band height="50">
<staticText>
<reportElement x="0" y="0" width="515" height="50"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Employee Report]]></text>
</staticText>
</band>
</title>
<!-- Detail Section -->
<detail>
<band height="20">
<textField>
<reportElement x="0" y="0" width="170" height="20"/>
<textFieldExpression><![CDATA[$F{employee_name}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="170" y="0" width="170" height="20"/>
<textFieldExpression><![CDATA[$F{employee_department}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
এখানে, Department প্যারামিটারটির জন্য default value "HR" দেওয়া হয়েছে। অর্থাৎ, যদি ব্যবহারকারী কোনো মান প্রদান না করেন, তবে এই প্যারামিটারটি "HR" মান নিয়ে রিপোর্টে ব্যবহৃত হবে।
3. Passing Optional Parameters in Java Code
Optional parameters এবং default values রিপোর্টে পাস করার সময় Map<String, Object> parameters ব্যবহার করা হয়। যখন আপনি প্যারামিটার পাস করেন, তখন আপনি এটি null বা ডিফল্ট মান দিয়ে পাঠাতে পারেন।
Example: Passing Parameters from Java Code
import net.sf.jasperreports.engine.*;
import java.util.*;
public class JasperReportWithParameters {
public static void main(String[] args) {
try {
// Compile the JRXML file
JasperReport jasperReport = JasperCompileManager.compileReport("path/to/your_report.jrxml");
// Create a map for parameters
Map<String, Object> parameters = new HashMap<>();
parameters.put("Department", "IT"); // Set value for Department
// Note: If we don't pass the "Department", default "HR" will be used.
// Fill the report with data
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JREmptyDataSource());
// Export the report to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "output/report_with_optional_parameters.pdf");
System.out.println("Report generated successfully!");
} catch (JRException e) {
e.printStackTrace();
}
}
}
এখানে, Department প্যারামিটারটি "IT" দ্বারা পাস করা হয়েছে। যদি এটি পাস না করা হয়, তবে default value "HR" ব্যবহার হবে।
4. Conditional Logic with Optional Parameters
আপনি conditional logic ব্যবহার করতে পারেন রিপোর্টের মধ্যে optional parameters এবং default values এর ভিত্তিতে। উদাহরণস্বরূপ, যদি প্যারামিটারটি null বা default থাকে, তবে কিছু ডেটা স্কিপ করা হবে বা অন্য কোনো লজিক প্রয়োগ হবে।
Example: Conditional Logic for Optional Parameters
<detail>
<band height="20">
<textField>
<reportElement x="0" y="0" width="170" height="20"/>
<textFieldExpression><![CDATA[$P{Department} == null ? "No Department Selected" : $P{Department}]]></textFieldExpression>
</textField>
</band>
</detail>
এখানে, যদি Department প্যারামিটার null থাকে, তাহলে "No Department Selected" প্রদর্শিত হবে, অন্যথায় Department এর মান প্রদর্শিত হবে।
- Optional parameters এবং default values JasperReports-এ রিপোর্ট কাস্টমাইজেশনের জন্য শক্তিশালী টুল।
- আপনি JRXML ফাইলে default value ব্যবহার করতে পারেন এবং null চেকের মাধ্যমে optional parameters যুক্ত করতে পারেন।
- Java code-এর মাধ্যমে parameters পাস করা এবং conditional logic প্রয়োগ করে রিপোর্টের আউটপুট আরও বেশি নমনীয় এবং ব্যবহারকারী-প্রতিক্রিয়াশীল করা সম্ভব।
Read more