Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

Php xmlrpc 接口调用实例(商品数据获取)



  • 这两天用OE做后台. 前台用 php 来做WEB 页面的一段小代码
    [code]
    // xmlrpc class
    $rootPath = ".";
    include($rootPath.'/lib/xmlrpc.inc');
    $GLOBALS['xmlrpc_internalencoding']='UTF-8'; // 这里就是解决商品名称中有中文时的乱码问题.

    // 检索参数  大家可以跳过这段代码.
    	$kw = isset($_GET['kw'])?str_replace('\','',trim($_GET['kw'])):"";
    	$kw = json_decode($kw,true);
    	$kw = is_array($kw)?$kw:array();
    
    	$filterArray = array();
    	$confRel = "OR";
    	if(count($kw)>0){
    		foreach($kw as $k=>$v){
    			switch($k){
    				case	"id":
    					$k = ($k=='id')?'id':$k;
    					if(is_array($v) && count($v)>0){
    						for($i=0;$i<count($v);$i++){
    							$filterArray[] = new xmlrpcval(intval($v[$i]), 'int');
    						}
    					}
    				break;
    				case	"confRel"	:
    					$confRel = $v;
    				break;
    			}
    		}
    
    	}
    
    // OpenERP server 配置
    	$cfgXmlrpc = array(
    		'host'=>'localhost',
    		'port'=>'8069',
    		'db'=>'testdb',				// 帐套
    		'user'=>'admin',			// 用户
    		'uid'=>'1',					// 用户ID
    		'pass'=>'admin',				// 用户密码
    	);
    
    // 要获取的字段
    	$fieldArray = array(
    		new xmlrpcval('name', 'string'),	
    		new xmlrpcval('price', 'string'),	
    		new xmlrpcval('default_code', 'string'),
    		new xmlrpcval('variants', 'string'),
    	);
    
    // xmlrpc 实例
    	$client = new xmlrpc_client("{$cfgXmlrpc['host']}:{$cfgXmlrpc['port']}/xmlrpc/object");
    
    	$msg = new xmlrpcmsg('execute');
    	$msg->addParam(new xmlrpcval("{$cfgXmlrpc['db']}", "string"));
    	$msg->addParam(new xmlrpcval("{$cfgXmlrpc['uid']}", "int"));
    	$msg->addParam(new xmlrpcval("{$cfgXmlrpc['pass']}", "string"));
    	$msg->addParam(new xmlrpcval("product.product", "string"));
    	$msg->addParam(new xmlrpcval("read", "string"));
    	$msg->addParam(new xmlrpcval($filterArray, "array"));
    	$msg->addParam(new xmlrpcval($fieldArray, "array"));
    
    // 调用 xmlrpc 接口
    	$resp = $client->send($msg);
    
    // 处理 xmlrpc 返回
    	$retArray = $resp->value()->scalarval();
    
    	$outArray = array();
    	foreach($retArray as $k=>$v){
    		//$outArray[] = intval($v->me['int']);
    		$tmpName = $v->me['struct']['name'];
    		$tmpName = $tmpName->me['string'];
    
    		$tmpPrice = $v->me['struct']['price'];
    		$tmpPrice = floatval($tmpPrice->me['string']);
    
    		$tmpCode = $v->me['struct']['default_code'];
    		$tmpCode = $tmpCode->me['string'];
    
    		$tmpVars = $v->me['struct']['variants'];
    		$tmpVars = $tmpVars->me['string'];
    		$outArray[] = array(
    			'name'=>$tmpName,
    			'price'=>$tmpPrice,
    			'code'=>trim($tmpCode),
    			'vars'=>trim($tmpVars),
    		);
    	}
    
    // $outArray 就是需要的数据了
    

    [/code]

    呵呵.OpenERP 有一个很好的框架以及 很方便的 xmlrpc 接口.在这上面可以很方便地同其它应用程序进行数据交换.

    .... 每次都要重新整理一下代码.

    [[i] 本帖最后由 mrshelly 于 2010-2-5 13:47 编辑 [/i]]



  • 这两天用OE做后台. 前台用 php 来做WEB 页面的一段小代码
    [code]
    // xmlrpc class
    $rootPath = ".";
    include($rootPath.'/lib/xmlrpc.inc');
    $GLOBALS['xmlrpc_internalencoding']='UTF-8'; // 这里就是解决商品名称中有中文时的乱码问题.

    // 检索参数  大家可以跳过这段代码.
    	$kw = isset($_GET['kw'])?str_replace('\','',trim($_GET['kw'])):"";
    	$kw = json_decode($kw,true);
    	$kw = is_array($kw)?$kw:array();
    
    	$filterArray = array();
    	$confRel = "OR";
    	if(count($kw)>0){
    		foreach($kw as $k=>$v){
    			switch($k){
    				case	"id":
    					$k = ($k=='id')?'id':$k;
    					if(is_array($v) && count($v)>0){
    						for($i=0;$i<count($v);$i++){
    							$filterArray[] = new xmlrpcval(intval($v[$i]), 'int');
    						}
    					}
    				break;
    				case	"confRel"	:
    					$confRel = $v;
    				break;
    			}
    		}
    
    	}
    
    // OpenERP server 配置
    	$cfgXmlrpc = array(
    		'host'=>'localhost',
    		'port'=>'8069',
    		'db'=>'testdb',				// 帐套
    		'user'=>'admin',			// 用户
    		'uid'=>'1',					// 用户ID
    		'pass'=>'admin',				// 用户密码
    	);
    
    // 要获取的字段
    	$fieldArray = array(
    		new xmlrpcval('name', 'string'),	
    		new xmlrpcval('price', 'string'),	
    		new xmlrpcval('default_code', 'string'),
    		new xmlrpcval('variants', 'string'),
    	);
    
    // xmlrpc 实例
    	$client = new xmlrpc_client("{$cfgXmlrpc['host']}:{$cfgXmlrpc['port']}/xmlrpc/object");
    
    	$msg = new xmlrpcmsg('execute');
    	$msg->addParam(new xmlrpcval("{$cfgXmlrpc['db']}", "string"));
    	$msg->addParam(new xmlrpcval("{$cfgXmlrpc['uid']}", "int"));
    	$msg->addParam(new xmlrpcval("{$cfgXmlrpc['pass']}", "string"));
    	$msg->addParam(new xmlrpcval("product.product", "string"));
    	$msg->addParam(new xmlrpcval("read", "string"));
    	$msg->addParam(new xmlrpcval($filterArray, "array"));
    	$msg->addParam(new xmlrpcval($fieldArray, "array"));
    
    // 调用 xmlrpc 接口
    	$resp = $client->send($msg);
    
    // 处理 xmlrpc 返回
    	$retArray = $resp->value()->scalarval();
    
    	$outArray = array();
    	foreach($retArray as $k=>$v){
    		//$outArray[] = intval($v->me['int']);
    		$tmpName = $v->me['struct']['name'];
    		$tmpName = $tmpName->me['string'];
    
    		$tmpPrice = $v->me['struct']['price'];
    		$tmpPrice = floatval($tmpPrice->me['string']);
    
    		$tmpCode = $v->me['struct']['default_code'];
    		$tmpCode = $tmpCode->me['string'];
    
    		$tmpVars = $v->me['struct']['variants'];
    		$tmpVars = $tmpVars->me['string'];
    		$outArray[] = array(
    			'name'=>$tmpName,
    			'price'=>$tmpPrice,
    			'code'=>trim($tmpCode),
    			'vars'=>trim($tmpVars),
    		);
    	}
    
    // $outArray 就是需要的数据了
    

    [/code]

    呵呵.OpenERP 有一个很好的框架以及 很方便的 xmlrpc 接口.在这上面可以很方便地同其它应用程序进行数据交换.

    .... 每次都要重新整理一下代码.

    [[i] 本帖最后由 mrshelly 于 2010-2-5 13:47 编辑 [/i]]


  • 管理员

    顶下,:lol XML-RPC接口可以和多种语言相连



  • 学习,谢分享!PHP相对熟一些!



  • 要是有excel VBA 版的就好了,直接指定对象填充sheet


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待