Linee guida per siti ed applicazioni web della Regione Emilia-RomagnaSeguono le indicazioni su come produrre pagine ASP. Si assume la conoscenza della tecnologia ASP. Si intende che il linguaggio utilizzato lato server sia VBScript.
è buona prassi di programmazione dichiarare tutte le variabili che si usano. Option Explicit è utile in quanto segnala l´utilizzo di identificatori non dichiarati.
N.B. Option Explicit deve essere la prima linea (dopo la dichiarazione del linguaggio [<%@LANGUAGE=VBSCRIPT%>], che però si può omettere in quanto è di default) del sorgente della pagina.
Non assegnare riferimenti ad oggetti COM negli oggetti Session o Application. Ciò accade specialmente per memorizzare oggetti "ADODB.Connection" o "ADODB.Recordset", ma è sconsigliato in quanto risulta pesante per il server e difficilmente scalabile.
Sebbene gli oggetti debbano essere deallocati automaticamente dal motore di scripting, è prassi comune deallocarli esplicitamente per moderare i problemi di mancato rilascio della memoria da parte di Internet Information Server. Ciò significa in pratica includere la riga Set mio_oggetto = Nothing.
Inoltre nel caso di connessioni al DB, prima si chiudono e prima ritornano disponibili nel pool delle connessioni per altri utenti. Ciò è un punto fondamentale della scalabilità delle applicazioni Microsoft.
Tipicamente le pagine di qualsiasi sito hanno delle parti in comune, sia visive (header, footer, …) che strutturali (link a fogli di stile, meta tags per il refresh, …). è quindi consigliabile, per una maggiore leggibilità e manutenibilità creare delle funzioni che generano queste parti di HTML e posizionarle in un file che viene poi incluso dalle altre pagine. è il classico vecchio concetto della libreria di funzioni. Si ricorda che per includere un file la direttiva ASP è "#include", per esempio: <!-- #include file="../includes/common.asp" --> . la sintassi completa è descritta su: http://msdn2.microsoft.com/en-us/library/ms524876.aspx)
N.B. A differenza di quanto indicato da Microsoft evitare di dare estensione ".inc" ai file da includere altrimenti il sorgente risulta visibile a chiunque su internet. Usare invece l´estensione ".asp".
In ERMES è presente un file disponibile per tutti e che si può includere tramite la direttiva <!--#include virtual="/includes/global.asp"--> in cui è definita una funzione di nome VisualizzaErrore() che accetta come parametro un oggetto di tipo ADODB.Connection. Essa, nel caso si sia verificato un errore, mostra un messaggio standard e termina l´elaborazione. Naturalmente affinché possa essere utilizzata occorre avere dato la direttiva On Error Resume Next. Dopo qualsiasi operazione che può fallire richiamare VisualizzaErrore() passandogli come parametro l´oggetto ADODB.Connection.
Oltre al file di cui sopra nella cartella includes si trova anche il file adovbs.inc contenente tutte le costanti di ADO. Alternativamente, se il sito è definito come applicazione ASP è possibile aggiungere le seguenti linee in testa al file global.asa
<!--==Visual InterDev Generated - startspan==-->
<!--METADATA
TYPE="TypeLib"
NAME="Microsoft ActiveX Data Objects 2.1 Library"
UUID="{00000201-0000-0010-8000-00AA006D2EA4}"
VERSION="2.1"
-->
<!--==Visual InterDev Generated - endspan==-->
Ciò fa si che si importi tutta la type librery di ADO. Così facendo oltre alle costanti di ADO funzionerà la tecnologia IntelliSense che suggerisce e completa in comandi nell´editor di Visual InterDev.
Sebbene leggermente meno performanti al momento dell´apertura, le connessioni DSN-less risultano più comode in caso di spostamento delle pagine in un altra cartella o in un altro sito.
Per chi non lo sapesse, una connessione è DSN-less quando la stringa di connessione non fa rifemento a Data Source Names (DSN) definiti a priori sul server (tramite l´applet ODBC del pannello di controllo).
Riportiamo di seguito due esempi di tali stringhe una per connettersi ad un DB SQL Server e l´altra che connettersi a un DB Access.
SQL Server:
"Provider=SQLOLEDB.1;
Data Source=(local);
Initial Catalog=nome_database;
User ID=gino;
Password=supergino;
App=Nome applicazione;
Persist Security Info=True
"
I database in formato Access dovranno essere usati solo per applicazioni di sola lettura, ovverosia applicazioni che in nessun caso devono eseguire operazioni di INSERT, UPDATE o DELETE sulle tabelle.
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" &
Server.MapPath("nome_database.mdb") & "; Persist Security Info=False"
Nel caso di Access si noti l´utilizzo della funzione Server.MapPath() per svincolarsi dalla posizione assoluta del db nel file system.
N.B. la creazione della connessione verso in DB è sicuramente un funzionalità candidata a essere inserita tra quelle funzioni da riutilizzare su tutto il progetto. Si vedano il punto precedente "Riutilizzo del codice" e l´esempio seguente:
<!--#include virtual="/includes/global.asp"-->
<%
Function Connessione
Dim cn
On Error Resume Next
Set cn = Server.CreateObject("ADODB.Connection")
cn.Open "<mettere qui la stringa di _
connessione approriata come indicato sopra>"
VisualizzaErrore(cn) ´Vedi sopra per questa funzione
Set Connessione = cn
Set cn = Nothing
End Function
%>
se questa funzione è, per esempio, definita nel file "tools.asp" ecco come può essere utilizzata da altre pagine:
<%Option Explicit%>
<!--#include file="tools.asp"-->
<%
Dim cn, rs
Set cn = Connessione
On Error Resume Next
Set rs = cn.Execute("SELECT * FROM …")
VisualizzaErrore cn
While not rs.EOF
´QUI SI FA QUALCOSA
rs.MoveNext
Wend
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
%>