JasperReports ব্যবহার করে আপনি ডাইনামিক রিপোর্ট তৈরি করতে পারেন এবং সেগুলিকে বিভিন্ন ফরম্যাটে এক্সপোর্ট করতে পারেন, যেমন PDF, Excel, HTML, CSV, ইত্যাদি। তবে, কিছু ব্যবসায়িক পরিস্থিতিতে রিপোর্টগুলিকে নির্দিষ্ট সময়ে স্বয়ংক্রিয়ভাবে তৈরি এবং পাঠানোর প্রয়োজন হয়। এ ক্ষেত্রে scheduling বা ক্রোনো জব ব্যবস্থাপনা একটি গুরুত্বপূর্ণ বিষয় হয়ে ওঠে।
JasperReports এর মাধ্যমে রিপোর্ট শিডিউল করার জন্য আপনি সাধারণত Quartz Scheduler, Spring Scheduler, অথবা অন্যান্য শিডিউলিং টুল ব্যবহার করতে পারেন। এভাবে আপনি স্বয়ংক্রিয়ভাবে রিপোর্ট তৈরি এবং এক্সপোর্ট করতে পারবেন নির্দিষ্ট সময় বা সময়সীমার মধ্যে।
JasperReports এবং Scheduling এর মধ্যে সম্পর্ক
Scheduling হল একটি প্রক্রিয়া, যেখানে আপনি রিপোর্ট তৈরি করার জন্য একটি নির্দিষ্ট সময় নির্ধারণ করেন। শিডিউল করা রিপোর্টগুলি সাধারণত ব্যাকগ্রাউন্ডে রান করে এবং যখন প্রয়োজন হয় তখন সেই রিপোর্ট তৈরি করা হয় এবং এক্সপোর্ট করা হয়।
- Quartz Scheduler: একটি ওপেন সোর্স শিডিউলার যা আপনাকে নির্দিষ্ট সময় বা সময়সীমায় কাজ (যেমন রিপোর্ট তৈরি) চালানোর সুযোগ দেয়।
- Spring Scheduler: Spring Framework-এর একটি অংশ যা টাস্ক শিডিউল করতে সহায়তা করে। Spring Scheduler ব্যবহার করে আপনি JasperReports রিপোর্ট শিডিউল করতে পারেন।
JasperReports এর মাধ্যমে Scheduling সেটআপ করা
ধাপ ১: Quartz Scheduler এর সাথে JasperReports Integration
Quartz Scheduler একটি শক্তিশালী শিডিউলিং টুল যা Java ভিত্তিক অ্যাপ্লিকেশনগুলির মধ্যে কাজের নির্দিষ্ট সময় নির্ধারণ করে চলতে সাহায্য করে। Quartz Scheduler এর সাথে JasperReports ইন্টিগ্রেট করতে আমরা একটি জব তৈরি করতে পারি, যা নির্দিষ্ট সময়ে JasperReports রিপোর্ট তৈরি করবে।
- Maven Dependency (Quartz Scheduler):
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
- Quartz Scheduler Job Example (JasperReports Integration):
import org.quartz.*;
import net.sf.jasperreports.engine.*;
import java.util.Map;
import java.util.HashMap;
import javax.sql.DataSource;
public class JasperReportJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
try {
// Create a connection to the data source
DataSource dataSource = (DataSource) context.getJobDetail().getJobDataMap().get("dataSource");
// Prepare parameters for the report
Map<String, Object> parameters = new HashMap<>();
parameters.put("startDate", "2022-01-01");
parameters.put("endDate", "2022-12-31");
// Compile the report
JasperReport jasperReport = JasperCompileManager.compileReport("sales_report.jrxml");
// Fill the report with data
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource.getConnection());
// Export the report to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "scheduled_sales_report.pdf");
System.out.println("Scheduled report generated successfully.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
এখানে:
- Quartz Job তৈরি করা হয়েছে যা JasperReports ব্যবহার করে রিপোর্ট তৈরি করবে এবং নির্দিষ্ট ফরম্যাটে এক্সপোর্ট করবে (এখানে PDF ফরম্যাটে)।
- JobDataMap-এ ডেটা সোর্স পাস করা হয়েছে, যাতে ডেটাবেস থেকে ডেটা সংগ্রহ করা যায়।
- Quartz Scheduler Configuration Example:
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
public class JasperReportScheduler {
public static void main(String[] args) throws SchedulerException {
// Define the job and tie it to our JasperReportJob class
JobDetail job = JobBuilder.newJob(JasperReportJob.class)
.withIdentity("jasperReportJob", "group1")
.usingJobData("dataSource", "yourDataSourceHere")
.build();
// Trigger the job to run every day at 8 AM
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("jasperReportTrigger", "group1")
.startNow()
.withSchedule(CronScheduleBuilder.dailyAtHourAndMinute(8, 0)) // Run daily at 8 AM
.build();
// Schedule the job with the scheduler
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
}
}
এখানে:
- Quartz Scheduler-এর
CronScheduleBuilderব্যবহার করে রিপোর্টটি প্রতিদিন 8 AM তে চালানোর জন্য শিডিউল করা হয়েছে। - JobDetail এবং Trigger তৈরি করে job কে ট্রিগার করা হচ্ছে।
ধাপ ২: Spring Scheduler এর সাথে JasperReports Integration
Spring Scheduler ব্যবহার করে আপনি Spring Boot অ্যাপ্লিকেশনে সহজেই রিপোর্ট শিডিউল করতে পারেন। Spring Scheduler একটি সহজ API প্রদান করে, যার মাধ্যমে আপনি নির্দিষ্ট সময় বা সময়সীমায় কাজ পরিচালনা করতে পারেন।
- Maven Dependency (Spring Boot Starter):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-scheduling</artifactId>
</dependency>
- Spring Scheduler Example:
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import net.sf.jasperreports.engine.*;
import java.util.HashMap;
import java.util.Map;
@Component
public class JasperReportScheduler {
@Scheduled(cron = "0 0 8 * * ?") // Every day at 8 AM
public void generateScheduledReport() {
try {
// Prepare parameters for the report
Map<String, Object> parameters = new HashMap<>();
parameters.put("startDate", "2022-01-01");
parameters.put("endDate", "2022-12-31");
// Compile the report
JasperReport jasperReport = JasperCompileManager.compileReport("sales_report.jrxml");
// Fill the report with data
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JREmptyDataSource());
// Export the report to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "scheduled_sales_report.pdf");
System.out.println("Scheduled report generated successfully.");
} catch (JRException e) {
e.printStackTrace();
}
}
}
এখানে:
- @Scheduled অ্যানোটেশন ব্যবহার করে প্রতি দিন 8 AM-এ রিপোর্ট তৈরি করা হচ্ছে।
- Spring Scheduler ব্যবহার করে সহজে নির্দিষ্ট সময়ে রিপোর্ট তৈরি এবং এক্সপোর্ট করা সম্ভব হয়েছে।
JasperReports এবং Scheduling-এর সুবিধা
- Automation:
- রিপোর্টগুলি নির্দিষ্ট সময়ে বা সময়সীমায় তৈরি হতে পারে, যেমন প্রতিদিন, প্রতি সপ্তাহে বা প্রতি মাসে।
- Reliability:
- শিডিউলিং ব্যবস্থার মাধ্যমে রিপোর্ট তৈরি হওয়ার সময় নির্দিষ্ট এবং নির্ভরযোগ্য থাকে। এটি ব্যবসায়িক সিদ্ধান্ত গ্রহণের জন্য সাহায্যকারী।
- Integration:
- Quartz Scheduler বা Spring Scheduler ব্যবহার করে JasperReports সহজে আপনার বিদ্যমান Java EE বা Spring অ্যাপ্লিকেশনের সঙ্গে ইন্টিগ্রেট করা যায়।
- Scalability:
- যখন আপনি প্রচুর রিপোর্ট তৈরি করতে চান, তখন শিডিউলিং সিস্টেম স্বয়ংক্রিয়ভাবে প্রতিবেদন তৈরি করে এবং সেগুলো স্বয়ংক্রিয়ভাবে পরিচালনা করে।
- Resource Optimization:
- রিপোর্ট শিডিউল করা গেলে অ্যাপ্লিকেশন সার্ভার বা ক্লায়েন্টের মাধ্যমে রিপোর্ট তৈরি করার প্রয়োজন হয় না, এবং এটি ব্যাকগ্রাউন্ডে স্বয়ংক্রিয়ভাবে পরিচালিত হতে পারে।
JasperReports এবং scheduling ব্যবস্থার মাধ্যমে আপনি নিয়মিত সময় অনুযায়ী স্বয়ংক্রিয়ভাবে রিপোর্ট তৈরি এবং এক্সপোর্ট করতে পারেন। Quartz Scheduler এবং Spring Scheduler ব্যবহার করে আপনি রিপোর্ট শিডিউল করতে পারেন এবং ব্যাকগ্রাউন্ডে নির্দিষ্ট সময়ে রিপোর্ট তৈরি করতে পারেন, যা ব্যবসায়িক কার্যক্রমে খুবই গুরুত্বপূর্ণ। JasperReports-এর সাথে শিডিউলিং ব্যবস্থাপনা আপনার রিপোর্টিং প্রক্রিয়াকে আরো কার্যকর এবং সময়সাশ্রয়ী করে তোলে।
JasperReports একটি শক্তিশালী রিপোর্টিং টুল যা Java অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয়। তবে, রিপোর্ট তৈরি ও এক্সপোর্ট করার জন্য অনেক সময় বিভিন্ন সময়সূচীতে রিপোর্টগুলি চালানো বা scheduled করা প্রয়োজন হয়। JasperReports-এ রিপোর্ট সিডিউলিং (Report Scheduling) এর মাধ্যমে আপনি নির্দিষ্ট সময় বা নির্দিষ্ট ইভেন্টে রিপোর্টটি অটোমেটিক্যালি তৈরি এবং এক্সপোর্ট করতে পারেন। এটি বিশেষভাবে ব্যবসায়িক রিপোর্টিং, ডেটা অ্যানালিটিক্স, এবং অন্যান্য কাজে উপকারী যেখানে নিয়মিতভাবে রিপোর্ট তৈরি এবং প্রেরণ করা প্রয়োজন।
JasperReports-এ রিপোর্ট সিডিউলিং প্রধানত JasperReports Server বা Jaspersoft Studio ব্যবহার করে করা হয়। JasperReports Server এ এটি আরও শক্তিশালী ফিচার হিসেবে আসে, যেখানে আপনি রিপোর্টগুলোকে সিডিউল করতে পারেন এবং রিপোর্ট আউটপুট নির্দিষ্ট সময় অনুযায়ী পাঠাতে পারেন।
JasperReports Server তে রিপোর্ট Scheduling
JasperReports Server-এ রিপোর্ট সিডিউল করা খুবই সহজ এবং সরাসরি ব্যবহারকারীদের কাছে রিপোর্টের জন্য একাধিক সময়সূচি নির্ধারণের সুবিধা দেয়। এটি JasperReports Server এর Scheduler ফিচার ব্যবহার করে করা হয়, যেখানে আপনি রিপোর্টটি একাধিক ফরম্যাটে (PDF, Excel, CSV, HTML ইত্যাদি) নির্দিষ্ট সময় বা তারিখে রান করতে পারেন।
JasperReports Server এ রিপোর্ট Scheduling করার ধাপসমূহ:
- রিপোর্ট তৈরি করা:
- প্রথমে, আপনাকে একটি রিপোর্ট তৈরি করতে হবে, যা JasperReports Server এ আপলোড করা যাবে। রিপোর্টটি একটি JasperReports (JRXML) বা Jasper ফাইল হিসেবে থাকতে হবে।
- জেডি-বি (Jaspersoft Studio) দিয়ে রিপোর্ট আপলোড করা:
- Jaspersoft Studio ব্যবহার করে রিপোর্ট তৈরি করুন এবং JasperReports Server-এ আপলোড করুন।
- রিপোর্ট সিডিউল করা:
- JasperReports Server এ লগইন করে আপনি রিপোর্ট সিডিউল করার জন্য একটি সময় নির্ধারণ করতে পারেন। আপনি বিভিন্ন সময়সূচী যেমন দৈনিক, সাপ্তাহিক, বা মাসিক নির্ধারণ করতে পারবেন।
- রিপোর্ট আউটপুট ফরম্যাট নির্বাচন:
- সিডিউল করা রিপোর্টের আউটপুট ফরম্যাট (PDF, Excel, HTML, CSV, ইত্যাদি) নির্বাচন করা যাবে।
- রিপোর্ট ইমেল মাধ্যমে পাঠানো:
- সিডিউল করা রিপোর্ট একটি নির্দিষ্ট ইমেইল ঠিকানায় পাঠানো যাবে, যেমন প্রতিদিনের বিক্রয়ের রিপোর্ট ম্যানেজারকে পাঠানো।
JasperReports Server এ রিপোর্ট Scheduling Example:
- Reports -> Schedules:
- JasperReports Server এর ড্যাশবোর্ডে "Schedules" ট্যাবে যান।
- New Schedule:
- "New Schedule" এ ক্লিক করুন। এখানে আপনি রিপোর্টের নাম, আউটপুট ফরম্যাট (PDF, Excel, etc.), এবং ইমেল পাঠানোর জন্য সঠিক কনফিগারেশন পাবেন।
- Frequency:
- রিপোর্টের জন্য সময়সীমা নির্বাচন করুন যেমন Daily, Weekly, Monthly বা Specific Time।
- Start Date এবং End Date:
- সিডিউল করার সময় শুরু এবং শেষ তারিখও নির্ধারণ করতে পারেন।
- Output Format:
- রিপোর্টের আউটপুট ফরম্যাট নির্বাচন করুন (যেমন PDF, Excel, HTML, etc.).
- Email Configuration:
- রিপোর্টটি যদি ইমেল হিসাবে পাঠাতে চান, তাহলে রিপোর্ট আউটপুটের ইমেইল কনফিগারেশন করুন। এতে আপনার নির্ধারিত রিপোর্টটি নির্দিষ্ট ইমেইল ঠিকানায় পাঠানো হবে।
JasperReports Server এর Scheduler এবং কনফিগারেশন
JasperReports Server আপনাকে রিপোর্ট সিডিউল করার জন্য শক্তিশালী ইন্টারফেস প্রদান করে, যা ব্যাকগ্রাউন্ডে নির্দিষ্ট সময় পর পর রিপোর্ট রান করে এবং তা ইমেইলে পাঠায়। JasperReports Server-এর Scheduler এর কনফিগারেশন কিছু গুরুত্বপূর্ণ সেটিংস এর উপর নির্ভরশীল:
- Time Zone:
- আপনি রিপোর্ট সিডিউল করার সময় Time Zone নির্ধারণ করতে পারেন যাতে এটি সঠিক স্থানীয় সময় অনুযায়ী রান করে।
- Data Source:
- রিপোর্টের ডেটার সোর্স সেট করতে হবে। এটি JDBC, JNDI, অথবা Hibernate হতে পারে।
- Output Destination:
- রিপোর্টের আউটপুট একটি নির্দিষ্ট ডিরেক্টরিতে সংরক্ষণ করতে অথবা ইমেইল মাধ্যমে পাঠানো যেতে পারে।
Jaspersoft Studio ব্যবহার করে রিপোর্ট Scheduling
Jaspersoft Studio ব্যবহার করে JasperReports ফাইল তৈরি করতে পারেন, তবে রিপোর্ট সিডিউলিং বা অটোমেটিক এক্সিকিউশন JasperReports Server এ করা যায়। Jaspersoft Studio মূলত রিপোর্ট ডিজাইন এবং তৈরি করার জন্য ব্যবহৃত হয়, তবে এটি JasperReports Server-এর সাথে সংযুক্ত হয়ে রিপোর্ট সিডিউলিং সাপোর্ট করে।
Jaspersoft Studio ব্যবহার করে JasperReports Server এর সাথে ইন্টিগ্রেশন:
- Jaspersoft Studio থেকে রিপোর্ট তৈরি করুন।
- রিপোর্টটি JasperReports Server এ আপলোড করুন।
- JasperReports Server এর মাধ্যমে রিপোর্ট সিডিউল করুন।
Java Code দিয়ে JasperReports এ Scheduling
JasperReports-এ রিপোর্ট সিডিউল করার জন্য Java কোডের মাধ্যমে সরাসরি সিডিউলিং করতে পারেন, তবে এটি সাধারণত JasperReports Server এর মাধ্যমে সহজভাবে করা যায়। Java কোডের মাধ্যমে, আপনি Quartz Scheduler বা অন্যান্য Job Scheduler ব্যবহার করতে পারেন রিপোর্ট সিডিউল করার জন্য।
Quartz Scheduler Example:
Quartz Scheduler ব্যবহার করে JasperReports রিপোর্ট সিডিউল করা যায়। নিচে একটি সাধারণ কোড উদাহরণ দেওয়া হলো যা রিপোর্ট সিডিউল করে:
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import net.sf.jasperreports.engine.*;
public class ReportScheduler {
public static void main(String[] args) throws Exception {
// Quartz Scheduler তৈরি করা
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start();
// রিপোর্ট সিডিউল করার জন্য ট্রিগার সেট করা
JobDetail job = JobBuilder.newJob(ReportJob.class)
.withIdentity("reportJob", "group1")
.build();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("reportTrigger", "group1")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(60).repeatForever()) // প্রতি 60 সেকেন্ডে
.build();
scheduler.scheduleJob(job, trigger);
}
}
class ReportJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
try {
// রিপোর্ট কম্পাইল করা
String reportPath = "path/to/your/report.jasper";
JasperReport jasperReport = JasperCompileManager.compileReport(reportPath);
// রিপোর্ট ফিলিং এবং এক্সপোর্ট করা (PDF)
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap<>(), new JREmptyDataSource());
JasperExportManager.exportReportToPdfFile(jasperPrint, "scheduled_report.pdf");
} catch (JRException e) {
e.printStackTrace();
}
}
}
এখানে Quartz Scheduler ব্যবহার করে একটি রিপোর্ট সিডিউল করা হয়েছে যা প্রতি 60 সেকেন্ডে চলবে এবং scheduled_report.pdf ফাইল তৈরি করবে।
JasperReports-এ রিপোর্ট সিডিউলিং একটি গুরুত্বপূর্ণ ফিচার যা আপনাকে রিপোর্টগুলি নির্দিষ্ট সময় বা ইভেন্টে অটোমেটিক্যালি তৈরি এবং এক্সপোর্ট করতে সক্ষম করে। JasperReports Server এর মাধ্যমে এই ফিচারটি সহজভাবে ব্যবহার করা যায়, যেখানে আপনি বিভিন্ন ধরনের রিপোর্ট সিডিউল করতে পারেন এবং ইমেইল বা অন্য কোনো আউটপুট ফরম্যাটে পাঠাতে পারেন। এছাড়াও, Java কোড এবং Quartz Scheduler ব্যবহার করে সরাসরি রিপোর্ট সিডিউলিং করারও সুবিধা রয়েছে।
JasperReports এর মাধ্যমে রিপোর্ট তৈরি এবং এক্সপোর্ট করা হয়, তবে অনেক ক্ষেত্রে রিপোর্টের নির্দিষ্ট সময় বা নির্দিষ্ট সময় অন্তর তৈরি করা প্রয়োজন হয়। যেমন, আপনি যদি একটি ডেইলি রিপোর্ট, ওয়িকলি রিপোর্ট বা মেন্থলি রিপোর্ট অটোমেটেডভাবে এক্সপোর্ট করতে চান, তবে আপনি Quartz Scheduler ব্যবহার করতে পারেন। Quartz Scheduler একটি শক্তিশালী ওপেন সোর্স শিডিউলার যা Java অ্যাপ্লিকেশনের মধ্যে টাস্ক অটোমেটেডভাবে রান করতে সক্ষম করে।
Quartz Scheduler এবং JasperReports একত্রিত করার মাধ্যমে আপনি রিপোর্ট জেনারেশন প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে করতে পারেন।
Quartz Scheduler কি?
Quartz Scheduler হল একটি জাভা লাইব্রেরি যা টাস্ক শিডিউলিং এবং অটোমেশন কাজের জন্য ব্যবহৃত হয়। এটি আপনাকে নির্দিষ্ট সময়ে বা নির্দিষ্ট সময় অন্তর কোনো নির্দিষ্ট টাস্ক (যেমন, রিপোর্ট জেনারেশন) চালাতে সাহায্য করে। Quartz Scheduler ব্যাকগ্রাউন্ডে কাজ করে এবং নির্ধারিত সময় বা নির্দিষ্ট শর্তে কাজ সম্পাদন করে।
JasperReports এবং Quartz Scheduler এর ইন্টিগ্রেশন
Quartz Scheduler এবং JasperReports এর মাধ্যমে আপনি একটি report generation job শিডিউল করতে পারেন, যা নির্দিষ্ট সময়ে রিপোর্ট তৈরি করবে এবং সেই রিপোর্টটি নির্দিষ্ট ফরম্যাটে এক্সপোর্ট করবে (যেমন, PDF, Excel, HTML, CSV ইত্যাদি)।
1. Quartz Scheduler সেটআপ করা
প্রথমে, Quartz Scheduler সেটআপ করতে হবে। আপনি Maven ব্যবহার করলে Quartz-এর ডিপেন্ডেন্সি pom.xml ফাইলে যোগ করতে হবে।
Maven Dependency:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version> <!-- Use the appropriate version -->
</dependency>
2. Quartz Job তৈরি করা
Quartz Job হল একটি ক্লাস যা নির্দিষ্ট কাজ (যেমন, রিপোর্ট তৈরি) সম্পাদন করবে। আমরা একটি Job তৈরি করব যা JasperReports ব্যবহার করে রিপোর্ট তৈরি করবে।
Quartz Job Example:
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import net.sf.jasperreports.engine.*;
import java.util.HashMap;
public class ReportGenerationJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
try {
// JasperReports-এ রিপোর্ট জেনারেট করা
String reportPath = "path/to/your/jasper_report.jasper"; // কম্পাইল করা Jasper রিপোর্ট
JasperReport jasperReport = (JasperReport) JRLoader.loadObjectFromFile(reportPath);
// প্যারামিটার এবং ডেটা প্রক্রিয়া
HashMap<String, Object> parameters = new HashMap<>();
parameters.put("ReportTitle", "Scheduled Sales Report");
// রিপোর্ট ফিলিং
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JREmptyDataSource());
// রিপোর্ট পিডিএফ আউটপুট
JasperExportManager.exportReportToPdfFile(jasperPrint, "scheduled_sales_report.pdf");
System.out.println("Report generated successfully.");
} catch (JRException e) {
e.printStackTrace();
}
}
}
এখানে, ReportGenerationJob ক্লাসটি Job ইন্টারফেস ইমপ্লিমেন্ট করছে। এই ক্লাসটি JasperReports এর মাধ্যমে রিপোর্ট তৈরি এবং এক্সপোর্ট করে PDF ফরম্যাটে।
3. Quartz Scheduler Job Scheduling
এখন, আমরা Quartz Scheduler ব্যবহার করে এই Job-কে নির্দিষ্ট সময় বা নির্দিষ্ট সময়ে চালানোর জন্য শিডিউল করতে পারি।
Scheduler Example:
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzSchedulerExample {
public static void main(String[] args) throws SchedulerException {
// Scheduler তৈরি
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// JobDetail তৈরি করা
JobDetail job = JobBuilder.newJob(ReportGenerationJob.class)
.withIdentity("reportGenerationJob", "group1")
.build();
// Trigger তৈরি করা (এখানে, প্রতি দিন একটি নির্দিষ্ট সময়ে রিপোর্ট চালানো হবে)
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("dailyTrigger", "group1")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInHours(24) // প্রতি ২৪ ঘণ্টায়
.repeatForever())
.build();
// Job এবং Trigger Scheduler এ যোগ করা
scheduler.scheduleJob(job, trigger);
// Scheduler শুরু করা
scheduler.start();
}
}
এখানে, Scheduler তৈরি করা হয়েছে এবং Trigger ব্যবহার করে ReportGenerationJob প্রতিদিন নির্দিষ্ট সময়ে (এখানে প্রতি ২৪ ঘণ্টায়) চালানোর জন্য শিডিউল করা হয়েছে।
4. Job এর এক্সিকিউশন এবং রিপোর্ট আউটপুট
এই কোডটি চালানোর পর ReportGenerationJob ক্লাসটি প্রতিদিন একবার চালানো হবে এবং রিপোর্ট PDF ফরম্যাটে "scheduled_sales_report.pdf" নামের ফাইলে এক্সপোর্ট হবে।
Quartz Scheduler এর সুবিধা
- Automated Report Generation:
- Quartz Scheduler এর মাধ্যমে রিপোর্ট তৈরি অটোমেটেডভাবে করা সম্ভব। আপনি নির্দিষ্ট সময় অন্তর রিপোর্ট তৈরি করতে পারেন, যেমন ডেইলি রিপোর্ট, মেন্থলি রিপোর্ট, ইত্যাদি।
- Flexible Scheduling:
- Quartz Scheduler আপনাকে daily, weekly, monthly বা আপনার প্রয়োজন অনুযায়ী custom interval সেট করতে সাহায্য করে। এটি রিপোর্ট সিস্টেমের স্বয়ংক্রিয় কাজের জন্য আদর্শ।
- Job Management:
- Quartz আপনাকে জব এবং ট্রিগারগুলি পরিচালনা করতে দেয়, যার মাধ্যমে আপনি রিপোর্টগুলি চালানোর জন্য নির্দিষ্ট সময় বা শর্ত নির্বাচন করতে পারেন।
- Performance Optimization:
- Quartz Scheduler ব্যাকগ্রাউন্ডে কাজ করে এবং সিস্টেমের পারফরম্যান্সে প্রভাব ফেলে না। এটি আপনার অ্যাপ্লিকেশনের মূল কাজ চালানোর পাশাপাশি রিপোর্ট তৈরি করতে সাহায্য করে।
- Scalability:
- Quartz Scheduler অনেক বড় পরিসরের রিপোর্টের জন্য কার্যকরী, যেখানে একাধিক রিপোর্টের শিডিউল করা এবং এক্সিকিউট করা প্রয়োজন।
Quartz Scheduler এবং JasperReports এর মাধ্যমে আপনি আপনার রিপোর্টিং সিস্টেমের কাজ অটোমেটেড করতে পারেন। Quartz Scheduler এর সাহায্যে আপনি নির্দিষ্ট সময়ের মধ্যে রিপোর্ট তৈরি এবং এক্সপোর্ট করতে পারবেন, যা বিশেষত ডেইলি, সাপ্তাহিক, বা মাসিক রিপোর্টিং সিস্টেমের জন্য অত্যন্ত উপকারী। এটি আপনাকে ডেটাবেস রিপোর্ট, ফিনান্সিয়াল রিপোর্ট, বিক্রয় রিপোর্ট ইত্যাদি এক্সপোর্ট করার জন্য একটি সম্পূর্ণ স্বয়ংক্রিয় সমাধান প্রদান করে।
JasperReports এ time-based report generation এবং delivery একটি শক্তিশালী ফিচার যা আপনাকে রিপোর্ট নির্দিষ্ট সময়ের মধ্যে স্বয়ংক্রিয়ভাবে জেনারেট এবং বিতরণ করতে সাহায্য করে। এই ধরনের ফিচার সাধারণত ব্যবহার করা হয় যখন রিপোর্টগুলি রেগুলার ইন্টারভাল বা সময় নির্ধারণ অনুযায়ী তৈরি এবং পাঠানো প্রয়োজন হয়, যেমন দৈনিক, সাপ্তাহিক, বা মাসিক রিপোর্ট।
Time-based report generation সাধারণত scheduler এবং cron jobs ব্যবহার করে, এবং email delivery বা file storage এর মাধ্যমে রিপোর্ট স্বয়ংক্রিয়ভাবে পাঠানো হয়। এই উদাহরণে, আমরা দেখব কিভাবে JasperReports ব্যবহার করে time-based report generation এবং automated report delivery তৈরি করা যায়।
ধাপ ১: Time-based Report Generation
JasperReports এবং Spring Boot ব্যবহার করে একটি time-based report generation তৈরি করা যেতে পারে, যেখানে রিপোর্ট স্বয়ংক্রিয়ভাবে নির্দিষ্ট সময়ের মধ্যে জেনারেট হবে।
1.1. Spring Boot Project Setup
প্রথমে Spring Boot প্রজেক্ট তৈরি করতে হবে এবং প্রয়োজনীয় ডিপেনডেন্সি যুক্ত করতে হবে।
<dependencies>
<!-- Spring Boot Starter Web (for REST API) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- JasperReports dependency -->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.16.0</version>
</dependency>
<!-- Spring Boot Scheduler -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-scheduled</artifactId>
</dependency>
<!-- Email Sending (optional) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
</dependencies>
এখানে আমরা Spring Boot এবং JasperReports ডিপেনডেন্সি যুক্ত করেছি। এছাড়া Spring Boot Scheduler দিয়ে রিপোর্টের জন্য সিডিউল তৈরি করা যাবে এবং spring-boot-starter-mail দিয়ে রিপোর্ট ইমেইল মারফত পাঠানো যাবে।
1.2. Scheduler Configuration
Spring Boot-এ Scheduled tasks ব্যবহার করার জন্য আপনাকে @EnableScheduling অ্যানোটেশন দিয়ে task scheduler সক্রিয় করতে হবে।
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
@EnableScheduling
public class ReportScheduler {
@Scheduled(cron = "0 0 8 * * ?") // Run daily at 8 AM
public void generateDailyReport() {
// Call method to generate report
System.out.println("Generating daily report at 8 AM...");
generateReport(); // Your JasperReport generation logic
}
// Method to generate report
public void generateReport() {
// Your JasperReport generation logic goes here
System.out.println("Report generated!");
}
}
এখানে @Scheduled(cron = "0 0 8 * * ?") ব্যবহার করা হয়েছে যা daily 8 AM-এ রিপোর্ট জেনারেট করবে।
- Cron expression:
0 0 8 * * ?এর মানে প্রতিদিন ৮:০০ AM-এ এই মেথডটি চালানো হবে।
ধাপ ২: JasperReports দিয়ে রিপোর্ট তৈরি করা
এখন আমরা JasperReports দিয়ে একটি সাধারণ Sales Report তৈরি করব এবং এটি scheduled time এ জেনারেট করব।
2.1. JasperReports JRXML রিপোর্ট ডিজাইন
<?xml version="1.0" encoding="UTF-8"?>
<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">
<!-- Fields -->
<field name="salesRep" class="java.lang.String"/>
<field name="productName" class="java.lang.String"/>
<field name="salesAmount" class="java.lang.Double"/>
<detail>
<band height="20">
<textField>
<reportElement x="0" y="0" width="100" height="20"/>
<textFieldExpression><![CDATA[$F{salesRep}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="120" y="0" width="200" height="20"/>
<textFieldExpression><![CDATA[$F{productName}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="330" y="0" width="100" height="20"/>
<textFieldExpression><![CDATA[$F{salesAmount}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
এটি একটি Sales Report যা salesRep, productName, এবং salesAmount এর তথ্য প্রদর্শন করবে।
2.2. Java কোড দিয়ে রিপোর্ট জেনারেট করা
import net.sf.jasperreports.engine.*;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
public class ReportGenerationService {
@Scheduled(cron = "0 0 8 * * ?") // This method runs daily at 8 AM
public void generateReport() {
try {
// Sample data
List<SalesData> salesDataList = new ArrayList<>();
salesDataList.add(new SalesData("John Doe", "Product A", 5000));
salesDataList.add(new SalesData("Jane Smith", "Product B", 3000));
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(salesDataList);
JasperReport jasperReport = JasperCompileManager.compileReport("SalesReport.jrxml");
// Parameters
Map<String, Object> parameters = new HashMap<>();
parameters.put("ReportTitle", "Daily Sales Report");
// Fill the report with data
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource);
// Export to PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, "DailySalesReport.pdf");
System.out.println("Report Generated Successfully!");
} catch (JRException e) {
e.printStackTrace();
}
}
}
এখানে @Scheduled(cron = "0 0 8 * * ?") ব্যবহার করা হয়েছে, যার মাধ্যমে রিপোর্টটি প্রতিদিন ৮ AM-এ স্বয়ংক্রিয়ভাবে জেনারেট হবে।
ধাপ ৩: Automated Report Delivery
আপনি চাইলে রিপোর্টটি ইমেইলের মাধ্যমে পাঠাতে পারেন। নিচে দেখানো হল কিভাবে Spring Boot ইমেইলের মাধ্যমে রিপোর্ট পাঠানো যায়।
3.1. Email Configuration
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.springframework.beans.factory.annotation.Autowired;
import javax.mail.internet.MimeMessage;
@Component
public class EmailService {
@Autowired
private JavaMailSender mailSender;
public void sendEmail(String to, String subject, String body, String attachmentPath) {
try {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(body);
helper.addAttachment("SalesReport.pdf", new java.io.File(attachmentPath));
mailSender.send(message);
System.out.println("Email sent successfully!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.2. Report Delivery Integration
এখন, আমরা report generation এবং email sending মেথড একত্রিত করব।
@Component
public class ReportGenerationService {
@Autowired
private EmailService emailService;
@Scheduled(cron = "0 0 8 * * ?") // This method runs daily at 8 AM
public void generateAndSendReport() {
try {
// Generate Report
List<SalesData> salesDataList = new ArrayList<>();
salesDataList.add(new SalesData("John Doe", "Product A", 5000));
salesDataList.add(new SalesData("Jane Smith", "Product B", 3000));
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(salesDataList);
JasperReport jasperReport = JasperCompileManager.compileReport("SalesReport.jrxml");
Map<String, Object> parameters = new HashMap<>();
parameters.put("ReportTitle", "Daily Sales Report");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource);
String filePath = "DailySalesReport.pdf";
JasperExportManager.exportReportToPdfFile(jasperPrint, filePath);
// Send email with the report
emailService.sendEmail("recipient@example.com", "Daily Sales Report", "Please find the attached sales report.", filePath);
System.out.println("Report Generated and Sent Successfully!");
} catch (JRException e) {
e.printStackTrace();
}
}
}
এখন, রিপোর্ট প্রতিদিন ৮ AM-এ তৈরি হবে এবং recipient@example.com ইমেইলে পাঠানো হবে।
- Time-based report generation এবং automated delivery JasperReports এবং Spring Boot ব্যবহার করে সহজে বাস্তবায়িত করা যায়।
- @Scheduled অ্যানোটেশন এবং cron expressions ব্যবহার করে রিপোর্ট তৈরি করার সময় নির্ধারণ করা যায়।
- রিপোর্টটি ইমেইলের মাধ্যমে automatically delivered করা যায় JavaMailSender ব্যবহার করে।
JasperReports ব্যবহার করে আপনি রিপোর্টগুলি নির্দিষ্ট সময় অনুযায়ী scheduled distribution করতে পারেন এবং সেগুলি email-এর মাধ্যমে ব্যবহারকারীদের কাছে পাঠাতে পারেন। এটি একটি অত্যন্ত উপকারী ফিচার, বিশেষ করে যখন আপনি নিয়মিত রিপোর্ট বা automated report delivery করতে চান। এই টপিকে, আমরা দেখবো কিভাবে scheduled report distribution এবং email integration সেটআপ করা যায় JasperReports-এর সাথে।
1. Scheduled Report Distribution in JasperReports
Scheduled Report Distribution এর মাধ্যমে আপনি রিপোর্ট নির্দিষ্ট সময়ে বা নির্দিষ্ট সময়সীমার মধ্যে অটোমেটিক্যালি জেনারেট এবং পাঠাতে পারবেন। এটি সাধারণত Jaspersoft Server বা JasperReports Server ব্যবহার করে বাস্তবায়ন করা হয়, যা report scheduling এবং automatic report distribution ফিচার সমর্থন করে।
Jaspersoft Server - Scheduled Report Setup:
- Jaspersoft Server ইনস্টল এবং কনফিগার করুন:
- Jaspersoft Server একটি web-based application যেখানে আপনি রিপোর্ট তৈরি, কাস্টমাইজ, এবং শিডিউল করতে পারেন।
- Report Scheduling:
- Jaspersoft Server-এ রিপোর্ট শিডিউল করার জন্য Repository ব্যবহার করা হয়। রিপোর্ট শিডিউল করতে নিচের পদক্ষেপগুলো অনুসরণ করতে হয়:
- Login to Jaspersoft Server:
- Server ইন্টারফেসে লগইন করুন, এবং যে রিপোর্টটি শিডিউল করতে চান তা নির্বাচন করুন।
- Schedule Report:
- রিপোর্টের উপর ডান ক্লিক করে Schedule অপশন নির্বাচন করুন।
- একটি Scheduling Wizard খুলবে, যেখানে আপনি সময়, ফ্রিকোয়েন্সি, এবং আউটপুট ফরম্যাট নির্ধারণ করতে পারবেন।
- আপনি রিপোর্টটির আউটপুট ফরম্যাট যেমন PDF, Excel বা CSV নির্বাচন করতে পারেন।
- Email Notification:
- শিডিউল করা রিপোর্টের জন্য email notifications কনফিগার করুন, যাতে রিপোর্টটি সফলভাবে তৈরি হলে এটি নির্দিষ্ট ইমেইল ঠিকানায় পাঠানো হয়।
Example of Scheduling a Report in Jaspersoft Server:
- Choose the Report: যে রিপোর্টটি আপনি শিডিউল করতে চান তা নির্বাচন করুন।
- Set Time and Frequency: রিপোর্টটি কবে এবং কতবার শিডিউল হবে তা নির্বাচন করুন। আপনি একবারের জন্য, দৈনিক, সাপ্তাহিক, বা মাসিক ভিত্তিতে শিডিউল করতে পারেন।
- Define Output Format: রিপোর্টের আউটপুট ফরম্যাট নির্ধারণ করুন (যেমন PDF, Excel, CSV)।
- Configure Email Settings: রিপোর্ট তৈরি হওয়ার পর এটি কোন ইমেইল ঠিকানায় পাঠানো হবে, তা কনফিগার করুন।
- Enable Email Attachments: রিপোর্টের আউটপুটটি email attachment হিসেবে পাঠানোর জন্য সেট করুন।
2. Email Integration for Report Distribution
JasperReports-এ রিপোর্টগুলি ইমেইল করার জন্য JavaMail API ব্যবহার করা হয়, যা ইমেইল পাঠানোর প্রক্রিয়াকে সহজ করে তোলে। আপনি JavaMail ব্যবহার করে নির্দিষ্ট ইমেইল ঠিকানায় রিপোর্ট আউটপুট পাঠাতে পারেন।
Steps to Integrate Email with JasperReports:
Add JavaMail Dependency: প্রথমে আপনার pom.xml ফাইলে JavaMail API এর ডিপেনডেন্সি যোগ করুন (যদি আপনি Maven ব্যবহার করেন):
<dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.2</version> </dependency>- Send Email with JasperReport Output: রিপোর্ট জেনারেট হওয়ার পর সেটিকে ইমেইল আউটপুটে পাঠানোর জন্য আপনি JavaMail API ব্যবহার করতে পারেন।
Example of Sending Email with JasperReports Output:
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import net.sf.jasperreports.engine.*;
public class EmailReport {
public static void sendEmail(String to, String subject, String body, String reportPath) {
// SMTP server configuration
String host = "smtp.example.com";
String from = "sender@example.com";
String password = "yourpassword";
Properties properties = System.getProperties();
properties.put("mail.smtp.host", host);
properties.put("mail.smtp.port", "587");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
// Authenticate the sender
Session session = Session.getInstance(properties, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(from, password);
}
});
try {
// Create a MimeMessage
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject(subject);
// Create the body of the email
MimeBodyPart textPart = new MimeBodyPart();
textPart.setText(body);
// Create the attachment part
MimeBodyPart attachmentPart = new MimeBodyPart();
attachmentPart.attachFile(reportPath);
// Combine text and attachment parts into a multipart message
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(textPart);
multipart.addBodyPart(attachmentPart);
message.setContent(multipart);
// Send the email
Transport.send(message);
System.out.println("Email sent successfully with the report attachment.");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void generateAndSendReport() throws JRException {
// Generate the report
JasperReport jasperReport = JasperCompileManager.compileReport("report.jrxml");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, new JREmptyDataSource());
// Export the report to PDF
String reportPath = "report_output.pdf";
JasperExportManager.exportReportToPdfFile(jasperPrint, reportPath);
// Send the email with the report attachment
sendEmail("recipient@example.com", "Your Scheduled Report", "Please find the attached report.", reportPath);
}
public static void main(String[] args) {
try {
generateAndSendReport();
} catch (JRException e) {
e.printStackTrace();
}
}
}
Explanation:
- JavaMail API: এখানে JavaMail API ব্যবহার করে ইমেইল পাঠানো হয়েছে।
- JasperReport Generation: JasperReport জেনারেট করার পর, JasperExportManager ব্যবহার করে এটি PDF আউটপুটে রেন্ডার করা হয়।
- Email with Attachment: তারপর, রিপোর্টটি ইমেইল আউটপুট হিসেবে attachment হিসাবে পাঠানো হচ্ছে।
3. Scheduled Report Distribution with Email Integration
আপনি JasperReports Server বা Jaspersoft Studio ব্যবহার করে রিপোর্ট শিডিউল করতে পারেন এবং সেই রিপোর্টটি নির্দিষ্ট সময় অনুযায়ী ইমেইল মাধ্যমে পাঠাতে পারেন। এই প্রক্রিয়াটি সাধারণত একটি automated workflow হিসেবে কাজ করে, যা প্রতিদিন বা প্রতি সপ্তাহে রিপোর্ট তৈরি এবং পাঠানোর জন্য ব্যবহার করা হয়।
Steps to Set Up Scheduled Report Distribution in JasperReports Server:
- Create Report: প্রথমে একটি রিপোর্ট তৈরি করুন এবং তারপরে এটি Jaspersoft Server এ আপলোড করুন।
- Schedule the Report: রিপোর্টটি শিডিউল করতে Scheduling Wizard ব্যবহার করুন।
- Email Configuration: রিপোর্ট সফলভাবে তৈরি হলে, সেটি ইমেইল মাধ্যমে নির্দিষ্ট ব্যবহারকারী বা গ্রুপে পাঠানোর জন্য Email Notification সেট করুন।
- Set Frequency: আপনি রিপোর্ট শিডিউল করার জন্য একবার, দৈনিক, সাপ্তাহিক, মাসিক বা অন্যান্য সময়সীমা নির্বাচন করতে পারেন।
- Scheduled Report Distribution: Jaspersoft Server ব্যবহার করে আপনি রিপোর্ট শিডিউল করতে পারেন এবং এটি নির্দিষ্ট সময় অনুসারে ইমেইল মাধ্যমে পাঠানো যেতে পারে।
- Email Integration: JavaMail API ব্যবহার করে আপনি রিপোর্টের আউটপুটকে ইমেইলে সংযুক্ত (attachment) হিসেবে পাঠাতে পারেন, যা PDF, Excel বা CSV ফরম্যাটে হতে পারে।
- Automation: রিপোর্টের শিডিউল এবং ইমেইল এক্সপোর্টিং অটোমেটিকালভাবে করার মাধ্যমে কার্যক্রম দ্রুত এবং দক্ষ করা যায়।
এই প্রক্রিয়াগুলি আপনাকে JasperReports ব্যবহার করে রিপোর্ট শিডিউলিং, শেয়ারিং এবং ইমেইল সিস্টেমের মাধ্যমে সম্পূর্ণ অটোমেশন সেটআপ করতে সাহায্য করবে।
Read more