odoo/addons/plugin_outlook/static/openerp-outlook-plugin/OpenERPClient/OpenERPConnect.cs

398 lines
10 KiB
C#

/*
OpenERP, Open Source Business Applications
Copyright (c) 2011 OpenERP S.A. <http://openerp.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
using System;
using System.Windows.Forms;
using System.Collections;
using CookComputing.XmlRpc;
namespace OpenERPClient
{
public class ServiceUrl : System.Attribute
{
string _url;
public ServiceUrl(string url)
{
/*
It will contain the ServiceUrl.
:param url : url with server and port.
*/
this._url = url;
}
public string Url
{
/*
It will get and return the Url for the connection.
:return : String
*/
get
{
return _url;
}
}
public override string ToString()
{
/*
It will override the Tostring and return the _url.
*/
return this._url;
}
}
public enum OpenERPService
{
[ServiceUrl("/xmlrpc/object")]
Object = 1,
[ServiceUrl("/xmlrpc/db")]
DB = 2,
[ServiceUrl("/xmlrpc/common")]
Common = 3
}
public class OpenERPConnect
{
int uid;
string url;
string dbname;
string login;
string pwd;
bool chkpwd;
string password;
public string URL
{
/*
It will get and set the value of the url.
:return : String
*/
get
{
return url;
}
set
{
url = value;
}
}
public string DBName
{
/*
It will get and set the value of the Database Name.
:return : String
*/
get
{
return dbname;
}
set
{
dbname = value;
}
}
public string UserId
{
/*
It will get and set the value of the UserId.
:return : String
*/
get
{
return login;
}
set
{
login = value;
}
}
public string pswrd
{
/*
It will get and set the value of the Password.
:return : String
*/
get
{
return password;
}
set
{
password = value;
}
}
public bool rempwd
{
/*
It will get and set the value of the Remember Password.
:return : True or False
*/
get
{
return chkpwd;
}
set
{
chkpwd = value;
}
}
public string version;
XMLRPCClient rpcclient;
public void Open(Enum service)
{
/*
It opens the connetion by the url and service url.
:param service : enum service.
*/
string url = null;
Type type = service.GetType();
ServiceUrl[] _urls =
type.GetField(service.ToString()).GetCustomAttributes(typeof(ServiceUrl),
false) as ServiceUrl[];
if (_urls.Length > 0)
{
url = _urls[0].Url;
}
this.Open(url);
}
void Open(string service_url)
{
/*
It opens rpcclient by service url.
:param service_url : service url
*/
this.rpcclient = new XMLRPCClient(this.url + service_url);
}
void Close()
{
/*
It closes rpcclient.
*/
this.rpcclient = null;
}
public OpenERPConnect()
{
}
public OpenERPConnect(string url)
{
/*
It will contain the url wit the server and port.
:param url : url with the server and port.
*/
this.url = url;
}
public OpenERPConnect(string url, string dbname, string login, string pwd)
{
/*
It will do the connection with OpenERP server.
:param url : url with the server and port.
:param dbname : the list of database.
:param login : user name.
:param pwd : password.
*/
this.url = url;
this.dbname = dbname;
this.login = login;
this.pwd = pwd;
this.version = ServerVersion();
}
public Boolean isLoggedIn
{
/*
It will check whether successfully login to OpenERP is done or not.
:return : True or False.
*/
get
{
if (this.uid > 0) { return true; }
return false;
}
}
public int Login(string dbname, string userid, string pwd)
{
/*
It will check whether the entered dbname, userid and password are correct or not
and on that basis it will allow the user for connecting to OpenERP.
:param dbname : list of database
:param userid : userid
:param pwd : password of the user
:return : Integer
*/
this.Open(OpenERPClient.OpenERPService.Common);
object isLogin = this.rpcclient.Login(dbname, userid, pwd);
this.uid = 0;
if (Convert.ToBoolean(isLogin))
{
this.uid = Convert.ToInt32(isLogin);
}
this.pwd = pwd;
if (this.uid <= 0)
{
MessageBox.Show("Authentication Error!\nBad username and password.", Form.ActiveForm.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
this.Close();
return this.uid;
}
XmlRpcStruct ConvertAs(Hashtable value)
{
/*
It will convert the Hashtable into XmlRpcStruct and vise-versa.
:param value : Hasheable value.
:retutn : Hashtable values and vise versa the XmlRpcStruct value.
*/
XmlRpcStruct new_value;
new_value = new XmlRpcStruct();
foreach (string key in value.Keys)
{
object res;
if (value[key] == null)
{
res = "";
}
if (value[key].GetType() == typeof(Hashtable))
{
res = this.ConvertAs((Hashtable)value[key]);
}
else
{
res = value[key];
}
new_value.Add(key, res);
}
return new_value;
}
object[] ConvertArgs(object[] args)
{
/*
It will convert the arguments which are of type Hashtable into new arguments.
:param args : Objet value of arguments
:return : Object value of arguments.
*/
for (int i = 0; i < args.Length; i++)
{
object arg = args[i];
XmlRpcStruct new_arg;
if (arg.GetType() == typeof(Hashtable))
{
new_arg = this.ConvertAs((Hashtable)arg);
args[i] = new_arg;
}
}
return args;
}
public object Execute(string model, string method, params object[] args)
{
/*
It executes the model name, the method name and also the list of arrays arguments.
:param model : model name.
:param method : method name.
:params args : list of arrays of arguments.
:return : Object
*/
args = this.ConvertArgs(args);
this.Open(OpenERPClient.OpenERPService.Object);
object res = this.rpcclient.Execute(this.dbname, this.uid, this.pwd, model, method, args);
this.Close();
return res;
}
public object[] DBList()
{
/*
It will return the list of the database which will be created.
:return : Database List
*/
this.Open(OpenERPClient.OpenERPService.DB);
object[] res = this.rpcclient.DBList();
this.Close();
return res;
}
public string ServerVersion()
{
/*
It will give the version of the server which the user is using.
:return : String
*/
this.Open(OpenERPClient.OpenERPService.DB);
string version = this.rpcclient.ServerVersion();
this.Close();
return version;
}
public bool check_connectivity()
{
/*
It will check connection on given server url.
:return : True or False.
*/
this.Open(OpenERPClient.OpenERPService.Common);
bool flag = this.rpcclient.check_connectivity();
this.Close();
return flag;
}
}
}