OpenERP 的XML-RPC的轻度体验+many2many,one2many,many2one创建方式

每当夏秋之交,我们都有展会,展会完后,都有很多的新的潜在客户要添加,我们收了一大堆名片,想入openERP还是需要一定时间的,而且名片的图片导入没有什么简洁的方法,所以我就想写个script来进行导入这些名片以及相关的客户信息。

XML-RPC是一个远程过程调用(remote procedure call,RPC)的分布式计算协议,通过XML将调用函数封装,并使用HTTP协议作为传送机制。

需求是这样的,想通过一个script来将一个excel表格的partner连同他们的联系人一起导入

# -*- encoding: utf-8 -*-
 
import xmlrpclib
import xlrd
import base64
 
DB = ´TESTDB´ #帐套名
USERNAME = ´admin´ #用户名
USERPASS = ´ 1 ´ #密码
 
IMAGELOCATION = ´E:\IMG´ #图片的根目录地址
#读取excel文件
fname = "E:TEST.xls" #excel表格地址
bk = xlrd.open_workbook(fname)
#按名字取sheet
sh = bk.sheet_by_name("JOSHUA")
#登陆取uid
sock_common = xmlrpclib.ServerProxy (´http: / / localhost: 8069 / xmlrpc / common´)
uid = sock_common.login(DB, USERNAME, USERPASS)
sock = xmlrpclib.ServerProxy(´http: / / % s: % s / xmlrpc / object ´ % (´localhost´, 8069 ))
 
for i in range ( 1 ,sh.nrows):
     row_data = sh.row_values(i)
     #通过国家名找到国家的id
     country_id = sock.execute(DB, uid, USERPASS, ´res.country´,´search´,[(´name´,´ = ´,row_data[ 8 ])])
     value = {
              ´name´:row_data[ 0 ], #第一格是partner名字,下如此类推
              ´lang´:row_data[ 1 ],
              ´address´:[( 0 , 0 ,{´title´:row_data[ 2 ],
                               ´name´:row_data[ 3 ],
                               ´email´:row_data[ 4 ],
                               ´phone´:row_data[ 5 ],
                               ´mobile´:row_data[ 6 ],
                               ´street´:row_data[ 7 ],
                               ´country_id´:country_id[ 0 ],
                               ´city´:row_data[ 9 ],
                               ´ zip ´:row_data[ 10 ],
                               })],
 
               }
     if row_data[ 11 ]:
         #在openerp里面图片是以二进制来存档,所以要用base64转换,row_data[11]是图片的文件名。
         value[´logo´] = base64.encodestring( open (IMAGELOCATION + row_data[ 11 ], ´rb´).read())
     print value
     ids = sock.execute(DB, uid, USERPASS, ´res.partner´,´create´,value)
     print ids
sock.execute(DB, uid, USERPASS, ´res.partner´,´create´,value)

这句是向res.partner执行create的方法,value就是对应的参数

因为partner 和address的关系是one2many,在OpenERP的ORM里面可以直接添加,修改这些one2many,many2many和many2one的值有一个特殊的格式。

many2many

(0,0,{values}) 根据values里面的信息新建一个记录。

(1,ID,{values})更新id=ID的记录(写入values里面的数据)

(2,ID) 删除id=ID的数据(调用unlink方法,删除数据以及整个主从数据链接关系)

(3,ID) 切断主从数据的链接关系但是不删除这个数据

(4,ID) 为id=ID的数据添加主从链接关系。

(5) 删除所有的从数据的链接关系就是向所有的从数据调用(3,ID)

(6,0,[IDs]) 用IDs里面的记录替换原来的记录(就是先执行(5)再执行循环IDs执行(4,ID))

例子[(6, 0, [8, 5, 6, 4])] 设置 many2many to ids [8, 5, 6, 4]

one2many

(0, 0,{ values })根据values里面的信息新建一个记录。

(1,ID,{values}) 更新id=ID的记录(对id=ID的执行write 写入values里面的数据)

(2,ID) 删除id=ID的数据(调用unlink方法,删除数据以及整个主从数据链接关系)

例子:

[(0,0,{'field_name':field_value_record1,...}),(0,0,{'field_name':field_value_record})]

many2one的字段比较简单,直接填入已经存在的数据的id或者填入False删除原来的记录。

转载于:https://www.cnblogs.com/jacker1979/p/3867794.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值