2015-03-13 38 views
1

雖然聽起來可能很愚蠢,但我花了差不多一個星期的時間,但我無法解決它。以及我在我的模塊中創建了一個生成靜態excel報告的嚮導,它很好。問題是有遠程訪問我的模塊的客戶,當他們打開向導並單擊按鈕生成的報告保存在我的本地驅動器,他們什麼也得不到,有什麼解決方案,我把我的xlsx報告作爲一個可下載的文件和客戶端可以直接下載它? 對不起我的英語 由於事先如何在Odooo Python中下載文件?

這是我試過,但沒有奏效

data = wizard.plugin_file 
    file_path = wizard.file_path 
    my_report_data = open('C:/Users/Report.xlsx','rb') 
    f = my_report_data.read() 
    output = base64.encodestring(f) 
    self.write(cr, uid, ids[0], {'plugin_file': output}, context = context) 
    view_obj = self.pool.get('ir.ui.view') 
    view_id = view_obj.search(cr, uid, [('model', '=', 'report.model'), \ 
          ('name', '=', 'report_model_form_view2')]) 

    return { 
      'name': 'Monthly Report ', 
      'view_type': 'form', 
      'view_mode': 'form', 
      'res_model': 'report.model', 
      'view_id': view_id, 'form' 
      'res_id': ids[0], 
      'type': 'ir.actions.act_window', 
      'target': 'new', 
      'context': context, 
      } 

回答

1

下面的代碼導出CSV文件時工作正常。

import cStringIO 
import base64 
def your_export_function(self): 
    fd = cStringIO.StringIO() 
    #use this file descriptor instead of file path 
    #after loading everydata to your file discriptor 
    out = base64.encodestring(fd.getvalue()) 
    fd.close()   
    self.write(cr, uid, ids, { 'data':out}, context=context) #data is the binary field in openerp 
1

這種情況的典型模式是:

  1. 的二進制類型的嚮導模式創建一個域,並把它放在你的表格上。

    'report_result':fields.binary( '下載文件',只讀= TRUE),

  2. 當您生成報表,Base64編碼,並將其寫回嚮導。

    輸出= base64.encodestring(my_report_data) self.write(CR,UID,ID爲[0],{ 'report_result':輸出},上下文=上下文)

  3. 返回一個窗口操作,以便在彈出重新顯示。數據字段現在將成爲他們可以點擊的下載字段。

    返回{ '類型': 'ir.actions.act_window', 'res_model': 'my.report.model', 'view_mode': '形式', '的view_type': '形式', 「RES_ID」:wizard.id, 「目標」:「新」, }

獎勵積分,你可以控制下載的文件的名稱,所以它是唯一的或有合作伙伴名稱或例如文件名中的日期。在嚮導中創建一個字符或功能字段,並在寫入報告結果的同時將文件名寫入其中。然後,當您在表單上定義報告結果字段時,請將該名稱包含爲這樣的屬性。

<field name="my_file_name_field" invisible="1"/> 
<field name="report_result" filename="my_file_name_field"/> 
+0

感謝您的回覆。我試過你的解決方案,但我不明白你的意思來自[(my_report_data)]?是瀏覽記錄?在我的情況下,我從我的嚮導編寫瀏覽記錄..它引發此錯誤文件「base64.pyc」,第313行,編碼字符串 TypeError:類型'bool'的對象沒有len() – 2015-03-16 08:04:21

+0

不,這是內容你的報告。我假定您正在使用報告服務來生成PDF或Excel庫以生成電子表格。無論哪種情況,您都需要base64進行編碼,以便將其寫入嚮導記錄。 – 2015-03-17 03:01:18

+0

我使用Python XlsxWriter包生成Excel報告,我將報告路徑('c:/Users/My_repot.xlsx')分配給[My_report_data],然後讀取並編碼base64,這次它沒有拋出任何錯誤但沒有任何意外的意思,它沒有寫在二進制字段中 – 2015-03-17 08:42:15