2012-07-26 11 views
5

Estoy tratando de ejecutar un asistente desde una acción llamada desde un botón en OpenERP. Puedo iniciar el asistente usando un botón de menú lateral bien, pero cada vez que uso la acción en un botón, solo obtengo un par de actualizaciones, sin que se abra el nuevo formulario.Ejecutando un asistente desde un botón en OpenERP

El asistente es bastante básico. Aquí está el código:

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> 

y tengo el código para el botón con:

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

He intentado poner el id XML directamente allí (sin el $() d), y he intentado utilizar cualquiera de las acciones definidas anteriormente, todas con los mismos resultados. Me sale un error si pongo un nombre de acción incorrecto, pero eso es todo. ¿Alguna idea de dónde ir desde aquí?

Respuesta

6

En la definición de su botón, reemplace $(...)d con %(...)d.

La sustitución de XML_ID utiliza el signo de porcentaje, no el signo de dólar.

Por cierto, no necesita el primer act_window. La definición de act_window a través de la etiqueta de registro no creará el enlace de la barra lateral; tiene que usar la etiqueta de acceso directo <act_window> o agregar el enlace de la barra lateral con el registro ir_value. El segundo act_window (action_res_partner_terminal_wizard) creará el enlace de la barra lateral y se utilizará para la acción del botón.

+0

¡Ese era exactamente el problema!Gracias por aclarar la diferencia entre las dos act_windows. Me quedo con el primero, principalmente porque no quiero que aparezca en la vista lateral. –

+0

Sí @Ali correcto, este es el problema exacto, pero no es necesario defionar act_windoe también –

+0

@Ali Estoy sorprendido Por qué sugieres directrices incorrectas aquí, este producto de Opensource de plomo hacia el extremo equivocado –

-2

Su wizard.xml debería tener este aspecto:

<?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> 

y On Botón de vista debería definirse como el de abajo

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

debe definir un Id XML del ir.actions.act_window en la acción botón en vez act_window Identificación xml

Atentamente.

+0

la etiqueta es un atajo, como

+0

@MohammadAli: Me gustaría recordarle que act_wondow está vinculando el registro que no se comporta igual que ir.actions.act_window. –

+0

Por favor corrígeme si me equivoco; Mi comprensión de la etiqueta openerp/tools/convert.py que act_window inserta el registro ir.action.act_window normal más la configuración de ir.value si se define src_model para agregar la acción de la barra lateral. Por lo tanto, debe ser un registro equivalente para acciones simples, pero no puede usar funciones avanzadas de etiqueta de registro como atributos de búsqueda o de referencia. –