Manuale Servoy per Principianti - Joinet

141 downloads 546 Views 877KB Size Report
nell'apprendimento di Servoy e voleste contribuire per i costi sostenuti, prego spedire il vostro contributo tramite PayPal a [email protected].
1

Manuale Servoy per Principianti di

Servoy Training & Consulting San Francisco, CA, USA Website: www.mcgilly.com E-mail: [email protected] v 1.1 Copyright 2006, All Rights Reserved

Questo manuale viene fornito gratuitamente. Se esso vi risultasse di aiuto nell’apprendimento di Servoy e voleste contribuire per i costi sostenuti, prego spedire il vostro contributo tramite PayPal a [email protected]. Gli aggiornamenti saranno effettuati regolarmente – controllate spesso!

Table of Contents Introduzione ................................................................................................................. Come Imparare Servoy .............................................................................................. Risorse Disponibili .................................................................................................... Suggerimento sul percorso da imparare ................................................................... Ottenere informazioni dal Forum di Servoy ............................................................ Devo conoscere l’ SQL per usare Servoy? .............................................................. La Architettura di Servoy ............................................................................................ Connessione al database SQL Anywhere ................................................................ SQL Anywhere ........................................................................................................ 15 Connessione al Repository ..................................................................................... 15 Problemi sulla Connessione a SQL Anywhere: ............................................... 17 Creazione e Connessione a un Nuovo Database ................................................... 19 Come posso guardare i dati ?......................................................................................

2 Dove sono memorizzati i miei schemi di database? In Servoy o DBMS? ............. Tabelle e Colonne ........................................................................................................ Sequenze ...................................................................................................................... Tutto ciò che Volete Conoscere sui Foundsets .......................................................... Che cos’è un foundset? ....................................................................................... Come funzionano i foundsets? ............................................................................ Come programmare la navigazione in un foundset ................................................... Funzioni Foundset e Funzioni Controller ................................................................ Looping Attraverso un Grande Foundset ................................................................... Come Aggiunte Modifiche & Cancellazioni influenzano i Foundsets ............... Contenitori: Vista di Variabili, Dataproviders, Calcoli e Elementi ...................... Dataproviders............................................................................................................... Come si assegnano i dataproviders nelle form & metodi ......................................... Assegnare un Dataproviders a i Records Correlati .................................................... Elementi ....................................................................................................................... Molti Controllers Meno Tempo .................................................................................. Oggetto Controller ....................................................................................................... Oggetto currentcontroller ............................................................................................ Controller Form ........................................................................................................... Come & Quando il Salvataggio ai Dati Modificati .................................................. Panoramica sui Salvataggi in Servoy ......................................................................... Uso del setFocusLostSaveEnabled(false) ............................................................... Uso di Transactions .................................................................................................... Cambiamenti in Servoy 3.x ....................................................................................... Convalida del Record Prima di Salvare .................................................................... Panoramica sulla Convalida Dati ............................................................................... Tre differenti approcci ................................................................................................ Funzione setFocusLostSaveEnabled() ....................................................................... Comportamento di Modifiche e Salvataggio Prima del 3.x ..................................... Verifica Univocità di un Record.................................................................................. Approccio #1 – scrivere generica funzione checkUniqueness() con SQL .......... Approccio #2 – uso di una relazione per test di uniqueness ................................ Approccio #3 – uso di foundset separato per ricercare matching record ........... Come Trovare le Date ................................................................................................ Panoramica sulle Date in Servoy................................................................................ La ricerca delle date per gli utenti.............................................................................. Programmare la ricerca delle date in un metodo .......................................................

3 Date con la componente tempo .................................................................................. Consiglio: Uso di campi DATE invece di campi DATETI ME................................ Spiegazione dei Tabpanels .......................................................................................... Panoramica sui Tabpanels .......................................................................................... Related Tabpanels ....................................................................................................... Relationless Tabpanels ................................................................................................ Tabless Tabpanels ....................................................................................................... Come si Programmano i Tabs .................................................................................... Aggiunta/cancellazione di form a/da un tabpanel esistente ...................................... Le Relazioni ................................................................................................................... Panoramica sulle Relazioni ....................................................................................... Chiavi Primarie & Chiavi Esterne ............................................................................ Origine & Destinazione: Un Modo di Pensare alle Relazioni in Servoy ............ Relazioni Uno-a-Molti ................................................................................................ Relazioni Molti-a-Uno ................................................................................................ Relazioni Molti-a-Molti .............................................................................................. Relazioni nominate da voi .......................................................................................... Relazioni Globali......................................................................................................... Relazioni Nidificate .................................................................................................... Lettura, aggiunta & cancellazione di record correlati ............................................... Riassumendo le Relazioni ........................................................................................... Opzioni di Relazione ................................................................................................... Consigli e Convenzioni sulla Programmazione ........................................................ Stabilire convenzioni sui nomi e attenersi ad esse .................................................... Cliccare non scrivere! ................................................................................................ Usare application.output() per vedere 'ciò che sta girando' ...................................... Dichiarazione di vars globali nella finestra dataproviders .................................... Usare Ctrl-spacebar per velocizzare la codifica ..................................................... Essere consapevoli del case-sensitivity ................................................................ Settaggio delle proprietà a tempo di esecuzione ....................................................... Usare calcoli non -memorizzati per checkboxes ........................................................ Contenitori che non persistono alla uscita da modalità run -time ...................... Fare spesso il Back up delle soluzioni ................................................................... Uso dell’help .............................................................................................................. Global find & replace per correggere dopo la rinomina di un oggetto ................ Tasti chiave per andare in Servoy Editor ................................................................

