La struttura del sistema si suddivide fondamentalmente in due processi che interaqgiscono: server e client. Questi due processi comunicano tra di loro tramite dei protocolli.
In rari casi i processi server e client si svolgono sulla stessa macchina fisica. La maggior parte delle volte i due processi hanno luogo in macchine separate e addirittura non appartenenti alla stessa sotto rete. In questi casi i protocolli di comunicazione permettono di attraversare indenni la rete globale internet mettendo in comunicazione i due processi.
L'immagine seguente, tratta dalla documentazione ufficiale di Openerp 6.0, permette di visualizzare la struttura complessiva del sistema stesso e le relazioni di interconnessione.
La logica di funzionamento di OpenERP è piuttosto semplice ed è incentrata tutta sul server.
Il client non capisce cosa pubblica e quindi perfino azioni come quella di cliccare sull'icona di stampa devono essere inoltrate a al server per essere interpretate e re-inviate al client per essere eseguite.
XML-RPC è un servizio web che consiste in un set di strumenti per collegare diverse infrastrutture utilizzando il web come livello di trasporto. L'XML descrive le Remote Procedure Calls (RPC); il tutto è trasmesso tramite HyperText Transfer Protocol (HTTP).
RPC permette di definite le interfacce (semplici funzioni o librerie) che possono essere richiamate sul network. XML-RPC mette in comunicazione programmi scritti in linguaggi diversi (Python, Java, Perl, PHP, C, C++, Ruby, Microsoft’s .NET e molti altri) che girano su sistemi operativi diversi (Unix, Linux, Windows and the Macintosh).
Con questo metodo, ad esempio,un'applicazione in Java colloquia con un programma scritto in Perl, il quale dialoga con un'altro in Python, e così via.
XML-RPC gestisce la comunicazione tra il processo chiamante (client) e quello che risponde (server).
Il server risponde ad un indirizzo URL definito (ad esempio http://localhost:8080/rpcserv/ o esterno http://bla.bla.bla:8080/rpcserv/).
Per altri approfondimenti ed esempi di applicazioni con vari linguaggi si rimanda alla guida ufficiale.
import xmlrpclib
username = 'admin' # utente
pwd = 'admin' # password
dbname = 'miodb' # database
# Ottieni 'uid
sock_common = xmlrpclib.ServerProxy ('http://localhost:8069/xmlrpc/common')
uid = sock_common.login(dbname, username, pwd)
# Mettere l'indirizzo corretto del server
sock = xmlrpclib.ServerProxy('http://localhost:8069/xmlrpc/object')
partner = {
'name': 'Mario Tony',
'lang': 'it_IT',
}
partner_id = sock.execute(dbname, uid, pwd, 'res.partner', 'create', partner)
address = {
'partner_id': partner_id,
'type' : 'default',
'street': 'via Humphrey Bogart',
'zip': 'xxx',
'city': 'Estate a Mare',
'phone': '+39043200000',
'fax': '+39043200000',
}
address_id = sock.execute(dbname, uid, pwd, 'res.partner.address', 'create', address)
args = [('vat', '=', 'ZZZZZZ')] # query
ids = sock.execute(dbname, uid, pwd, 'res.partner', 'search', args)
fields = ['name', 'active', 'vat', 'ref'] # campo da leggere data = sock.execute(dbname, uid, pwd, 'res.partner', 'read', ids, fields) #ids is a list of id
values = {'vat': 'ZZ1ZZZ'} # dati da aggiornare
result = sock.execute(dbname, uid, pwd, 'res.partner', 'write', ids, values)
# ids : list of id result = sock.execute(dbname, uid, pwd, 'res.partner', 'unlink', ids)