2011-06-17 22 views
8

Estoy tratando de integrar un carriles 3 aplicación con Jasper siguiendo este wiki:Integrar Jasper en Rails 3

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

Pero parece que una gran cantidad de información no se actualiza por lo ha sido muy difícil hacerlo funcionar solo. También he leído un tema en ruby-forum: http://www.ruby-forum.com/topic/139453 con algunos detalles explicados, pero todavía no podía hacerlo funcionar.

Mi primer problema está relacionado con el método render_to_string: Cuando el método controlador ejecuta recibo una "plantilla no se encuentra" Error:

este es el método:

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

Aunque esto parece simple No entiendo por qué sucede esto. No render_to_string con layout => false se supone que me da el resultado de la cadena de esa acción? También probé : acción en lugar de : plantilla, pero hace lo mismo.

Si alguien con un poco de experiencia con esta integración podría ayudar ... Gracias de antemano, André

+0

¿Se está ejecutando en ruby ​​o jruby? –

+0

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

+0

¿Cuál es el error de plantilla faltante? – recursive

Respuesta

0

No sé nada acerca de Jasper, pero suena como que quiere hacer dos cosas: hacer que una plantilla PDF y luego enviar la salida cruda volver w/un tipo MIME PDF:

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

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

usted está de paso en la dirección URL externa como la ruta de plantilla, pero eso es probablemente equivocado si usted está recibiendo errores acerca de la ruta de plantilla . Repare la ruta de la plantilla primero.

+1

Ese método se basó en el wiki pero alguien eliminó el contenido de la página wiki (enlace @ 3ra línea). Puede verlo ahora en http://oldwiki.rubyonrails.org/rails/pages/HowtoIntegrateJasperReports – AndreDurao

+0

Creo que Winfield tiene razón, debe cambiar el valor de su plantilla a algo así como 'cliente/informe' (como el ejemplo en ese enlace) en lugar de un método de ruta. O simplemente elimine esa opción por completo y render_to_string debería ser capaz de descubrir que desea representar la vista del informe.solo asegúrate de tener la extensión de "formato" correcta. – janechii

0

tratar de cambiar el código render_to_string() a esto:

@customers.to_xml 
1

Utilizamos realmente jasperreports para crear informes, y recientemente actualizado a Rails 3.0. Para crear el xml, usamos plantillas xml.erb. Jasper informa carreras en un servidor GlassFish separada Aquí está la idea general:

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

Uso Savon para interactuar con jaserserver en rails3. Aquí hay un ejemplo:

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

Hola Chaarel ... Tu respuesta está relacionada con jasperserver. Este problema era diferente. Se relacionó con una página wiki antigua en wiki.rubyonrails.org, que incluye una solución de interfaz de adaptador en la llamada del sistema ruby ​​+ java para generar informes. – AndreDurao