Web上下文隧道
odoo8-addon-web-context-tunnel的Python项目详细描述
openerp on_的问题会改变
openerp使用位置传递更改ajax事件参数 论据。这很烦人,因为模块通常需要传递额外的参数 在“基于更改”签名中不存在的。只要两个模块 尝试更改此签名以添加其额外参数,它们不兼容 除非有额外的胶水模块 考虑到所有额外的参数。但这会导致 爆炸使模块再次兼容。
解决方案
这个模块提供了一个简单的解决方案,可以在大多数情况下使用。 事实上,如果base on_change是为了传递上下文而设计的,那么它是有效的 争论。否则就不行了,你应该走老路。但无论如何 如果on_更改没有传递上下文参数,而您 当然可以对添加到 论据。
因此,对于传递上下文的on_更改,该模块如何工作?
well openerp已经有了一个优雅的解决方案,可以让扩展模块更改 XML属性:使用 position=“attributes”然后重新定义属性。已经在使用 替换客户端将发送到的“context”属性的几个位置 服务器。
这里的想法是把你所需要的额外的论点包装在里面 上下文字典就像一个普通的python kwargs一样。这种情况 然后应自动通过on-change调用链进行传播, 无论模块顺序如何,无需修改 签名。
只是position=“attributes”和重新定义上下文的问题是 同样,如果两个独立的模块重新定义了上下文,它们是不兼容的 除非第三个模块同时考虑了这两个因素。
但是有了这个模块,扩展点现在可以使用position=“attributes”和 不再重新定义“context”属性,现在只需定义一个新的 “context_foo”属性如下: <;attribute name=“context_foo”>;{'my_extra_field':my_extra_field}<;/属性>;。
这个模块修改web客户端的方式是在发送ajax之前 在向服务器发出更改事件请求时,所有节点属性以 “context”被合并到一个单独的context措辞中,保留键和 所有扩展名的值。在极少数情况下,模块确实希望重写 上下文中的值,则它仍需要重写原始上下文 属性(或其他原始属性)。
当然,如果您应该改为通过api或webservice调用on_change 使用web客户端时,只需确保包装所需的额外 上下文词典中的参数。
测试
此模块附带了static/test/context_tunnel.js中的一个简单测试。 要运行它,打开页面/web/tests?mod=web上下文隧道 如本文所述https://doc.openerp.com/trunk/web/testing 在使用phantomjs进行测试时,python测试也应该选择它。
至于使用yaml的web上下文隧道测试模块,是的,这是可能的。 实际上,您需要手动模拟新的web客户端行为 确保在以后的on-u更改中添加所需的额外上下文键。 例如,在调用on_更改之前,可以使用 一个!类似于context.update的python语句({'my_extra_field':my_extra_field})。
您可以在这里看到使用web上下文隧道的模块转换示例 例如: https://github.com/openerpbrasil/l10n_br_core/commit/33065366726a83dbc69b9f0031c81d82362fbfae