如何使用 Odoo 11 上的服务器操作对扩展字段的更新进行编码?

How to code an update for extended field using server action on Odoo 11?

我正在学习 Odoo 11 并想编写一个按钮,该按钮将通过服务器操作调用 python 方法。

这是我的按钮代码:

<button name="enviarfactura" type="action" string="Homologar" attrs="{'invisible':['|',('sent','=',True), ('state', 'not in', ('open','paid'))]}"/>

这是我的 action.server 代码

<record model="ir.actions.server" id="x_nc_act_serv_fact">
  <field name="name">enviarfactura</field>
  <field name="model_id" ref="model_account_invoice"/>
  <field name="sequence">1</field>
  <field name="type">ir.actions.server</field>
  <field name="state">code</field>
  <field name="code">
            if records: 
               action = records.x_nc_met_fac()
  </field>
</record>

最后是我的 python 方法。

@api.multi
def x_nc_met_fac(self):
for rec in self:
    self.x_nc_fld_fact = True
    self.x_nc_fld_det_fact = 'my custom text'

现在的逻辑是,按钮将调用 server.action,后者将调用我的 python class 上的方法。该方法将为模型上的扩展字段设置新值 account.invoice 从理论上讲,这应该可行,但事实并非如此。

排除可能的错误:

-可能不是 python 缩进。 discord 上的 python 社区帮助了我 :P - 这不是 server.action 结构,因为当我上传包含此代码的模块时,它会毫无问题地创建 server.action。 - 当我点击按钮时,什么都没有 happens.So 我尝试将按钮的类型更改为 "type=object" 并告诉它我的方法的名称它给出了错误。 Account.invoice 没有属性 "x_nc_met_fac"

感谢任何帮助。提前致谢。

按钮的name必须是动作ID。所以必须做两个想法:

  1. 你的动作应该在按钮之前定义。如果两者在同一个 xml 中,这很容易,如果不检查模块清单中的顺序。 XML 将按此顺序加载!

  2. 将按钮 name 更改为 "external ID substitution"

<button name="%(x_nc_act_serv_fact)d" type="action" string="Homologar"
    attrs="{'invisible':['|',('sent','=',True), ('state', 'not in', ('open','paid'))]}"/>