zoukankan      html  css  js  c++  java
  • 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删除原来的记录。

  • 相关阅读:
    Java for LeetCode 229 Majority Element II
    Java for LeetCode 228 Summary Ranges
    Java for LeetCode 227 Basic Calculator II
    Java for LintCode 颜色分类
    Java for LintCode 链表插入排序
    Java for LintCode 颠倒整数
    Java for LintCode 验证二叉查找树
    Java for LeetCode 226 Invert Binary Tree
    Java for LeetCode 225 Implement Stack using Queues
    Java for LeetCode 224 Basic Calculator
  • 原文地址:https://www.cnblogs.com/jacker1979/p/3867794.html
Copyright © 2011-2022 走看看