Báo cáo nguồn dữ liệu

Nguồn dữ liệu là vùng chứa dữ liệu có cấu trúc. Trong khi tạo báo cáo, công cụ JasperReports lấy dữ liệu từ các nguồn dữ liệu. Dữ liệu có thể được lấy từ cơ sở dữ liệu, tệp XML, mảng đối tượng và tập hợp đối tượng. Chúng ta đã thấy trong chương Báo cáo điền , phương thức fillReportXXX () dự kiến ​​sẽ nhận được nguồn dữ liệu của báo cáo, nguồn dữ liệu này phải điền, ở dạngnet.sf.jasperreports.engine.JRDataSource đối tượng hoặc một java.sql.Connection (khi dữ liệu báo cáo được tìm thấy trong cơ sở dữ liệu quan hệ).

Giao diện JRDataSource chỉ có hai phương thức nên được triển khai -

  • public boolean next () ném JRException;

    • Tại thời điểm điền báo cáo, phương thức này được công cụ báo cáo gọi trên đối tượng nguồn dữ liệu khi lặp lại dữ liệu.

  • public Object getFieldValue (JRField jrField) ném JRException;

    • Phương pháp này cung cấp giá trị cho mỗi trường báo cáo trong bản ghi nguồn dữ liệu hiện tại.

Cách duy nhất để truy xuất dữ liệu từ nguồn dữ liệu là sử dụng các trường báo cáo. Có một số triển khai mặc định của giao diện JRDataSource, tùy thuộc vào cách thức, các bản ghi trong nguồn dữ liệu được thu thập.

Triển khai nguồn dữ liệu

Bảng dưới đây tóm tắt các nguồn dữ liệu và các lớp triển khai của chúng -

Nguồn dữ liệu Lớp triển khai
JDBC net.sf.jasperreports.engine.JRResultSetDataSource
JavaBean net.sf.jasperreports.engine.data.JRBeanCollectionDataSource, net.sf.jasperreports.engine.data.JRBeanArrayDataSource
Dựa trên bản đồ net.sf.jasperreports.engine.data.JRMapArrayDataSource, net.sf.jasperreports.engine.data.JRMapCollectionDataSource
TableModel net.sf.jasperreports.engine.data.JRTableModelDataSource
XML net.sf.jasperreports.engine.data.JRXmlDataSource
CSV net.sf.jasperreports.engine.data.JRCsvDataSource
XLS net.sf.jasperreports.engine.data.JRXlsDataSource
Trống net.sf.jasperreports.engine.JREmptyDataSource

Nguồn dữ liệu JDBC

Lớp học JRResultSetDataSourcecraps một đối tượng java.sql.ResultSet . Đây là cách triển khai nguồn dữ liệu được sử dụng phổ biến nhất khi dữ liệu báo cáo được trích xuất từ ​​cơ sở dữ liệu quan hệ. Nếu thay vào đó, java.sql.Connection được chuyển tới engine, trước tiên nó sẽ thực thi truy vấn liên quan và lưu trữ đối tượng java.sql.ResultSet được trả về trong một phiên bản JRResultSetDataSource.

Nguồn dữ liệu JavaBean

Các lớp học JRBeanArrayDataSourceJRBeanCollectionDataSourceđại diện cho các triển khai có thể bao bọc các mảng và tập hợp các đối tượng JavaBean. Mỗi đối tượng bên trong mảng hoặc bộ sưu tập sẽ được xem như một bản ghi trong kiểu nguồn dữ liệu này. Ánh xạ giữa một thuộc tính JavaBean cụ thể và trường báo cáo tương ứng được thực hiện bằng các quy ước đặt tên. Tên của trường báo cáo phải giống với tên của thuộc tính JavaBean như được chỉ định bởi đặc tả JavaBeans.

Trong tất cả các ví dụ của hướng dẫn này, chúng tôi đã sử dụng JRBeanCollectionDataSource.

Nguồn dữ liệu dựa trên bản đồ

Các lớp triển khai JRMapArrayDataSourceJRMapCollectionDataSourcehữu ích nếu ứng dụng mẹ đã lưu trữ dữ liệu báo cáo có sẵn trong bộ nhớ dưới dạng các đối tượng java.util.Map . Mỗi đối tượng Bản đồ trong mảng hoặc tập hợp được bao bọc được coi là một bản ghi ảo trong nguồn dữ liệu và giá trị của mỗi trường báo cáo được trích xuất từ ​​bản đồ bằng cách sử dụng trường báo cáo có tên là khóa.

Nguồn dữ liệu TableModel

