Conversione numeri da cifre in lettere
Dettagli sull'uso
Dietro le quinte, una chiamata a un web service è normalmente una particolare
richiesta sul protocollo HTTP, quello usato per le normali richieste di pagine
web effettuate dai comuni browser.
Ecco qui di seguito il testo di una richiesta e di una risposta con il
protocollo SOAP 1.2. In luogo dei segnaposto andranno
inseriti i valori effettivi.
POST /ws/cifrelettere.asmx HTTP/1.1
Host: www.studiobasso.com
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<ConvertiInLettere
xmlns="http://www.studiobasso.com/webservices/cifrelettere/">
<numero>int</numero>
</ConvertiInLettere>
</soap12:Body>
</soap12:Envelope>
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<ConvertiInLettereResponse
xmlns="http://www.studiobasso.com/webservices/cifrelettere/">
<ConvertiInLettereResult>string</ConvertiInLettereResult>
</ConvertiInLettereResponse>
</soap12:Body>
</soap12:Envelope>
Se confrontate questi messaggi SOAP con le seguenti richiesta e risposta HTTP
per una pagina web, potrete notare alcune somiglianze (la presenza degli header
HTTP, seguiti dal testo della pagina, nella risposta) ed alcune differenze: i
messaggi SOAP hanno header HTTP molto più semplici, e il corpo del messaggio
strutturato in un documento XML; questo documento è l'envelope SOAP
che racchiude nel body i dati necessari a specificare quale metodo va chiamato
nel caso della richiesta, e il risultato della chiamata nel caso della
risposta.
GET / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel,
application/vnd.ms-powerpoint, application/msword,
application/x-shockwave-flash, */*
Accept-Language: it
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322;
InfoPath.1; .NET CLR 2.0.50727)
Host: www.studiobasso.com
Proxy-Connection: Keep-Alive
HTTP/1.1 200 OK
Date: Wed, 25 Jan 2006 22:33:12 GMT
Server: Microsoft-IIS/6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Set-Cookie: ASP.NET_SessionId=2mr1ipen5hgn5455xpzalj45; path=/; HttpOnly
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 8373
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Studio Basso - Amministrazione condomini - Sviluppo software
e siti web</title>
...
Come quando visitiamo una pagina web non costruiamo mai a mano la richiesta da
mandare al server, ma è il browser che la costruisce e la manda al server
risparmiandoci questi dettagli, così nella chiamata a un servizio web ci sono
strumenti che evitano a chi sviluppa il client che usufruisce del
servizio di comporre la richiesta e di occuparsi dei dettagli della
connessione TCP/IP.
Vedremo qui di seguito come si può costruire una elementare applicazione client
in Excel che impiega il servizio di conversione da cifre in lettere.
Un client in Excel
Non è possibile inserire direttamente in una formula di una cella di Excel la
chiamata a un metodo di un servizio web. E' necessario racchiudere questa
chiamata in una funzione inserita in un modulo VBA, e sarà questa funzione ad
essere inserita nelle formule del foglio di Excel.
Scendiamo nei dettagli della procedura:
-
Apriamo Excel. Normalmente dovrebbe venir creato un nuovo documento. Se così
non fosse, fate clic sul menu File, Nuovo... e create una nuova cartella di
lavoro vuota.
-
Entrate nell'editor di Visual Basic, con la combinazione di tasti Alt-F11
oppure scegliendo Strumenti, Macro, Visual Basic Editor.
-
Nell'ambiente Visual Basic Editor, scegliete Strumenti, Riferimenti;
-
nella finestra di dialogo scorrete la lista dei riferimenti disponibili, e
cercate la voce Microsoft Soap Type Library: aggiungete il segno di spunta
nella checkbox corrispondente, e fate clic sul bottone Ok.
-
Scegliete dal menu la voce Visualizza, Gestione progetti. All'interno della
finestra, fate clic destro sulla voce VBAProject(Cartel1).
-
Nel menu popup che compare, scegliete la voce Inserisci, Modulo
-
Comparirà nella finestra Gestione progetti un nuovo modulo, che verrà aperto
per la modifica del codice.
-
Inserire nel modulo il seguente codice:
Public Function ConvertiInLettere(numero As Long) As String
Dim ws As SoapClient
Set ws = New SoapClient
ws.mssoapinit "http://www.studiobasso.com/ws/cifrelettere.asmx?wsdl"
ConvertiInLettere = ws.ConvertiInLettere(numero)
End Function
-
Chiudere l'editor VBA e tornare alla cartella di lavoro.
-
Inserire nella casella B2 il numero 324.
-
Inserire nella casella D2 la formula: =ConvertiInLettere(B2)
-
Se siete arrivati fin qui, dovrebbe comparire nella casella D2 il risultato
'trecentoventiquattro'.
Il motivo per cui è possibile effettuare la chiamata al web service senza
specificare come deve essere composta la richiesta e come individuare nel
messaggio di risposta il risultato della chiamata è che l'oggetto SoapClient
trova queste informazioni descritte formalmente nel documento wsdl che è stato
letto nella chiamata al metodo mssoapinit.
|