2012-07-26 11 views
5

Próbuję uruchomić kreatora z akcji wywołanej z przycisku w OpenERP. Mogę uruchomić kreatora za pomocą przycisku z bocznym menu, ale gdy tylko użyję akcji w przycisku, otrzymuję kilka odświeżeń, bez otwierania nowego formularza.Uruchamianie kreatora za pomocą przycisku w OpenERP

Kreator jest dość prosty. Oto kod:

wizard.xml

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


     <record id="view_res_partner_add_terminal_wizard" model="ir.ui.view"> 
      <field name="name">res.partner.terminal.form</field> 
      <field name="model">res.partner.terminal</field> 
      <field name="type">form</field> 
      <field name="arch" type="xml"> 
       <form string="Add terminal"> 
        <group colspan="4" > 
         <separator string="Select terminals to assign" colspan="4"/> 
         <field name="terminal_id" string="Terminals" domain="[('state','=','available')]"/> 
         <newline/> 
        </group> 
        <separator string="" colspan="4" /> 
        <group colspan="4" col="6"> 
         <button icon="gtk-cancel" special="cancel" string="Cancel"/> 
         <button icon="gtk-ok" name="add_terminal" string="Assign Terminal" type="object"/> 
        </group> 
       </form> 
      </field> 
     </record> 

     <record id="action_res_partner_terminal" model="ir.actions.act_window"> 
      <field name="name">Assign Terminal</field> 
      <field name="type">ir.actions.act_window</field> 
      <field name="res_model">res.partner.terminal</field> 
      <field name="src_model">res.partner</field> 
      <field name="view_type">form</field> 
      <field name="view_mode">form</field> 
      <field name="view_id" ref="view_res_partner_add_terminal_wizard"/> 
      <field name="target">new</field> --> 
      <field name="key2">client_action_multi</field> 
     </record> 

     <act_window id="action_res_partner_terminal_wizard" 
       name="Assign Terminal" 
       res_model="res.partner.terminal" 
       src_model="res.partner" 
       view_mode="form" 
       key2="client_action_multi" 
       target="new" 
     /> 


    </data> 
</openerp> 

I mam kod przycisku z:

<button name="$(universal_account.action_res_partner_terminal_wizard)d" string="Assign Terminal" type="action" /> 

Próbowałem oddanie prostą id XML tam (bez $() d), i próbowałem użyć dowolnej akcji zdefiniowanej powyżej, wszystkie z tymi samymi wynikami. Dostaję błąd, jeśli umieszczę złą nazwę akcji, ale to już wszystko. Jakieś pomysły, dokąd się udać?

Odpowiedz

6

W definicji przycisku zamień $(...)d na %(...)d.

Zastąpienie XML_ID używa znaku procentowego, a nie znaku dolara.

BTW, nie potrzebujesz pierwszego act_window. Zdefiniowanie act_window poprzez znacznik rekordu nie spowoduje utworzenia łącza paska bocznego; musisz użyć znacznika skrótu <act_window> lub dodać link paska bocznego z rekordem ir_value. Drugi act_window (action_res_partner_terminal_wizard) utworzy łącze paska bocznego i zostanie użyte do działania przycisku.

+0

To był dokładnie problem!Dziękuję za wyjaśnienie różnicy między dwoma systemami act_windows. Trzymam się tego pierwszego, głównie dlatego, że nie chcę, aby pojawił się w bocznym widoku. –

+0

Tak @Al Prawo, Thst dokładny problem, ale ich nie ma potrzeby defione act_windoe również –

+0

@Ali jestem zaskoczony Dlaczego sugerujesz niewłaściwe robienie wskazówek tutaj, to prowadzi produkt opensource w kierunku złego końca –

-2

Twój wizard.xml powinna wyglądać następująco:

<?xml version="1.0" encoding="utf-8"?> 
<openerp> 
    <data> 
     <record id="view_res_partner_add_terminal_wizard" model="ir.ui.view"> 
      <field name="name">res.partner.terminal.form</field> 
      <field name="model">res.partner.terminal</field> 
      <field name="type">form</field> 
      <field name="arch" type="xml"> 
       <form string="Add terminal"> 
        <group colspan="4" > 
         <separator string="Select terminals to assign" colspan="4"/> 
         <field name="terminal_id" string="Terminals" domain="[('state','=','available')]"/> 
         <newline/> 
        </group> 
        <separator string="" colspan="4" /> 
        <group colspan="4" col="6"> 
         <button icon="gtk-cancel" special="cancel" string="Cancel"/> 
         <button icon="gtk-ok" name="add_terminal" string="Assign Terminal" type="object"/> 
        </group> 
       </form> 
      </field> 
     </record> 


     <record id="action_res_partner_terminal" model="ir.actions.act_window"> 
      <field name="name">Assign Terminal</field> 
      <field name="type">ir.actions.act_window</field> 
      <field name="res_model">res.partner.terminal</field> 
      <field name="view_type">form</field> 
      <field name="view_id" ref="view_res_partner_add_terminal_wizard"/> 
      <field name="target">new</field> 
     </record> 
    </data> 
</openerp> 

i na widok Buttona powinny być zdefiniowane jak poniżej

<button name="$(universal_account.action_res_partner_terminal)d" 
     string="Assign Terminal" 
     type="action" 
     help="Assign Terminal"/> 

należy zdefiniować XML ID ir.actions.act_window na działanie przycisku zamiast act_window identyfikator xml.

Pozdrawiam.

+0

Znacznik to skrót, taki jak

+0

@MohammadAli: Chciałbym przypomnieć, że act_wondow łączy rekord, który nie zachowuje się tak samo jak ir.actions.act_window. –

+0

Proszę mnie poprawić, jeśli się mylę; Moje zrozumienie z openerp/tools/convert.py, że tag act_window wstawia normalny rekord ir.action.act_window oraz ustawienie ir.value, jeśli src_model jest zdefiniowany, aby dodać działanie paska bocznego. Powinien być to równoważny zapis dla prostych działań, ale nie można używać zaawansowanych funkcji tagu rekordu, takich jak ref lub atrybuty wyszukiwania. –

Powiązane problemy