3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>
Se siete programmatori ASP, questo codice non vi impressionerà più di tanto. Ciò che deve colpirvi invece, è la semplicità con cui ASP può essere utilizzato per creare servizi del tutto nuovi come WAP. Tra parentesi, mi piacerebbe aggiungere che tutti i vantaggi che ASP ha rispetto alle Servelet Java nel campo della programmazione web classica rimangono intatti anche quando si tratta di WML. Chiusa parentesi.
<small>
<anchor title="next!">Next
<go href="step2.asp" method="get">
<postfield name="movie" value="$(movie)" />
</go>
</anchor>
</small>
</p>L'invio di un form può essere fatto sia tramite l'uso di una softkey (tag do ) oppure di un anchor . Nell'ultimo caso l'invio consiste semplicemente nel seguire un link. Ho pensato che il link costituisca per gli utenti WAP una modalità di navigazione più intuitiva ed user-friendly in questo caso. I campi postfields assomigliano molto ai campi nascosti (hidden fields) in uso con HTML.
In realtà, i campi hidden di HTML sono meno potenti, dal momento che le variabili WML danno ai programmatori possibilità che sui browser web vengono implementate attraverso un'uso abbastanza avanzato di JavaScript.
Notate l'uso di postfield per inviare l'ID del film scelto al server. Il metodo di posting merita un'osservazione. La specifica di WAP 1.1 prevede l'implementazione del metodo POST. L'emulatore esegue questa direttiva fedelmente, per cui potreste pensare che ciò si adatti perfettamente al nostro caso. Ahimè, l'unico telefono WAP disponibile sul mercato oggi mentre scrivo (il Nokia 7110, dicembre 99) non supporta POST come dovrebbe, per cui non c'è altra scelta che procedere come ho fatto.
Scegliere lo spettacolo ed il numero di biglietti

Il codice che permette all'utente di scegliere lo spettacolo è molto semplice. Tutti i record relativi al film scelto precedentemente vengono selezionati, unitamente al nome del cinema, per presentare all'utente una lista di opzioni da cui scegliere:
movie_id = Request("movie")
sqlQuery = "SELECT title FROM movie WHERE Movie_id = " & movie_id
set rsMovie = conn.Execute(sqlQuery)
movie_title = rsMovie("title")
sqlQuery = "SELECT [name], [time], [show_id] FROM Show, Theater " &_
"WHERE show.movie_id = " & movie_id &_
" AND theater.theater_id = show.theater_id"
set rsShows = conn.Execute(SQLquery)Se esaminate il codice con attenzione, potrebbe venirvi l'idea di utilizzare l'oggetto session di ASP per mantenere i dati sul film prescelto tra un deck e l'altro, piuttosto che richiedere nuovamente la stessa cosa al database. Sfortunatamente, l'oggetto session si basa sui cookies, la cui implementazione non è prevista dal protocollo e non è supportata dal 7110 (curiosamente, l'emulatore del Toolkit li supporta, ma non fatevi ingannare). In breve, l'oggetto Session non può essere utilizzato per implemenare la prima generazione di servizi WAP.
Adesso una cosa molto interessante:
<select name='show'>
<%
Do while not rsShows.eof
response.write("<option value='" & rsShows("show_id") & "'>" & Left(rsShows("name"),cutter) & " (" & rsShows("time") & ")" & "</option>" &vbcrlf)
rsShows.MoveNext
loop %>
</select>Se vi state chiedendo cosa rappresenti la variabile cutter (tagliatrice), troverete ciò che segue o drammatico o esilerante (se siete uno dei cervelloni dietro WML e l'idea di 'indipendenza dal device', vi metterete le mani nei capelli).
Dim cutter
if InStr(Request.ServerVariables("HTTP_USER_AGENT"), "Nokia7110") then
cutter = 12
else
cutter = 7
end ifIl codice rende ogni elemento della lista di opzioni con stringe di lungjezza diversa a seconda del particolare telefonino usato! C'è un'ottima spiegazione di questo. L'emulatore del toolkit si smangiucchia beatamente i caratteri finali delle mie stringhe. Dal momento che l'ultima parte della stringa rappresenta l'ora dello spettacolo, questo è un problema che rischia di compromettere l'usabilità del servizio stesso. Ho scelto, quindi, di mozzare l'ultima parte del nome del cinema esplicitamente. In questo modo sono sicuro che ci sia spazio sufficiente per l'orario di inzio del film.
Non appena ho avuto la possibilità di testare il mio servizio su un vero 7110 però, mi sono reso conto che in pratica dovevo fare i conti con uno schermo più grande. I nomi dei cinema apparivano rintuzzati sulla sinistra con sulla destra molto spazio lasciato libero. Francamente ridicolo. Così ho deciso di prendere un approccio pratico e di discriminare un particolare dispositivo per ragioni puramente estetiche.
Benchè sospetti che molti abbiano da ridire su questo modo di programmare, mi sembra naturale che chi sviluppi applicazioni WAP a livello professionale abbia necessità di prendere in considerazione questioni di puro design. Ho il vago sospetto che toppe di questo genere saranno assai comuni, a dispetto degli ideali di indipendenza dal dispositivo che WML vorrebbe promuovere.
Biglietti
Il prossimo passo dell'utente è la scelta del numero di biglietti (massimo sei). Il codice è assai simile a quello dei deck precedenti. Mi rivolgo nuovamente al database per l'assenza di Session. Faccio qualche controllo per assicurarmi che il servizio non offra alla gente più posti di quanti ce ne siano disponibili:
SQLquery = "SELECT * FROM show WHERE Show_id = " & show_id
set rsShow = conn.Execute(SQLquery)
:
seats = rsShow("free_seats")
:
if seats = 0 then
Response.write("Sorry, no more seats")
rsShow.close
set rsShow = nothing
Response.write("</p></card></wml>")
Response.end
else
if seats > 6 then 'book up to 6 tickets or max available
max_seats=6
else
max_seats = seats
end if
end if
%>
<%=movie_title%> at <% =theater_name%>
<select name='ticket'>
<%
dim i
i = 1
Do while i <= max_seats
response.write("<option value='" & i & "'>" & i & " ticket(s)" & "</option>" &vbcrlf)
i = i + 1
loop %>
</select>3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>
Contenuti dell'articolo
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.







Difficoltà
Stampa
Download 



