' Il seguente snippet consente di importare dati da un web service Zucchetti Evotre.
' Come si può vedere dall'esempio di risposta XML, la struttura è un po' particolare in quanto l'XML con i dati è contenuto all'interno di un valore stringa di ritorno, ed è quello su cui deve essere fatto il parse.
' Struttura della risposta XML:
'<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
' <soap:Body>
' <evotre_anagrafica_QueryResponse xmlns="http://evotre_anagrafica.ws.localhost/">
' <return><![CDATA[<?xml version="1.0"?>
' <webRowSet xmlns="http://java.sun.com/xml/ns/jdbc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
'xsi:schemaLocation="http://java.sun.com/xml/ns/jdbc http://java.sun.com/xml/ns/jdbc/webrowset.xsd">
' <properties>
' --- PROPRIETA' GENERALI ---
' </properties>
' <metadata>
' <column-count>12</column-count>
' <column-definition>
' --- PROPRIETA' DELLE COLONNE ---
' </column-definition>
' </metadata>
' <data>
' <currentRow>
' --- DATI DEI SINGOLI CAMPI DELLE COLONNE ---
' <columnValue></columnValue>
' </currentRow>
' </data>
' </webRowSet>]]></return>
' </evotre_anagrafica_QueryResponse>
' </soap:Body>
'</soap:Envelope>
' Formazione SOAP Request e interrogazione WS
Dim xml As System.XML.Linq.XDocument = System.XML.Linq.XDocument.Parse("<?xml version=""1.0"" encoding=""utf-8""?>" +
"<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:evot=""http://evotre_anagrafica.ws.localhost/"">" +
" <soapenv:Header/> " +
" <soapenv:Body> " +
" <evot:evotre_anagrafica_Query> " +
" <evot:m_UserName>ws_qualiware</evot:m_UserName>" +
" <evot:m_Password>ws_qualiware</evot:m_Password> " +
" <evot:m_Company>001</evot:m_Company> " +
" <evot:m_bCount>0</evot:m_bCount> " +
" </evot:evotre_anagrafica_Query> " +
"</soapenv:Body> " +
"</soapenv:Envelope>" )
Dim url As String = "https://yy.xxxxxxxxxxxxx.it:443/HRPORTAL/servlet/SQLDataProviderServer/evotre_anagrafica"
Dim webRequest__1 As System.Net.HttpWebRequest = DirectCast(System.Net.WebRequest.Create(url), System.Net.HttpWebRequest)
webRequest__1.Method = "POST"
webRequest__1.ContentType = "text/xml; charset=UTF-8"
webRequest__1.ContentLength = xml.ToString().Length
webRequest__1.Headers.Add("SOAPAction", """evotre_anagrafica_Query""")
Using requestWriter2 As New System.IO.StreamWriter(webRequest__1.GetRequestStream())
requestWriter2.Write(xml.ToString())
End Using
' Recupero della risposta
Dim response As System.XML.Linq.XElement
Dim ok as boolean=true
Using resp As System.Net.HttpWebResponse = DirectCast(webRequest__1.GetResponse(), System.Net.HttpWebResponse)
if resp.StatusCode = 200
Using responseStream = resp.GetResponseStream()
response = System.XML.Linq.XElement.Load(responseStream)
End Using
else
dim msg as string = "Errore durante la connessione al Web Service." + vbcr + "Status: " + ltrim(str(resp.StatusCode)) + " " + resp.StatusDescription
form.alert(msg)
ok = false
end if
End Using
if not ok
return
end if
' *** NECESSARIO ULTERIORE PARSING DELLA RISPOSTA - XML DENTRO XML ***
Dim response2 As System.XML.Linq.XElement = System.XML.Linq.XElement.Parse(response)
' Elaborazione della risposta e trasformazione in una DataTable
Dim t As System.data.DataTable = New System.data.DataTable
Dim c As System.data.DataColumn
Dim row As System.data.DataRow
Dim i As Integer
' Predispongo le colonne della DataTable
Dim ns As System.XML.Linq.XNamespace = "http://java.sun.com/xml/ns/jdbc"
For Each el As System.XML.Linq.XElement In response2.Descendants(ns + "column-name")
c = New System.data.DataColumn
c.ColumnName = el.Value
'form.alert(c.ColumnName)
c.MaxLength = 100
t.Columns.Add(c)
Next
' Leggo i singolo
For Each el As System.XML.Linq.XElement In response2.Descendants(ns + "currentRow")
row = t.NewRow
i = 0
For Each f As System.XML.Linq.XElement In el.Nodes
row(i) = f.Value
i += 1
Next
t.Rows.Add(row)
Next
t.AcceptChanges()
' Trasformazione della DataTable in una QWTable
dim Q as new QWTable()
Q.RequestLive = False
Q.Table = t
Q.Rowset = New QWRowset(Q)
' Proposta all'utente dei records recuperati
form.ChooseRecords(form.findcontrol("RitornoChooseRecords"), Q, "Scegliere")