求教:关于两个模块间依靠的问题
-
本人需要重新开发一个生产管理的模块,现在修改了sale模块中工作流的动作,order confirm后要在我自己添加的模块中的需求表中插入数据。同时在需求表中也要有order_line的主键关联,这样我才能在生产中回溯到合同。在模块安装中出现了问题。我修改了sale模块的依靠关系,添加了我的自建模块mrp_new。于是在装sale模块前需要安装自建的mrp_new模块,而我mrp_new模块中的production表又有一个字段叫sale_order_line_id:fields.many2one('sale.order,line','合同明细来源',required=True).于是openerp会报错,找不到sale.order,line这个relation。这个我能理解,因为目前还没有添加sale模块的对象和数据库。那我只有改依存关系,让mrp_new依存于sale模块,但是这样我sale模块中需要插入mrp_new模块中的production表的数据又会出现找不到mrp_new.production的对象了。
我看了原模块的操作,他建立的关系是sale.order.line中建立一个'procurement_id': fields.many2one('mrp.procurement', 'Procurement'),而不是我在生产需求中建立关系到sale,order,line.这样可以从合同看到生产需求,但是从生产需求怎么看到合同的内容呢?
初次研究openerp,可能有很多没有了解到的东西,希望各位大大能指导指导我这个疑问。
-
在模块开发中不应直接修改已有模块。你修改sale模块的workflow并在sale模块中添加对mrp-new的依赖的做法是不正确的,同时,因为两个模块之间互相依赖,造成循环引用。应该是在mrp-new中继承sale模块中的类并加以改造。
-
我新建个class sale_new继承于sale,那么我的视图,工作流等等是不是都需要重新写??
-
假如我仍然采用sale现有的工作流步骤,但是在继承类中重写了他每一步的def,那么安装新模块前,他采用的是原有的业务逻辑,安装后就用的我重写的业务逻辑了??
-
我不是要调用父类方法,我是要修改父类的方法,要重写。教程我看过了,就是入门的东西,涉及到核心代码的编写很多要靠试,我最开始就是试着改原模块,幸好提醒了我可以用继承来实现,这样让我恍然大悟,省却了很多时间,这就是来这里提问的好处。
openerp资料不好找,官方文档和一些资料都是e文,而且还不好搜索,看起来很慢,而且光看不试也记不住什么东西。只所以有这样的疑问,是我发现这里的继承同传统意义上的继承是有区别的,这里的继承在openerp看来,只是对应在原有数据库表上进行了修改,可以说是同一个对象,重写方法后,因为工作流仍然用的是原有模块的工作流。工作流步骤里定义方法他是找父类的方法呢,还是找子类的方法。
[[i] 本帖最后由 dreambecky 于 2010-5-15 18:06 编辑 [/i]]
-
tks,我已经试出来了,确实是这样,重写后直接用的子类的方法了。