4

Non dimenticare il doppio == nel comando if! ...................................................... Selezionare righe di codice & formattarle tutte in un colpo ................................ In Editor non usare alcune keywords nei commenti (es.“function”) ................... I Colori a volte sono strani ........................................................................................ Debugger Consigli e Suggerimenti ............................................................................. Appendice ....................................................................................................................... Creazione di unaTabella con 500 record ...................................................................

Introduzione Servoy è un brillante ambiente di sviluppo che incrementa la produttività dello sviluppatore. Riunisce diversi e potenti standard tecnologici (Java, JavaScript, JDBC, RMI, Database SQL, browser, CSS, XML ecc.) così da rendere più elegante ed efficiente l’intero prodotto. Lo Sviluppatore con il prodotto Servoy viene arricchito delle sue prerogative. Il mio nome è Adrian McGilly e sono un consulente e istruttore di Servoy, e membro della Servoy Alliance Network (SAN). Ho una laurea in Scienza della Informatica e Matematica e ho imparato Servoy nel 2006 dopo una dec ina di applicazioni sviluppate, usando principalmente Omnis e i database SQL. Fornisco sviluppo di applicazioni in Servoy e training a ciascun cliente. Per informazioni circa corsi di addestramento imminenti e altri servizi per favore fare riferimento al mio website. I miei corsi di addestramento sono elencati anche sotto gli Eventi Servoy Website. Per l’esperienza che maturata, insegno l’ambiente Servoy ai nuovi sviluppatori e leggendo le domande che vengono poste quotidianamente sul Forum di Servoy, mi sono accorto che c'erano dei temi che la documentazione di Servoy esistente non spiegava in

5 modo esaustivo, e ho deciso di fare qualche cosa in merito. Questo manuale è una raccolta dei ‘come-si fà’ con lezioni e discussioni per gli sviluppatori che intendono imparare Servoy. Esso non sostituisce la documentazione Servoy ma la completa, è un aiuto in modo da ottenere una comprensione più rapida . Potete spedirmi email per qualsiasi argomento all’indirizzo [email protected] con domande, commenti, critic he o correzioni che riguardino qualsiasi aspetto del manuale. Tutto il contenuto menzionato in questo manuale risulta applicato a Servoy v. 2.2.5. I miei ringraziamenti vanno a John Allen, Marc Norman, Jan Aleman e Bob Cusick per tutti i contributi di idee, correzioni, incoraggiamenti offerti per la creazione di questo manuale. Un grande grazie a tutti gli utenti Servoy che con domande e risposte sul Forum di Servoy mi hanno aiutato a identificare i temi da includere in questo manuale. by Adrian McGilly , Servoy Consultant & Trainer Copyright 2006, All Rights Reserved [TOP]

6

Come Imparare Servoy by Adrian McGilly

Risorse Disponibili Ci sono molte risorse disponibili per conoscere e usare Servoy. Di seguito un elenco di tutto ciò che serve per questo: • Documentazione di Servoy, disponibile per downl oad gratis formato PDF da PDF Documentation page del sito web di Servoy o per acquisto in formato libro dal Servoy Store. Comprende: Servoy Developer User's Guide Servoy Developer Reference Guide Advanced Programming Guide for Filemaker Developers Servoy Server Administrator's Guide • Servoy Magazine, un periodico online conversazionale pieno di molti consigli, tecniche e come -fare. • Online Tutorials sul sito web Servoy •

Servoy Gallery – una sezione del sito web di Servoy che mostra schermate e spiegazioni su una dozzina le soluzioni Servoy già in produzione. Guardare a queste schermate è un modo valido per vedere le complete capacità GUI di Servoy.

