OE6.1二次开发之准备报价

描述

写道
创建一个新的模块,该模块主要是用来调用icgoo的报价接口,来获取数据;同时能从该处将数据直接进入到openerp的报价单中,进行下一步处理.

扩展:1.可以批量查询;2.纪录一段时间的信息,先本地查询,如果有就不需要调用接口;

 

需求

写道
模块名: prequote.py
1.输入型号,数量及供应商获取相关信息;
2.型号及数量是必填信息;

创建模块及基本文件

写道
1.去创建一个名为prequote的模块,其实就是新建一个文件夹
2.进入到prequote的文件夹中.创建如下四个文件;
__init__.py
__openerp__.py
quote.py
quote_view.xml

 __init__.py

  __init__.py文件是Python 的模块描述,因为OpenERP模块也是一个普通的Python模块。

  # -*- encoding: utf-8 -*-
  import quote #导入包含Python代码的所有文件和目录

 __openerp__.py

   __openerp__.py文件(在6.0之前的版本也叫__terp__.py)它包含一个Python的字典声明这个模块的相关信息:模块名字,依赖关系,说明和组成。
 {
    "name" : "prequote", #模块名
    "version" : "1.0",        #模块版本
    "description" : 'prepare quote Demo', #模块说明
    "author" : "xiaofei",    #作者
    "website" : "erp.icgoo.net", #网址
    "depends" : [],                      #依赖的模块
    "update_xml" : ["quote_view.xml"],  #模块更新的时候会读入的文件
    "installable" : True,                #可否安装                  
    "category":'Generic Modules/Others'  #模块类型
 }

在这里的时候我怎么都不能导入这个新的模块

按照<<OpenERP应用和开发基础>>第六章学习一下

写道
但基于 OpenERP 的开发,不一定要写代码。
OpenERP 有两种开发方式,一种不要写代码,直接在界面上操作就能完成功能开发。另外一种就是通过编写代码完成功能开发。
实际上,几乎所有功能都能够通过前一种方式来完成,即无需写代码就能完成几乎所有功能。

基本概念

写道
当我们操作 OpenERP 的菜单时,通常是点击菜单(如合作伙伴->合作伙伴),跳出对象选择画面,当选择一条记录时,跳出对象编辑画面。

1.对象选择画面、对象编辑画面,在 OpenERP 里称为视图(View).选择画面是列表视图(Tree View),编辑画面是表单视图(Form View)

2.OpenERP 里的对象(Object),也叫 Model,相当于我们一般说的类(Class),对象总是对应到数据库里的数据表

3.例如业务伙伴对象,其对象名是“res.partner”,对应表名是“res_partner”。表里的一条记录,也就是对象的一个实例,叫资源( Resource )

4.当点击菜单时,系统怎么知道应该跳出哪个画面,以及应该显示哪个对象的记录呢?把菜单和对应的对象、视图关联起来的是 ( Action )

重要概念

写道
1.对象或模型(Object or Model):是一个 Python 的 Class,也对应到数据库的一张数据表,负责存取数据记录(Record),有 Search、Read、Write 等方法。
OpenERP 在模块加载时,初始化模块中的所有对象,放入对象池。因此,数据库操作时,通常是先从对象池中取得对象,再调用对象的方法。

2.视图(View):负责显示数据,最常见的视图是列表视图和表单视图。此外,还有日历、甘特图、图形、流程图等几种视图,不同的视图以不同的方式展示数据。

3.菜单(Menu):这个很直观,不用介绍了。

4.动作(Action):用户操作系统时(如点击菜单、点击画面右边的工具条上的按钮等),系统的响应动作。一个 Action 包含一个对象,包含若干个视图,通常每个 Action 都包含列表和表单两个视图。

当Action 被触发时,相应的视图被调出,展示相应的对象的数据。Action 有多种类型,最常见的是Act_Window(窗口类型),窗口类型跳出一个窗口以显示数据。此外还有 Report(报表)、Wizard(向导)等类型。

基本流程

写道
用户 -> 点击菜单(Menu) -> 触发动作(Action) -> 搜索对象(Object) -> 创建视图(View) -> 展示数据(Data)

让我们重新来过

写道
本来我们这个功能是不需要往openerp是存取数据的,因为我们只是调用一个接口去获取数据并显示它;这里为了做一个完整的测试,同时我们也保留这些数据还是有用的.这样在短时间内同样的数据搜索就可以不用去调用接口了.

说明

写道
icgoo询价包括如下信息:
型号:产品型号,必填;
数量:询价数量,必填;
供应商:供选择的下拉列表,默认未选中,即所以供应商;
用户:何人进行的操作,自动
时间:搜索时间,供今后使用,自动

---------------------------------

需要开发下述对象:
icgoo询价对象:将icgoo询价信息保存到数据库,以及从数据库查找询价信息。
icgoo询价视图:查找icgoo询价的画面,包括列表和表单两个视图。
菜单:准备开发两级菜单,icgoo询价 -> icgoo询价。点击“icgoo询价”时,进入icgoo询价列表视图,可以查找icgoo询价。
动作(Action):请icgoo询价动作把对象、视图、菜单关联到一起。

创建对象

写道
设置 -> 自定义 -> 数据库结构 -> 模型 -> 新建

