Archivio

Articolo taggato ‘asp’

VBScript: convertire in stringa

January 26th, 2009 No comments

Uno dei maggiori difetti di VBScript è la gestione del tipo di dato. In realtà VBScript non è dichiarativo, però ha comportamenti strani, specie quando legge i dati da un recordset, in quanto eredità il tipo di dato del recordset e da grossi problemi al momento in cui si effettuando delle operazioni booleane di confronto.

Dopo 1000 tentativi di uso delle varie funzioni di conversione tipo (CStr, CInt, …) ho dedotto che il metodo migliore è confrontare delle stringhe, e che la migliore conversione in stringa è quella di aggiungere a un dato un carattere (come si faceva antetempo…).

Ecco quindi un codice ignorante per risolvere il problema:

'converto in stringa
Function ToString(s)
    'debug(s)
    if (isNull(s)) then
        ToString = ""
    else
        tmp = s & "a"
        tmp = left(tmp,len(tmp)-1)
        ToString = tmp
    end if
End Function

Buona settimana cari.

Vista, IIS 7.0 e le pagine ASP

January 20th, 2009 No comments

Dopo aver perso quasi un’ora cercando di cavarmela da solo smanettando con IIS 7.0 di Vista, ho deciso di cercare online la soluzione. Per fare andare le pagine ASP con IIS 7.0 bisogna attivare la funzionalità in:

Pannello di controllo > Programmi e funzionalità > Attivazione o disattivazione delle funzionalità di Windows

quindi checkare la voce:

Internet Information Services, Servizi Web, Funzionalità per lo sviluppo di applicazioni > Asp

Un infinito grazie a chi ha scritto l’articolo:
Installazione di IIS 7 su Windows Vista

ps: in questi giorni è un po’ un casino, scusate la brevità!

Categorie: Web Mania Tag: , ,

Creare data in Vbscript

December 4th, 2008 2 comments

Uno dei più grandi difetti dell’obsoleto VBScript è la gestione delle date. Il buco più grosso è che la creazione di una data è affidata alla funzione CDate, che accetta un oggetto di tipo Date.

Questo oggetto accetta vari formati di data, compreso quello con il mese in formato verboso (vedi sintassi). Il problema è che se noi gli diamo in pasto una data in formato numerico tipo "12/12/2008" lui riconosce la posizione del mese in base al settaggio del formato locale del server: TERRRRRRRRRRRRRRRIBBBBBBBBBBBBBBBBBILE!!!

Come ovviare? Dopo aver imprecato qualsiasi entità superiore buona o cattiva ho trovato una soluzione blasfemica, ma funziona: usiamo il verbose mode.

Creiamo un array per valorizzare il mese:

Dim elencoMesi(12)
    elencoMesi(0) = "January"
    elencoMesi(1) = "February"
    elencoMesi(2) = "March"
    elencoMesi(3) = "April"
    elencoMesi(4) = "May"
    elencoMesi(5) = "June"
    elencoMesi(6) = "July"
    elencoMesi(7) = "August"
    elencoMesi(8) = "September"
    elencoMesi(9) = "October"
    elencoMesi(10) = "November"
    elencoMesi(11) = "December"

Quindi creiamo una stringa di data e tempo in formato para verboso:

tmpDateReg2S = elencoMesi(MM-1) & " " & DD & ", " & YYYY & " " & HH & ":" & NN & ":" & SS)

E il gioco è fatto. Avete altre soluzioni più decenti voi?

ps.: NN sono i minuti!

Sostituire testo in ASP con le RegExp

September 17th, 2008 2 comments

Dopo un po’ di ricerche sono riuscito a trovare come in ASP (vbscript) si possa sostituire (replace) del testo da una stringa, utilizzando le regular expression.

In coldfusion era una funzione che mi ero fatto troppo utile: rimuoveva tutto l’HTML da un testo, convertendolo in plain/text. Questo mi permetteva di creare un incipit del testo senza rischiare di fare danni strutturali all’HTML.

Nel sito somacon ho trovato la soluzione, ma l’ho convertità in Function per una maggiore elasticità e comodità di utilizzo.

