Struttura di OpenERP

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.

[[http://doc.openerp.com/v6.0/book/]]

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 Servizi Web

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.

XML-RPC con Python

Creare un record

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)

Cercare un record

args = [('vat', '=', 'ZZZZZZ')] # query
ids = sock.execute(dbname, uid, pwd, 'res.partner', 'search', args)

Leggere dati

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

Aggiornare dati

values = {'vat': 'ZZ1ZZZ'} # dati da aggiornare
result = sock.execute(dbname, uid, pwd, 'res.partner', 'write', ids, values)

Cancellare record

# ids : list of id
result = sock.execute(dbname, uid, pwd, 'res.partner', 'unlink', ids)
area_tecnica/sviluppo_e_tools/struttura_client_server.txt · Ultima modifica: 2011/07/23 13:42 da nebix
Torna su
GNU Free Documentation License 1.3
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0