2011-07-04 10 views
5

ダイナミックビューを作成するにはヘルプが必要です。説明しましょう:私はForm1とForm2のビューを持っています。 Form1には、expressionフィールドとextractボタンが含まれています。 Form2には、Form1からの式の抽出された要素が含まれます。たとえば、あなたがForm1の表現の場に(a+b)*c-d*0,5を入力すると、Form2のは、これを抽出して表示する必要があります。OpenERPでダイナミックビューを作成するには

(- open brace 
a - variable 
+ - addition 
b - variable 
) - close brace 
* - multiplication 
c - variable 
- - subtraction 
d - variable 
* - multiplication 
0,5 - constant number 

、ここで私のクラスには、次のとおりです。ここで

class wz_formula(osv.osv_memory): 
    """ 
     Formula Wizard 
    """ 
    _name = "wz.formula" 
    _inherit = "ir.wizard.screen" 
    _description = "Formula Wizard" 

    _columns = { 
      'name': fields.char('Formula name', required=True, size=64) 
      , 'expression': fields.char('expression', required=True, size=64) 
      , 'state': fields.selection([('init','init'),('done','done')], 'state', readonly=True) 
    } 

    _defaults = { 
      'state': 'init' 
    } 

    def next(self, cr, uid, ids, context=None): 
     if context is None: 
      context = {} 
     formula_obj = self.browse(cr, uid, ids)[0] 
     formula_name = formula_obj.name 
     infix = formula_obj.expression 
     if formula_name and expression: 
      modobj = self.pool.get('ir.module.module') 
      mids = modobj.search(cr, uid, [('state', '=', 'installed')]) 
      modobj.update_translations(cr, uid, mids, [formula_name, expression], context or {}) 
      self.write(cr, uid, ids, {'state': 'done'}, context=context) 
     return { 
      'name': _('Formula') 
      , 'view_type': 'form' 
      , 'view_mode': 'form' 
      , 'view_id': False 
      , 'res_model': 'wz.formula' 
      , 'domain': [] 
      , 'context': dict(context, active_ids=ids) 
      , 'type': 'ir.actions.act_window' 
      , 'target': 'new' 
      , 'res_id': ids and ids[0] or False 
     } 

# create an object 
wz_formula() 

は私のxmlです:

<?xml version="1.0" encoding="utf-8"?> 
<openerp> 
    <data> 

     <record id="view_wz_formula" model="ir.ui.view"> 
      <field name="name">Formula</field> 
      <field name="model">wz.formula</field> 
      <field name="type">form</field> 
      <field name="arch" type="xml"> 
       <form string="Formula"> 
        <group colspan="8" col="8" states="init"> 
         <separator string="Formula" colspan="8"/> 
         <field name="state" invisible="1"/> 
         <field name="name"/> 
         <field name="expression" width="220"/> 
         <button special="cancel" string="Cancel" icon="gtk-cancel" colspan="1"/> 
         <button name="next" string="Next" type="object" icon="gtk-ok" colspan="1"/> 
        </group> 
        <group colspan="8" col="8" states="done"> 
         <separator string="Done" colspan="8"/> 
         <button special="cancel" string="Close" icon="gtk-cancel"/> 
        </group> 
       </form> 
      </field> 
     </record> 

     <record id="action_view_wz_formula" model="ir.actions.act_window"> 
      <field name="name">Formula</field> 
      <field name="type">ir.actions.act_window</field> 
      <field name="res_model">wz.formula</field> 
      <field name="view_type">form</field> 
      <field name="view_mode">form</field> 
      <field name="target">new</field> 
     </record> 

     <menuitem 
      name="Create a formula" 
      action="action_view_wz_formula" 
      id="menu_view_wz_formula" 
      parent="menu_fs_root" sequence="2"/> 

    </data> 
</openerp> 

これまでのところ、Form1とForm2を切り替えるだけです。上記のように式を抽出するにはどうすればよいですか?

答えて

6

関数をオーバーライドfields_view_get()

def fields_view_get(self, cr, uid, view_id=None, view_type='form', context={}, toolbar=False): 
    result = super(<your_class_name>, self).fields_view_get(cr, uid, view_id, view_type, context=context, toolbar=toolbar) 
    # your modification in the view 
    # result['fields'] will give you the fields. modify it if needed 
    # result['arch'] will give you the xml architecture. modify it if needed 
    return result 

result、openerpのV6での動的なビューを追加するには、主に二つのものが含まれている辞書に、XMLアーキテクチャとフィールドになります。 文字列としてresult['arch']にxmlアーキテクチャを指定し、result['fields']のフィールドに辞書の辞書を指定します。その後、結果を返します。次に、あなたはフィールドとアーキテクチャで与えたものに応じてビューを取得します。

1

最初のフォーム(FORM 1)から式を取得し、それをあなたの選択に従って評価し、このデータを含む2番目のフォームに "TEXT"フィールドを保存しますそのフィールドのフォーマット。

関連する問題