42
Sviluppare moduli per il client web abstract per OpenERP day IT 2013 [email protected] /

Sviluppare moduli per il client web

Embed Size (px)

DESCRIPTION

by Simone Orsi

Citation preview

Page 1: Sviluppare moduli per il client web

Sviluppare moduli per il client web

abstract per OpenERP day IT [email protected] /

Page 2: Sviluppare moduli per il client web

Chi sono

Simone Orsi

Web developer

@ Abstract

Plone contributor

OpenERP contributor

Autore di:report_openoffice / Aerooweb_export_view...

Page 3: Sviluppare moduli per il client web

CHE COSA È UN MODULO?

Page 4: Sviluppare moduli per il client web

Cosa é un modulo?In OpenERP é una cartella con dentro dei file specifici:

○ __init__.py○ __openerp__.py○ file python (optional)○ file xml, csv, etc (optional)

Nel mondo Python si chiamano “pacchetti” (package) o EGGs, ma sono strutturati diversamente: sono installabili, hanno una versione, etc.

Page 5: Sviluppare moduli per il client web

Cosa é un modulo “web”?Sempre una cartella con dentro gli stessi file,, più qualche altro:

○ __init__.py○ __openerp__.py○ file Python (optional)○ file XML, CSV, etc (optional)

○ file Javascript (optional)○ file CSS (optional)○ file QWEB (xml) (optional)

Page 6: Sviluppare moduli per il client web

Parametri del modulo web● js: lista di path a risorse statiche javascript

Es: [ 'static/src/js/lib.js', ]

● css: lista di path a risorse statiche CSS

Es: [ 'static/src/css/color.css', ]

● qweb : lista di path a risorse statiche di tipo XML

Es: ['static/src/xml/lib.xml']

● web_preload: booleano che dichiara che il modulo

deve essere caricato all’avvio del server

ATTUALMENTE NON UTILIZZATO, PARE :S

NOTA: per la 6.1 questo parametro non esiste, bisogna

lanciare openerp con “--load=web,nome_modulo”

Page 7: Sviluppare moduli per il client web

COME INIZIARE?

Page 8: Sviluppare moduli per il client web

A manoProcedura tipica:

1. troviamo un modulo esistente

2. facciamo copia/incolla (o “cp -r” ;))

3. eliminiamo le cose che non ci servono

4. aggiungiamo le cose che ci servono

5. facciamo un bel find/replace

RISULTATO:

● tempo perso

● possibilitá di errore piú alta

● ritorno al tempo della pietra :)

Page 9: Sviluppare moduli per il client web

Bootstrap automaticonon sarebbe bello poter generare, con un

semplice comando, lo scheletro di un modulo a

partire da un template prestabilito?

La risposta é:

openerp_bootstrap

questo si… un modulo Python :)

Page 10: Sviluppare moduli per il client web

OPENERP_BOOTSTRAP

Page 11: Sviluppare moduli per il client web

Installazionehttps://pypi.python.org/pypi/openerp_bootstrap/

> pip install openerp_bootstrap

Una volta installato, avrete a disposizione un nuovo comando: paster e dei template relativi ad openerp.

Paster deriva da Paste, un pacchetto python che consente di generare, per l’appunto, scheletri di progetti. Per elencare i template:

> paster create --list-templates

Page 12: Sviluppare moduli per il client web

I template: creare modulo standard

Questo comando crea uno scheletro per un

modulo standard. Attualmente questo include

semplicemente un file __init__.py e un

__openerp__.py contenente i parametri inseriti in

fase di creazione.

> paster create -t openerp_newmodule

Page 13: Sviluppare moduli per il client web

I template: creare modulo web

Questo comando crea uno scheletro per un

modulo web. Vediamo meglio cosa succede…

> paster create -t openerp_webmodule

Page 14: Sviluppare moduli per il client web

metadati

opzioni web

Page 15: Sviluppare moduli per il client web

Struttura

Contenuto JS

__openerp__.py

Il nostro nuovo modulo

Page 16: Sviluppare moduli per il client web

IL CLIENT WEB,QUESTO SCONOSCIUTO

Page 17: Sviluppare moduli per il client web

Client web: come funziona?Il client web é dviso sostanzialmente in due parti: client e

server :)

“Lato client” é scritto in javascript.

Tutto ció che é “visibile” é sostanzialmente:

● un “widget”, un oggetto che estende

instance.web.Widget (tipo la sidebar)

Ad ogni widget é associato un template.

● una “view”, un oggetto che estende

instance.web.View (list, tree, form, search, etc)

Page 18: Sviluppare moduli per il client web

