2012-07-26 26 views
4

我想创建一个行动,这将调用传递选定行的ID在树视图模型的方法在树视图中选择所有ID的方法,使行为是有效的在选择项目时在屏幕的右侧部分。如果不用一个'ok'按钮创建一个向导,可以这样做吗?OpenERP的:行动呼吁

通常情况下,我想能够调用ir.module.module的button_upgrade方法来一次更新几个模块,但是这将是很多情况下,在应用程序非常有用。

我正在使用OpenERP 6.1和Web客户端。

回答

2

我有old-style wizard这样做是在5.0,但我还没有看到一个办法做到这一点在6.1 web客户端,但。您仍然可以在6.1 GTK客户端中使用旧式向导,但它在Web客户端中不起作用。

我猜,你可以将财富消息放入OK对话框来招待你的用户。

0

您应该可以使用execute操作执行此操作。 http://doc.openerp.com/v6.1/developer/03_modules_4.html#actions

+0

这就是我一开始想的,但不幸的是,该页面上关于“执行”操作的信息非常少。至于我甚至不确定OpenERP中实际存在这样的事情。在ir_actions.py中,没有什么与操作类型的“执行”非常相似。我很乐意接受关于这一问题的更详细的答案。 – 2012-07-30 15:08:08

1

我得到这个工作:

  1. 创建一个新的服务器操作,在设置»定制»低级别对象»动作»服务器操作:

    • 操作名称 :“升级选定模块”
    • 对象:ir.module.module
    • 动作类型:Python代码
    • Python代码:行动= obj.button_upgrade(上下文语境=)
  2. 创建一个新的活动绑定,在设置»自定义»低级别对象»操作»操作绑定:

    • 名称: “升级模块动作绑定”
    • 型号名称:ir.module.module
    • 预选赛:client_action_multi
    • 行动:搜索 “升级所选单元” 中的“行动(只改变)“框。你应该得到类似于“ir.actions.server,680”的Action Reference字段。

的论坛主题"Action : how to get selected rows ?"被用作参考。 您可能还会感兴趣的Email Template's button自动创建一个操作,使用定义的电子邮件模板进行群发邮件。

+0

设计明智,这是非常丑陋的(不是你的错)。我会给它一个去,并报告回来。 – 2012-07-30 15:09:55

+0

为什么你认为这比OpenERP中的大多数事情都丑?@ gurneyalex?对我而言,这与您配置向导的方式大致相似。如果您不喜欢通过低级对象菜单进行配置,则可以在模块的XML数据文件中执行相同的操作。 – 2012-07-30 16:41:48

+0

我真的不喜欢存储在字符串属性中的代码并进行评估。它通常会导致难以调试。这些数据在迁移过程中可能会有问题。 – 2012-07-31 09:00:20

2

我没有V6发动机,但这部作品在V7:

<record id="action_id_name" model="ir.actions.server"> 
    <field name="name">Name that shows in More button</field> 
    <field name="type">ir.actions.server</field> 
    <field name="model_id" ref="model_blah_blah"/> 
    <field name="state">code</field> 
    <field name="code">self.some_custom_code(cr, uid, context.get('active_ids'), ..., context=context)</field> 
</record> 

<record id="value_id_name" model="ir.values"> 
    <field name="name">Name</field> 
    <field name="action_id" ref="action_id_name"/> 
    <field name="value" eval="'ir.actions.server,' + str(ref('action_id_name'))"/> 
    <field name="key">action</field> 
    <field name="model_id" ref="model_blah_blah"/> 
    <field name="model">blah.blah</field> 
    <field name="key2">client_action_multi</field> 
</record> 

def some_custom_code(self, cursor, uid, ids, ..., context): 
    # possibly do some processing 
    # maybe with the ... extra fields you added 
    # 
    # post your changes, either with an sql statement or by calling 
    # self.write(...) 
    return True 

,你应该与实际值进行替代的名称:

  • action_id_name:id为您的操作记录
  • Name that shows in More button:无论你想在按钮中显示
  • model_blah_blah:使用的模型的名称(应匹配任何在security/ir.model.access.csv文件中找到)
  • some_custom_code:函数的名称与型号
  • value_id_name:你的行为的价值记录的ID
  • Name:一个名称(不知道在哪里它显示了)
  • blah.blah:名字你model和OpenERP的符号table
  • ...:任何额外的参数/参数添加
+0

注:我改编自[OpenERP网站上的答案](https://www.odoo.com/forum/help-1/question/action-server-multi-checkbox-select-39058)。 – 2015-03-12 21:03:00