GenroPy, un framework innovativo per applicazioni web AJAX
1. Un progetto in
GenroPy
Framework tutto italiano
per applicazioni web e AJAX
sabato 29 maggio 2010
2. Un progetto in
GenroPy
Framework tutto italiano
per applicazioni web e AJAX
stionali
ge
sabato 29 maggio 2010
3. Roberto Lupi
@robertolupi
• 10 anni di esperienza web
• enterprise e intranet
• Clienti: Amadori, Merloni, 21 banche
• Italia e India
• oggi: direttore tecnico di MedMedia
software per la sanità
• http://www.medmediagroup.it/
sabato 29 maggio 2010
5. X
M
L
O Web AJAX
Base /
dati
R Business logic
M PDF
J
S
O
N
!
Object-relational
!
domain objects / GUI
RDBMS
impedance mismatch domain objects
impedance mismatch
vs. objects vs. GUI
sabato 29 maggio 2010
24. valori ed attributi
simile a XML
gerarchica ed ordinata
Bags
sabato 29 maggio 2010
25. valori ed attributi
simile a XML
gerarchica ed ordinata
Bags
observer pattern
dinamica
lazy loading
sabato 29 maggio 2010
26. valori ed attributi
simile a XML
gerarchica ed ordinata
Bags
observer pattern
web services database dinamica
versatile lazy loading
files XML directory trees
sabato 29 maggio 2010
27. domain specific
valori ed attributi base dati languages
simile a XML universale
gerarchica ed ordinata interfaccia utente
Bags
observer pattern
web services database dinamica
versatile lazy loading
files XML directory trees
sabato 29 maggio 2010
28. X
M
L
O Business Web AJAX
Base /
dati
R Bags
M Logic PDF
J
S
O
N
sabato 29 maggio 2010
61. GUI comune form richiesta
formato dati PDF
fascicolo.py
m4.py (mixin)
(webpage)
azioni pre / post
communicazione
con PDF
elementi GUI
Componenti
condivisi nelle forms
sabato 29 maggio 2010
62. Tabella “documento”
class Table(object):
def config_db(self, pkg):
tbl = pkg.table('documento', pkey='id',name_long='!!Documento',
name_plural='!!Documenti', rowcaption="$descrizione")
self.sysAndComuneIdFields(tbl)
tbl.column('fascicolo',name_long='!!Fascicolo')
tbl.column('modello',name_long='!!Modello')
tbl.column('data','D',name_long='!!Data del documento')
tbl.column('ts_richiesta','DH',name_long='!!Data e ora')
tbl.column('dati_richiesta','X',group='_',name_long='!!Dati richiesta',
_sendback=True)
tbl.column('dati_pdf','X',group='_',name_long='!!Dati del documento PDF')
tbl.column('descrizione',name_long='!!Descrizione')
tbl.column('user_id',size='22',group='_', _sendback=True).relation
('adm.user.id',mode='foreignkey',onDelete='cascade',deferred=True, one_one=True)
sabato 29 maggio 2010
63. Tabella “documento”
class Table(object):
def config_db(self, pkg):
tbl = pkg.table('documento', pkey='id',name_long='!!Documento',
name_plural='!!Documenti', rowcaption="$descrizione")
self.sysAndComuneIdFields(tbl)
tbl.column('fascicolo',name_long='!!Fascicolo')
tbl.column('modello',name_long='!!Modello')
tbl.column('data','D',name_long='!!Data del documento')
tbl.column('ts_richiesta','DH',name_long='!!Data e ora')
tbl.column('dati_richiesta','X',group='_',name_long='!!Dati richiesta',
_sendback=True)
tbl.column('dati_pdf','X',group='_',name_long='!!Dati del documento PDF')
tbl.column('descrizione',name_long='!!Descrizione')
tbl.column('user_id',size='22',group='_', _sendback=True).relation
('adm.user.id',mode='foreignkey',onDelete='cascade',deferred=True, one_one=True)
sabato 29 maggio 2010
64. Tabella “documento”
class Table(object):
def config_db(self, pkg):
tbl = pkg.table('documento', pkey='id',name_long='!!Documento',
name_plural='!!Documenti', rowcaption="$descrizione")
self.sysAndComuneIdFields(tbl)
tbl.column('fascicolo',name_long='!!Fascicolo')
tbl.column('modello',name_long='!!Modello')
tbl.column('data','D',name_long='!!Data del documento')
tbl.column('ts_richiesta','DH',name_long='!!Data e ora')
tbl.column('dati_richiesta','X',group='_',name_long='!!Dati richiesta',
_sendback=True)
tbl.column('dati_pdf','X',group='_',name_long='!!Dati del documento PDF')
tbl.column('descrizione',name_long='!!Descrizione')
tbl.column('user_id',size='22',group='_', _sendback=True).relation
('adm.user.id',mode='foreignkey',onDelete='cascade',deferred=True, one_one=True)
sabato 29 maggio 2010