Client web: come funziona?

● widget e view interagiscono col server

tramite chiamate AJAX

● “lato server” i controllers si occupano

di restituire i dati a tali chiamate

Page 19: Sviluppare moduli per il client web

PERSONALIZZARE I TEMPLATE

Page 20: Sviluppare moduli per il client web

Come sono fatti i template?

I template del client web sono un

misto di:

HTML

<div class=”foo”>...</div>

e

QWEB

<t t-name="Login">

Page 21: Sviluppare moduli per il client web

ASPETTA... QWEB???

Page 22: Sviluppare moduli per il client web

Che cosa è QWEB?È il sistema di templating del client web.

É un sistema molto modulare che consente di estendere template esistenti (interamente o in parte) e include anche l’internazionalizzazione.

Non ha applicazione al di fuori di OpenERP quindi non ha una community di supporto e non esiste una documentazione esaustiva (nel trunk sta cambiando).

L’autore é Antony Lesuisse (OpenERP CTO).

****

Page 23: Sviluppare moduli per il client web

Esempio template QWEB: login form

Page 24: Sviluppare moduli per il client web

PERSONALIZZARE TEMPLATE 2

Page 25: Sviluppare moduli per il client web

Come trovare il template?I template base di OpenERP stanno nel modulo

web “web” :)

Per la precisione li trovate nel seguente path:

web/addons/web/static/src/xml/base.xml

Purtroppo (o per fortuna) stanno tutti nello

stesso file :S

TIP: usate firebug (o altro inspector del browser) per trovare un

riferimento univoco nell’html e poi cercate dentro base.xml

Page 26: Sviluppare moduli per il client web

Come sovrascrivere un template?Esempio dal modulo web_nocreatedb:

web_nocreatedb/static/src/xml/web_nocreatedb.xml

T-EXTENDseleziona il template da estendere

T-JQUERYselettore jquery per

selezionare uno specifico elemento (!!!)

T-OPERATIONoperazione da effetturare sull’elemento selezionato

OPZIONIbeforeafter

appendreplace

Page 27: Sviluppare moduli per il client web

PERSONALIZZARE IL JAVASCRIPT

Page 28: Sviluppare moduli per il client web

Trovare quello che ci serve● documentazione1 migliorata molto ma

ancora incompleta

● nessuna lista di widget

● o di composizione delle viste

TIP: usate firebug (o altro inspector del browser) per trovare un riferimento univoco nell’html, cercate il template contenente il riferimento, infine cercate nel JS il widget che richiama quel template.

1 https://doc.openerp.com/trunk/web/

Page 29: Sviluppare moduli per il client web

Estendere viste o widgetEsempio dal modulo web_export_view:

web_export_view/static/js/web_advanced_export.js

Page 30: Sviluppare moduli per il client web

Estendere viste o widget 2Esempio dal modulo web_export_view:

web_export_view/static/xml/web_advanced_export.xml

Page 31: Sviluppare moduli per il client web

Creare viste o widget (trunk docs)

Page 32: Sviluppare moduli per il client web

INTERAZIONECON IL SERVER

Page 33: Sviluppare moduli per il client web

ControllersLa parte “lato server” del client web é gestita da

controllers.

I controllers non sono altro che dei metodi

Python che vengono “esposti” tramite una route

(o path).

Una route non é altro che un modo per definire

un URL, banalmente:

www.server.com/path/to/something

Page 34: Sviluppare moduli per il client web

Creare nuovi controllersEsempio dal modulo web_export_view:

web_export_view/controllers.py

Page 35: Sviluppare moduli per il client web

Creare nuovi controllers (trunk docs)

Page 36: Sviluppare moduli per il client web

Creare nuovi controllersEsempio dal modulo web_export_view:

web_export_view/static/js/web_advanced_export.js

Page 37: Sviluppare moduli per il client web

SUGGERIMENTI

Page 38: Sviluppare moduli per il client web

Tips● greppare greppare greppare

● guardare cosa fanno gli altri

● cercare su stackoverflow

○ “How to start developing in web addons”

http://stackoverflow.com/a/11950556

● cercare su OpenERP help

○ http://help.openerp.com/questions/

● usare FireBug (o simili)

Page 39: Sviluppare moduli per il client web

RIFERIMENTI

Page 40: Sviluppare moduli per il client web

Qualche link utile

● http://pypi.python.org/pypi/openerp_bootstrap/

● https://github.com/simahawk/openerp_bootstrap

● https://code.launchpad.net/~webaddons-core-

editors/web-addons/

● https://doc.openerp.com/

Page 41: Sviluppare moduli per il client web

DOMANDE?