2011-06-17 110 views
8

我想一个轨集成3应用与碧玉下面这个wiki:Rails中集成碧玉3

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

但似乎很多信息没有更新,所以要让它自己工作非常困难。我也读过ruby​​-forumhttp://www.ruby-forum.com/topic/139453 的一些话题,并解释了一些细节,但仍然无法使其工作。

我的第一个问题是与render_to_string方法有关: 当控制器方法运行我收到一个“模板丢失”的错误:

这是方法:

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

虽然这看起来很简单我不明白为什么会发生这种情况。 render_to_stringlayout => false suposed让我得到该行为的字符串结果? 我也试过:动作而不是:模板,但它也是这样。

如果有人用这种集成一定的专业知识可以帮助... 在此先感谢, 安德烈

+0

你在ruby或jruby上运行? –

+0

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

+0

什么是缺少的模板错误? – recursive

回答

0

我不知道碧玉什么,但它听起来就像你想要做的两件事情:渲染PDF模板,然后发送原始输出回瓦特/ PDF MIME类型:

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

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

你正在传递的外部URL作为模板路径,但是这可能是错误的,如果你得到关于模板路径错误。首先修复模板路径。

+1

该方法基于wiki,但有人删除了wiki页面的内容(link @ 3rd line)。您现在可以在http://oldwiki.rubyonrails.org/rails/pages/HowtoIntegrateJasperReports – AndreDurao

+0

看到它。我认为Winfield是正确的,您应该将您的模板值更改为“客户/报告”之类的内容(例如该链接上的示例)而不是路径方法。或者只是完全取出该选项,render_to_string应该能够弄清楚你想渲染报告视图。只要确保你有正确的“格式”扩展。 – janechii

0

尝试将render_to_string()代码改成这样:

@customers.to_xml 
1

我们实际使用的JasperReports创建报表,以及最近升级到Rails 3.0。要创建xml,我们使用xml.erb模板。碧玉在一个单独的GlassFish服务器运行报告这里的总体思路:

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

使用萨翁与在Rails3中jaserserver互动。 这里是一个例子:

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 ...你的回答与jasperserver有关。这个问题是不同的。它与wiki.rubyonrails.org上的一个旧wiki页面相关,其中包括一个用于生成报表的ruby + java系统调用的适配器接口解决方案。 – AndreDurao