OpenERP 的XML-RPC的轻度体验+many2many,one2many,many2one创建方式
  yfmiXREyFUsm 2023年11月02日 35 0


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删除原来的记录。










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



Hifly

2 yearss ago



这么好的文档,今天才看到! 感谢Joshua !

(Reply)





【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
yfmiXREyFUsm