3

レポートのファイル名をカスタマイズしたいと思います。

たとえば、請求書をダウンロードすると、「Invoice.pdf」のようなファイル名になります。「invoice_number.pdf」のようなものが欲しいのですが、動的ファイル名の使い方がわかりません。

4

3 に答える 3

1

XMLレポート定義の添付ファイル属性の式を使用して、添付ファイル名のようなデフォルトのファイル名を設定する解決策を見つけました。

次のファイルを見つけて変更します: openerp7/openerp-web/addons/web/controllers/main.py。

この文を検索:

        file_name = '%s.%s' % (file_name, report_struct['format'])

次に、このコードを前に追加します。

    '''Code added by Raul Paz to set the default file_name like the attach_name
        The attach_name mach with the attachment expresion from your report_xml
        <report
            id="report_webkit.YourModule_report_id"
            model="YourModule.model"        
            name="Your_report_name"
            file="YOUR_MODULE/report/YOUR_MAKO_FILE.mako"
            string="Your Text in the print button" 
            auto="False" 
            report_type="webkit"
            attachment="'Valid_filename_expresion"
            usage="default"
        />
        And
        to modify existing report sale_report.xml to manage the name:
        create in your module a file : sale_report.xml
        <?xml version="1.0" encoding="UTF-8"?>
        <openerp>
           <data>
              <record id="sale.report_sale_order" model="ir.actions.report.xml">
                  <field name="attachment">(object.name or 'Sale Order')</field>
          <field name="attachment_use" eval="True"/>
      </record>
          </data>
        </openerp>

    '''
    try:
        if action.get('attachment_use',False) and action['attachment']:
            model = context['active_model']
            cr = openerp.pooler.get_db(req.session._db).cursor()
            uid = context['uid']
            ids = context['active_ids']
            objects=openerp.pooler.get_pool(req.session._db).get(model).browse(cr,uid,ids,context=context)
            file_name=[eval(action['attachment'],{'object':x, 'time':time}) for x in objects][0]
    except:
        pass
    #end code added

グッドラッキー

于 2013-10-25T11:57:19.653 に答える
1
  1. 簡単な修正については、次の Reports クラスを参照してください。

    openerp-6.1\web\addons\web\controllers\main.py
    
  2. レポート名は、header という名前の変数に設定されます。私のニーズでは、レポートにオブジェクト名で名前を付けるだけにしたいので (99% の場合に適しています)、report_name という名前の新しい変数を追加しました。

    report_name = action['report_name']
    if action.has_key('context'):
        action_context = action.get('context',{})
        if action_context.has_key('name'):
            report_name = action_context['name'] 
    
    return req.make_response(report,
         headers=[
             ('Content-Disposition', 'attachment; filename="%s.%s"' % (report_name, report_struct['format'])),
             ('Content-Type', report_mimetype),
             ('Content-Length', len(report))],
         cookies={'fileToken': int(token)})
    
于 2013-07-03T14:57:47.670 に答える