Function ReplaceAllByExpression(StringToExtract, MatchPattern, ReplacementText)
    Dim regEx, CurrentMatch, CurrentMatches
    Set regEx = New RegExp
    regEx.Pattern = MatchPattern
    regEx.IgnoreCase = True
    regEx.Global = True
    regEx.MultiLine = True
    StringToExtract = regEx.Replace(StringToExtract, ReplacementText)
    Set regEx = Nothing
    ReplaceAllByExpression = StringToExtract
End Function

I parametri sono semplici:

  • StringToExtract: il testo da trattare
  • MatchPattern: il pattern della Regular Expression
  • ReplacementText: la stringa da sostituire alle sottostringhe individuate dal pattern

E le jeux sont fait!

Categorie: Web Mania Tag: , , ,

Visual Studio 2005 e FrontPage Extension

June 18th, 2008 3 comments

Per chi di voi come me è ancora costretto a dover mettere le mani in ambienti Microsoft ASP (parlo di VBscript) e a collegarsi in remoto con Server Interdev, non disperate. Almeno potete usare Visual Studio 2005.

Fare questa operazione è facile, anche se i passi per farla non vengono proprio immediati. In realtà per molto tempo ho cercato di farlo vedendo IIS remoto (con le estensioni Frontpage 98) come un source safe, in realtà non c’entra nulla. L’unica cosa "safe" è il controllo del check (checkin-checkout).

File > Open > WebSite...

Quindi scegliete di aprire il vostro sito da remoto, e date le credenziali del server (l’URL praticamente). E così potete definitivamente spegnere il vostro Interdev.

Liste e Array in Vbscript

June 11th, 2008 2 comments

Ecco altre funzioncine molto smart per gestire liste (stringhe con separatore) e array in VBscript, come se foste in coldfusion.

ValueList

Vi permette di passare alla funzione un recordSet e il nome della colonna desiderata, e di ottenere una stringa di tutti i valori separati da separator.

Function ValueList(query,column)
    ValueList = ""
    separator = ","
    On Error Resume Next
        do while not query.EOF
            'loop di tutti i valori
            if (ValueList="") then
                ValueList = query(column)
            else
                ValueList = ValueList & separator & query(column)
            end if
        query.moveNext
        loop
        'If Err.Number <> 0 then
        'end if
    Err.Clear
End Function

 

ValueArray

Sfrutta la funzione sopra e restituisce invece un array con tutti i valori

Function ValueArray(query,column)
    separator = ","
    ValueArray = Split(ValueList(query,column),separator)
End Function

 

SubArray

Crea un array, partendo dal punto di partenza (gli array iniziano da zero) per un count numero di elementi

Function ArraySub(myArray,start,count)
    newArrayLen = 0
    For i=start to (start+count-1)
        ReDim Preserve newArray(newArrayLen)
        newArray(newArrayLen) = myArray(i)
        newArrayLen = newArrayLen + 1
    Next
    ArraySub = newArray
End Function

 

Ciao ciao

Categorie: InfoTech Tag: , , , , ,

Active Server Pages, ASP 0131

May 27th, 2008 3 comments

Se vi capita l’errore "Active Server Pages, ASP 0131" significa che state usando degli include server side, in modalità file, e che il vostro server web non supporta i percorsi parent, cioè il classico "..". Esempio:

<!--#include file="../Application.asp" -->

Per risolvere questo problema, è sufficiente abilitare in IIS nel sito web, o nel sito predefinito, la navigazione verso le directory parent. Negli IIS inglesi questa opzione la trovate nelle proprietà del sito > home directory > configuration > option > e mettete il check su "Enable Parent Paths".

Nella versione italiana invece è: proprietà del sito > Home directory > Configurazione… > Opzioni > e ceccate "Abilita percorsi principali".

Notte…

Categorie: Web Mania Tag: , ,

Ingrandire immagini con javascript

May 19th, 2008 8 comments

