Studio Basso Amministrazione condomini - Sviluppo software  

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:

  1. 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.
  2. Entrate nell'editor di Visual Basic, con la combinazione di tasti Alt-F11 oppure scegliendo Strumenti, Macro, Visual Basic Editor.
  3. Nell'ambiente Visual Basic Editor, scegliete Strumenti, Riferimenti;
  4. 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.
  5. Scegliete dal menu la voce Visualizza, Gestione progetti. All'interno della finestra, fate clic destro sulla voce VBAProject(Cartel1).
  6. Nel menu popup che compare, scegliete la voce Inserisci, Modulo
  7. Comparirà nella finestra Gestione progetti un nuovo modulo, che verrà aperto per la modifica del codice.
  8. 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
    					
  9. Chiudere l'editor VBA e tornare alla cartella di lavoro.
  10. Inserire nella casella B2 il numero 324.
  11. Inserire nella casella D2 la formula: =ConvertiInLettere(B2)
  12. 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.

 

 

 

 

  Mappa del sito - Note legali