' Action link per l'aggiunta di clienti in anagrafica ' Lo snippet segue questo modello di JSON di esempio ' '{ ' "Token": "ec161f8b-ba19-4dac-aab0-2ee16ab94391", ' "Clienti": [ ' { ' "TipoCliente": "Ditta", ' "ID": 1, ' "RagioneSociale": "LEMMA WINE COMPANY", ' "Indirizzo": "120 SE MARKET STREET", ' "Cap": "97214", ' "Citta": "PORTLAND", ' "Provincia": "OR", ' "Stato": { ' "ID": "234", ' "Descrizione": "Stati Uniti", ' "ISO2": "US", ' "MembroUE": false ' }, ' "PartIVA": "", ' "CodFisc": "", ' "Agente": { ' "ID": "GDV_KN", ' "RagioneSociale": "KEVIN NATOLI", ' "Citta": "" ' }, ' "Pagamento": { ' "ID": "BO90", ' "Descrizione": "BB 90GG DF" ' }, ' "Email": "", ' "Telefono": "" ' } ' ] '} Dim nomeActionLink As String = "Action Link CLIENTI-FORNITORI" Dim OK As Boolean = True Dim esito As String = "" Dim erroreRequest As String = "" Dim errcode As Integer Dim jsonr As String Dim res As New Newtonsoft.Json.Linq.JObject Try 'OTTENGO LA RICHIESTA IN JSON Page.Request.InputStream.Seek(0, System.IO.SeekOrigin.Begin) Using ReceiveStream As System.IO.Stream = Page.Request.InputStream Using ReadStream As System.IO.StreamReader = New System.IO.StreamReader(ReceiveStream, System.Text.Encoding.UTF8) jsonr = ReadStream.ReadToEnd() End Using End Using Dim objtmp As Newtonsoft.Json.Linq.JObject = Newtonsoft.Json.Linq.JObject.Parse(jsonr) Dim token As String = CType(objtmp("Token"), Newtonsoft.Json.Linq.JValue).Value Dim tokenIsValid As Boolean = qwlib.WebUtils.CheckToken2(token) If tokenIsValid Then ' copia il json in una directory locale Dim path As String = "C:\dati\Json\Clienti_Fornitori.json" Dim writer As New System.IO.StreamWriter(path) writer.WriteLine("" & jsonr) writer.Close() '--------------------------------------------------------------------------------------------------' Dim parsedJson As Newtonsoft.Json.Linq.JObject = Newtonsoft.Json.Linq.JObject.Parse(jsonr) Dim clifor As New QWTable ' tabella anagrafica clienti/fornitori Dim orgcf As New QWTable ' tabella organigramma clienti/fornitori Dim temp As New QWTable ' vista temporanea clifor.DataBase = DB orgcf.DataBase = DB temp.DataBase = DB '------------------------------ CLIENTI------------------------------------------ ' questo esempio legge solo l'elenco dei clienti dal json ' per i fornitori il procedimento è uguale ma il CODICE dovrà iniziare per "F" e dovrà essere spuntato il flag FORNITORE invece che quello CLIENTE If Not parsedJson.SelectToken("Clienti") Is Nothing Then Dim erroreSalvataggio As String Dim CODICE As String Dim lunghezzaCodiceAnagrafica As Integer = 6 ' volendo si può scegliere un altro numero: l'importante è che non sia maggiore di 6 For i As Integer = 0 To parsedJson.SelectToken("Clienti").Count - 1 erroreSalvataggio = "" ' la funzione SqlStr fa l'escaping dei caratteri riservati di SQL CODICE = SqlStr("C" & Right("00000" & parsedJson.SelectToken("Clienti[" & i & "].ID").ToString, lunghezzaCodiceAnagrafica)) clifor.SQL = "select * " clifor.SQL += "from CLIFOR " clifor.SQL += "where CODICE = " & Chr(39) & CODICE & Chr(39) clifor.Active = True 'SE NON ESISTE UN RECORD CON QUEL CODICE CLIENTE, NE CREO UNO NUOVO If Not clifor.RowSet.First() Then clifor.BeginAppend() clifor.Replace("CODICE", CODICE) clifor.Replace("CLIENTE", True) End If 'SALVO LE INFORMAZIONI DEL JSON NELLE VARIE COLONNE DI CLIFOR clifor.Replace("RAGSOC", SqlStr(parsedJson.SelectToken("Clienti[" & i & "].RagioneSociale").ToString)) clifor.Replace("VIA", SqlStr(parsedJson.SelectToken("Clienti[" & i & "].Indirizzo").ToString)) clifor.Replace("CAP", SqlStr(parsedJson.SelectToken("Clienti[" & i & "].Cap").ToString)) clifor.Replace("CITTA", SqlStr(parsedJson.SelectToken("Clienti[" & i & "].Citta").ToString)) clifor.Replace("PROV", SqlStr(parsedJson.SelectToken("Clienti[" & i & "].Provincia").ToString)) If Not parsedJson.SelectToken("Clienti[" & i & "].Stato") Is Nothing Then clifor.Replace("NAZIONE", SqlStr(parsedJson.SelectToken("Clienti[" & i & "].Stato.Descrizione").ToString)) End If clifor.Replace("PIVA", SqlStr(parsedJson.SelectToken("Clienti[" & i & "].PartIVA").ToString)) clifor.Replace("CODFISC", SqlStr(parsedJson.SelectToken("Clienti[" & i & "].CodFisc").ToString)) clifor.Replace("PAGAMENTO", SqlStr(parsedJson.SelectToken("Clienti[" & i & "].Pagamento.Descrizione").ToString)) clifor.Replace("EMAIL", SqlStr(parsedJson.SelectToken("Clienti[" & i & "].Email").ToString)) clifor.Replace("TELEFONO", SqlStr((parsedJson.SelectToken("Clienti[" & i & "].Telefono").ToString).Replace(" ", ""))) If Not clifor.SaveRecord(erroreSalvataggio) Then OK = False esito &= erroreSalvataggio & vbCrLf WriteLog(nomeActionLink & vbCrLf & erroreSalvataggio) End If clifor.Active = False 'SALVO LE INFORMAZIONI extra DEL JSON NELLE VARIE COLONNE DI ORGCF If Not parsedJson.SelectToken("Clienti[" & i & "].Agente") Is Nothing Then orgcf.SQL = "select * " orgcf.SQL += "from ORGCF " orgcf.SQL += "where CODICE = " & Chr(39) & CODICE & Chr(39) orgcf.Active = True If Not orgcf.RowSet.First() Then orgcf.BeginAppend() orgcf.Replace("CODICE", CODICE) End If Dim NOME_AGENTE As String = SqlStr(parsedJson.SelectToken("Clienti[" & i & "].Agente.RagioneSociale").ToString) temp.SQL += "select case " temp.SQL += "when (select count(*) from ORGCF where CODICE = " & Chr(39) & CODICE & Chr(39) temp.SQL += " and DESCPER = " & Chr(39) & NOME_AGENTE & Chr(39) & ") > 0 then isnull(max(CODORG), 0) " temp.SQL += "else -1 " temp.SQL += "end" temp.SQL += "from ORGCF " temp.Active = True If temp.RowSet.Fields(1).Value = -1 Then orgcf.Replace("CODORG", 1) Else orgcf.Replace("CODORG", temp.RowSet.Fields(1).Value) End If temp.Active = False orgcf.Replace("DESCPER", NOME_AGENTE) orgcf.Replace("DESCRUO", "AGENTE") If Not orgcf.SaveRecord(erroreSalvataggio) Then OK = False esito += erroreSalvataggio & vbCrLf WriteLog(nomeActionLink & vbCrLf & erroreSalvataggio) End If orgcf.Active = False End If Next Else esito += "Non ci sono Clienti !" & vbCrLf WriteLog(nomeActionLink & vbCrLf & esito) End If orgcf.Dispose() temp.Dispose() Else errcode = 1 esito += "Token non valido !" & vbCrLf End If If Not String.IsNullOrEmpty(esito) Then OK = False End If Catch e As Exception OK = False errcode = -1 erroreRequest = e.Message & vbCrLf & e.StackTrace WriteLog(nomeActionLink & vbCrLf & erroreRequest) End Try Dim ret_obj = New With {.ResultCode = errcode, .Result = IIf(OK, "OK", "KO"), .ErrResult = esito & vbCrLf & vbCrLf & erroreRequest} Return Newtonsoft.Json.JsonConvert.SerializeObject(ret_obj)