Time-based Report Generation এবং Delivery

JasperReports এবং Scheduling - জ্যাসপার রিপোর্ট (JasperReports) - Java Technologies

288

JasperReportstime-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 ব্যবহার করে।
Content added By
Promotion

Are you sure to start over?

Loading...