如何OE开发中实现一个在web开发中的小效果
近期公司里面有一个需求,就是当业务人员点击订单列表中的某一条时希望打开一个新的窗口动作,然后把这一条记录中的某些值带过去,这样一个效果在web开发中很简单,或许就是分分钟的事情。但是在客户端这种开发中确实不易,尤其是OpenERP这种有诸多限制的框架里面。
那么如何实现呢?
这个地方我的想法主要分两步:1.打开一个新的窗口(Form视图的)2.把值带入到新的窗口里面。 第一步里面我按日常的操作在view里面创建一个向导(wizard),然后给name和id赋值,然后在创建一个wizard文件(名字和name相同),同时在_init.py里面做一个引入 import *.py,当这些都做好之后开始构思wizard的程序怎么写能够来打开一个新窗口,一般的wizard文件里面都会有这样一段程序在点击wizard的button时候来做一个初始化的弹出控制和之后的操作,但是这里的需求是点击之后直接打开一个新的Form页面,所以也就没有必要既写init又写confirm,直接在init里面写我们要做的动作和结果即可。
,所以这个地方我们这样写:
actions里面的_do_confirm函数我们可以返回空,主要是下面的action,需要费点心思,在这个函数里面我们既需要把当前记录的值取到,有需要打开一个新的窗口,同时把这些值传过去,一点一点来,首先把我们要取的值循环出来赋值给对应的变量,通过类似下面的方式来打开一个新的窗口。
但是存在一个问题,这样打开的窗口是一个树状(tree)的视图不满足要求,这是由于红框中的第一行代码的最后一个参数我使用的action的引用(ref)视图就是tree的,在对应的view文件里面自己写一个新的action引用Form视图就可以了,ok,这样可以打开一个新的窗口了,第一步算完成了。
最关键的一步在于把值传过去,怎么办呢?
先把之前取到的值放到result字典的context里面,然后作为返回值返回即可,这里需要注意的是:把值return回去之后其实是在后台穿过去的,所以就算是我们使用了类似
result[‘context’] = {‘key1’:value1,’key2’:value2,’key3’:value3,’key4’:value4}(这里的key1到key4对应新打开窗口页面的部分标签)也不会把这些值显示在打开的页面上,想想PHP的web开发,因为有GET和POST这种约定俗成的机制,所以接收值完全没有问题,如果不用这两种方式也得借助Ajax和jQuery来实现正确的接收值,况且OE里面的客户端不做任何的业务处理,所以这个地方就更需要我们想办法来自己获取值了,最开始我想的是能不能用create方法,在创建的时候把值写入,但是失败了,因为create是在点击保存或提交的时候传值的,它不能用来接收值,然后我们又想到重写_field_get() 是否可行,试了一下也没有写入值,这个为什么我确实没有深究,最后想到的就是用默认值的方式,在OE开始里面我们常会为某些项添加默认值,来减少输入或选择的操作,通过在_default里面写入获取默认值的函数,就可以把默认值写入到新页面的对应栏位里面,最后发现测试通过。
就是这么多了,如果还有什么疑问,欢迎到下面留言。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。