Ruby Ruport實踐—報表參數實現(二)

來源:互聯網
上載者:User

本例在  Ruby Ruport實踐—報表參數實現 的基礎上進行改造,實現報表執行定義時報表參數的增、刪、改操作

一、修改views/report_executions/edit.html.erb

不僅顯示在建立報表執行時儲存的報表參數,還可動態顯示剩餘的參數(這裡控制參數最多可定義5個),這樣可避免遺忘定義報表參數或需要增加報表參數的現象

 

<h1>Editing report_execution</h1></p><p><% form_for(@report_execution) do |f| %><br /> <%= f.error_messages %></p><p> <p><br /> <%= f.label :execute_code %>:<br /> <%= f.text_field :execute_code %><br /> </p><br /> <p><br /> <%= f.label :execute_name %>:<br /> <%= f.text_field :execute_name %><br /> </p><br /> <p><br /> <%= f.label :report_definition_id %>:<br /> <%=report_definitions_control%><br /> </p><br /> <p><br /> <%= f.label :report_template_id %>:<br /> <%=report_templates_control%><br /> </p><br /> <h3>Report Parameters</h3><p/><br /> <!-- 顯示已有的報表參數 --><br /> <%if @report_parameters.length>0%><br /> <%for i in 0..@report_parameters.length-1%><br /> <p><br /> <%=hidden_field_tag 'parameter_id[]',@report_parameters[i].report_parameter_id%><br /> Parameter<%=i+1%>: <%=text_field_tag 'parameter_name[]',@report_parameters[i].parameter_name%><br /> Value<%=i+1%>: <%=text_field_tag 'parameter_value[]',@report_parameters[i].parameter_value%><br /> </p><br /> <%end%><br /> <%end%><br /> <!--顯示其他的參數框,若需要添加參數可在此操作--><br /> <%for i in @report_parameters.length+1..5%><br /> <p><br /> Parameter<%=i%>: <%=text_field_tag 'parameter_other_name[]'%><br /> Value<%=i%>: <%=text_field_tag 'parameter_other_value[]'%><br /> </p><br /> <%end%><br /> <p><br /> <%= f.submit 'Update' %><br /> </p><br /><% end %></p><p><%= link_to 'Show', @report_execution %> |<br /><%= link_to 'Back', report_executions_path %>

 

二、修改ReportExecutionsController

主要修改create_report_parameter、update、destroy方法