** 从界面上创建对象时,对象及字段标识符必须是 x_开头,



 

创建视图

写道
设置 -> 自定义 -> 用户界面 -> 视图 -> 新建

这里需要创建二张视图:1.询价历史列表视图;2.询价表单视图;



 

 

创建菜单和系统动作(Action)

写道
自定义 -> 数据库结构 -> 模型 进去,查找刚才创建的“ICGOO询价”对象,点击打开,在表单的下方有个“创建菜单”的按钮,点击进去
如下图,我是打算把这个菜单就放在'销售'->'销售'的下面



 

写道
接下来我们来创建动作(Action)
设置 -> 自定义 -> 底层对象-> 动作 -> 窗口动作 找到你创建的 'ICGOO询价'



 

看效果

重启服务并登陆。



 

 

开始解决问题及扩展

写道
试着存个数据保存.

Server Traceback (most recent call last):
File "/usr/lib/pymodules/python2.6/openerp/addons/web/common/http.py", line 593, in send
return openerp.netsvc.dispatch_rpc(service_name, method, args)
File "/usr/lib/pymodules/python2.6/openerp/netsvc.py", line 360, in dispatch_rpc
result = ExportService.getService(service_name).dispatch(method, params)
File "/usr/lib/pymodules/python2.6/openerp/service/web_services.py", line 586, in dispatch
res = fn(db, uid, *params)
File "/usr/lib/pymodules/python2.6/openerp/osv/osv.py", line 167, in execute_kw
return self.execute(db, uid, obj, method, *args, **kw or {})
File "/usr/lib/pymodules/python2.6/openerp/osv/osv.py", line 121, in wrapper
return f(self, dbname, *args, **kwargs)
File "/usr/lib/pymodules/python2.6/openerp/osv/osv.py", line 176, in execute
res = self.execute_cr(cr, uid, obj, method, *args, **kw)
File "/usr/lib/pymodules/python2.6/openerp/osv/osv.py", line 164, in execute_cr
return getattr(object, method)(cr, uid, *args, **kw)
File "/usr/lib/pymodules/python2.6/openerp/osv/orm.py", line 4194, in create
cr.execute('insert into "'+self._table+'" (id'+upd0+") values ("+str(id_new)+upd1+')', tuple(upd2))
File "/usr/lib/pymodules/python2.6/openerp/sql_db.py", line 152, in wrapper
return f(self, *args, **kwargs)
File "/usr/lib/pymodules/python2.6/openerp/sql_db.py", line 212, in execute
res = self._obj.execute(query, params)
ProgrammingError: 错误: 关系 "x_icgoo_quote" 的 "x_user" 字段不存在
第1行 insert into "x_icgoo_quote" (id,"x_user","x_partno","x_quant...

-------------------

我原先x_user是用的char创建的,现在改为many2one,对象关联:res.users,就好了.



 

写道
接着,继续填加价格字段,交货期字段,包装字段,批号字段,封装字段,供应商字段改成列表选择,
同时所有的这些信息,都要与产品关联起来,所有的东西都是需要做创建,再进行选择,这样我们做一件事就可以保存住所有的信息了.
比如:包装是REEL,应该是有选择并创建功能,这样下次就可以直接搜索这个包装进行填充,同时也做了信息收集...
另外如何用默认值填充,如时间,用户

改数据类型

写道
1.如何将supplier将成下列列表,只能选择?
-- 修改字段类型为'selection',选择项目做内容填充'[('0','hot'),('1','mouser'),('2','roch'),('3','am2'),('4','future'),('5','digikey'),('6','overstock'),
('7','chip1stop'),('8','wpi'),('9','avnet'),('10','wpi-p'),('11','wpi-b'),('12','online'),('14','element14'),('99','oem')]'
-- 可这个字段只支持128个字符.....
-- 经测试这个方法是可行的,但是怎么解决字段长段过短的问题??

2.如何为时间,用户取当前默认时间,登录用户?
-- 就我观察,用上面定义字段的方法应该是不行的,应该是在action动作的时候操作.

为这个页加加一个搜索框

还是只去创建视图就行了.
设置 -> 自定义 -> 用户界面 -> 视图 -> 新建

在创建搜索的时候总是出错,最后发现是xml的写法错误.当你新建一个视图的时候,系统默认都是给的下面这段代码:
  <?xml version="1.0"?>
  <tree string="My view">
<field name="name"/>
  </tree>
做为一个基础的xml结构是没有问题的,我先前创建的列表视图和表单视图,都可以这么写,但搜索视图这么写不行了,其实这个默认的是列表视图的结构
表单结构是
  <?xml version="1.0"?>
  <form string="My Form">
<field name="name"/>
  </form>
同样搜索视图就是
  <?xml version="1.0"?>
  <search string="My Search">
<field name="name"/>
  </search>



 

写道
上面是一个基本的最简单的创建一个功能的例子,该例子还可以有很多的扩展,只要你想,你就可以做得很强大.这里就不能一一去试了。
我现在需要去完成先前的任务,即我们输入型号,数量,供应商之后怎么去连接icgoo返回数据并显示...

猜你喜欢

转载自xiaolin0199.iteye.com/blog/2020826