Javascript Image ViewerSto rifacendo tutta una serie di tool che avevo già pronti, traducendoli da quella meraviglia di linguaggio che è coldfusion, a quella cosa destrutturata che è ASP (vbscript). Oggi mi sono imbattuto nel mio vecchio ImageViewer.

Già che c’ero gli ho dato pure una rinfrescata, in modo di aver un tool universale per ingrandire le immagini, in puro js + css, compatibile. Obiettivo quello di ottenere un image viewer, che funzionasse in pop over, e non in popup, ma che fosse compatibile anche con flash.

Ho trovato un ottimo javascript, basato su prototype, che faceva al caso mio. Con pochissime modifiche è diventato perfetto.
Lo script originale è di dynamicdrive. Sul loro sito trovate la demo di come funziona: è veramente facile. Copiate i 3 file (un javascript, un css e una immagine), volendo li adattate alle vostre esigenze e il gioco è fatto. Il javascript modificato lo trovate qui: thumbnailviewer.js. Per info sull’utilizzo preciso del js originale, fate riferimento al loro sito.

Per associare il plugin all’immagine è sufficiente linkare il thumbnail all’immagine originale grande, impostando come attributo REL uguale a "thumbnail". Esempio:

<a href="_file/newsImg/<%= menuSxNews("immagine") %>" rel="thumbnail"><img src="_file/newsImg/th_<%= menuSxNews("immagine") %>" class="thDx" /></a>

Io immagine lo tiro su da un ResultSet di DB.

 

Le mie modifiche a questo script si sono rese necessarie in quanto nel sito ho del FLASH e come tutti voi sicuramente sapete, nessuno DIV con all’interno semplice HTML, può sovrastare (z-index) un oggetto Flash. L’unico sistema è nascondere tutto il sito sotto – o la parte che infastidisce.

In un buon progetto di sito, soprattutto Table-less, è buona norma racchiudere tutto il sito in un macro layer, in modo da poter impostare proprietà CSS a tutto il sito, in modo facilissimo (css o js). Nel mio js aggiornato ho inserito questa feature. Nella creazione dell’oggetto originale thumbnailviewer, ora ci sono due nuove proprietà:

  • mainDivName (id): il nome del nostro DIV contenitore di tutto il sito, o della parte che vogliamo nascondere. Se è vuoto (cioè "") enableFullMask è come fosse a FALSE
  • enableFullMask (true | false): abilita la cancellazione del DIV chiamato sopra

Le modifiche effettuate sono state pochissime. Ho aggiunto le due proprietà nell’oggetto thumbnailviewer:

mainDivName: "main", //The main DIV
enableFullMask: true, //Enable main div "main" hiddening

Nella funzione init ho inserito la dichiarazione del nostro DIV da nascondere:

if (this.enableFullMask && (this.mainDivName!="")) {mainDiv = document.getElementById(this.mainDivName)}

Al caricamento dell’immagine nascondo il DIV dichiarato sopra:

if (this.enableFullMask && (this.mainDivName!="")){mainDiv.style.visibility="hidden"}

Nella funzione closeit ho riabilitato la visibilità del DIV nascosto e ho forzato (per lo stron*o di IE7) il rendering:

if (this.enableFullMask && (this.mainDivName!="")){
    mainDiv.style.visibility="visible"
    //enforse new rendering for IE7
    mainDiv.innerHTML += ""
}

Il bello è che funziona benissimo :)

Come installare CDONTS

May 12th, 2008 5 comments

CDonts è un componente Microsoft per l’invio di email, utilizzabile con ASP. E’ una semplice DLL ma non in tutti i sistemi è installata. Come sapete sto ancora lavorando in ASP per alcuni progetti, e lo sto facendo nel mio PC locale, che chiaramente non ha CDonts.

L’errore che mi dava IIS quando provavo a instanziare l’oggetto

set online = Server.CreateObject("CDONTS.NewMail"))

era:

Oggetto Server, ASP 0177 (0×800401F3)
Stringa dell’interfaccia non valida.

