Home    | Software    | Articoli    | Tips'n Tricks    | Contattaci    | Supportaci  
Home arrow Articoli arrow Integrare SugarCRM con applicativi VB6

Integrare SugarCRM con applicativi VB6

Introduzione

Eccoci con un altro articolo sull'integrazione di SugarCRM con vari linguaggi/piattaforme. Questa volta ci occuperemo di interazione tra SugarCRM e VB6.
Molti sviluppatori e software house hanno deciso di non migrare il proprio codice VB6 a VB.NET per le più svariate ragioni, e ricevo costantemente richieste di consulenza e mentoring da parte di software house che necessitano integrazione tra i loro applicativi VB6 e SugarCRM.
Ci sono svariati modi per utilizzare SOAP in VB6, MS SOAP Toolkit è una delle più note ed usate malgrado ormai deprecata da Microsoft. Noi utilizzeremo un altro tool,
PocketSoap, che a mio parere è uno dei più completi e semplici da usare.
PocketSoap è, come specificato sul suo sito: "un componente COM client SOAP Open Source [
MPL] per la famiglia Windows". Ne faremo uso  per generare automaticamente tutte le classi necessarie per interagire con SugarCRM.



Generazione delle classi Proxy

Compito semplice, dato che tutto il lavoro lo svolgerà PocketSoap. Lanciamo il programma "PocketSOAP Wsdl Wizard". Tutto ciò di cui ha bisogno è la  URL del file WSDL esposto da SugarCRM.
Per i pigri, ecco la definizione di wsdl estratta da Wikipedia:
"The Web Services Description Language (WSDL, pronounced 'wiz-dəl' or spelled out, 'W-S-D-L') is an XML-based language that provides a model for describing Web services."
In pratica, un file wsdl descrive formalmente i metodi (operazioni) esposti da un web service e tutti i tipi di dati utilizzati. Partendo da questo, il wizard di pocketsoap  può tradurre le chiamate a questi metodi in codice VB.
Ora, questo è più o meno ciò che inseriremo nella prima schermata del wizard ("yourhost" sarà l'IP della nostra installazione SugarCRM):

PocketSoap sdl wizard 1

Accertiamoci che la directory indicata esista.
Dopo aver cliccato "Next", se tutto è a posto, ci verrà mostrata la lista di servizi trovati dal wizard:

PocketSoap wsdl wizard 2

Di nuovo, clicchiamo "Next" e vedremo la lista delle operazioni(metodi) esposte.

PocketSoap wsdl wizard 3


Assicuriamoci che siano tutte selezionate e clicchiamo per l'ultima volta "Next".
A questo punto, nella directory precedentemente selezionata, troveremo un progetto VB6 "ActiveX DLL" contenente tutte le classi di cui abbiamo bisogno. Il generatore aggiungerà automaticamente "PocketSoap Type Library" alla lista di "references" del nostro progetto.
Ora è tempo di mettere alla prova il codice generato per connetterci a SugarCRM.

 

Metodo "login"


Creiamo un progetto VB (un semplice progetto exe andrà benissimo)  ed aggiungiamo l'ActiveX DLL generato precedentemente alla lista di "references".
Le prime linee di codice che scriveremo sono:

Dim soap As sugarsoapPortType
Set soap = New sugarsoapPortType

per istanziare la classe proxy da usare per chiamare le varie operazioni.
La prima chiamata che faremo è  "login", per ottenere un "session id" richiesto dalla maggior parte delle altre operazioni.
"login" richiede come parametri un tipo "userauth" e un nome di applicazione. "userauth" si compone di: username,  password encodata md5  e una stringa indicante la versione. Ecco il codice:

Dim user As userauth
Dim loginresult As setentryresult

Set user = New userauth

user.username = "admin"
user.password = "526ee3641d541a646b4adff94e97dc8d"
user.version = "1.0"
Set loginresult = soap.login(user, "test")
If loginresult.Error.Number <> 0 Then
MsgBox loginresult.Error.Description + " - " + loginresult.Error.Description
Else
MsgBox loginresult.id
End If


"setentryresult" è il tipo di dato che la chiamata ci restituisce. Contiene un oggetto error (con proprietà number,name e description), e una stringa "id".
Se il login va a buon fine, "loginresult.Error.Number" sarà "0" e "loginresult.id" conterrà un session id valido che useremo in seguito.
Per ottenere l'hash md5 della password, ci sono in rete svariati servizi, come questo . Ad esempio, l'hash md5 che vedete nel codice corrisponde alla parola "adminpassword".
"user.version" parrebbe non essere rilevante,e il secondo parametro della chiamata "soap.login" call ("test" in questo caso) è il nome che vogliamo dare alla nostra applicazione.
Ora che abbiamo un session id valido ,possiamo chiamare metodi più interessanti esposti dall'interfaccia SOAP di SugarCRM.


Richieder dati a SugarCRM

Interrogheremo il modulo "Contacts" di SugarCRM per ottenere alcuni dati. Il metodo implicato è "get_entry_list" , che si aspetta i seguenti parametri:
  • un session id valido, quello ottenuto mediante la chiamata a "login"
  • il nome del modulo, "Contacts" nel nostro caso (o uno qualsiasi dei moduli di SugarCRM)
  • una query, la clausola "WHERE" in sql
  • l'ordine dei record, la clausola "ORDER BY" in sql
  • un "offset", da utilizzare in caso di paginazione
  • un array di stringhe contenente i nomi dei campi da restituire
  • il numero massimo di record da restituire
  • un flag "deleted" . Se diverso da  0 verranno restituiti anche i record cancellati (SugarCRM non cancella fisicamente i record, li marca come "deleted")

Esattamente come prima, prima istanziamo i vari oggetti dei tipi di dato che ci servono.


Dim entrylistresult As getentrylistresult
Dim elist() As entryvalue
Dim nvaluelist() As namevalue
Dim fields(0 To 3) As String
fields(0) = "first_name"
fields(1) = "last_name"
fields(2) = "email1"

Dim str As String
   
   
E alla fine chiamiamo il metodo "get_entry_list".


Set entrylistresult = soap.get_entry_list(loginresult.id, "Contacts", "contacts.last_name <>''", "contacts.last_name desc", 0, fields, 20, 0)
If entrylistresult.Error.Number <> 0 Then
MsgBox entrylistresult.Error.Description + " - " + entrylistresult.Error.Description
Else
elist = entrylistresult.entrylist
For t = 0 To UBound(elist)
nvaluelist = elist(t).namevaluelist
str = ""
For t1 = 0 To UBound(nvaluelist)
str = str + nvaluelist(t1).Name + " -" + nvaluelist(t1).Value + Chr$(10) + Chr$(13)
Next
MsgBox str
Next
End If

   
"entrylistresult", di tipo "getentrylistresult", contiene vari dati. Quelli che ci interessano sono il solito oggetto "error" e "entrylist",che è un array di "entryvalue", rappresentante il recordset. Ogni entryvalue è a sua volta un array di oggetti "namevalue", rappresentanti il singolo campo come coppia name/value.
   
   
   
   
  Scrivere dati su SugarCRM

L'ultimo metodo che vedremo è "set_entry". Lo usiamo per scrivere record su SugarCRM. Richiede i seguenti parametri:
  • un session id valido, quello ottenuto mediante la chiamata a "login"
  • il nome del modulo, "Contacts" nel nostro caso (o uno qualsiasi dei moduli di SugarCRM)
  • un array di "namevalue",contenente la lista di campi del record sotto forma di coppie name/value.

Ecco come facciamo:


Dim sentryresult As setentryresult

Dim namevaluelist(0 To 2) As namevalue
Set namevaluelist(0) = New namevalue
namevaluelist(0).Name = "first_name"
namevaluelist(0).Value = "ppppp"
Set namevaluelist(1) = New namevalue
namevaluelist(1).Name = "last_name"
namevaluelist(1).Value = "lllll"
Set namevaluelist(2) = New namevalue
namevaluelist(2).Name = "email1"
namevaluelist(2).Value = " Indirizzo e-mail protetto dal bots spam , deve abilitare Javascript per vederlo "

Set sentryresult = soap.set_entry(loginresult.id, "Contacts", namevaluelist)
If sentryresult.Error.Number <> 0 Then
MsgBox sentryresult.Error.Description + " - " + sentryresult.Error.Description
Else
MsgBox sentryresult.id
End If

il risultato della chiamata è di tipo "setentryresult", esattamente come per la chiamata a "login" , e conterrà un oggetto "error e l' "id" del record.
Una cosa importante da notare è che se una delle coppie "namevalue" che passiamo  ha "name"="id" e il "value" appartiene ad un record esistente, staremo facendo un "update",altrimenti verrà creato un nuovo record.
E' tutto per oggi.

Hasta la proxima.
 
Pros. >

  Articles RSS feed

Articoli pił recenti
Software pił recenti
   
designed by allmambo.com