【问题标题】:Launching a wizard from a button in OpenERP从 OpenERP 中的按钮启动向导
【发布时间】:2012-07-24 14:00:00
【问题描述】:

我正在尝试从 OpenERP 中的按钮调用的操作启动向导。我可以使用侧面菜单按钮启动向导,但每当我在按钮中使用操作时,我只会刷新几次,而不会打开新表单。

向导非常基础。代码如下:

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>

我有按钮的代码:

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

我已经尝试将直接的 XML id 放在那里(没有 $()d ),并且我尝试使用上面定义的任一操作,都具有相同的结果。如果我输入了一个错误的操作名称,我会收到一个错误,但仅此而已。有什么想法可以从这里开始吗?

【问题讨论】:

    标签: xml button wizard openerp


    【解决方案1】:

    在您的按钮定义中,将 $(...)d 替换为 %(...)d

    XML_ID 替换使用百分号,而不是美元符号。

    顺便说一句,您不需要第一个 act_window。通过记录标签定义act_window不会创建侧边栏链接;您必须使用快捷方式标签&lt;act_window&gt; 或添加带有ir_value 记录的侧栏链接。第二个act_window (action_res_partner_terminal_wizard) 将创建侧边栏链接并用于按钮操作。

    【讨论】:

    • 这正是问题所在!感谢您澄清两个 act_windows 之间的区别。我坚持使用第一个,主要是因为我不希望它出现在侧视图中。
    • 是的@Ali 对,这就是确切的问题,但他们也不需要定义 act_windoe
    • @Ali 我很惊讶为什么你在这里提出错误的指导方针,这导致开源产品走向错误的结局
    【解决方案2】:

    您的 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="view_type">form</field>
                <field name="view_id" ref="view_res_partner_add_terminal_wizard"/>
                <field name="target">new</field>
            </record>
        </data>
    </openerp>
    

    和 On View 按钮应该定义如下

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

    您必须在按钮操作上定义 ir.actions.act_window 的 XML Id,而不是 act_window xml id。

    问候。

    【讨论】:

    • 标签是一个快捷方式,类似于 相同的记录
    • @MohammadAli :我想提醒一下,act_wondow 正在链接记录,它的行为与 ir.actions.act_window 不同。
    • 如果我错了,请纠正我;我从 openerp/tools/convert.py 了解到 act_window 标签插入正常的 ir.action.act_window 记录加上设置 ir.value 如果 src_model 被定义为添加侧边栏操作。因此,它应该是简单操作的等效记录,但您不能使用高级记录标记功能,如 ref 或搜索属性。
    • 这就是我最初设置的方式。修复最终将 $ 替换为 %。
    • @MohammadAli:从技术上讲,您当然是对的,并且选择了正确的方式来表明这一点。不过想说你几点 1.act_window 基本上是设计用来添加侧边栏事件的。不得过度规则和违反编码约定。 2. 当我们定义动作时,这意味着我们谈论创建将触发视图的动作事件。是的,第一种情况也将做同样的工作,但他们没有违反编码意识的感觉,因为这会影响整个 OpenSource 产品的编码,他们必须是用户编码的一致性。希望你能理解
    猜你喜欢
    • 2023-03-18
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多