(48) odoo的button用法


button 應用的比較多,這里來匯總一下

按鈕<button>,支持的屬性
     icon  可用的icon在 addons/web/static/src/img/icons
     string 按鈕的顯示文字
     type  值可以是 workflow, object action   默認是 workflow
     name  就是要觸發的方法標識
     args  傳遞方法的參數
     content 上下文
     confirm  針對對話框的確認
     special="cancel" 用於向導
     states 可見的狀態
     classname 加載的類名(常用 oe_highlight)

<footer>
      <button string="Apply" name="action_apply" type="object" class="oe_highlight"/>
       or
       <button string="Cancel" class="oe_link" special="cancel" />   
</footer>

* <button string="Cancel" class="oe_link" special="cancel" />
  這是普通的取消

* <button string="Apply" name="action_apply" type="object" class="oe_highlight"/>
這是 type 為 object 這是的交處理的業務
  要在對應的模型中定義方法:
   def action_apply(self, cr, uid, ids, context=None):
        wizard = self.browse(cr, uid, ids[0], context)
        portal_user_ids = [user.id for user in wizard.user_ids]
        self.pool.get('portal.wizard.user').action_apply(cr, uid, portal_user_ids, context)
        return {'type': 'ir.actions.act_window_close'}
       

* <button string="? Request Procurement" name="%(stock.act_make_procurement)d" type="action" class="oe_link"/>
  這個引用一個action,調用的是 stock 模塊中的 id為 act_make_procurement 的 act_window
  如下:
  <record model="ir.actions.act_window" id="act_make_procurement">
            <field name="name">Procurement Request</field>
            <field name="res_model">make.procurement</field>
            <field name="src_model">product.product</field>
            <field name="view_mode">form</field>
            <field name="target">new</field>
        </record>
       
* <button name="purchase_confirm" states="draft" string="Confirm Order" id="draft_confirm"/>
  和
<button name="purchase_confirm" states="draft"  type="workflow" string="Confirm Order" id="draft_confirm"/> 
  是等效的
  這是流程的,這時就要有對應的流程對象 purchase_confirm 只是一個信號名
  在流程里定義如下:
  <record id="purchase_order" model="workflow">
            <field name="name">Purchase Order Basic Workflow</field>
            <field name="osv">purchase.order</field>
            <field name="on_create">True</field>
  </record>
  上面是基礎
  <record id="act_draft" model="workflow.activity">
            <field name="wkf_id" ref="purchase_order"/>
            <field name="flow_start">True</field>
            <field name="name">draft</field>
  </record>
 
  <record id="act_confirmed" model="workflow.activity">
            <field name="wkf_id" ref="purchase_order"/>
            <field name="name">confirmed</field>
            <field name="split_mode">OR</field>
            <field name="kind">function</field>
            <field name="action">wkf_confirm_order()</field>
   </record>
  節點   
  <record id="trans_draft_confirmed" model="workflow.transition">
            <field name="act_from" ref="act_draft"/>
            <field name="act_to" ref="act_confirmed"/>
            <field name="signal">purchase_confirm</field>
  </record>
  事務 , 看到信號名 purchase_confirm 和 button上的name是一樣
  對應的節點是有方法
  wkf_confirm_order()
  在模型中有定義
      def wkf_confirm_order(self, cr, uid, ids, context=None):
        todo = []
        for po in self.browse(cr, uid, ids, context=context):
            if not any(line.state != 'cancel' for line in po.order_line):
                raise osv.except_osv(_('Error!'),_('You cannot confirm a purchase order without any purchase order line.'))
            if po.invoice_method == 'picking' and not any([l.product_id and l.product_id.type in ('product', 'consu') and l.state != 'cancel' for l in po.order_line]):
                raise osv.except_osv(
                    _('Error!'),
                    _("You cannot confirm a purchase order with Invoice Control Method 'Based on incoming shipments' that doesn't contain any stockable item."))
            for line in po.order_line:
                if line.state=='draft':
                    todo.append(line.id)       
        self.pool.get('purchase.order.line').action_confirm(cr, uid, todo, context)
        for id in ids:
            self.write(cr, uid, [id], {'state' : 'confirmed', 'validator' : uid}, context=context)
        return True
       
   對比了一下,還是type 為 workflow 復雜一些,小心看,還是不難的       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM