Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

求教:关于两个模块间依靠的问题



  • 本人需要重新开发一个生产管理的模块,现在修改了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模块中工作流的动作,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,那么安装新模块前,他采用的是原有的业务逻辑,安装后就用的我重写的业务逻辑了??



  • super(类名, self).方法( 就可以调用被继承类的方法).

    还是那句老话, 多看老肖教程.....



  • 我不是要调用父类方法,我是要修改父类的方法,要重写。教程我看过了,就是入门的东西,涉及到核心代码的编写很多要靠试,我最开始就是试着改原模块,幸好提醒了我可以用继承来实现,这样让我恍然大悟,省却了很多时间,这就是来这里提问的好处。
    openerp资料不好找,官方文档和一些资料都是e文,而且还不好搜索,看起来很慢,而且光看不试也记不住什么东西。

    只所以有这样的疑问,是我发现这里的继承同传统意义上的继承是有区别的,这里的继承在openerp看来,只是对应在原有数据库表上进行了修改,可以说是同一个对象,重写方法后,因为工作流仍然用的是原有模块的工作流。工作流步骤里定义方法他是找父类的方法呢,还是找子类的方法。

    [[i] 本帖最后由 dreambecky 于 2010-5-15 18:06 编辑 [/i]]



  • 继承后就是同一个对象了. 不存在父与子...

    子的工作流就是父的工作流...

    子的工作流不重写的话, 就是父的工作流 然后 父的工作流中可以使用子的方法.

    只要你的子方法要在工作流中使用, 而父的工作流中没有相应的节点调用的话, 就要重写修改父工作流...



  • tks,我已经试出来了,确实是这样,重写后直接用的子类的方法了。


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待