Trong nhiều ứng dụng phía máy khách, dữ liệu được hiển thị ở định dạng bảng. Yêu cầu chung trong nhiều ứng dụng là cho phép người dùng in định dạng bảng này dưới dạng báo cáo. Lớp triển khaiJRTableModelDataSourcelàm cho nhiệm vụ tạo báo cáo từ định dạng bảng trở nên tầm thường đối với các ứng dụng Swing. Lớp này bao bọc một đối tượng javax.swing.table.TableModel. Các cột trong đối tượng TableModel được bao bọc có thể được truy cập bằng tên của chúng hoặc bằng chỉ mục dựa trên 0 của chúng.

Nguồn dữ liệu XML

Lớp học JRXmlDataSourcelà một triển khai nguồn dữ liệu dựa trên DOM, sử dụng các biểu thức XPath để chọn dữ liệu từ tài liệu XML. Các bản ghi trong nguồn dữ liệu XML được biểu diễn bằng các phần tử nút được chọn thông qua biểu thức XPath. Giá trị trường được truy xuất từ ​​mỗi bản ghi bằng cách sử dụng biểu thức XPath được cung cấp bởi mô tả trường (phần tử <fieldDescription> trong JRXML).

XPath là một ngôn ngữ được sử dụng để điều hướng qua các thuộc tính và phần tử của tài liệu XML. Thông tin thêm về XPath có thể được tìm thấy tạihttp://www.w3.org/TR/xpath.

Nguồn dữ liệu CSV

JRCsvDataSourceđại diện cho một triển khai cho các nguồn dữ liệu, lấy dữ liệu của chúng từ các tệp văn bản có cấu trúc; thường là CSV. Các giá trị trường được truy xuất bằng chỉ mục cột của chúng.

Nguồn dữ liệu XLS

JRXlsDataSourceđại diện cho một triển khai cho các nguồn dữ liệu, lấy dữ liệu của chúng từ các tài liệu Excel. Ánh xạ trường báo cáo để triển khai nguồn dữ liệu này cũng dựa trên chỉ mục cột trường.

Nguồn dữ liệu trống

Lớp JREmptyDataSource, mô phỏng một nguồn dữ liệu với một số lượng bản ghi trống ảo bên trong. Nó được sử dụng bởi các công cụ giao diện người dùng để cung cấp chức năng xem trước báo cáo cơ bản hoặc trong các mẫu báo cáo đặc biệt hoặc cho mục đích thử nghiệm và gỡ lỗi.

Nguồn dữ liệu có thể lặp lại

Các net.sf.jasperreports.engine.JRRewindableDataSourcemở rộng giao diện JRDataSource cơ bản . Nó chỉ thêm một phương thức, gọi là moveFirst (), vào giao diện. Phương thức này nhằm di chuyển con trỏ đến phần tử đầu tiên trong nguồn dữ liệu.

Nguồn dữ liệu có thể lặp lại hữu ích khi làm việc với các báo cáo phụ được đặt bên trong một dải không được phép tách do cài đặt isSplitAllowed = "false" và không có đủ không gian trên trang hiện tại để hiển thị báo cáo phụ.

Tất cả các triển khai nguồn dữ liệu trên đều có thể tua lại ngoại trừ JRResultSetDataSource, vì nó không hỗ trợ di chuyển con trỏ bản ghi trở lại. Điều này chỉ đặt ra một vấn đề nếu nguồn dữ liệu này được sử dụng theo cách thủ công để bọc một java.sql.ResultSet trước khi chuyển nó đến báo cáo phụ. Không có vấn đề gì, nếu truy vấn SQL nằm trong mẫu báo cáo phụ, vì công cụ sẽ thực thi lại nó khi khởi động lại báo cáo phụ trên trang tiếp theo.

Nhà cung cấp nguồn dữ liệu

Thư viện JasperReports có giao diện net.sf.jasperreports.engine.JRDataSourceProvider. Điều này giúp tạo và loại bỏ các đối tượng nguồn dữ liệu. Khi tạo mẫu báo cáo bằng công cụ GUI, cần có một công cụ đặc biệt để tùy chỉnh nguồn dữ liệu của báo cáo. JRDataSourceProvider là cách tiêu chuẩn để cắm các nguồn dữ liệu tùy chỉnh vào một công cụ thiết kế. Việc triển khai tùy chỉnh giao diện này phải triển khai các phương pháp sau đây cho phép tạo và loại bỏ các đối tượng nguồn dữ liệu và cả các phương pháp liệt kê các trường báo cáo có sẵn bên trong nguồn dữ liệu nếu có thể

public boolean supportsGetFieldsOperation();

public JRField[] getFields(JasperReport report)
   throws JRException, UnsupportedOperationException;

public JRDataSource create(JasperReport report) throws JRException;

public void dispose(JRDataSource dataSource) throws JRException;