def index<br /> @report_executions = ReportExecution.all<br /> respond_to do |format|<br /> format.html # index.html.erb<br /> format.xml { render :xml => @report_executions }<br /> end<br /> end</p><p> # GET /report_executions/1<br /> # GET /report_executions/1.xml<br /> def show<br /> @report_execution = ReportExecution.find(params[:id])<br /> @report_definition = ReportDefinition.find(@report_execution.report_definition_id)<br /> @report_template = ReportTemplate.find(@report_execution.report_template_id)<br /> @report_parameters = ReportParameter.find_by_sql("select * from report_parameters where report_execute_id = #{params[:id]}")</p><p> respond_to do |format|<br /> format.html # show.html.erb<br /> format.xml { render :xml => @report_execution }<br /> end<br /> end</p><p> # GET /report_executions/new<br /> # GET /report_executions/new.xml<br /> def new<br /> @report_execution = ReportExecution.new<br /> respond_to do |format|<br /> format.html # new.html.erb<br /> format.xml { render :xml => @report_execution }<br /> end<br /> end</p><p> # GET /report_executions/1/edit<br /> def edit<br /> @report_execution = ReportExecution.find(params[:id])<br /> report_definition = ReportDefinition.find(@report_execution.report_definition_id)<br /> report_template = ReportTemplate.find(@report_execution.report_template_id)<br /> @latest_report_name = report_definition.report_name<br /> @latest_template_name = report_template.template_name<br /> @report_parameters = ReportParameter.find_by_sql("select * from report_parameters where report_execute_id = #{params[:id]}")</p><p> if (@report_parameters.length>0)<br /> puts "has parameters #{@report_parameters.length}========================="<br /> @report_parameters.each do |f|<br /> puts "#{f.parameter_name}: #{f.parameter_value}"<br /> end<br /> puts "has parameters========================="<br /> end</p><p> end</p><p> def create_report_parameters(parameter_name,parameter_value)<br /> flag=true<br /> if(parameter_name)<br /> for i in 0..parameter_name.length-1<br /> if(parameter_name[i]!="")<br /> puts "Create report parameter: #{parameter_name[i]}, #{parameter_value[i]}"<br /> report_parameter = ReportParameter.new<br /> report_parameter.write_attribute("report_execute_id",@report_execution.report_execute_id)<br /> report_parameter.write_attribute("parameter_name",parameter_name[i])<br /> report_parameter.write_attribute("parameter_value",parameter_value[i])<br /> if !report_parameter.save<br /> flag=false<br /> end<br /> end<br /> end<br /> end<br /> return flag<br /> end<br /> # POST /report_executions<br /> # POST /report_executions.xml<br /> def create<br /> @report_execution = ReportExecution.new(params[:report_execution])<br /> #@report_parameter = ReportParameter.new(params[:report_parameter])<br /> respond_to do |format|<br /> if @report_execution.save<br /> if create_report_parameters(params[:parameter_name],params[:parameter_value])<br /> flash[:notice] = 'ReportExecution was successfully created.'<br /> end<br /> format.html { redirect_to(@report_execution) }<br /> format.xml { render :xml => @report_execution, :status => :created, :location => @report_execution }<br /> else<br /> format.html { render :action => "new" }<br /> format.xml { render :xml => @report_execution.errors, :status => :unprocessable_entity }<br /> end<br /> end<br /> end</p><p> # PUT /report_executions/1<br /> # PUT /report_executions/1.xml<br /> def update<br /> @report_execution = ReportExecution.find(params[:id])<br /> respond_to do |format|<br /> if @report_execution.update_attributes(params[:report_execution])<br /> flash[:notice] = 'ReportExecution was successfully updated.'</p><p> if(params[:parameter_id])<br /> for i in 0..params[:parameter_id].length-1<br /> report_parameter = ReportParameter.find(params[:parameter_id][i])<br /> if(params[:parameter_name][i]!="")<br /> puts "#{report_parameter.report_parameter_id} should be updated"<br /> report_parameter.update_attribute("parameter_name",params[:parameter_name][i])<br /> report_parameter.update_attribute("parameter_value",params[:parameter_value][i])<br /> else<br /> puts "#{report_parameter.report_parameter_id} should be deleted"<br /> report_parameter.destroy<br /> end<br /> end<br /> end</p><p> create_report_parameters(params[:parameter_other_name],params[:parameter_other_value])</p><p> format.html { redirect_to(@report_execution) }<br /> format.xml { head :ok }<br /> else<br /> format.html { render :action => "edit" }<br /> format.xml { render :xml => @report_execution.errors, :status => :unprocessable_entity }<br /> end<br /> end<br /> end</p><p> # DELETE /report_executions/1<br /> # DELETE /report_executions/1.xml<br /> def destroy<br /> @report_execution = ReportExecution.find(params[:id])<br /> @report_parameters = ReportParameter.find_by_sql("SELECT * FROM report_parameters WHERE report_execute_id = #{@report_execution.report_execute_id}")<br /> if(@report_parameters.length>0)<br /> @report_parameters.each do |report_parameter|<br /> puts "Destroy report_parameter #{report_parameter.report_parameter_id}"<br /> report_parameter.destroy<br /> end<br /> end<br /> @report_execution.destroy</p><p> respond_to do |format|<br /> format.html { redirect_to(report_executions_url) }<br /> format.xml { head :ok }<br /> end<br /> end

 

示範效果(主要示範edit介面):

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.