Odoo10/Odoo11 动态进度条 - 在 Python 中触发 JavaScript 函数。

14

我的任务:在Odoo中创建一个动态进度条。

我正在使用Odoo小部件:'progressbar'。 我希望在每次更新值时更新视图-因此我想在Python写方法中触发on_change_input JavaScript函数以呈现视图。

 @api.one
 def updatevalue(self, val):
      self.value = val
      # TODO call javascript function on_change_input()

目的是在进程运行时更新进度条,并且用户应该在无需更新网站的情况下看到进度。

使用progressbar小部件是否可以实现我的任务?还是在Odoo中有其他显示动态内容的可能性?

如果我将我的updatevalue方法用作按钮,则单击按钮后会更新进度条,而不调用JavaScript函数并且不刷新页面...但我确实想在我的代码中调用该方法(可能通过rpc),因此这没有帮助-.-

感谢您的时间!


以下是我目前的工作流程:

用户单击do_time_consuming_task按钮,然后调用以下函数:

def do_timeconsuming_task(self):
  ws = websocket.WebSocket()
  ws.connect('ws:/129.0.0.1:1234/')
  data = { 'topic' : 'server_command', 'id' : self.id, 'commandName' : 'do_sth',}
  payload = ujson.dumps(data)
  ws.send(payload)
  ws.close()

在服务器上,命令被接收并处理。存在一个开放的rpc连接:

odoo = odoorpc.ODOO("129.0.0.1", port=8069)
odoo.login("database", "user", "password")
my_module = odoo.env['my_module.progress_widget_test']

progress_instance = my_module.browse(id)

每次进度值更改时,我会调用我的模块的以下方法:

progress_instance.updatevalue(new_value)

当值等于 100% 时,我关闭连接

odoo.logout()

进度条字段是计算字段,对吧?那么为什么我们需要始终更新呢? - Hilar AK
请看这里 git@github.com:CybroOdoo/CybroAddons.git#10.0 - Hilar AK
不,进度条字段(value)不是计算字段。它通过调用“updatevalue”方法的RPC进行更新。您指的是哪个CybroOdoo插件? - IstaLibera
1个回答

2
这个功能已经存在了,你可以从account/static/src/js/account_reconciliation_widgets.js中的updateProgressBarprocessReconciliations方法中复制部分内容。在这里,你将看到更新进度条的正确方式。
目的是,在处理过程运行时更新进度条,而用户不需要更新网站即可查看进度。
processReconciliations中看看它是如何实现的,基本上你调用后端上已有的process_reconciliations方法,并返回一个deferred对象。从该对象中,你可以使用progress()
浏览.progress()的文档,你会发现需要使用.[notify][2]()来报告进度。
如何定义你自己的进程完成百分比?

谢谢你的帮助!然而,我不知道如何将你提到的函数包含到我的模型中。你能否帮我一下?我已经更新了我的问题,针对我目前的具体工作流程。另外,我对JavaScript编程并不是很熟悉,如果你能为我的示例添加匹配的代码,那就太好了。 - IstaLibera
我的进程完成百分比是由已经完成的步骤数量定义的。例如,任务需要完成20个步骤,而已经完成了15个步骤,则完成百分比为75%。但这是我在odoo之外知道的东西,因此我通过RPC调用更新该值。 - IstaLibera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接