3

在 OpenERP6.1 中单击保存按钮(在随附的屏幕截图中标记为红色)时会调用哪个函数?

提前致谢!!!开瓶器

4

3 回答 3

7

为了详细说明 DReispt 的答案,您的屏幕截图似乎突出显示了现有记录表单的 One2Many 字段中可编辑One2Many行的保存按钮。One2Many 行被视为其父记录的记录,因此它们应该与其他记录数据一起以原子方式(在单个 RPC 调用中)保存。

从这个意义上说,屏幕截图上突出显示的保存按钮不会直接调用服务器上的任何方法,它只是将更改保存在浏览器的本地缓存中。真正调用(如果这create是一条新记录)或write(如果正在更新记录)只有在您之后单击父记录表单的主保存按钮时才会完成。

此时,该行的值将在提供给create/的值映射中传递write,在 One2Many 命令列表中。write有关设置 One2Many 字段值的更多信息,另请参阅文档。

顺便说一句,在 OpenERP 中调查 RPC 调用非常简单:

  • 在服务器端,您可以使用参数启动openerp-server进程--log-level=debug_rpc_answer以获取所有 RPC 调用的详细日志记录
  • 在 Web 客户端,您可以简单地使用 Web 浏览器的调试器来监视所有 RPC 调用(在网络监控选项卡中)。大多数 JSON-RPC 调用对应于常规的 OpenERP ORM 方法调用,一旦您熟悉了 OpenERP RPC API,就可以轻松阅读。

注意:以上不是 OpenERP 6.1 特有的,它在 7.0 中的工作方式相同(尽管 6.0 和更早版本的 web 客户端对 one2many 字段有不同的行为)

于 2013-01-07T17:33:19.870 回答
1

保存按钮将为该模型运行ORM 方法。对于新记录,这是create()方法,对于更新记录,它是update()方法。

这些标准方法可以在模型中被覆盖以实现附加功能。

于 2013-01-07T15:50:51.823 回答
0

您的模型是orm.Model'. There are methods in类 BaseModel save`(BaseModel is inherited by Model) which will be call for the记录的子类。这些方法是

def create(self, cr, user, vals, context=None)

如果要更改任何模型的任何行为,则必须覆盖此方法。

于 2013-01-08T05:33:35.237 回答