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 তৈরি করা যায়, যা রিপোর্টের বিভিন্ন ভিউ তৈরি করতে সাহায্য করে।
এই প্রক্রিয়ায়, আপনি সহজে ব্যবহারকারীর ইনপুট বা অ্যাপ্লিকেশন থেকে প্রেরিত তথ্যের উপর ভিত্তি করে রিপোর্টে ডেটা কাস্টমাইজ করতে পারবেন।
Read more