2011-09-14 16 views
12

Sử dụng iReport v4.0.1 với Jasperserver v4.1.0 Tôi đang cố tìm một cú pháp để liên kết subreports với báo cáo chính cho phép tôi kiểm tra nó trong iReport rồi triển khai đến máy chủ thông qua trình duyệt kho lưu trữ.Liên kết các thể loại con trong iReport để chúng cũng hoạt động trong máy chủ Jasper

Cú pháp mặc định cho tiểu báo cáo trong iReport cho sự biểu hiện subreport là một cái gì đó giống như

$P{SUBREPORT_DIR} + "mySubReport.jasper" 

Khi bạn triển khai này từ iReport nó đủ thông minh để chọn này lên và đề nghị thay đổi nó để

"repo:mySubReport.jrxml" 

và sau đó triển khai tất cả các subreports vào thư mục Tài nguyên của báo cáo chính.

Thật tuyệt vời, nhưng rất tiếc, sau đó chỉnh sửa tệp trong iReport để lưu thay đổi này có nghĩa là bạn không còn có thể chạy báo cáo trong iReport mà không phải chỉnh sửa lại tất cả các biểu thức báo cáo phụ theo cách thủ công - điều này làm cho quá trình thử nghiệm và triển khai cho máy chủ thực sự đau đớn, đặc biệt khi có nhiều báo cáo phụ trong báo cáo. Tôi nghĩ rằng ít nhất tôi có thể đặt giá trị $ P {SUBREPORT} thành "repo:" hoặc "My \ local \ filepath" để ít nhất tôi chỉ có một nơi để thay đổi, nhưng trình biên dịch không thích điều đó.

Có cấu trúc thay thế hoặc biểu thức nào sẽ giải quyết cho repo: *. Jrxml hoặc My \ local \ filepath * .jasper có chính xác tùy thuộc vào nơi bạn đang chạy báo cáo không?

Trả lời

13

Giải pháp tốt nhất cho điều này là thêm thông số bổ sung như $P{IsOnServer}. Đặt giá trị mặc định thành true. Đối với biểu thức subreport của bạn, hãy sử dụng:

$P{IsOnServer} ? "repo:mySubReport.jrxml" : "/local/path/to/mySubReport.jasper" 

Khi bạn chạy báo cáo trong iReport, bạn sẽ được nhắc về giá trị của IsOnServer. Làm cho nó sai; biểu thức subreport sẽ giải quyết cho tệp cục bộ của bạn. Trên máy chủ, không xác định điều khiển đầu vào. Người dùng sẽ không bao giờ được nhắc nhở cho tham số đó (họ thậm chí sẽ không biết nó tồn tại), và nó sẽ dẫn đến cú pháp 'repo' mong muốn.

Một giải pháp thậm chí tốt hơn tất nhiên sẽ cho iReport để xử lý điều này tự động ... nhưng bây giờ bạn cần phải làm một cái gì đó như thế này.

+1

Cảm ơn bạn đã tăng yêu cầu tính năng - những người khác có thể bỏ phiếu ở đây: http://jasperforge.org/projects/ireport/tracker/view.php?id=5539 – KCD

+0

mdahlman, bạn có thể cụ thể hơn không? Ví dụ. tập lệnh bạn cung cấp có hoạt động bên trong phần CDATA hay bên ngoài không? bạn có thể cung cấp một ví dụ dòng hoàn chỉnh hơn không? –

+0

Khi tôi sử dụng điều này, tôi nhận được ngoại lệ sửa đổi đồng thời khi tôi cố gắng chuyển báo cáo trong studio. Giải pháp duy nhất là đặt thủ công mặc định pareamter thành false/true trước/sau khi triển khai tới máy chủ. –