Il dbquery e' una applicazione scritta in Perl per
interfacciare i database di tipo Microsoft Access a un qualunque internet
browser. Tramite il perl script dbquery.pl, opportunamente
installato nella directory degli eseguibili 'cgi-bin' sul nodo che mantiene
i database, gli utenti della rete possono fare interrogazioni e/o richieste
di aggiornamento ai database.
Per l'uso consultare il manuale per l'utente
Per installare il dbquery.pl fare riferimento alle seguenti
istruzioni:
1.a) Hardware:
La prima riga deve contenere il path dell'eseguibile perl; tipicamente:
#!c:/perl/bin/perl.exe
#
........................
Le variabili (case sensitive) sono da definire secondo la sintassi di
perl e sono qui sotto elencate con il corrispondente significato:
Variabile | Significato |
$domain | Dominio della rete (scritto col punto iniziale) a cui appartiene il Database Server (ovvero il server su cui viene eseguito lo script dbquery.pl) |
$DBServer | Nome del nodo (inclusivo di dominio) del Database Server |
$CGIfile | E' il path della URL del CGI file (senza il nome del nodo) |
$DB_batch_edit_dir | Directory dei file temporanei.
In questa directory vengono temporaneamente conservate le richieste di aggiornamento al database fatte dagli utenti tramite browser su Allowed Hosts (vedi paragrafo 4) |
$DB_log_file | Path e nome del log file |
$User_Help_Link | URL dell'help file per gli utenti dbquery_user_help.html |
$SMTP_SERVER | Nome del nodo (inclusivo del dominio) che gestisce la posta con protocollo
SMTP
per il dominio
(tipicamente un relay basato su BSD sendmail) |
$DSN_List | Nome del database che contiene la lista dei database con le politiche di accesso; tipicamente DBlist (vedi paragrafo 4) |
$Table_List | Nome della tabella che contiene la lista dei database con le politiche di accesso; tipicamente Tablelist (vedi paragrafo 4) |
$DefaultDSN | Database di preferenza (quello che viene aperto per default tra quelli della lista in tabella) |
$DefaultTable | Tabella di preferenza (quella che viene aperta per default tra quelle della lista in tabella) |
$DBmanagers | Lista degli indirizzi e-mail dei root DB managers. Sono gli indirizzi e-mail a cui arrivano le notifiche di richieste di aggiornamento al database da parte degli utenti tramite gli Allowed Hosts(1) |
$Root_Host_List | Lista dei nodi che possono eseguire ogni operazione sul database piu' il batch edit (operazione che aggiorna il database secondo le richieste sottomesse dagli utenti tramite gli Allowed Hosts)(1) |
$Trusted_Host_List | Lista dei nodi che possono eseguire ogni operazione sul database (interrogazione e aggiornamento), batch edit escluso(1) |
$Allowed_Host_List | Lista dei nodi che possono eseguire interrogazioni al database e sottomettere le richieste di aggiornamento ai Trusted Hosts(1) |
$Readonly_Host_List | Lista dei nodi che possono eseguire soltanto interrogazioni al database(1) |
$Denied_Host_List | Lista dei nodi che non hanno alcun accesso al database(1) |
$SUPPRESS_WARNING | Se diverso da 0 (zero) sopprime i messaggi di errore dovuti alla mancata creazione e corretta personalizzazione delle tabelle aggiuntive dei database (vedi paragrafo 5) |
$LOGLEVEL | Livello di verbosita' del log nel log file specificato tramite la variabile
$DB_log_file:
0 = non effettua nessun log 1 = effettua il log solo degli aggiornamenti al database 2 = effettua il log degli aggiornamenti e delle interrogazioni al database |
Esempio di personalizzazione del file dbquery.pl :
#=====================================================================
#
$domain = '.lnf.infn.it';
$DBServer = 'dbserv.lnf.infn.it';
$CGIfile = '/cgi-bin/dbquery.pl';
$DB_batch_edit_dir = '/databases/tmp/';
$DB_log_file = '/databases/log/dbquery.log';
$User_Help_Link = "http://$DBServer/dbquery_user_help.html";
$SMTP_SERVER = 'mailsrv.lnf.infn.it';
$DSN_List = "DBlist";
$Table_List = "Tablelist";
$DefaultDSN = "Agenda";
$DefaultTable = "PhoneBook";
$DBmanagers = 'DBManager@lnf.infn.it, Massimo.Pistoni@lnf.infn.it';
$Root_Host_List = 'pcianni,pcpistoni';
$Trusted_Host_List = 'pcangius,pcdebiase,macmartini';
$Allowed_Host_List = '*.lnf.infn.it';
$Readonly_Host_List = '';
$Denied_Host_List = '';
$SUPPRESS_WARNING = 0;
$LOGLEVEL = 2; # 0, 1 o 2 (0 = no log, 1 = update log, 2 = query
and update log)
#
#=====================================================================
.................
http://<$DBServer>/<$CGIfile>
ad esempio:
http://dbserv.lnf.infn.it/cgi-bin/dbquery.pl
oppure, per interfacciare un database specifico:
http://dbserv.lnf.infn.it/cgi-bin/dbquery.pl?DSN=agenda&Table=PhoneBook
Field Name | Data Type | Field Size | Significato |
DSN | Text | >=50 | Nome del system database |
Table | Text | >=50 | Nome della tabella del system database |
Show | Text | >=3 | Flag che indica se il database deve essere mostrato in tabella (indicare Y oppure YES) |
Mail Addresses | Text | >=250 | Lista degli e-mail address dei DB managers di questa tabella. Sono gli indirizzi e-mail a cui arrivano le notifiche di richieste di aggiornamento alla Table di questo database da parte degli utenti tramite gli Allowed Hosts |
Root Hosts | Text | >=250 | Lista dei Root Hosts per questa tabella. Lista dei nodi che possono eseguire ogni operazione sulla Table di questo database compreso il batch edit (operazione che aggiorna il database secondo le richieste sottomesse dagli utenti tramite gli Allowed Hosts) |
Trusted Hosts | Text | >=250 | Lista dei Trusted Hosts per questa tabella. Lista dei nodi che possono eseguire ogni operazione sulla Table di questo database (interrogazione e aggiornamento), batch edit escluso. |
Allowed Hosts | Text | >=250 | Lista degli Allowed Hosts per questa tabella. Lista dei nodi che possono eseguire interrogazioni alla Table di questo database e sottomettere le richieste di aggiornamento ai Trusted Hosts |
Readonly Hosts | Text | >=250 | Lista dei Readonly hosts per questa tabella. Lista dei nodi che possono eseguire soltanto interrogazioni alla Table di questo database |
Denied Hosts | Text | >=250 | Lista dei Denied Hosts per questa tabella. Lista dei nodi che non hanno alcun accesso alla Table di questo database (Per default, in mancanza di parametri, e' vietato qualunque tipo di accesso) |
Puo' essere conveniente aggiungere altri campi (non obbligatori) alla
tabella Tablelist (quali id, creation,
update,
requester,
modifier e anche altri, i cui significati saranno descritti
nel paragrafo 5.e.
Per ogni tabella di database da interfacciare al web aggiungere un
record nella tabella Tablelist cosi' costruita; ad esempio,
per una rubrica telefonica:
Field Name | Field Value |
DSN | Agenda |
Table | Rubrica |
Show | Y |
Mail Addresses | Rosa.Ianni@lnf.infn.it,Massimo.Pistoni@lnf.infn.it |
Root Hosts | pcianni, pcpistoni |
Trusted Hosts | pccalcolo, maccalcolo |
Allowed Hosts | *.lnf.infn.it |
Readonly Hosts | *.infn.it,*.garr.it |
Denied Hosts | wwwcache.garr.it |
Nel caso dell'esempio, la tabella Rubrica:
Databases | DB 1 | DB 2 | DB ... | DB n | |||
---|---|---|---|---|---|---|---|
Tables | Table 1 | Table 2 a | Table 2... | Table 2 m | Table ... | Table n a | Table n b |
nella quale, ad ogni record nella Tablelist del database DBlist, corrisponde un link ad una tabella di un database interfacciato al web (a condizione che sia impostata la flag corrispondente Show = Y).
5.a) Personalizzazione delle tabelle <Tablename> interne al DSN:
Puo' risultare molto utile anche definire altri quattro campi di testo che individuano chi ha effettuato modifiche ai record della tabella e anche in quale data e ora le modifiche sono avvenute (tipicamente nominati: Creazione, Aggiornamento, Richiedente, Operatore). Questi campi potranno essere usati dallo script dbquery.pl per mostrare rispettivamente: la data e l'ora di creazione del record, la data e l'ora dell'ultimo aggiornamento, chi ha effettuato l'ultima richiesta di aggiornamento e chi ha effettuato l'aggiornamento stesso. E' consigliabile quindi modificare il disegno della tabella tramite Microsoft Access in modo da aggiungere tali campi, a meno che la tabella non sia gia' dotata di campi di testo aventi le stesse funzioni elencate.
Questa tabella deve essere costruita con due campi (quindi su due colonne): Key e order
Key e' la colonna dei nomi dei campi nella <Tablename>
per
i quali ha senso effettuare una ricerca.
order e' l'ordinamento con cui tali campi compariranno
nel menu' a tendina del dbquery.pl (i valori minori sono
prioritari e il primo della lista e' il vaolre preselezionato)
Esempio di tabella <Tablename>_Keys:
Key | Order |
Cognome | 1 |
Nome | 2 |
Telefono | 3 |
Id | 4 |
In mancanza della tabella <Tablename>_Keys tutti i campi della tabella del database <Tablename> saranno mostrati nel menu' a tendina.
Quest'ultima tabella deve essere costruita con tre campi (quindi su tre colonne): Format, Format Table Name e order
Format e' la colonna dei nomi dei formati di visualizzazione
che compariranno nel menu' a tendina del dbquery.pl
Format Table Name e' la tabella di riferimento per il
formato di visualizzazione corrispondente
order e' l'ordinamento con cui i nomi dei formati compariranno
nel menu' a tendina del dbquery.pl (i valori minori sono
prioritari e il primo della lista e' il vaolre preselezionato)
Esempio di tabella <Tablename>_Formats:
Format | Format Table Name | order |
Brief | <Tablename>_Format_Brief | 2 |
Medium | <Tablename>_Format_Medium | 1 |
Full | <Tablename>_Format_Full | 3 |
Per ciascun record della tabella precedente <Tablename>_Formats, sempre nello stesso database che contiene la <Tablename>, occorre creare una opportuna tabella che descrive il formato di visualizzazione (tabella di formato specifico) , il cui nome e' indicato in seconda colonna (ad esempio <Tablename>_Format_Full).
Le tabelle di formato possono essere costruite con un numero a piacere di campi; il numero dei campi determina su quante colonne verranno visualizzati i record del database: Col 1, Col2, ..., Col n
In ogni record di queste tabelle andranno indicati gli n campi da visualizzare usando un indice numerico. Ciascun valore inserito corrisponderanno al numero del campo nella tabella <Tablename>. MS Access numera i campi in modo crescente nel disegno delle tabelle, quindi per individuare il numero del campo che si vuole visualizzare ad una determinata coordinata (riga, colonna) della tabella di formato specifico (ad esempio <Tablename>_Format_Full), e' sufficiente contare i campi della tabella <Tablename> in modo crescente a partire da 1.
Ad esempio avendo una tabella di database di nome Rubrica con la seguente struttura:
Indice | Field Name | Data Type | Data size |
1 | Id Contatto | AutoNumber | Long Integer |
2 | Nome | Text | 50 |
3 | Cognome | Text | 50 |
4 | Titolo | Text | 50 |
5 | Indirizzo | Text | 50 |
6 | Citta | Text | 50 |
7 | Provincia | Text | 50 |
8 | CAP | Text | 50 |
9 | Zona | Text | 50 |
10 | Stato | Text | 50 |
11 | Societa | Text | 50 |
12 | Attivita | Text | 50 |
13 | Funzione | Text | 50 |
14 | Tel ufficio | Text | 50 |
15 | Tel abitazione | Text | 50 |
16 | Tel cellulare | Text | 50 |
17 | Numero fax | Text | 50 |
18 | Text | 50 | |
19 | www | Text | 50 |
20 | Riferimento interno | Text | 50 |
21 | Note | Text | 250 |
22 | Creazione | Text | 50 |
23 | Aggiornamento | Text | 50 |
24 | Richiedente | Text | 50 |
25 | Operatore | Text | 50 |
E scegliendo un formato di visualizzazione come quello indicato nella seguente tabella Rubrica_Format_Brief:
Col 1 | Col 2 |
2 | 1 |
3 | 14 |
4 | 15 |
13 | 16 |
11 | 17 |
Si ottiene la seguente visualizzazione su due colonne:
Nome | Maria | ID Contatto | 167 |
---|---|---|---|
Cognome | Rossi | Tel ufficio | 06-52525.252 |
Titolo | Dott.sa | Tel abitazione | |
Funzione | Account Manager | Tel cellulare | 0335-5252525 |
Societa' | Cisco Systems Italy | Numero fax | 06-52525.255 |
Invece, scegliendo un formato di visualizzazione come quello indicato nella seguente tabella Rubrica_Format_Full:
Col 1 | Col 2 |
2 | 1 |
3 | 14 |
4 | 15 |
13 | 16 |
11 | 17 |
12 | 20 |
5 | 9 |
8 | 6 |
7 | 10 |
18 | 19 |
-1(2) | 21 |
Si ottiene la seguente visualizzazione:
Nome | Maria | ID Contatto | 167 |
---|---|---|---|
Cognome | Rossi | Tel ufficio | 06-52525.252 |
Titolo | Dott.sa | Tel abitazione | |
Funzione | Account Manager | Tel cellulare | 0335-5252525 |
Societa' | Cisco Systems Italy | Numero fax | 06-52525.255 |
Attivita' | Network solution | Riferimento interno | Pistoni Massimo, Ianni Rosa |
Indirizzo | Via della Grande Muraglia, 284 | Zona | |
CAP | 00144 | Citta' | Roma |
Provincia | Roma | Stato | Italy |
mrossi@cisco.com | www | http://www.cisco.com/it | |
Note |
(2)Si osservi che il valore negativo impone che il contenuto del campo successivo venga visualizzato su piu' colonne. Nel caso di tabelle dei formati di visualizzazione a piu' di due colonne, per concedere piu' spazio a particolari campi, sono accettabili anche piu' valori negativi adiacenti a sinistra di un valore numerico positivo.
In mancanza delle tabelle dei formati di visualizzazione (<Tablename>_Formats e/o correlate) tutti i campi della tabella del database <Tablename> saranno visualizzati, ma su un'unica colonna verticale, nello stesso ordine con cui compaiono nella struttura della tabella <Tablename>.
Quest'ultima tabella deve essere costruita con due campi (quindi su 2 colonne): Sort Key e order
Sort Key e' la colonna dei campi utilizzati per l'ordinamento
alfabetico dei record di uscita
order e' la priorita' con cui le rispettive Sort
Key verranno utilizzate per ordinare i record di uscita (i valori
minori sono prioritari)
Esempio di tabella <Tablename>_Order:
Sort Key | order |
Cognome | 1 |
Nome | 2 |
Citta' | 3 |
Indirizzo | 4 |
In questo esempio, i record verranno ordinati alfabeticamente secondo il cognome, in caso di cognomi uguali, verranno confrontati i nomi, in caso di ulteriore uguaglianza, verranno prese in considerazione le citta' e infine gli indirizzi; in caso di ulteriore uguaglianza, contera' l'ordine di inserimento dei record nella tabella <Tablename> del database
In mancanza della tabella di ordinamento (<Tablename>_Order) i record di uscita saranno visualizzati nello stesso ordine con cui sono stati inseriti nella tabella <Tablename> del database.
Attributo | Significato |
id | Individua il campo id in tabella <Tablename>.
Il campo id e' un numero intero univoco e autoincrementato
(vedi paragrafo 5.a). Questo campo
e' necessario per permettere all'utente di aggiornare e cancellare i record
del database.
Il contenuto del campo id e' visualizzato come link. Seguendo il link viene visualizzato lo stesso record in formato Full (per questo motivo e' conveniente creare sempre un formato Full tramite la tabella <Tablename>_Format_Full (vedi paragrafo 5.c). |
creation | Individua il campo creation in tabella <Tablename>. Il campo creation viene aggiornato automaticamente dallo script. |
update | Individua il campo update in tabella <Tablename>. Il campo update viene aggiornato automaticamente dallo script. |
requester | Individua il campo requester in tabella <Tablename>. Il campo requester viene aggiornato automaticamente dallo script. |
modifier | Individua il campo modifier in tabella <Tablename>.
Il campo modifier viene aggiornato automaticamente
dallo script.
I contenuti dei quattro campi speciali individuati dagli attributi creation, update, requester e modifier vengono visualizzati automaticamente ai Trusted Hosts e ai Root Hosts nel caso di scelta del formato Full di visualizzazione dei record di uscita. |
hyperlink | Conferisce l'attributo di hyperlink ad un campo della tabella <Tablename>. I campi con tale attributo verranno tutti visualizzati come hyperlink, quindi devono essere inseriti con la sintassi standard delle URL. Seguendo i link si arrivera' alle URL indicate dai link stessi. |
Conferisce l'attributo di e-mail ad un campo della tabella <Tablename>. I campi con tale attributo verranno tutti visualizzati come link e-mail, quindi devono essere inseriti con la sintassi standard degli indirizzi e-mail. Seguendo i link si potranno spedire messaggi agli indirizzi e-mail visualizzati. | |
exec | Conferisce l'attributo di exec ad un campo della tabella <Tablename>. I campi con tale attributo verranno tutti visualizzati come link. Seguendo un link si eseguira' uno script di tipo cgi-bin opportunamente creato, a cui verra' passato come parametro il contenuto del campo del database (l'attributo exec pretende un parametro: la URL del cgi-bin). |
Oltre ai campi speciali si possono definire anche dei campi correlati. I campi correlati verranno tutti visualizzati come link e punteranno a fare ulteriori interrogazioni alla stessa tabella dello stesso database, ma anche ad altre tabelle di altri database mettendo in correlazione particolari campi delle tabelle puntate.
La tabella <Tablename>_Links permette di definire sia i campi speciali, sia i campi correlati. Questa tabella deve essere costruita con sei campi (quindi su 6 colonne): Field, DSN, Table, Related Field, Output Format, Field Type
Nel caso di campo speciale:
Nel caso di campo correlato:
Esempio di tabella <Tablename>_Links:
Field | DSN | Table | Related Field | Output Format | Field Type |
ID Contatto | id | ||||
Creazione | creation | ||||
Aggiornamento | update | ||||
Richiedente | requester | ||||
Operatore | modifier | ||||
www | hyperlink | ||||
Numero fax | exec | http://dbserv.lnf.infn.it/cgi-bin/sendfax.pl?tel= | |||
Cognome | Agenda | Rubrica | Cognome | Brief | |
Societa' | Agenda | Rubrica | Societa' | Brief | |
Riferimento interno | Userlist | Users | User | Full | list |
A seguito della compilazione della tabella <Tablename>_Links,
secondo il precedente esempio, la visualizzazione Full
vista al paragrafo 5.c diventera':
Nome | Maria | ID Contatto | 167 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Cognome | Rossi | Tel ufficio | 06-52525.252 | ||||||||
Titolo | Dott.sa | Tel abitazione | |||||||||
Funzione | Account Manager | Tel cellulare | 0335-5252525 | ||||||||
Societa' | Cisco Systems Italy | Numero fax | 06-52525.255 | ||||||||
Attivita' | Network solution | Riferimento interno | Pistoni Massimo, Ianni Rosa | ||||||||
Indirizzo | Via della Grande Muraglia, 284 | Zona | |||||||||
CAP | 00144 | Citta' | Roma | ||||||||
Provincia | Roma | Stato | Italy | ||||||||
mrossi@cisco.com | www | http://www.cisco.com/it | |||||||||
Note | |||||||||||
|
Link | Risultato |
Rossi | Si ottiene la stesso record con visualizzazione in formato Brief |
167 | Si ottiene lo stesso record con visulaizzazione in formato Full |
Cisco Systems Italy | Si ottengono tutti i record relativi alla societa' Cisco con visualizzazione in formato Brief |
06-52525.255 | viene eseguito lo script che permette di mandare un fax al numero 06-52525.255 |
Pistoni Massimo | Si ottiene la visualizzazione in formato Full dell'utente Pistoni Massimo dalla tabella Users del database Userlist |
Ianni Rosa | Si ottiene la visualizzazione in formato Full dell'utente Ianni Rosa dalla tabella Users del database Userlist |
mrossi@cisco.com | Viene aperta l'applicazione per mandare un messaggio all'indirizzo mrossi@cisco.com |
http://www.cisco.com/it | Viene puntata la URL http://www.cisco.com/it |
dbquery.pl | lo script in perl per interfacciare i database al web |
dbquery_user_help.html | manuale per l' utente |
dbquery_installation.html | manuale di installazione (questo documento) |
cookie.lib | libreria aggiuntiva da copiare nella subdirectory lib di perl |
db_templates.zip | file compresso contenente esempi di database correlati (DBlist, PhoneBook, Users, Groups, Usernames, Accounts, NetworkNodes, Contracts, Hardware) |
Per ogni problema mandare un messaggio a: Massimo.Pistoni@lnf.infn.it
Autore: Massimo Pistoni | Last update: 5 marzo 2001 |