Cercando su Blogger Italiani per installare CDonts, ho trovato un post dell’amico K76, ma parla solo del componente per spedire e-mail e di come utilizzarlo al meglio. Quindi ci si fa su le maniche e si trova la soluzione (semplicissima).

  1. Trovate la dll CDONTS.dll, io l’ho trovata qui.
  2. Copiate la dll nel vostro PC nella cartella: c:\windows\system32
  3. Registrate la DLL nel vostro sistema:
    regsvr32 c:\winnt\system32\cdonts.dll >> ENTER

Basta gioco finito, errore sparito :)

ASP: qualche utile funzione

May 8th, 2008 No comments

Purtroppo sto sistemando alcuni siti ancora in ASP / Vbscript. Penso che per un programmatore Coldfusion non ci sia passaggio peggiore. Per semplificarmi la vita mi sono creato alcune funzioni simpatiche che mi velocizzano il lavoro. Tanto per non sentirmi troppo solo mi sono creato anche il file Application.asp, che includo in ogni pagina.

Chi è programmatore Coldfusion, o lo era, penso possa capirmi.

Giochiamo con le date

Qualche funzione per avvicinarci al concetto di date di coldfusion, rispettando la sintassi di scrittura delle date odbc, come fa la funzione cf CreateOdbcDateTime.

Function createOdbcDateTime(d,t)
stringa = "CONVERT(DATETIME, '" & year(d) & "-" & month(d) & "-" & day(d) & " " & hour(t) & ":" & minute(t) & ":" & second(t) & "', 102)"
createOdbcDateTime = stringa
End Function
Function createDate(d,m,y)
dateTmp = d & "/" & m & "/" & y
if isDate(dateTmp) then
createDate=dateTmp
else
createDate=null
end if
End Function
Function createTime(h,m,s)
if isEmpty(m) then m = 0
if isEmpty(s) then s = 0
timeTmp = h & "." & m & "." & s
if (h>=0 and h<24 and m>=0 and m<60 and s>=0 and s<60) then
createTime=timeTmp
else
createTime=null
end if
End Function

Database

Quando passiamo una stringa in un database bisogna che stiamo attenti al carattere ‘ che in SQL è il marcatore di inizio e fine di un testo. Per essere sicuri delle nostre stringhe possiamo usare:

Function r(s)
'rimpiazzio i simboli ' con '' per le query

On Error Resume Next
r = Replace(s,"'","''")
if err.number <> 0 then
r = ""
end if
Err.Clear
End Function

Form, Query String e …

Ora sfruttiamo la precedente funzione per essere facilitati nell’estrarre i parametri che ci arrivano via form (put) e url / query string (get).

Function f(s)
'estraggo un elemento dal form
f = Request.Form(s)
End Function
Function fr(s)
fr = r(f(s))
End Function
Function q(s)
'estraggo un elemento dal query string
q = Request.QueryString(s)
End Function
Function qr(s)
qr = r(q(s))
End Function
Function u(s)
'estraggo elemementi da un upload form (aspupload.com)
'catturo eventuale errore
On Error Resume Next
u = Upload.Form(s)
If Err.Number <> 0 then
u = ""
end if
Err.Clear
End Function
Function ur(s)
ur = r(u(s))
End Function

Alla quale aggiungiamo una funzioncina per convertire il tutto in formato stringa. VBScript ha una gestione del tipo dato molto particolare. Quasi sempre tutto è automaticamente castabile su altro tipo. Però quando i dati arrivano dal DB fa il "fastidioso". Con questa funzione passiamo tutto in stringa:

Function ToString(s)
'converto in stringa
if (isNull(s)) then
ToString = ""
else
ToString = CStr(s)
end if
End Function

Chiudiamo in bellezza con la croce si ASP il debug. Chi è abituato a coldfusion sa che il debugger è eccezionale. Su Vbscript si cambia un po’ abitudini. Con questa funzione ricorrete al vecchio metodo di debug con facilità!

Function debug(s)
'butta fuori l'output e blocca la pagina

response.Write(s)
response.end
End Function

Signori e signori… buona serata. Se ci sono dubbi, proverò a rispondere, non per mancata voglia, ma per presunte incapacità :)