2011-06-17 18 views
8

Próbuję zintegrować szyny 3 aplikacja z jaspisu po tej wiki:Zintegruj Jaspera w Rails 3

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

Ale wydaje się, że wiele informacji nie jest aktualizowana tak bardzo ciężko było to zrobić samemu. Czytałem również temat na ruby-forum: http://www.ruby-forum.com/topic/139453 z wyjaśnionymi szczegółami, ale nadal nie mogłem go uruchomić.

Mój pierwszy problem jest związany ze sposobem render_to_string: Gdy metoda kontroler działa Otrzymuję „Szablon brakuje” Błąd:

Jest to metoda:

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

Choć wydaje się to proste Nie rozumiem, dlaczego tak się dzieje. Czy render_to_string z układ => fałsz suposed, aby uzyskać wynik ciąg tego działania? Próbowałem też : akcja zamiast : szablon, ale robi to samo.

Jeśli ktoś z pewnym doświadczeniem z tej integracji może pomóc ... Dzięki z góry, André

+0

Czy używasz rubinu lub juty? –

+0

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

+0

Co to jest brakujący błąd szablonu? – recursive

Odpowiedz

0

Nie wiem nic o Jasper wiem, ale brzmi to jak chcesz zrobić dwie rzeczy: renderowanie szablon PDF, a następnie wysłać wyjście surowego powrotem w/typu PDF MIME:

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

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

ty przechodząc w adresie URL zewnętrznego jako ścieżki szablonu, ale to chyba źle, jeśli jesteś coraz błędy o ścieżce szablonu . Najpierw napraw ścieżkę szablonu.

+1

Ta metoda została oparta na wiki, ale ktoś usunął zawartość strony wiki (link @ 3rd line). Możesz to teraz zobaczyć na http://oldwiki.rubyonrails.org/rails/pages/HowtoIntegrateJasperReports – AndreDurao

+0

Myślę, że Winfield ma rację, powinieneś zmienić wartość swojego szablonu na "klient/raport" (jak na przykład w tym linku) zamiast metody ścieżki. Lub po prostu wyjmij tę opcję całkowicie i render_to_string powinien być w stanie dowiedzieć się, że chcesz renderować widok raportu.po prostu upewnij się, że masz odpowiednie rozszerzenie "formatu". – janechii

0

Spróbuj zmienić kod render_to_string() do tego:

@customers.to_xml 
1

My faktycznie korzysta JasperReports do tworzenia raportów, a niedawno uaktualniony do Rails 3.0. Aby utworzyć xml, używamy szablonów xml.erb. Raporty Jaspera działają na osobnym serwerze typu glassfish Oto ogólny pomysł:

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

Użyj savon do interakcji z jaserserver w szynach3. Oto przykład:

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

Cześć Chaarel ... Twoja odpowiedź jest związana z serwerem jasperserver. Ten problem był inny. Było to związane ze starą stroną wiki na wiki.rubyonrails.org, zawierającą rozwiązanie interfejsu adaptera w wywołaniu systemu Ruby + Java do generowania raportów. – AndreDurao