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

OpenERP 的XML-RPC的轻度体验+many2many,one2many,many2one创建方式,布布扣,bubuko.com

时间: 2024-10-11 09:30:38

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

什么是XML RPC?

# -*- coding: cp936 -*- #python 27 #xiaodeng #什么是XML RPC? #中文叫:远程过程调用 #使用http协议做传输协议的rpc机制,使用xml文本的方式传输命令和数据 #一个rpc系统必然包含2个部分: #1.rpc client:用来向rpc server调用方法,并接收方法的返回数据 #2.rpc server:用于响应rpc client的请求,执行方法,并回送方法的执行结果. #工作原理 #1.rpc client的工作原理是rpc cl

The type javax.xml.rpc.ServiceException cannot be resolved.It is indirectly

The type javax.xml.rpc.ServiceException cannot be resolved.It is indirectly 博客分类: 解决方案_Java 问题描述:The type javax.xml.rpc.ServiceException cannot be resolved.It is indirectly…… 还加了一个错误提示:the hierarchy of the type is inconsistent 原因:缺少jaxrpc.jar包 解决方案:导

XML Web Service初体验: HTTP-GET, HTTP-POST and SOAP的比较

.在ASP.NET 中,XML Web Service支持三种协议来与用户交流数据.这三种协议分别是: 1. SOAP:Simple Object Access Protocol 2.  HTTP-GET 3.   HTTP-POST 1.首先我们先来理解一下这三者的大概定义. 在这三种协议中,SOAP是XML Web Service最常用到的连接协议.与HTTP相比,SOAP显的更为复杂,但却拥有更强的接受能力.SOAP是一种以XML为基础的协议,它提供一种将数据打包(Packaging)和 

Windows 10 轻度体验

注册了好久都没发过文,今天先拿Win10水一下吧~~先上图再说~ 首先声明本人非Windows党,各种Linux发行版也略折腾过一些.现在来说Windows 10(名字我就不吐槽了~~),笔记本安装是默认传统桌面的,反正我的没有Metro界面的,图标略有修改,驱动全部都驱动上了,虽然有些什么虚拟桌面功能在Linux下早已经有了,但在Windows下有个这个功能还是不错的(这样领导来了连任务栏的游戏运行图标都看不到^_^),整体赶脚还是不错的,可能心理作用吧,也许过了这几天新鲜劲儿也就那么回事儿了

二、React初体验之React组件创建

(中间因为应付各种考试,处理其他事情,隔了好时间没更新,现在终于有时间了,续上!) 本文为React初始体验,因此先不考虑文件如何组织,尽量以最简单的方式让大家了解React其中的原理. 在创建组件(component)之前,大家首先需要了解一些基础知识.有ES6.JSX语法等基础知识的同学请跳过下面一段. ES6是JavaScript的最新标准,里面新增了许多语法方式,甚至出现了“类”的继承方式,我个人暂且把他们理解为新增了许多“语法糖”,这些“语法糖”可能带给老手的是方便,而对于我们这些菜鸟

android解析XML总结-SAX、Pull、Dom三种方式

在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX.Pull.Dom解析方式.最近做了一个android版的CSDN阅读器,用到了其中的两种(sax,pull),今天对android解析xml的这三种方式进行一次总结. xml示例(channels.xml)如下: <?xml version="1.0" encoding="utf-8"?> <channel> <item id="0&q

FusionChart图表控件 点击事件(XML和JSON作为数据源时的分别处理方式)

1.JSON作为数据源时: @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>InChart</title> <script src="~/Scripts/jquery-1.8.2.min.js"&g

xml文件保存与读取(最基础的方式)

一.从xml文件读取数据到Winform: 1.调用 using System.Xml; 2.XmlDocument xmlDoc = new XmlDocument(); 3.xmlDoc.Load(Application.StartupPath + "\\ParaConfig.xml"); 4.XmlElement xmlRoot = xmlDoc.DocumentElement;5.XmlNode login = xmlRoot.ChildNodes[0];6. this.txb

Ubuntu下Django初体验(二)——创建工程及应用

一.工程目录详解 创建工程后得到如下目录: 1. manage.py 管理项目.创建数据库.启动服务器等.测试等. 查看子命令: python manage.py 启动服务器: python manage.py runserver 指定启动服务器的地址和端口: python manage.py runserver 0.0.0.0 8080 2. mysite 目录 2.1 settings.py  对于整个网站的配置.配置文件:应用.中间件.数据库.静态目录各类配置... 2.2 urls.py