' 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)