• Demo solutions soluzioni demo che potete scaricare dal website di Servoy, da esplorare e usare come maschere di esempio per le vostre soluzioni. • Questo manuale (Servoy Beginner's Handbook di Adrian McGilly).

[TOP]

7

• The Servoy Forum – un gruppo di discussione online dove circa 1000 sviluppatori fanno domande, condividono e ottengono risposte. Il Personale degli sviluppatori di Servo y rispondono regolarmente alle domande su questo forum. • E per finire il più importante tool di apprendimento di tutti: Servoy stesso. Giocate. Pasticciate. Non dovete preoccuparvi–non vi morde. Il migliore modo per imparare è fare esperienza. Suggerimento sul percorso da imparare Questo è il mio suggerimento del percorso per conoscere Servoy. 1. Caricare l’ambiente Servoy e lanciarlo sul proprio computer usando il Sybase SQL Anywhere come database. Se avete problemi di connessione al database Sybase SQL Anywhere leggere la sezione sulla connessione al database. 2. Leggere la Developer User's Guide . È BENE saltare le parti che non si sentono molto attinent i alle proprie particolari necessità ma per voi sarebbe utile spendere del tempo per ogni sezione di questo libro in modo da capire le complete capacità di Servoy. Dovrete anche stare molto tempo sulle cose più difficili in Servoy. 3. Leggete la Developer Reference Guide , ma non cercate di capire tutto subito. Capirete col tempo. 4. Aprite la soluzione Demo svyCRM che è fornita insieme alla installazione Servoy e disponibile anche col download dalle Download Demo Solutions in Servoy Website. Guardate la soluzione, sia in esecuzione che in modalità di design. Guardate a come le form funzionano insieme. Guardate ai metodi presenti. Esplorate la finestra del dataproviders. Non dovete preoccuparvi di rovinare la soluzione demo – potrete in ogni momento reinstallarla .

8

5. Se non conoscete JavaScript, guardate il capitolo JavaScript Primer in Servoy Advanced Programming Guide for FileMaker Developers . Non avete bisogno di conoscere molto di JavaScript per cominciare in Servoy, bastano poche basi elementari - (grammatica, sintassi, dichiarazione di variabili & controllo del flusso). 6. Se non conoscete l’ SQL, date un’occhiata a SQL primer in Servoy Advanced Programming Guide for FileMaker Developers. Secondo la complessità del vostro progetto, potete anche non avere bisogno di usare SQL, ma è una buona cosa avere una comprensione di base e di come viene usato. 7. Evidentemente, se siete Sviluppatori di FileMaker, troverete che altre parti del Servoy Advanced Programming Guide for FileMaker Developers sono molto utili. 8. Probabilmente avete in mente un progetto che volete produrre con l’ausilio di Servoy. Dovete pensare di suddividerlo in parti semplici - per esempio, una form per poter registrare e scorrere i records del Cliente , e cominciate a costruirlo. Quando andrete a sbattere contro certi ostacoli, la speranza è quella di trovare risposta in questo manuale a molte delle vostre domande. Altrimenti, cercate in Servoy Magazine per vedere se qualche articolo è stato scritto sul tema, poi controllare anche il Forum di Servoy. La prossima sezione spiega come ottenere risposte dal Forum. 9. Per lo stesso motivo ricordate di dar e uno sguardo a Servoy Server Administrator's Guide. Potete capire Servoy se ne capite le capacità di a mministrazione di sistema. Ottenere informazioni dal Forum Servoy Probabilmente ogni domanda che un nuovo arrivato avesse quando comincia con Servoy la trova già nelle risposte sul Servoy Forum. Il trucco sta nel trovare il percorso che contiene domanda e risposta.

9

Otterrete ulteriore successo se trovate la risposta adatta per voi. Prendetevi un pò di tempo per capire il motore di ricerca del forum, come evidenziato sotto. La opzione “ricerca per tutti i termini” in particolare può aiutarVi a restringere la vostra ricerca.

Devo conoscere l’ SQL per usare Servoy? La risposta è ‘sì e no’. È utile sapere un poco di SQL, ma in molti casi non è necessario, e certamente non quando siete principianti. Servoy vi permette di interrogare il vostro db con l’ SQL invece di usare i comandi standard find()/search(). Si può passare una query SQL a una funzione con databaseManager.getDataSetByQuery() per recuperare righe (records) di un dataset. Quindi potete scorrerne i dati, stamparne i reports, caricare questi dati in un foundset e mostrarli su una form, esattamente come se aveste fatto una ricerca

10 con Find() /search(). Questa è una scelta conveniente per quelli che conoscono le query SQL, ma spesso potete ottenere le stesse cose anche senza. Ci sono cose che si possono fare in una query SQL e che invece non si possono fare usando i comandi find()/search(). Un esempio sono gli outer joins, usati per reporting (visualizzazioni e stampe) di tabelle correlate fra loro quando di ogni tabella possono essere omessi alcuni suoi records. L’SQL può anche essere utile per recuperare i risultati dal vostro db senza perdere il foundset, come dimostrato nella sezione verifica della univocità di un record prima di salvarlo. Con database complessi, consultare direttamente il database con l’SQL spesso migliorerà significativamente l e performance delle nostre queries. Potete anche usare il plugin del rawSQL per modificare i dati del vostro database coi comandi SQL update, insert e delete, ma solamente per utenti di Servoy competenti che li conoscono. Raramente è necessario fare questo.

by Adrian McGilly , Servoy Consultant & Trainer Copyright 2006, All Rights Reserved [TOP]

11

12

La Architettura di Servoy by Adrian McGilly

È importante capire l'architettura di Servoy. Segue una vista (fornitami da Servoy)

Le applicazioni scritte con Servoy sono chiamate soluzioni. La prima cosa da capire è che la vostra soluzione e i v ostri dati sono due cose separate (come lo debbono essere!). I dati risiedono in un (o più) database SQL gestito da un (o più) server di database. La vostra soluzione risiede in un database SQL chiam ato

[TOP]

13 Repository. Uno dei grandi meriti di Servoy è quello di gestire la memorizzazione della intera soluzione compreso le vostre GUI e tutta la codifica, in un database SQL standard, con JDBC conforme. Quando viene startato Servoy Developer, per default si aspetta di trovare un database server chiamato repository_server, e il relativo database chiamato servoy_repository. Qui è dove vengono immagazzinate le vostre soluzioni. Quando costruite una soluzione e fate modifiche ai disegni delle form e agli script (i metodi) che li sotten dono, Servoy in quel momento sta salvando il disegno della vostra form nel database servoy_repository. Quando lanciate una soluzione e aprite una nuova form, Servoy legge la form e tutti i metodi (legati alla form stessa) e tutti gli attributi direttamente dal servoy_repository. Al momento di popolare la form con i dati, Servoy legge i dati da qualsiasi database (o dai database) aziendale . I dati aziendali gestiti in una soluzione possono risiedere in più database e di più fornitori diversi. Mentre il repository è sempre contenuto in uno stesso database. La parte di Servoy con la quale gli utenti interagiscono direttamente è il Servoy Client, una applicazione Java che gira sul Java Virtual Machine disponibile gratis da Sun. La parte che gestisce tutto l’insieme è il Servoy Server che è scritto in Java e gira sul Tomcat application server. La applicazione server risiede tra le postazioni client di Servoy e i database(s), gestisce una varietà e un numero stupefacente di richieste dai Client di Servoy, e tutto mentre legge la intera soluzione e i dati del cliente dai database SQL. Il Java Client (a volte chiamato Smart Client-intelligente) è una applicazione Java che gira su Java Virtual Machine di ogni postazione client e fornisce agli utenti una “ricca esperienza UI”. Con la versione 3.x, Servoy presen ta un altro tipo di client - il Web Client. Con il Web Client gli utenti accedono alle soluzioni Servoy con un web browser. Il Servoy Server configura le forms usando

14 HTML, JavaScript, AJAX e gli altri protocolli browser standard, completi di bottoni, campi e liste popolate con dati, ecc. e li serve sul browser. Per alcune limitazioni tecnologiche dei browser, ci sono alcune caratteristiche UI che sono disponibili al Smart Client ma non disponibili al Web Client. Dedic herò una sezione al Web Client in una futura revisione di qu esto manuale. In aggiunta a queste componenti dell'architettura, i Java beans e i Servoy Plugins possono essere usati per estendere la funzionalità di Servoy. Queste componenti risiedono nelle cartelle sul Servoy Server (Non sulla postazione cliente) e vengono richiamati ogni qualvolta la soluzione li richiede. Le funzionalità di Servoy possono essere ulteriormente estese con le Elaborazioni Batch . Queste sono Soluzioni Servoy inserite in cartelle speciali sulla macchina server e la loro esecuzione può essere schedulata dalla Console Administration di Servoy Server. Quando usate l’ambiente di Sviluppo Servoy, è come se steste facendo girare una speciale postazione Client di Servoy su di una mini-versione di Servoy Server. In questo manuale viene usato il database Sybase ASA che viene fornito insieme a Servoy, ma la maggior parte del contenuto riferito al database si applica a tutti i database con driver JDBC-conforme di diversi fornitori. by Adrian McGilly , Servoy Consultant & Trainer Copyright 2006, All Rights Reserved [TOP]

15

Connessione al database SQL Anywhere by Adrian McGilly

SQL Anywhere SQL Anywhere è solo uno dei molti dbs al quale Servoy può connettersi, ma è l'unico che è fornito con l’ambiente Servoy, e che presumiamo di usare in questo manuale. SQL Anywhere ha diversi nomi. A volte viene chiamato ASA che sta per Adaptive Server Anywhere, e d è venduto da una filiale di Sybase chiamato iAnywhere. Prima di andare troppo avanti, voi dovreste scaricare una copia del tool di gestione del database, chiamato “SQL Anywhere Developer Edition” il cui componente principale è chiamato Sybase Central. Sybase Central vi permette di gestire i vostri schemi di database, (i tracciati di ogni tabella) con gli attributi di ogni colonna come NOT NULL, INDEXED and UNIQUE, scorrerne le righe (records) dei vostri dati, scriverne le query SQL, creare nuovi database, ecc. Per leggere su SQL Anywhere, visitare questo link: http://www.ianywhere.com/datasheets/sqla ny_9.html Per scaricare una copia gratuita di SQL Anywhere, visitare la pagina Download Sybase Central sul sito web di Servoy oppure andare a: http://www.ianywhere.com/downloads/ e cliccare su SQL Anywhere Developer Edition Connessione al Repository Per lanciare Servoy occorre essere abilitati alla connessione col database servoy_repository. Quando si apre Servoy, viene presentato un elenco di soluzioni nel repository e vi si chiede a quale volete collegarvi.

[TOP]

16

Quando scegliete una di quelle soluzioni, il sistema cercherà di connettersi al database repository che le contiene tutte, e se non può trovarlo, voi otterrete un errore. Ci sono alcuni dettagli da precisare affinchè Servoy si possa connettere con successo al database Anywhere . Generalmente, dopo avere installato Servoy voi dovreste connettervi senza problemi, ma in passato ci sono state installazioni con problemi, così qui di seguito vengono proposti alcuni consigli in merito . Quando viene lanciato, Servoy attiva il motore del database SQL Anywhere che è contenuto principalmente ne l file dbsvr9.exe (dbsrv9 su Mac) nella cartella Sybase_db. SQL Anywhere guarda poi nel file sybase.config un elenco di database che si aspetta di trovare e quindi tenta di aprire ogni database presente nell'elenco. IMPORTANTE: voi potete vedere se SQL Anywhere è in funzione quando la sua icona appare nella barra del desktop (su Windows) o Activity Monitor nella cartella di Applications/Utilities su Mac. Se SQL Anywhere non parte, Servoy attiverà il seguente messaggio “non ci si può connettere al repository server specificato nelle preferenze”. Ogni qualvolta ottenete quest o messaggio, uscite da Servoy, aprite il file sybase_log.txt nella cartella sybase_db e andare alla fine. Di solito vedrete a fine file un messaggio che vi spiega il motivo dell’errore , del tipo “non si può aprire/leggere il seguente file: database/mydatabase.db.” Nota: è OK quando nella cartella “database” vengono trovati i database specificati nel file sybase.config. Non è OK quando nella cartella “database” non ci sono i database specificati nel file sybase. L'altra parte che ha bisogno di essere messa a posto è il settaggio della connessione a ogni database che Servoy deve usare. Queste connessioni al database sono chiamate semplicemente “servers”, e sono elencate nel Menu Modifica>>Preferenze sul tab DB Servers . Per fare in modo che Servoy si connetta a un database occorre avere definito un server in questo elenco. Per dettagli sul come si

17 creano questi server database andare al Servoy Developer User’s Guide. Prestare attenzione al fatto che se adesempio il vostro database è crm.db, allora dovete inserire ‘crm’ (senza apici) come nome del database (non ‘crm.db’).

Problemi sulla connessione a SQL Anywhere: Corruzione o non sincronizzazione del .log e database Ciascun database ha un file .log con lo stesso nome (es. il file log di crm.db è il crm.log). Può accadere che il file di log non sia più sincronizzato con l'archivio del db. In questo caso, potete provare a cancellare l'archivio di log e SQL Anywhere ne creerà uno nuovo alla successiva prima apertura del database. Se non funziona, potete costringere Sybase a startare il database senza un archivio di .log usando la scelta '-f '. 1. In Windows, la procedura è: 2. Chiudere Servoy e chiudere ogni server Sybase. 3. Lanciare la applicazione dbsrv9.exe presente nella cartella Servoy\sybase_db 4. La applicazione vi permette di specificare i l nome database .db che dovete aprire, quindi inserite il carattere -f nel campo delle opzioni 5. Premete OK. Su Mac, la procedura è: Aprite una nuova finestra con /Applications/Terminal e inserire questi comandi (supponiamo che la vostra directory Servoy è localizzata in /Applications/Servoy):

18

cd /Applications/Servoy/database export DYLD_LIBRARY_PATH=/Applications/Servoy/syba se_db export PATH=$PATH:/Applications/Servoy/sybase_db dbsrv9 -f servoy_repository.db

Versioni Discordanti di SQL Anywhere Ho visto accadere un errore riportato nel file sybase_log.txt, qualcosa come “manca capacità 32 ” o “manca capacità 35”. Questo di solito ha a che fare con versioni discordanti tra il database e il motore del database SQL Anywhere . Ciò non dovrebbe mai accadere con una installazione nuova , ma può accadere più avanti quando per esempio aprite un db con Sybase Central usando una versione più recente d el motore database dbsrv9.exe di quello usato nelle cartelle di Servoy. Se accade questo, basta portare la applicazione (dbsrv9.exe ) di Sybase in quella presente nella cartella di Servoy e questo dovrebbe risolvere il disallineamento.

Firewalls I Firewalls possono interferire con Servoy nella connessione ai database SQL Anywhere. Se avete problemi di connessione, allora vi potrà essere di aiuto se potete chiudere il vostro firewall. Se state usando un firewall, cercate ne lla vostra configurazione del firewall tutte le regole che bloccano l’accesso al/dal dbsrv9.exe e rimuovete queste regole.

Corruzione del Database Se qualcuno dei dbs elencati in sybase.config si è corrotto vi

19 potrebbe causare problemi. voi potete tentare di correggere la corruzione del database lanciando l’applicazione dbsrv9.exe con il parametro –f e a “force” il database.

Aver bisogno di rilanciare SQL Anywhere e Servoy Se voi cambiate qualcosa in sybase.config, le modifiche avranno effetto solo la volta successiva che SQL Anywhere viene lanciato. Se SQL Anywhere sta già girando e voi aprite Servoy, i vostri cambiamenti a sybase.config saranno ignorati. Così dopo avere fatto i cambiamenti a questo archivio, assicuratevi di uscire da SQL Anywhere prima di lanciare Servoy. Per chiudere SQL Anywhere in Windows, dovete trovate la relativa icona nella barra in basso , poi click col tasto destro sull’icona e selezionate exit (o su Mac, scegliere ‘Quit’ dopo avere selezionato ‘dbsrv9 ' usando Activity Monitor?. Egualmente, se pensate di aver predisposto tutto bene ma Servoy si rifiuta ancora di connettersi, allora dovete sempre chiudere sia Servoy che SQL Anywhere, e poi rilanciare – Servoy usa un approccio tipo “caricamento pigro” al suo lancio e questo significa che alcuni cambiamenti non avranno effetto finché Servoy non viene rilanciato.

Creazione e Connessione a un Nuovo Database Quando Servoy si è connesso con successo a SQL Anywhere, voi vorrete creare una soluzione nuova e iniziare a giocarci. Che database usereste? Voi potete usare uno dei database di esempio esistenti che vengono installati insieme a Servoy (sono inclusi example_data.db, user_data.db, crm.db e udm.db) oppure potete creare un database nuovo. In questo momento non siete ancora in grado di creare un db nuovo

20 in Servoy. Per farlo avete bisogno delle seguenti cose: 1. Uscire da Servoy 2. Chiudere il server SQL Anywhere usato da Servoy. Per chiudere SQL Anywhere in Windows, potete trovate la sua icona nella barra sul desktop, fare un click e scegliere exit (o su Mac, scegliere ‘Quit’ dopo avere selezionato ‘dbsrv9 ' usando l’Activity Monitor?. 3. Aprire Sybase Central e crea re un nuovo db e salvarlo nella cartella servoy\database. I dettagli su questa operazione si trovano in Servoy Developer User’s Guide ma la cosa più importante è di NON connettersi al nuovo db creato finché non avete completato i passi seguenti. 4. Aggiungete il vostro database nuovo nel file sybase.config della cartella sybase_db della vostra directory Servoy. 5. Avviare Servoy. Se Servoy apre con successo SQL Anywhere e si connette al repository, allora vi verrà presentato un elenco di soluzioni disponibili. Uscite premendo Annull e andate alle Preferenze sul tab DB Servers per aggiungere la connessione al vostro nuovo database. Per default lo username e la password per il vostro nuovo database SQL Anywhere è: username=dba password=sql. Servoy vi salverà questa nuova connessione, solo se la connessione al server database avrà successo. Nell'elenco dei server di database in Preferences>>DB Servers, ci sarà un X rossa vicino a ogni server sul quale non è riuscita la connessione al database corrispondente .

21

Come posso guardare i dati? Potete usare Sybase Central per guardare gli schemi e i dati di ogni tatabella cliente. Quando vi connettete a un db con Sybase Central potete andare su ogni tabella dati, selezionate il tab ‘data’ e visualizzate le righe e le colonne dei vostri dati. Sappiate che se fate delle modifiche ai dati in ambiente Servoy, per poterli vedere in Sybase Central dovete fare un refresh oppure chiudere e riaprire . C'è anche un editor di Query SQL conversazionale in Sybase Central che vi può essere utile (sebbene non è difficile costruire un tool simile in Servoy - c'è n’è uno già costruito nella soluzione demo svyCRM, che si chiama AdHoc Query sotto il tab Admin). by Adrian McGilly , Servoy Consultant & Trainer Copyright 2006, All Rights Reserved [TOP]

22

Dove sono memorizzati i miei schemi di database? In Servoy o in DBMS? by Adrian McGilly

Tabelle e colonne Servoy permette di gestire alcune cose sul database all’interno del suo ambiente. Potete creare e cancellare ta belle di database, creare colonne, e le sequenze di tabella. Per qualsiasi altro tipo di modifiche allo schema (es. modificare l’attributo, rinominare o cancellare una colonna , rinominare una tabella ecc.) avrete assolutamente bisogno di usare Sybase Central. Quando una soluzione Servoy viene aperta, carica lo schema del db. Se voi andate in Sybase Central e modificate lo schema del db (es. aggiungete una colonna, cambiate gli attributi di una colonna, aggiungete una nuova tabella) vedrete i cambiamenti nella finestra del dataprovider di Servoy la volta successiva che avviate Servoy. (È meglio chiudere SQL Anywhere e rilanciare Servoy dopo avere fatto le modifiche, sebbene in alcuni casi non sia proprio necessario.) Voi dovete prestare attenzione quando fate questo, così come modificare qualsiasi indice assegnato alle tabelle e alle colonne. Alcuni esempi:

[TOP]

23 Modifiche al backend DB Effetti in Servoy Rinominare una colonna

Il nome nuovo apparirà nella finestra di Dataproviders la volta successiva che avviate Servoy ma il campo assegnato a quella colonna su qualsiasi form sarà mostrato vuoto–poichè contiene il vecchio nome–e tutti i metodi che usano quel vecchio nome causer anno un errore.

Cancellare una colonna

I cambiamenti appariranno nella finestra Dataproviders la volta successiva che avviate Servoy; qualsiasi campo assegnato alla colonna cancellata sarà mostrato vuoto; i metodi che usano quella colonna causeranno un errore.

Modificare attributi di colonne

I cambiamenti saranno riflessi nella finestra Dataproviders alla successiva apertura di Servoy; invece il funzionamento dei campi che mostrano quella colonna e dei metodi che usano quella colonna può essere possibile ma ciò dipende dal tipo di modifiche apportate.

Cancellare o rinominare una tabella

Se cancellate o rinominate una tabella che è usata in una soluzione, otterrete un errore , sia allo startup della vostra soluzione che anche la prima volta che la soluzione usa la tabella.

24

Notare che c'è un comando global find & replace in Servoy Editor che vi permette di fare cambiamenti globali ai vostri metodi JavaScript. Non ci sono però comandi find/replace che agiscono sui settaggi nel pannello delle proprietà. Sequenze Voi potete definire le sequenze in Servoy. Un inserimento di sequenza, chiamato “Servoy Sequence” permette a Servoy di gestire la generazione di una sequenza numerica (diversa dalla “sequenza database” dove si desidera generare una sequenza numerica sul database server). Nel caso di Sequenze Servoy, le informazioni vengono memorizzate SU ciascuna sequenza (come “entità da incrementare” che calcola il successivo numero di sequenza) nel repository, ma i numeri di sequenza stessi rimangono nel database.

by Adrian McGilly , Servoy Consultant & Trainer Copyright 2006, All Rights Reserved [TOP]

25

Tutto ciò che Volete Conoscere sui Foundsets by Adrian McGilly

Che cos’è un foundset? Ogni volta che una soluzione Servoy richiede dati dal database, viene creato un Foundset contenente i risultati da una query. Più tardi vedremo il dettaglio di come e dove questo viene fatto, ma per ora pensate solo a l Foundset come a un insieme di records recuperati dal db, e che la soluzione può ‘usare’. Quando i records dati sono contenut i in un foundset, Servoy offre molti modi facili per visualizzarli, ordinarli, editarli, cancellarli, stamparli e genericamente elaborarli. In altre parole, i Foundsets vi sono amici. Quando create una form in Servoy, le indicate su quale db essa deve essere collegata. Questo settaggio è inserito nella proprietà tableName della form e può essere visto nel pannello delle proprietà quando vengono visualizzate le proprietà per quella form. Questo non significa che siete limitati a lavora re solo con le colonne di quella tabella sulla form, ma serve solo come spunto iniziale. (Come vedrete, user emo degli altri ingegnosi strumenti Servoy come le Relazioni e i Tabpanels per acquisire i dati da altre tabelle, ma lo vedremo più tardi.) Per default (predefinizione), le form che sono collegate sulla stessa tabella condivideranno anche lo stesso foundset. Due form collegate alla stessa tabella mostreranno per default gli stessi records quando vengono aperte, e inoltre lo stesso esatto record sarà il record “selezionato” o il record “corrente” in entrambe le form. In caso di bisogno, sarete contenti di sapere che esiste una proprietà su ogni form chiamata “Use Separate Foundset’ che, se posta a true, permette a ciascuna form di avere il proprio foundset. (Notare che questa caratteristica non funziona quando una form viene pubblicata nel web client prima del 3.x)

[TOP]

26

È utile sapere che quando la vostra soluzione aggiunge, modifica e cancella delle righe, queste operazioni riguardano sia il vostro foundset di lavoro che il db finale. Così se voi siete su una form con 100 records nel suo foundset corrente e aggiungete cinque records a quella form, il vostro foundset contiene ora 105 records. Se voi aveste cancellato 5 records invece di averli aggiunti, il vostro foundset conterrebbe 95 records. Un modo valido per vedere come i Foundsets si comportano è usare come esperimento una tabella con almeno 500 records di dati. Sfortunatamente, i dati di esempio coi quali viene installato Servoy non contiene molt i records nelle varie tabelle . Voi potete riempire rapidamente una tabella con Servoy. Basta creare una form, collegarla al metodo seguente e poi lanciare il metodo stesso: for (var i = 1; i >Variable dell'oggetto albero in Servoy Editor, ecc.). Voi assegnate una var globale mettendo 'globals.' dav anti al

41 suo nome, come: globals.lastName = 'Smith';

Le vars globali non persistono quando uscite dall'ambiente di run-time. Se voi con ctrl-L uscite dall'ambiente di run -time mentre state scrivendo e testando in debug un metodo, sappiate che il valore di queste variabili viene convertito in zero o null, (ciò dipende dal tipo di variabile). Potete assegnare un valore di default a una var globale nella finestra del dataproviders, nello stesso luogo dove la create.

Come si assegnano i dataproviders nelle fo rm & metodi Prendiamoci un pò di tempo per spiegare come assegnare un campo ai dataproviders nelle form e nei metodi. Per assegnarlo a una colonna di database così: database_table_name.column_name

ma Servoy mi ha assegnato la colonna anche in questi modi: forms.form_name.column_name

e forms.form_name.relation_name.column_name

e la mia immediata reazione er a di dire 'Ma la colonna fà parte di una tabella, non di una form! Come f à a sapere quale è la tabella da assegnare? La risposta è che una form è sempr e collegata ad una tabella, così voi la state assegnando implicitamente alla tabella. Inoltre, quando voi dite forms.customerForm.last_name

voi state infatti assegnando la colonna last_name del record attualmente selezionato sulla form customerForm. Così p er esempio se voi voleste settare la colonna last_name a ' Smith ' dovreste fare:

42

forms.customerForm.last_name = 'Smith'

e se voleste inserire il valore della colonna last_name nella var globale dovreste fare: globals.cust_last_name = forms.customerForm. last_name

Gli esempi sopra stanno usando il prefisso “forms.customerForm” davanti al last_name. Se il metodo che contiene il codice appartiene alla form customerForm, allora potreste omettere il prefisso “forms.customerForm” e funzionerebbe bene lo stess o. In altre parole, voi dovreste invece fare così: last_name = 'Smith' globals.cust_last_name = last_name

Dovete applicare le stesse regole di si ntassi quando volete assegnare calcoli o aggregazioni. Assegnare un Dataproviders a i Records Correlati

Panoramica Ora guardiamo a come usare le relazioni per assegnare un record correlato dataprovider a un campo della form . Ogni form è collegata a una tabella. Anche ogni relazione è collegata ad una tabella se pensate alla tabe lla sul lato sinistro della definizione della relazione come sua 'tabella base '. Per esempio noi possiamo pensare a una relazione customers_to_orders come ' basata sulla' tabella dei clienti. Le sole eccezioni sono le relazioni globali che sono ‘basate’ a una var globale piuttosto che a una tabella. Lasciamo stare questa parte per il momento. Se create diverse relazioni basate sulla tabella customer, come customers_to_orders, customers_to_salresreps, customers_to_contacts, ecc. queste potrebbero essere tutt e visualizzate (ad es. sotto un tab relazioni) in qualsiasi delle

43 form collegate alla tabella customer (vedi sotto).

Voi potete usare queste relazioni per assegnare un dataprovider di tabella correlata (es. una colonna della tabella sulla parte destra della relazione) con relation_name.dataprovider_name

Relazioni Molti-a-Uno Se la relazione è molti-a-uno (come customers_to_salesreps la quale per ogni record di un gruppo di clienti assegna un unico record salresrep) allora per fare quest o: forms.customerForm.customers_to_salesreps.last_n ame

State dicendo il ‘cognome’ selezionato sulla customerForm che appartiene alla tabella ‘settori clienti’ correlata alla tabella ‘clienti’.

44

Come con i dataproviders non correlati , la espressione forms.customerForm.è necessaria solo se siete in un metodo che non appartiene al customerForm. Così se voi volete mettere il cognome (presente nei reparti vendite) sul form customerForm, dovrete creare un campo e specificar gli come dataprovider: customers_to_sa lesreps.last_name

anche quando siete in metodi all’interno della customerForm.

Relazioni Uno-a-Molti Se la relazione è uno -a-molti (come customers_to_orders che collega un cliente al gruppo di ordini di quel cliente) allora potreste voler usare la relazione insieme a un related tabpanel o a un portale. Potete saltare a la sezione sui tabpanels per vedere come le relazioni uno -a-molti sono usate con i tabpanels, perché l'argomento di cui sotto non è previsto. Lo sto includendo solo per completezza. Quando voi dite: forms.customerForm.customers_to_orders.order_dat e

state dicendo 'la data dell'ordine dal gruppo di ordini del cliente attualmente selezionato sulla form custo merForm.' Questa espressione viene usata normalmente nel vostro codice, ma non la vedrete usata come dataprovider di un campo su una form. Lasciate che vi spieghi. Se voi mettete un campo sulla form customerForm il cui dataprovider è: customers_to_orders.order_date

mostrerà davvero la data del l 'ordine attualmente selezionato per il cliente attualmente selezionato', ma cosa intende per

45 'ordine attualmente selezionato'? Se voi non state mostrando l'elenco degli ordini collegati, l' ut ente non ha il contesto per sapere quali ordini sono in selezione. Per default, è sempre l'ordine con la chiave primaria minore fra gli ordini collegati a quel cliente, ma manca il contesto dal quale il vostro utente lo può vedere. Per poter selezionare il secondo ordine del gruppo di ordini collegati voi potete caricare questo comando in un metodo: customers_to_orders.setSelectedIndex(2);

e appena fatto questo, il campo order_date del secondo ordine correlato al cliente (in ordine di chiave primaria) dov rà apparire sulla form. Sebbene vi siano situazioni dove questa potrebbe essere l'interfaccia desiderata, è più comune usare una relazione 'uno-a-molti' per mostrare le informazioni di tutti i records legati a un parent, oppure mostrare le informazioni co rrelate ai tabpanels (o ai portali).

Uso di Dataproviders correlati in TabPanels Ora immaginate di volere mostrare il contenuto d el campo order_date di ogni ordine collegato a un cliente. Dovreste creare un tabpanel correlato sul form customerForm collegato alla relazione customers_to_orders. Nel tabpanel voi inserite una form collegata agli Ordini, e su quella form mettete un campo 'order_date' come suo dataprovider. Questo comanda a Servoy di mostrare nel tabpanel tutti i records degli Ordini collegati al cliente corrente, e specificamente mostra re la colonna order_date di ogni record. Notate che non dovete inserire il seguente comando customers_to_orders.order_date

Invece, la relazione customers_to_orders è già sp ecificata nella definizione del tabpanel, e Servoy la usa per la ricerca al

46 momento del caricamento del tabpanel con i records Ordini . Per dettagli sulla creazione dei tabpanels vedere qui.

Uso di Dataproviders correlati nei Metodi Ora scriviamo un metodo con un loop per leggere il contenuto di order_date in ogni ordine collegato al cliente selezionato, per poter ottenere la data più vecchia. (Naturalmente potreste fare questo senza scrivere alcun codice usando una aggregazione correlata, che per il momento ignoriamo.) In quel contesto voi dovreste scrivere customers_to_orders.order_date

Di seguito spieghiamo come dovrebbe essere il metodo. In questo codice di esempio presum iamo che il metodo appartenga alla customerForm, e così possiamo omettere 'forms.customerForm.'. Presum iamo anche di aver verificato prima di chiamarlo, che è presente almeno un record ordine riferito al cliente corrente ( col controllo che customers_to_orders. getSize() sia maggiore di zero): var most_recent = new Date(); /* questa var locale dovrà contenere la data più_recente. Inizializzata alla corrente datetime. */ for (var n = 1; n > Editor. Vedrete il companiesForm già selezionato nell'oggetto albero, e nel pannello sotto l'albero un piccolo tasto verde per la creazione di un nuovo metodo (vede re sotto). Cliccare sul tasto per creare un nuovo metodo.

120

9.

Chiamare il metodo 'create500', e inserire il seguente codice nel pannello di edit dei metodi: for (var i = 1; i