2011-06-17 30 views
8

Tôi đang cố gắng để tích hợp một ray 3 ứng dụng với jasper sau wiki này:Tích hợp Jasper trong Rails 3

http://wiki.rubyonrails.org/rails/pages/HowtoIntegrateJasperReports

Nhưng có vẻ như rất nhiều thông tin không được cập nhật để nó rất khó để làm cho nó hoạt động một mình. Tôi cũng đã đọc một chủ đề tại ruby-forum: http://www.ruby-forum.com/topic/139453 với một số chi tiết được giải thích nhưng vẫn không thể làm cho nó hoạt động.

vấn đề đầu tiên của tôi có liên quan với phương pháp render_to_string: Khi các phương pháp điều khiển chạy tôi nhận được một "Mẫu là mất tích" lỗi:

đây là phương pháp:

def report 
    @customers = Customer.all 
    send_doc(render_to_string(:template => report_customers_path, :layout => false), '/pdfs', 'report.jasper', "customers", 'pdf') 
end 

Mặc dù điều này có vẻ đơn giản Tôi không hiểu tại sao điều này lại xảy ra. Không render_to_string với layout => false được cho là đã cho tôi kết quả chuỗi của hành động đó không? Tôi cũng đã thử : hành động thay vì : mẫu, nhưng cũng vậy.

Nếu bất cứ ai với một số chuyên gia với hội nhập này có thể giúp ... Cảm ơn trước, André

+0

Bạn đang chạy trên ruby ​​hoặc jruby? –

+0

ruby ​​-v = ruby ​​1.9.2p180 – AndreDurao

+0

Lỗi mẫu bị thiếu là gì? – recursive

Trả lời

0

Tôi không biết gì về jasper, nhưng có vẻ như bạn muốn làm hai việc: làm cho một PDF mẫu và sau đó gửi kết quả thô trở lại w/một loại kịch câm PDF:

pdf_contents = render_to_string(:template => 'users/report') 

send_data(pdf_contents, :file_name => 'report.pdf', :type => 'application/pdf') 

bạn đang đi qua trong URL bên ngoài như các mẫu con đường, nhưng đó có thể là sai lầm nếu bạn đang nhận lỗi về mẫu con đường . Trước hết hãy sửa đường dẫn mẫu.

+1

Phương pháp đó dựa trên wiki nhưng ai đó đã xóa nội dung của trang wiki (link @ 3rd line). Bạn có thể thấy nó ngay bây giờ tại http://oldwiki.rubyonrails.org/rails/pages/HowtoIntegrateJasperReports – AndreDurao

+0

Tôi nghĩ Winfield là đúng, bạn nên thay đổi giá trị mẫu của bạn thành một cái gì đó như 'khách hàng/báo cáo' (như ví dụ trên liên kết đó) thay vì phương thức đường dẫn. Hoặc chỉ cần chọn tùy chọn đó hoàn toàn và render_to_string sẽ có thể tìm ra rằng bạn muốn hiển thị chế độ xem báo cáo.chỉ cần đảm bảo bạn có phần mở rộng "định dạng" phù hợp. – janechii

0

Cố gắng thay đổi mã render_to_string() này:

@customers.to_xml 
1

Chúng tôi thực sự sử dụng JasperReports để tạo các báo cáo, và gần đây nâng cấp lên Rails 3.0. Để tạo xml, chúng tôi sử dụng các mẫu xml.erb. Jasper báo cáo chạy trong một máy chủ thủy tinh riêng biệt Dưới đây là ý tưởng chung:

url = URI.parse(my_url_string) 
dataxml = render_to_string(:template => my_template_name).gsub(/\n/, '') 
params = {'type' => 'pdf', 'compiledTemplateURI' => my_jasper_file, 'data' => dataxml } 
request = Net::HTTP::POST.new(url.request_uri) 
request.set_form_data(params) 
obj = Net::HTTP.new(url.host, url.port) 
obj.read_timeout = my_timeout_setting 
response = obj.start { |http| http.request(request) } 
case response 
when Net::HTTPOK 
    send_data(response.body, :filename => my_chosen_filename, :type => "application/pdf", :disposition => "inline") 
else 
    raise "failed to generate report" 
end 
0

Sử dụng savon để tương tác với jaserserver trong ray3. Dưới đây là ví dụ:

require 'logger' 
require 'savon' 

logger = Logger.new(STDOUT) 
logger.info "Test jasper via Savon-SOAP" 

@client = Savon::Client.new { 
    wsdl.document = "http://localhost:8080/jasperserver/services/repository?wsdl" 
    http.auth.basic "jasperadmin", "jasperadmin" 
} 

logger.info "runReport method" 
begin 
    result = @client.request :run_report do 
    soap.body = "<requestXmlString> 
    <![CDATA[ 
     <request operationName='runReport' > 
     <argument name='RUN_OUTPUT_FORMAT'>PDF</argument> 
     <resourceDescriptor name='' wsType='' uriString='/reports/samples/AllAccounts'  isNew='false'> 
     <label></label> 
    </resourceDescriptor> 
     </request> 
    ]]> 
    </requestXmlString>" 
end 
send_data result.http.raw_body, :type => 'application/pdf', :filename => 'report.pdf', :disposition => 'attachment' 
rescue Exception => e 
    logger.error "SOAP Error: #{e}" 
end 
+1

Hi Chaarel ... Câu trả lời của bạn có liên quan với jasperserver. Vấn đề này là khác nhau. Nó liên quan đến một trang wiki cũ trên wiki.rubyonrails.org bao gồm giải pháp giao diện bộ điều hợp trên lời gọi hệ thống java + ruby ​​để tạo báo cáo. – AndreDurao

Các vấn đề liên quan