SlideShare ist ein Scribd-Unternehmen logo
1 von 12
Downloaden Sie, um offline zu lesen
Antonio	
  Musarra's	
  Blog	
  
The	
  ideal	
  solution	
  for	
  a	
  problem	
                                                                                                      Blog:	
  http://musarra.wordpress.com	
  
                                                                                                                                                       Mail:	
  antonio.musarra@gmail.com	
  
	
  

Costruire	
  un	
  client	
  .NET	
  per	
  SugarCRM	
  
                                           Nel	
   corso	
   di	
   quest’articolo	
   vedremo	
   come	
   realizzare	
   un	
   client	
   .NET	
   per	
  
accedere	
  alle	
  informazioni	
  registrate	
  sul	
  sistema	
  di	
  CRM	
  e	
  sfruttare	
  il	
  client	
  come	
  
base	
  per	
  la	
  realizzazione	
  di	
  una	
  semplice	
  applicazione	
  .NET	
  C#	
  che	
  sia	
  in	
  grado	
  di	
  
eseguire	
   una	
   serie	
   di	
   operazioni	
   elementari	
   come:	
   login,	
   creazione	
   di	
   un	
   nuovo	
  
contatto	
  e	
  recupero	
  dati.	
  
                                           Il	
   sistema	
   SugarCRM (SugarCRM Inc.)	
   espone	
   verso	
   l’esterno	
   delle	
  
interfacce	
   che	
   supportano	
   i	
   protocolli	
   SOAP1	
  e	
   REST2,	
   tramite	
   queste	
   interfacce	
   è	
  
garantito	
   l’accesso	
   ai	
   dati	
   attraverso	
   una	
   serie	
   di	
   funzioni	
   o	
   operazioni	
   di	
   tipo	
  
CRUD 3 	
  (SugarCRM Inc.).	
   La	
   versione	
   di	
   SugarCRM	
   cui	
   faremo	
   riferimento	
  
durante	
  l’intero	
  articolo	
  è	
  la	
  6.1	
  Community	
  Edition	
  (SugarCRM Inc.).	
  
                                           Il	
   protocollo	
   che	
   utilizzeremo	
   per	
   l’interazione	
   tra	
   la	
   nostra	
   applicazione	
  
.NET	
  e	
  SugarCRM	
  è	
  il	
  protocollo	
  SOAP.	
  Esistono	
  modi	
  diversi	
  per	
  creare	
  un	
  client	
  
SOAP	
  C#	
  in	
  grado	
  di	
  colloquiare	
  con	
  un	
  servizio	
  web	
  sfruttando	
  .NET	
  Framework	
  
(Microsoft)	
  (Wikipedia).	
  
	
  
I	
  passi	
  da	
  seguire	
  per	
  raggiungere	
  il	
  nostro	
  obiettivo	
  sono	
  i	
  seguenti:	
  
                           • Generazione	
  del	
  client	
  SOAP	
  
                           • Compilazione	
  del	
  client	
  SOAP	
  come	
  .NET	
  Library	
  Assembly	
  
                           • Creazione	
  dell’applicazione	
  .NET	
  C#	
  
	
  
                                           Così	
   come	
   per	
   il	
   muratore	
   che	
   per	
   realizzare	
   una	
   casa	
   utilizza	
   gli	
   strumenti	
  
del	
  mestiere,	
  anche	
  noi	
  utilizzeremo	
  i	
  nostri	
  per	
  completare	
  l’opera:	
  
                               • .NET	
   Framework	
   SDK:	
  Runtime	
  e	
  strumenti	
  di	
  sviluppo.	
  La	
  versione	
  di	
  
                                                           riferimento	
  utilizzata	
  per	
  la	
  stesura	
  dell’articolo	
  è	
  la	
  4.0	
  del	
  framework.	
  Il	
  
                                                           supporto	
   ai	
   servizi	
   web	
   è	
   comunque	
   supportato	
   anche	
   da	
   versioni	
  
                                                           precedenti	
  del	
  framework.	
  	
  	
  
                               • SharpDevelop:	
   Ambiente	
   di	
   sviluppo	
   Open	
   Source	
   per	
   .NET.	
   La	
   versione	
  
                                                           di	
  riferimento	
  utilizzata	
  per	
  la	
  stesura	
  dell’articolo	
  è	
  la	
  4.1 (IC#Code)	
  
	
  
                                           L’articolo	
   è	
   rivolto	
   a	
   un	
   pubblico	
   che	
   abbia	
   le	
   conoscenze	
   di	
   base	
   dello	
  
sviluppo	
   software	
   su	
   piattaforma	
   .NET	
   e	
   in	
   particolare	
   utilizzando	
   il	
   linguaggio	
  
C#,	
  oltre	
  ad	
  avere	
  un	
  certa	
  familiarità	
  con	
  la	
  tecnologia	
  dei	
  servizi	
  web.	
  
                                           	
  
                                           Il	
   codice	
   sorgente	
   dell’intero	
   progetto	
   realizzato	
   nel	
   corso	
   dell’articolo	
   è	
  
disponibile	
  sul	
  repository	
  GitHub	
  all’indirizzo:	
  
	
  https://github.com/amusarra/SugarCRM_CE_SOAP_V21_DotNetClientLibrary	
  	
  
	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
1	
  SOAP	
  (inizialmente	
  acronimo	
  di	
  Simple	
  Object	
  Access	
  Protocol)	
  è	
  un	
  protocollo	
  leggero	
  per	
  lo	
  scambio	
  di	
  messaggi	
  tra	
  
componenti	
   software,	
   tipicamente	
   nella	
   forma	
   di	
   componentistica	
   software.	
   La	
   parola	
   object	
   manifesta	
   che	
   l'uso	
   del	
  
protocollo	
  dovrebbe	
  effettuarsi	
  secondo	
  il	
  paradigma	
  della	
  programmazione	
  orientata	
  agli	
  oggetti.	
  
2	
  Representational	
   State	
   Transfer	
   (REST)	
   è	
   un	
   tipo	
   di	
   architettura	
   software	
   per	
   i	
   sistemi	
   d’ipertesto	
   distribuiti	
   come	
   il	
  

World	
  Wide	
  Web.	
  REST	
  si	
  riferisce	
  a	
  un	
  insieme	
  di	
  principi	
  di	
  architetture	
  di	
  rete,	
  i	
  quali	
  delineano	
  come	
  le	
  risorse	
  sono	
  
definite	
  e	
  indirizzate.	
  I	
  sistemi	
  che	
  seguono	
  i	
  principi	
  REST	
  sono	
  spesso	
  definiti	
  "RESTful".	
  
3	
  Create,	
  Read,	
  Update	
  e	
  Delete	
  (CRUD)	
  sono	
  le	
  quattro	
  operazioni	
  base	
  per	
  la	
  persistenza	
  dei	
  dati.	
  

14/11/11	
                                                                                                                                                                                1	
  

       This	
  document	
  is	
  issued	
  with	
  license	
  Creative	
  Commons	
  Attribution-­‐NonCommercial-­‐ShareAlike	
  
                                                                                                                                                                                                                              	
  
	
  
Antonio	
  Musarra's	
  Blog	
  
The	
  ideal	
  solution	
  for	
  a	
  problem	
                                                                                                                                                                                  Blog:	
  http://musarra.wordpress.com	
  
                                                                                                                                                                                                                                   Mail:	
  antonio.musarra@gmail.com	
  
	
  
                           1. Creazione	
  del	
  Client	
  SOAP	
  
         Per	
  colloquiare	
  con	
  il	
  servizio	
  web	
  di	
  SugarCRM	
  occorre	
  creare	
  una	
  Proxy	
  
Class,	
  un	
  elemento	
  software	
  che	
  ci	
  consenta	
  di	
  accedere	
  in	
  modo	
  trasparente	
  al	
  
servizio	
  web	
  senza	
  preoccuparci	
  del	
  modo	
  con	
  cui	
  questo	
  è	
  chiamato	
  e	
  utilizzato.	
  	
  
La	
  Proxy	
  Class	
  deriva	
  direttamente	
  dal	
  documento	
  WSDL	
  che	
  descrive	
  il	
  servizio	
  
web.	
  SugarCRM,	
  dalla	
  versione	
  5.5,	
  ha	
  introdotto	
  il	
  supporto	
  al	
  versioning4	
  per	
  le	
  
proprie	
  API	
  esposte	
  come	
  servizio	
  web	
  sia	
  SOAP	
  sia	
  REST;	
  la	
  versione	
  delle	
  API	
  di	
  
riferimento	
  è	
  la	
  2.1 (SugarCRM Inc.).	
  
         Tramite	
  l’IDE	
  SharpDevelop,	
  sfruttando	
  la	
  funzione	
  di	
  Add	
  Web	
  Reference,	
  la	
  
creazione	
  della	
  Proxy	
  Class	
  è	
  pressoché	
  banale.	
  La	
  creazione	
  della	
  Proxy	
  Class	
  è	
  
un’operazione	
  che	
  può	
  anche	
  essere	
  eseguita	
  utilizzando	
  i	
  tool	
  dell’SDK	
  .NET,	
  nel	
  
Riquadro	
  2	
  è	
  mostrata	
  la	
  procedura	
  di	
  creazione	
  e	
  compilazione.	
  
         A	
   seguire	
   un	
   breve	
   riepilogo	
   dei	
   task	
   che	
   occorre	
   eseguire	
   su	
   SharpDevelop	
  
al	
  fine	
  di	
  creare	
  il	
  nostro	
  Assembly	
  che	
  sarà	
  poi	
  utilizzato	
  dall’applicazione	
  .NET	
  
C#	
  per	
  il	
  colloquio	
  con	
  SugarCRM:	
  
	
  
        • Creazione	
  di	
  un	
  nuovo	
  Progetto/Soluzione	
  
        • Creazione	
  della	
  Proxy	
  Class	
  tramite	
  la	
  funzione	
  Add	
  Web	
  Reference	
  
        • Compilazione	
  del	
  Progetto	
  
	
  
         Il	
   processo	
   di	
   creazione	
   della	
   Proxy	
   Class	
   richiede	
   obbligatoriamente	
   il	
  
documento	
   WSDL	
   del	
   servizio	
   web	
   di	
   SugarCRM,	
   il	
   WSDL	
   può	
   essere	
   remoto	
  
(http/s)	
  o	
  locale	
  (file	
  system).	
  Nel	
  nostro	
  caso	
  sfrutteremo	
  un’istanza	
  SugarCRM	
  
(Community	
   Edition	
   6.1.2)	
   installata	
   sulla	
   piattaforma	
   di	
   PHPFog (PHPFog)	
   e	
  
raggiungibile	
  all’indirizzo	
  https://shirus-­‐crm.phpfogapp.com.	
  Le	
  figure	
  mostrate	
  a	
  
seguire	
   illustrano	
   alcune	
   delle	
   fasi	
   importanti	
   del	
   processo	
   di	
   creazione	
   del	
  
progetto	
  su	
  SharpDevelop.	
  
	
  




                                                                                                                                                                                                                                                             	
  
	
  	
  	
  	
  Figura	
  1	
  Creazione	
  del	
  nuovo	
  progetto	
  come	
  Class	
  Library.	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
4	
  Vedere	
  bibliografia	
  (IBM, 2004), (Microsoft, 2005) e (SOA World Magazine, 2004)	
  
14/11/11	
                                                                                                                                                                                                                                                                     2	
  

                  This	
  document	
  is	
  issued	
  with	
  license	
  Creative	
  Commons	
  Attribution-­‐NonCommercial-­‐ShareAlike	
  
                                                                                                                                                                                                                                                                                  	
  
	
  
Antonio	
  Musarra's	
  Blog	
  
The	
  ideal	
  solution	
  for	
  a	
  problem	
                                                          Blog:	
  http://musarra.wordpress.com	
  
                                                                                                           Mail:	
  antonio.musarra@gmail.com	
  
	
  
         Il	
  nuovo	
  progetto	
  deve	
  essere	
  creato	
  utilizzando	
  il	
  template	
  Class	
  Library	
  e	
  
specificando	
   il	
   profilo	
   .NET	
   adeguato	
   (nel	
   nostro	
   caso	
   .NET	
   4	
   Client	
   Profile).	
   Il	
  
progetto	
  sarà	
  creato	
  all’interno	
  di	
  una	
  soluzione	
  che	
  prenderà	
  il	
  nome	
  specificato	
  
in	
  Solution	
  Name	
  (vedere	
  Figura	
  1).	
  
         	
  
         	
  




                                                                                                                        	
  
Figura	
  2	
  Accesso	
  alla	
  funzione	
  di	
  Add	
  Web	
  Reference.	
  

     Una	
   volta	
   creato	
   il	
   progetto	
   è	
   possibile	
   proseguire	
   con	
   la	
   creazione	
   della	
  
Proxy	
   Class	
   attraverso	
   la	
   funzione	
   Add	
   Web	
   Reference	
   raggiungibile	
   tramite	
   il	
  
menù	
  contestuale	
  del	
  progetto.	
  
     	
  
     	
  	
  




                                                                                                                                    	
  
	
  Figura	
  3	
  Add	
  Web	
  Reference:	
  WSDL	
  del	
  servizio	
  web	
  SugarCRM.	
  

         Il	
   documento	
   WSDL	
   che	
   descrive	
   il	
   servizio	
   web	
   di	
   SugarCRM	
   nel	
   nostro	
  
caso	
  è	
  https://shirus-­‐crm.phpfogapp.com/service/v2_1/soap.php?wsdl.	
  Per	
  ragioni	
  
di	
  semplicità	
  ho	
  preferito	
  rendere	
  più	
  semplici	
  il	
  Reference	
  Name	
  e	
  il	
  Namespace	
  
rispetto	
   ai	
   valori	
   proposti	
   di	
   default	
   (vedere	
   Figura	
   3).	
   Una	
   volta	
   acquisito	
   il	
  
WSDL	
   è	
   possibile	
   visionare	
   le	
   operazioni	
   esposte	
   dal	
   servizio	
   web	
   tramite	
   la	
  
linguetta	
  “Available	
  Web	
  Services”	
  (vedere	
  Figura	
  4).	
  	
  
         	
  
14/11/11	
                                                                                                                     3	
  

       This	
  document	
  is	
  issued	
  with	
  license	
  Creative	
  Commons	
  Attribution-­‐NonCommercial-­‐ShareAlike	
  
                                                                                                                                                       	
  
	
  
Antonio	
  Musarra's	
  Blog	
  
The	
  ideal	
  solution	
  for	
  a	
  problem	
                                                          Blog:	
  http://musarra.wordpress.com	
  
                                                                                                           Mail:	
  antonio.musarra@gmail.com	
  
	
  




                                                                                                                                           	
  
	
  Figura	
  4	
  Operazioni	
  esposte	
  dal	
  servizio	
  web.	
  

	
  




                                                                                                                                    	
  
Figura	
  5	
  Vista	
  del	
  progetto	
  dopo	
  l’operazione	
  Add	
  Web	
  Reference.	
  

     In	
   Figura	
   5	
   è	
   mostrato	
   il	
   risultato	
   ottenuto	
   dall’importazione	
   del	
   Web	
  
Reference,	
   il	
   file	
   Reference.cs	
   contiene	
   la	
   nostra	
   Proxy	
   Class.	
   Per	
   completare	
  
questa	
   prima	
   fase	
   non	
   resta	
   altro	
   che	
   compilare	
   il	
   progetto,	
   il	
   processo	
   di	
  
compilazione	
  creerà	
  dentro	
  la	
  directory	
  bin,	
  la	
  dll	
  dell’assembly.	
  	
  
	
  
	
  
	
  
	
  
	
  
	
  




14/11/11	
                                                                                                                                             4	
  

       This	
  document	
  is	
  issued	
  with	
  license	
  Creative	
  Commons	
  Attribution-­‐NonCommercial-­‐ShareAlike	
  
                                                                                                                                                          	
  
	
  
Antonio	
  Musarra's	
  Blog	
  
The	
  ideal	
  solution	
  for	
  a	
  problem	
                                                          Blog:	
  http://musarra.wordpress.com	
  
                                                                                                           Mail:	
  antonio.musarra@gmail.com	
  
	
  
         2. Creazione	
  dell’applicazione	
  .NET	
  C#	
  
          All’interno	
   della	
   soluzione	
   creata	
   per	
   il	
   progetto	
   della	
   Proxy	
   Class,	
  
dovremmo	
   aggiungere	
   un	
   nuovo	
   progetto	
   C#	
   che	
   chiameremo	
   per	
   esempio	
  
SugarCRM_SOAP_Console_Client	
   utilizzando	
   il	
   template	
   Windows	
   Console	
  
(categoria	
  Windows	
  Applications).	
  	
  
          Prima	
  di	
  proseguire	
  oltre,	
  aggiungiamo	
  al	
  nuovo	
  progetto	
  il	
  riferimento	
  alle	
  
librerie	
   SugarCRM_CE_SOAP_V21_ClientLibrary	
   e	
   System.Web.Services.	
   Il	
  
riferimento	
   alle	
   librerie	
   deve	
   essere	
   aggiunto	
   utilizzando	
   la	
   funzione	
   Add	
  
Reference	
  dal	
  menù	
  contestuale	
  del	
  progetto	
  (vedi	
  Figura	
  6	
  e	
  Figura	
  7).	
  
          La	
   semplice	
   applicazione	
   d’esempio	
   che	
   realizzeremo	
   dovrà	
   soddisfare	
   il	
  
seguente	
  flow:	
  
	
  
        a) Login	
  per	
  l’utente	
  specificato;	
  
        b) Lettura	
  di	
  alcune	
  informazioni	
  sul	
  sistema;	
  
        c) Lettura	
  di	
  alcune	
  informazioni	
  sull’utente	
  che	
  ha	
  eseguito	
  il	
  login;	
  
        d) Inserimento	
  di	
  un	
  nuovo	
  contatto;	
  
        e) Lettura	
  dei	
  dati	
  del	
  contatto	
  inserito	
  in	
  precedenza;	
  
        f) Logout	
  dell’utente	
  
	
  
          Prima	
   di	
   passare	
   alla	
   codifica	
   del	
   flow	
   precedente,	
   vediamo	
   di	
   descrivere	
  
brevemente	
  e	
  quali	
  sono	
  le	
  operazioni	
  del	
  servizio	
  web	
  che	
  dobbiamo	
  utilizzare	
  
al	
   fine	
   di	
   poter	
   realizzare	
   il	
   flow	
   indicato	
   e	
   i	
   modi	
   d’utilizzo	
   dell’applicazione	
  
stessa.	
  In	
  Tabella	
  1	
  sono	
  mostrate	
  in	
  ordine	
  le	
  operazioni	
  che	
  utilizzeremo.	
  Per	
  
maggiori	
   informazioni	
   di	
   dettaglio	
   sulle	
   API	
   di	
   SugarCRM	
   consiglio	
   la	
  
consultazione	
  della	
  relativa	
  documentazione.	
  
	
  




                                                                                                                                      	
  
Figura	
  6	
  Add	
  Reference.	
  

	
  


14/11/11	
                                                                                                                                             5	
  

       This	
  document	
  is	
  issued	
  with	
  license	
  Creative	
  Commons	
  Attribution-­‐NonCommercial-­‐ShareAlike	
  
                                                                                                                                                          	
  
	
  
Antonio	
  Musarra's	
  Blog	
  
The	
  ideal	
  solution	
  for	
  a	
  problem	
                                                          Blog:	
  http://musarra.wordpress.com	
  
                                                                                                           Mail:	
  antonio.musarra@gmail.com	
  
	
  




                                                                                                                                    	
  
Figura	
  7	
  Lista	
  riferimenti	
  del	
  progetto.	
  

	
  
Order	
   Operazione	
        Descrizione	
  
1	
       get_server_info	
   Restituisce	
  una	
  serie	
  d’informazioni	
  utili	
  a	
  identificare	
  
                              i	
   dettagli	
   dell’installazione	
   di	
   SugarCRM	
   (esempio:	
  
                              versione,	
  edizione,	
  etc…).	
  
2	
       login	
             Esegue	
   il	
   processo	
   di	
   login	
   per	
   l’utente	
   specificato,	
  
                              restituendo	
   l’identificativo	
   di	
   sessione	
   (SessionID).	
   Il	
  
                              valore	
  della	
  SessionID	
  è	
  utilizzato	
  in	
  tutte	
  le	
  operazioni	
  
                              che	
  richiedono	
  l’identificazione	
  dell’utente	
  corrente.	
  
3	
       get_user_id	
       Restituisce	
   l’identificativo	
   dell’utente	
   specificando	
   la	
  
                              sessione	
  corrente.	
  
4	
       set_entry	
         Inserisce	
   un	
   item	
   per	
   il	
   modulo	
   specificato,	
   per	
  
                              esempio	
  un	
  contatto,	
  leads,	
  accounts,	
  etc…	
  
5	
       get_entry	
         Restituisce	
   un	
   oggetto	
   che	
   si	
   riferisce	
   al	
   modulo	
  
                              specificato.	
  	
  
6	
       logout	
            Esegue	
  il	
  logout	
  dell’utente	
  corrente.	
  
Tabella	
  1	
  Operazioni	
  del	
  servizio	
  web	
  utilizzate	
  dall’applicazione.	
  

	
  
     La	
   nostra	
   applicazione	
   di	
   tipo	
   Windows	
   Console	
   accetterà	
   come	
   input	
   la	
  
coppia	
   username	
   e	
   password	
   più	
   l’indirizzo	
   (URL)	
   dell’istanza	
   SugarCRM	
   a	
   cui	
  
desideriamo	
  connetterci.	
  
	
  
Usage: SugarCRMClient.exe {username} {password} [SugarCRM URL]

Listato	
  1	
  Uso	
  del	
  client	
  SugarCRM	
  via	
  console.	
  

         L’utilizzo	
   del	
   client	
   non	
   richiederà	
   obbligatoriamente	
   di	
   specificare	
   l’URL	
  
dell’istanza	
   di	
   SugarCRM,	
   se	
   non	
   specificato	
   sarà	
   utilizzato	
   l’URL	
   da	
   cui	
   è	
   stato	
  
creato	
  il	
  client	
  SOAP	
  (Proxy	
  Class).	
  Il	
  Listato	
  1	
  mostra	
  come	
  utilizzare	
  il	
  client	
  a	
  
linea	
  di	
  comando	
  mentre	
  il	
  Listato	
  2	
  mostra	
  un	
  esempio	
  d’utilizzo.	
  
         	
  
         	
  
14/11/11	
                                                                                                                      6	
  

       This	
  document	
  is	
  issued	
  with	
  license	
  Creative	
  Commons	
  Attribution-­‐NonCommercial-­‐ShareAlike	
  
                                                                                                                                                       	
  
	
  
Antonio	
  Musarra's	
  Blog	
  
The	
  ideal	
  solution	
  for	
  a	
  problem	
                                                          Blog:	
  http://musarra.wordpress.com	
  
                                                                                                           Mail:	
  antonio.musarra@gmail.com	
  
	
  
SugarCRMClient.exe amusarra amusarra https://shirus-crm.phpfogapps.com

Listato	
  2	
  Esempio	
  di	
  utilizzo	
  del	
  client	
  SugarCRM.	
  

          L’URL	
  non	
  deve	
  essere	
  quello	
  del	
  documento	
  WSDL	
  ma	
  bensì	
  il	
  root	
  address	
  
di	
  SugarCRM,	
  sarà	
  poi	
  responsabilità	
  dell’applicazione	
  costruire	
  l’URL	
  completo	
  
delle	
  API.	
  L’output	
  dell’applicazione	
  sarà	
  mostrato	
  in	
  console.	
  
          A	
  grandi	
  linee	
  abbiamo	
  definito	
  le	
  funzioni	
  richieste	
  e	
  come	
  l’applicazione	
  
dovrà	
  essere	
  utilizzata,	
  a	
  questo	
  punto	
  possiamo	
  analizzare	
  brevemente	
  il	
  codice	
  
della	
   nostra	
   applicazione.	
   I	
   blocchi	
   di	
   codice	
   a	
   seguire	
   sono	
   mostrati	
   rispettando	
  
l’ordine	
  del	
  flow	
  indicato	
  in	
  precedenza.	
  	
  
	
  
	
  
// Create a new instance of SugarCRM SOAP Proxy Client
shirus.crm.phpfogapp.com.sugarsoap client = new shirus.crm.phpfogapp.com.sugarsoap();

if (SugarCRM_URL != null) {
       client.Url = SugarCRM_URL.AbsoluteUri + "service/v2_1/soap.php";
}

/**
 * Step 1) Try login to SugarCRM istance with username and password
 */

// Prepare a User Auth Object
shirus.crm.phpfogapp.com.user_auth userAuthInfo = new
shirus.crm.phpfogapp.com.user_auth();

userAuthInfo.user_name = sugarCRMUserName;
userAuthInfo.password = GetMD5Hash(sugarCRMPassword,false);

// Execute a login as admin
shirus.crm.phpfogapp.com.entry_value userSession = client.login(userAuthInfo,
"SugarCRM Console Client 1.0.0", null);
	
  
Listato	
  3	
  Operazione	
  di	
  login.	
  

	
  
/**
 * Step 2) Get SugarCRM Server Info
 */
Console.WriteLine("SugarCRM EndPoint URL: " + client.Url);
Console.WriteLine("SugarCRM Server Version: " + client.get_server_info().version);
Console.WriteLine("SugarCRM Server Edition: " + client.get_server_info().flavor);
Console.WriteLine("SugarCRM Server Time: " + client.get_server_info().gmt_time);

/**
 * Step 3) Get logged user info
 */
String userId = client.get_user_id(userSession.id);

Console.WriteLine("Welcome Your SessionID: " + userSession.id);
Console.WriteLine("Get user data...");
Console.WriteLine("---------- BEGIN USER DATA ----------");

shirus.crm.phpfogapp.com.get_entry_result_version2 userInfo =
client.get_entry(userSession.id, userSession.module_name, userId, null, null);


14/11/11	
                                                                                                                                             7	
  

       This	
  document	
  is	
  issued	
  with	
  license	
  Creative	
  Commons	
  Attribution-­‐NonCommercial-­‐ShareAlike	
  
                                                                                                                                                          	
  
	
  
Antonio	
  Musarra's	
  Blog	
  
The	
  ideal	
  solution	
  for	
  a	
  problem	
                                                          Blog:	
  http://musarra.wordpress.com	
  
                                                                                                           Mail:	
  antonio.musarra@gmail.com	
  
	
  
foreach (shirus.crm.phpfogapp.com.name_value nameValue in
userInfo.entry_list[0].name_value_list) {
        if (nameValue.value.Length > 0 && nameValue.name != "user_hash") {
               Console.WriteLine(nameValue.name + ": " + nameValue.value);
        }
}

Console.WriteLine("---------- END USER DATA ----------");
	
  
Listato	
  4	
  Informazioni	
  sul	
  server	
  SugarCRM	
  e	
  sull’utente	
  appena	
  loggato.	
  

	
  
/**
 * Step 4) Insert new contact
 */
Console.WriteLine("Try insert new Contact...");

Dictionary<string, string> contactsData = new Dictionary<string, string>();
contactsData.Add("first_name", "Antonio");
contactsData.Add("last_name","Musarra");
contactsData.Add("title", "IT Senior Consultant");
contactsData.Add("description", "Contacts created bye .NET SOAP Client");
contactsData.Add("email1","antonio.musarra@gmail.com");

shirus.crm.phpfogapp.com.name_value[] name_value_list = new
shirus.crm.phpfogapp.com.name_value[contactsData.Count];

int i = 0;
foreach (KeyValuePair<string, string> kvp in contactsData) {
        name_value_list[i] = new shirus.crm.phpfogapp.com.name_value();
        name_value_list[i].name = kvp.Key;
        name_value_list[i].value = kvp.Value;
        i++;
}

shirus.crm.phpfogapp.com.new_set_entry_result contactResult =
client.set_entry(userSession.id, "Contacts", name_value_list);
Console.WriteLine("New Contact as Id:" + contactResult.id);
	
  
Listato	
  5	
  Inserimento	
  di	
  un	
  nuovo	
  contatto.	
  

	
  
/**
 * Step 5) Get My Contacts
 */
Console.WriteLine("Get data for Contacts: " + contactResult.id);
Console.WriteLine("---------- BEGIN CONTACTS DATA ----------");
shirus.crm.phpfogapp.com.get_entry_result_version2 myContacts =
client.get_entry(userSession.id, "Contacts", contactResult.id, null, null);

foreach (shirus.crm.phpfogapp.com.name_value nameValue in
myContacts.entry_list[0].name_value_list) {
        if (nameValue.value.Length > 0) {
               Console.WriteLine(nameValue.name + ": " + nameValue.value);
        }
}
Console.WriteLine("---------- END CONTACTS DATA ----------");

/**

14/11/11	
                                                                                                                                             8	
  

       This	
  document	
  is	
  issued	
  with	
  license	
  Creative	
  Commons	
  Attribution-­‐NonCommercial-­‐ShareAlike	
  
                                                                                                                                                          	
  
	
  
Antonio	
  Musarra's	
  Blog	
  
The	
  ideal	
  solution	
  for	
  a	
  problem	
                                                          Blog:	
  http://musarra.wordpress.com	
  
                                                                                                           Mail:	
  antonio.musarra@gmail.com	
  
	
  
 * Step 6) Logout
 */
client.logout(userSession.id);
Console.WriteLine("User disconnected");
	
  
Listato	
  6	
  Recupero	
  dei	
  dati	
  del	
  contatto	
  e	
  logout	
  dell’utente.	
  

	
  
      Ricordo	
  che	
  l’intero	
  progetto	
  è	
  disponibile	
  sul	
  repository	
  pubblico	
  GitHub	
  
https://github.com/amusarra/SugarCRM_CE_SOAP_V21_DotNetClientLibrary	
  	
  
	
  
	
  




                                                                                                                                                                 	
  
Figura	
  8	
  Esecuzione	
  del	
  client	
  SugarCRMClient[0].	
  

	
  




                                                                                                                                                                 	
  
Figura	
  9	
  Esecuzione	
  del	
  client	
  SugarCRMClient[1].	
  

	
  
	
  
14/11/11	
                                                                                                                                             9	
  

       This	
  document	
  is	
  issued	
  with	
  license	
  Creative	
  Commons	
  Attribution-­‐NonCommercial-­‐ShareAlike	
  
                                                                                                                                                          	
  
	
  
Antonio	
  Musarra's	
  Blog	
  
The	
  ideal	
  solution	
  for	
  a	
  problem	
                                                          Blog:	
  http://musarra.wordpress.com	
  
                                                                                                           Mail:	
  antonio.musarra@gmail.com	
  
	
  
Appendice	
  
	
  
SugarCRM	
  on	
  PHPFog	
  
L’istanza	
  di	
  SugarCRM	
  a	
  cui	
  abbiamo	
  fatto	
  riferimento	
  è	
  installata	
  sulla	
  
piattaforma	
  di	
  cloud	
  PHPFog	
  i	
  cui	
  dati	
  di	
  accesso	
  sono	
  i	
  seguenti:	
  
	
  
URL:	
  https://shirus-­‐crm.phpfogapp.com	
  
User	
  Account:	
  
     • Administrator	
  =>	
  admin/admin	
  
     • User	
  =>	
  amusarra/amusarra	
  
Riquadro	
  1	
  Dati	
  di	
  accesso	
  all’istanza	
  SugarCRM.	
  

	
  
Creazione	
  Proxy	
  Class	
  via	
  SDK	
  .NET	
  
Dato	
  il	
  file	
  WSDL	
  del	
  servizio	
  web,	
  possiamo	
  creare	
  la	
  Proxy	
  Class	
  utilizzando	
  i	
  
tool	
  dell’SDK	
  .NET.	
  Il	
  tool	
  wsdl.exe	
  ci	
  permette	
  di	
  generare	
  la	
  Proxy	
  Class:	
  
	
  
wsdl /language:CS /v /n:shirus.crm.phpfogapp.com /o:	
  
SugarCRM_CE_SOAP_V21_ClientLibrary.cs https://shirus-
crm.phpfogapp.com/service/v2_1/soap.php?wsdl
	
  
Il	
  parametro	
  language	
  ci	
  permette	
  di	
  specificare	
  uno	
  dei	
  linguaggi	
  supportati	
  da	
  
.NET	
  Framework	
  (nell'esempio	
  è	
  richiesto	
  di	
  generare	
  una	
  classe	
  C#).	
  Il	
  risultato	
  
della	
  precedente	
  operazione	
  è	
  la	
  generazione	
  del	
  file	
  
SugarCRM_CE_SOAP_V21_ClientLibrary.cs,	
  contenente	
  il	
  codice	
  della	
  Proxy	
  Class	
  
per	
  il	
  servizio	
  SOAP	
  di	
  SugarCRM.	
  
	
  
A	
  questo	
  punto	
  non	
  ci	
  resta	
  che	
  compilare	
  il	
  file	
  di	
  cui	
  sopra,	
  sempre	
  utilizzando	
  
l'SDK	
  .NET:	
  
	
  
csc /t:library /out: SugarCRM_CE_SOAP_V21_ClientLibrary.dll
SugarCRM_CE_SOAP_V21_ClientLibrary.cs /r:system.dll /r:system.xml.dll
/r:system.web.services.dll
	
  
In	
  questo	
  modo	
  abbiamo	
  compilato	
  la	
  classe	
  come	
  libreria	
  di	
  classi	
  (/t:library)	
  
indicando	
  come	
  risultato	
  della	
  compilazione	
  l’assembly	
  
SugarCRM_CE_SOAP_V21_ClientLibrary.dll	
  ed	
  utilizzando	
  i	
  metadati	
  specificati	
  
nei	
  parametri	
  /r.	
  A	
  questo	
  punto	
  il	
  file	
  SugarCRM_CE_SOAP_V21_ClientLibrary.dll	
  
potrà	
  essere	
  utilizzato	
  come	
  libreria	
  dalle	
  applicazioni	
  .NET.	
  
Riquadro	
  2	
  Creazione	
  della	
  Proxy	
  Class	
  via	
  SDK	
  .NET	
  

	
  
	
  
	
  
	
  
	
  



14/11/11	
                                                                                                                                         10	
  

       This	
  document	
  is	
  issued	
  with	
  license	
  Creative	
  Commons	
  Attribution-­‐NonCommercial-­‐ShareAlike	
  
                                                                                                                                                       	
  
	
  
Antonio	
  Musarra's	
  Blog	
  
The	
  ideal	
  solution	
  for	
  a	
  problem	
                                                          Blog:	
  http://musarra.wordpress.com	
  
                                                                                                           Mail:	
  antonio.musarra@gmail.com	
  
	
  
Bibliography	
  
Antonio	
  Musarra's	
  Blog.	
  «PHP	
  Application	
  on	
  the	
  Cloud.»	
  30	
  August	
  2011.	
  
Antonio	
  Musarra's	
  Blog.	
  Antonio	
  Musarra.	
  
<http://musarra.wordpress.com/2011/08/30/php-­‐application-­‐on-­‐the-­‐cloud/>.	
  
	
  
IBM.	
  «Best	
  practices	
  for	
  Web	
  services	
  versioning.»	
  30	
  Jan	
  2004.	
  IBM	
  
DeveloperWorks.	
  Michael	
  Ellis	
  (msellis@ca.ibm.com)	
  Kyle	
  Brown	
  
(brownkyl@us.ibm.com).	
  
<http://www.ibm.com/developerworks/webservices/library/ws-­‐version/>.	
  
	
  
IC#Code.	
  «SharpDevelop.»	
  2000.	
  SharpDevelop.	
  IC#Code.	
  
<http://sharpdevelop.net/OpenSource/SD/>.	
  
	
  
Microsoft.	
  «.NET	
  Framework.»	
  2011.	
  Microsoft	
  MSDN.	
  Microsoft.	
  
<http://msdn.microsoft.com/en-­‐en/netframework>.	
  
	
  
—.	
  «Principles	
  of	
  Service	
  Design:	
  Service	
  Versioning	
  .»	
  August	
  2005.	
  Microsoft	
  	
  
MSDN.	
  John	
  Evdemon.	
  <http://msdn.microsoft.com/en-­‐
us/library/ms954726.aspx>.	
  
	
  
PHPFog.	
  «Rock-­‐solid	
  Cloud	
  Platform	
  for	
  PHP.»	
  August	
  2010.	
  Rock-­‐solid	
  Cloud	
  
Platform	
  for	
  PHP.	
  Lucas	
  Carlson.	
  <https://www.phpfog.com/>.	
  
	
  
SOA	
  World	
  Magazine.	
  «Design	
  Strategies	
  for	
  Web	
  Services	
  Versioning.»	
  5	
  April	
  
2004.	
  SOA	
  World	
  Magazine.	
  Anjali	
  Anagol-­‐Subbarao	
  Chris	
  Peltz.	
  <http://soa.sys-­‐
con.com/node/44356>.	
  
	
  
SugarCRM	
  Inc.	
  «Sugar	
  Community	
  Edition	
  Documentation.»	
  2010.	
  Sugar	
  
Community	
  Edition	
  Documentation.	
  SugarCRM	
  Inc.	
  
<http://www.sugarcrm.com/crm/support/documentation/SugarCommunityEdi
tion/6.1/-­‐docs-­‐Developer_Guides-­‐Sugar_Developer_Guide_6.1.0-­‐
Chapter%202%20Application%20Framework.html#9000244>.	
  
	
  
—.	
  «Sugar	
  Community	
  Edition	
  Documentation.»	
  2010.	
  Sugar	
  Community	
  Edition	
  
Documentation	
  |	
  SugarCRM	
  -­‐	
  Commercial	
  Open	
  Source	
  CRM.	
  SugarCRM	
  Inc.	
  
<http://www.sugarcrm.com/crm/support/documentation/SugarCommunityEdi
tion>.	
  
	
  
—.	
  «Sugar	
  Community	
  Edition	
  Documentation	
  -­‐	
  API	
  Definition.»	
  2010.	
  Sugar	
  
Community	
  Edition	
  Documentation.	
  SugarCRM	
  Inc.	
  
<http://www.sugarcrm.com/crm/support/documentation/SugarCommunityEdi
tion/6.1/-­‐docs-­‐Developer_Guides-­‐Sugar_Developer_Guide_6.1.0-­‐
Chapter%202%20Application%20Framework.html#9000303>.	
  
	
  
—.	
  «SugarCRM	
  -­‐	
  Commercial	
  Open	
  Source	
  CRM.»	
  2004.	
  SugarCRM	
  -­‐	
  Commercial	
  
Open	
  Source	
  CRM.	
  SugarCRM	
  Inc.	
  <http://www.sugarcrm.com/crm/>.	
  

14/11/11	
                                                                                                                                         11	
  

       This	
  document	
  is	
  issued	
  with	
  license	
  Creative	
  Commons	
  Attribution-­‐NonCommercial-­‐ShareAlike	
  
                                                                                                                                                       	
  
	
  
Antonio	
  Musarra's	
  Blog	
  
The	
  ideal	
  solution	
  for	
  a	
  problem	
                                                          Blog:	
  http://musarra.wordpress.com	
  
                                                                                                           Mail:	
  antonio.musarra@gmail.com	
  
	
  
Wikipedia.	
  «.NET	
  Framework.»	
  15	
  July	
  2011.	
  Wikipedia	
  -­‐	
  The	
  Free	
  Encyclopedia.	
  
Wikipedia.	
  <http://en.wikipedia.org/wiki/.NET_Framework>.	
  
	
  
	
  




14/11/11	
                                                                                                                                         12	
  

       This	
  document	
  is	
  issued	
  with	
  license	
  Creative	
  Commons	
  Attribution-­‐NonCommercial-­‐ShareAlike	
  
                                                                                                                                                       	
  
	
  

Weitere ähnliche Inhalte

Was ist angesagt?

Dependency injection questa sconosciuta
Dependency injection questa sconosciutaDependency injection questa sconosciuta
Dependency injection questa sconosciutaAndrea Dottor
 
SugarCRM Web Services: Build a Apache CXF Client
SugarCRM Web Services: Build a Apache CXF ClientSugarCRM Web Services: Build a Apache CXF Client
SugarCRM Web Services: Build a Apache CXF ClientAntonio Musarra
 
Del furia signalr-to-the-max
Del furia   signalr-to-the-maxDel furia   signalr-to-the-max
Del furia signalr-to-the-maxDotNetCampus
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRSManuel Scapolan
 
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiAndrea Dottor
 
Architetttura Della Soluzione
Architetttura Della SoluzioneArchitetttura Della Soluzione
Architetttura Della SoluzioneLuca Milan
 
Un CRM dentro un CMS v1.0
Un CRM dentro un CMS v1.0Un CRM dentro un CMS v1.0
Un CRM dentro un CMS v1.0Antonio Musarra
 
Introduzione agli Hooks – Primo Episodio
Introduzione agli Hooks – Primo EpisodioIntroduzione agli Hooks – Primo Episodio
Introduzione agli Hooks – Primo EpisodioAntonio Musarra
 
Windows azure - abbattere tempi e costi di sviluppo
Windows azure - abbattere tempi e costi di sviluppoWindows azure - abbattere tempi e costi di sviluppo
Windows azure - abbattere tempi e costi di sviluppoAndrea Dottor
 
AntiPatterns: i vizi del programmatore
AntiPatterns: i vizi del programmatoreAntiPatterns: i vizi del programmatore
AntiPatterns: i vizi del programmatoreManuel Scapolan
 
Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi Style
Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi StyleLiferay 7: Come realizzare un client SOAP con Apache CXF in OSGi Style
Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi StyleAntonio Musarra
 
DotNetCampus - Continuous Integration con Sql Server
DotNetCampus - Continuous Integration con Sql ServerDotNetCampus - Continuous Integration con Sql Server
DotNetCampus - Continuous Integration con Sql ServerAlessandro Alpi
 
Spring Framework
Spring FrameworkSpring Framework
Spring FrameworkNaLUG
 
Managed Extensibility Framework (MEF)
Managed Extensibility Framework (MEF)Managed Extensibility Framework (MEF)
Managed Extensibility Framework (MEF)Manuel Scapolan
 
Running Kettle Job by API v1.2
Running Kettle Job by API v1.2Running Kettle Job by API v1.2
Running Kettle Job by API v1.2Antonio Musarra
 
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015Codemotion
 
Javascript task automation
Javascript task automationJavascript task automation
Javascript task automationDotNetCampus
 

Was ist angesagt? (20)

jQuery
jQueryjQuery
jQuery
 
Dependency injection questa sconosciuta
Dependency injection questa sconosciutaDependency injection questa sconosciuta
Dependency injection questa sconosciuta
 
Wcf data services
Wcf data servicesWcf data services
Wcf data services
 
SugarCRM Web Services: Build a Apache CXF Client
SugarCRM Web Services: Build a Apache CXF ClientSugarCRM Web Services: Build a Apache CXF Client
SugarCRM Web Services: Build a Apache CXF Client
 
Del furia signalr-to-the-max
Del furia   signalr-to-the-maxDel furia   signalr-to-the-max
Del furia signalr-to-the-max
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRS
 
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivati
 
Architetttura Della Soluzione
Architetttura Della SoluzioneArchitetttura Della Soluzione
Architetttura Della Soluzione
 
Un CRM dentro un CMS v1.0
Un CRM dentro un CMS v1.0Un CRM dentro un CMS v1.0
Un CRM dentro un CMS v1.0
 
Introduzione agli Hooks – Primo Episodio
Introduzione agli Hooks – Primo EpisodioIntroduzione agli Hooks – Primo Episodio
Introduzione agli Hooks – Primo Episodio
 
Windows azure - abbattere tempi e costi di sviluppo
Windows azure - abbattere tempi e costi di sviluppoWindows azure - abbattere tempi e costi di sviluppo
Windows azure - abbattere tempi e costi di sviluppo
 
AntiPatterns: i vizi del programmatore
AntiPatterns: i vizi del programmatoreAntiPatterns: i vizi del programmatore
AntiPatterns: i vizi del programmatore
 
Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi Style
Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi StyleLiferay 7: Come realizzare un client SOAP con Apache CXF in OSGi Style
Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi Style
 
DotNetCampus - Continuous Integration con Sql Server
DotNetCampus - Continuous Integration con Sql ServerDotNetCampus - Continuous Integration con Sql Server
DotNetCampus - Continuous Integration con Sql Server
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Managed Extensibility Framework (MEF)
Managed Extensibility Framework (MEF)Managed Extensibility Framework (MEF)
Managed Extensibility Framework (MEF)
 
Running Kettle Job by API v1.2
Running Kettle Job by API v1.2Running Kettle Job by API v1.2
Running Kettle Job by API v1.2
 
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
 
Javascript task automation
Javascript task automationJavascript task automation
Javascript task automation
 

Ähnlich wie Costruire un client .NET per SugarCRM

Costruire un client Java per SugarCRM
Costruire un client Java per SugarCRMCostruire un client Java per SugarCRM
Costruire un client Java per SugarCRMAntonio Musarra
 
PHP Documentation APIs on the fly
PHP Documentation APIs on the flyPHP Documentation APIs on the fly
PHP Documentation APIs on the flyAntonio Musarra
 
Le applicazioni web e i CMS (18/19)
Le applicazioni web e i CMS (18/19)Le applicazioni web e i CMS (18/19)
Le applicazioni web e i CMS (18/19)Giuseppe Vizzari
 
Applicazioni web based
Applicazioni web basedApplicazioni web based
Applicazioni web basedMarco Liverani
 
Wasm and Blazor CDays keynote
Wasm and Blazor CDays keynoteWasm and Blazor CDays keynote
Wasm and Blazor CDays keynoteNicolò Carandini
 
Cms, Content Management System. Sistema di gestione dei contenuti
Cms, Content Management System. Sistema di gestione dei contenutiCms, Content Management System. Sistema di gestione dei contenuti
Cms, Content Management System. Sistema di gestione dei contenutiGiulia S
 
Christmas greetings cards with blazor
Christmas greetings cards with blazorChristmas greetings cards with blazor
Christmas greetings cards with blazorNicolò Carandini
 
Architetture a Microservizi con Docker Container
Architetture a Microservizi con Docker ContainerArchitetture a Microservizi con Docker Container
Architetture a Microservizi con Docker ContainerRoberto Messora
 
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angulardotnetcode
 
Webdays 2004 Blogfordummies2 Ok
Webdays 2004 Blogfordummies2 OkWebdays 2004 Blogfordummies2 Ok
Webdays 2004 Blogfordummies2 OkMassimo Schiro
 
II modulo – come gestire
II modulo – come gestireII modulo – come gestire
II modulo – come gestireBeesolution
 
Introduzione ai sistemi di Content Management System (CMS)
Introduzione ai sistemi di Content Management System (CMS)Introduzione ai sistemi di Content Management System (CMS)
Introduzione ai sistemi di Content Management System (CMS)Antonio Musarra
 
Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...
Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...
Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...Xhoi Kerbizi
 
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1dotnetcode
 
Wordpress, Google Analytics, MySQL e Php, con free hosting
Wordpress, Google Analytics, MySQL e Php, con free hostingWordpress, Google Analytics, MySQL e Php, con free hosting
Wordpress, Google Analytics, MySQL e Php, con free hostingCity Planner
 

Ähnlich wie Costruire un client .NET per SugarCRM (20)

Costruire un client Java per SugarCRM
Costruire un client Java per SugarCRMCostruire un client Java per SugarCRM
Costruire un client Java per SugarCRM
 
PHP Documentation APIs on the fly
PHP Documentation APIs on the flyPHP Documentation APIs on the fly
PHP Documentation APIs on the fly
 
7 - Web application e CMS
7 - Web application e CMS7 - Web application e CMS
7 - Web application e CMS
 
8 - Web App e CMS - 16/17
8 - Web App e CMS - 16/178 - Web App e CMS - 16/17
8 - Web App e CMS - 16/17
 
8 - Web app e CMS - 17/18
8 - Web app e CMS - 17/188 - Web app e CMS - 17/18
8 - Web app e CMS - 17/18
 
Le applicazioni web e i CMS (18/19)
Le applicazioni web e i CMS (18/19)Le applicazioni web e i CMS (18/19)
Le applicazioni web e i CMS (18/19)
 
Applicazioni web based
Applicazioni web basedApplicazioni web based
Applicazioni web based
 
07 - Web apps e CMS
07 - Web apps e CMS07 - Web apps e CMS
07 - Web apps e CMS
 
Spa with Blazor
Spa with BlazorSpa with Blazor
Spa with Blazor
 
Wasm and Blazor CDays keynote
Wasm and Blazor CDays keynoteWasm and Blazor CDays keynote
Wasm and Blazor CDays keynote
 
Cms, Content Management System. Sistema di gestione dei contenuti
Cms, Content Management System. Sistema di gestione dei contenutiCms, Content Management System. Sistema di gestione dei contenuti
Cms, Content Management System. Sistema di gestione dei contenuti
 
Christmas greetings cards with blazor
Christmas greetings cards with blazorChristmas greetings cards with blazor
Christmas greetings cards with blazor
 
Architetture a Microservizi con Docker Container
Architetture a Microservizi con Docker ContainerArchitetture a Microservizi con Docker Container
Architetture a Microservizi con Docker Container
 
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angular
 
Webdays 2004 Blogfordummies2 Ok
Webdays 2004 Blogfordummies2 OkWebdays 2004 Blogfordummies2 Ok
Webdays 2004 Blogfordummies2 Ok
 
II modulo – come gestire
II modulo – come gestireII modulo – come gestire
II modulo – come gestire
 
Introduzione ai sistemi di Content Management System (CMS)
Introduzione ai sistemi di Content Management System (CMS)Introduzione ai sistemi di Content Management System (CMS)
Introduzione ai sistemi di Content Management System (CMS)
 
Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...
Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...
Realizzazione di un ChatBot sulla piattaforma Messenger di Facebook per l'inf...
 
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
 
Wordpress, Google Analytics, MySQL e Php, con free hosting
Wordpress, Google Analytics, MySQL e Php, con free hostingWordpress, Google Analytics, MySQL e Php, con free hosting
Wordpress, Google Analytics, MySQL e Php, con free hosting
 

Mehr von Antonio Musarra

Liferay Portal CE 7.4: Come configurare Oracle Database 19c
Liferay Portal CE 7.4: Come configurare Oracle Database 19cLiferay Portal CE 7.4: Come configurare Oracle Database 19c
Liferay Portal CE 7.4: Come configurare Oracle Database 19cAntonio Musarra
 
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...Antonio Musarra
 
Come installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19c
Come installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19cCome installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19c
Come installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19cAntonio Musarra
 
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...Antonio Musarra
 
Liferay & Salesforce.com
Liferay & Salesforce.comLiferay & Salesforce.com
Liferay & Salesforce.comAntonio Musarra
 
Come installare Liferay 7 su JBOSS EAP con il supporto​ Oracle Database
Come installare Liferay 7 su JBOSS EAP con il supporto​ Oracle DatabaseCome installare Liferay 7 su JBOSS EAP con il supporto​ Oracle Database
Come installare Liferay 7 su JBOSS EAP con il supporto​ Oracle DatabaseAntonio Musarra
 
Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1Antonio Musarra
 
Liferay - Quick Start 1° Episodio
Liferay - Quick Start 1° EpisodioLiferay - Quick Start 1° Episodio
Liferay - Quick Start 1° EpisodioAntonio Musarra
 
How to Build a Java client for SugarCRM
How to Build a Java client for SugarCRMHow to Build a Java client for SugarCRM
How to Build a Java client for SugarCRMAntonio Musarra
 
Building a Client .NET for SugarCRM
Building a Client .NET for SugarCRMBuilding a Client .NET for SugarCRM
Building a Client .NET for SugarCRMAntonio Musarra
 
Come configurare Liferay 6.0 per Oracle
Come configurare Liferay 6.0 per OracleCome configurare Liferay 6.0 per Oracle
Come configurare Liferay 6.0 per OracleAntonio Musarra
 
HOW TO SAML Password Management (Note)
HOW TO SAML Password Management (Note)HOW TO SAML Password Management (Note)
HOW TO SAML Password Management (Note)Antonio Musarra
 
J-SugarCRM UserSync TechnicalGuide
J-SugarCRM UserSync TechnicalGuideJ-SugarCRM UserSync TechnicalGuide
J-SugarCRM UserSync TechnicalGuideAntonio Musarra
 
Configure Kettle debug session
Configure Kettle debug sessionConfigure Kettle debug session
Configure Kettle debug sessionAntonio Musarra
 

Mehr von Antonio Musarra (17)

Liferay Portal CE 7.4: Come configurare Oracle Database 19c
Liferay Portal CE 7.4: Come configurare Oracle Database 19cLiferay Portal CE 7.4: Come configurare Oracle Database 19c
Liferay Portal CE 7.4: Come configurare Oracle Database 19c
 
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...
 
Come installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19c
Come installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19cCome installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19c
Come installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19c
 
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...
 
Liferay & Salesforce.com
Liferay & Salesforce.comLiferay & Salesforce.com
Liferay & Salesforce.com
 
Come installare Liferay 7 su JBOSS EAP con il supporto​ Oracle Database
Come installare Liferay 7 su JBOSS EAP con il supporto​ Oracle DatabaseCome installare Liferay 7 su JBOSS EAP con il supporto​ Oracle Database
Come installare Liferay 7 su JBOSS EAP con il supporto​ Oracle Database
 
Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1
 
JAX-WS e JAX-RS
JAX-WS e JAX-RSJAX-WS e JAX-RS
JAX-WS e JAX-RS
 
OSGi e Liferay 7
OSGi e Liferay 7OSGi e Liferay 7
OSGi e Liferay 7
 
Liferay - Quick Start 1° Episodio
Liferay - Quick Start 1° EpisodioLiferay - Quick Start 1° Episodio
Liferay - Quick Start 1° Episodio
 
How to Build a Java client for SugarCRM
How to Build a Java client for SugarCRMHow to Build a Java client for SugarCRM
How to Build a Java client for SugarCRM
 
Building a Client .NET for SugarCRM
Building a Client .NET for SugarCRMBuilding a Client .NET for SugarCRM
Building a Client .NET for SugarCRM
 
Come configurare Liferay 6.0 per Oracle
Come configurare Liferay 6.0 per OracleCome configurare Liferay 6.0 per Oracle
Come configurare Liferay 6.0 per Oracle
 
HOW TO SAML Password Management (Note)
HOW TO SAML Password Management (Note)HOW TO SAML Password Management (Note)
HOW TO SAML Password Management (Note)
 
J-SugarCRM UserSync TechnicalGuide
J-SugarCRM UserSync TechnicalGuideJ-SugarCRM UserSync TechnicalGuide
J-SugarCRM UserSync TechnicalGuide
 
J-SugarCRM UserSync 1.0
J-SugarCRM UserSync 1.0J-SugarCRM UserSync 1.0
J-SugarCRM UserSync 1.0
 
Configure Kettle debug session
Configure Kettle debug sessionConfigure Kettle debug session
Configure Kettle debug session
 

Kürzlich hochgeladen

Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIinfogdgmi
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 

Kürzlich hochgeladen (9)

Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AI
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 

Costruire un client .NET per SugarCRM

  • 1. Antonio  Musarra's  Blog   The  ideal  solution  for  a  problem   Blog:  http://musarra.wordpress.com   Mail:  antonio.musarra@gmail.com     Costruire  un  client  .NET  per  SugarCRM   Nel   corso   di   quest’articolo   vedremo   come   realizzare   un   client   .NET   per   accedere  alle  informazioni  registrate  sul  sistema  di  CRM  e  sfruttare  il  client  come   base  per  la  realizzazione  di  una  semplice  applicazione  .NET  C#  che  sia  in  grado  di   eseguire   una   serie   di   operazioni   elementari   come:   login,   creazione   di   un   nuovo   contatto  e  recupero  dati.   Il   sistema   SugarCRM (SugarCRM Inc.)   espone   verso   l’esterno   delle   interfacce   che   supportano   i   protocolli   SOAP1  e   REST2,   tramite   queste   interfacce   è   garantito   l’accesso   ai   dati   attraverso   una   serie   di   funzioni   o   operazioni   di   tipo   CRUD 3  (SugarCRM Inc.).   La   versione   di   SugarCRM   cui   faremo   riferimento   durante  l’intero  articolo  è  la  6.1  Community  Edition  (SugarCRM Inc.).   Il   protocollo   che   utilizzeremo   per   l’interazione   tra   la   nostra   applicazione   .NET  e  SugarCRM  è  il  protocollo  SOAP.  Esistono  modi  diversi  per  creare  un  client   SOAP  C#  in  grado  di  colloquiare  con  un  servizio  web  sfruttando  .NET  Framework   (Microsoft)  (Wikipedia).     I  passi  da  seguire  per  raggiungere  il  nostro  obiettivo  sono  i  seguenti:   • Generazione  del  client  SOAP   • Compilazione  del  client  SOAP  come  .NET  Library  Assembly   • Creazione  dell’applicazione  .NET  C#     Così   come   per   il   muratore   che   per   realizzare   una   casa   utilizza   gli   strumenti   del  mestiere,  anche  noi  utilizzeremo  i  nostri  per  completare  l’opera:   • .NET   Framework   SDK:  Runtime  e  strumenti  di  sviluppo.  La  versione  di   riferimento  utilizzata  per  la  stesura  dell’articolo  è  la  4.0  del  framework.  Il   supporto   ai   servizi   web   è   comunque   supportato   anche   da   versioni   precedenti  del  framework.       • SharpDevelop:   Ambiente   di   sviluppo   Open   Source   per   .NET.   La   versione   di  riferimento  utilizzata  per  la  stesura  dell’articolo  è  la  4.1 (IC#Code)     L’articolo   è   rivolto   a   un   pubblico   che   abbia   le   conoscenze   di   base   dello   sviluppo   software   su   piattaforma   .NET   e   in   particolare   utilizzando   il   linguaggio   C#,  oltre  ad  avere  un  certa  familiarità  con  la  tecnologia  dei  servizi  web.     Il   codice   sorgente   dell’intero   progetto   realizzato   nel   corso   dell’articolo   è   disponibile  sul  repository  GitHub  all’indirizzo:    https://github.com/amusarra/SugarCRM_CE_SOAP_V21_DotNetClientLibrary                                                                                                                         1  SOAP  (inizialmente  acronimo  di  Simple  Object  Access  Protocol)  è  un  protocollo  leggero  per  lo  scambio  di  messaggi  tra   componenti   software,   tipicamente   nella   forma   di   componentistica   software.   La   parola   object   manifesta   che   l'uso   del   protocollo  dovrebbe  effettuarsi  secondo  il  paradigma  della  programmazione  orientata  agli  oggetti.   2  Representational   State   Transfer   (REST)   è   un   tipo   di   architettura   software   per   i   sistemi   d’ipertesto   distribuiti   come   il   World  Wide  Web.  REST  si  riferisce  a  un  insieme  di  principi  di  architetture  di  rete,  i  quali  delineano  come  le  risorse  sono   definite  e  indirizzate.  I  sistemi  che  seguono  i  principi  REST  sono  spesso  definiti  "RESTful".   3  Create,  Read,  Update  e  Delete  (CRUD)  sono  le  quattro  operazioni  base  per  la  persistenza  dei  dati.   14/11/11   1   This  document  is  issued  with  license  Creative  Commons  Attribution-­‐NonCommercial-­‐ShareAlike      
  • 2. Antonio  Musarra's  Blog   The  ideal  solution  for  a  problem   Blog:  http://musarra.wordpress.com   Mail:  antonio.musarra@gmail.com     1. Creazione  del  Client  SOAP   Per  colloquiare  con  il  servizio  web  di  SugarCRM  occorre  creare  una  Proxy   Class,  un  elemento  software  che  ci  consenta  di  accedere  in  modo  trasparente  al   servizio  web  senza  preoccuparci  del  modo  con  cui  questo  è  chiamato  e  utilizzato.     La  Proxy  Class  deriva  direttamente  dal  documento  WSDL  che  descrive  il  servizio   web.  SugarCRM,  dalla  versione  5.5,  ha  introdotto  il  supporto  al  versioning4  per  le   proprie  API  esposte  come  servizio  web  sia  SOAP  sia  REST;  la  versione  delle  API  di   riferimento  è  la  2.1 (SugarCRM Inc.).   Tramite  l’IDE  SharpDevelop,  sfruttando  la  funzione  di  Add  Web  Reference,  la   creazione  della  Proxy  Class  è  pressoché  banale.  La  creazione  della  Proxy  Class  è   un’operazione  che  può  anche  essere  eseguita  utilizzando  i  tool  dell’SDK  .NET,  nel   Riquadro  2  è  mostrata  la  procedura  di  creazione  e  compilazione.   A   seguire   un   breve   riepilogo   dei   task   che   occorre   eseguire   su   SharpDevelop   al  fine  di  creare  il  nostro  Assembly  che  sarà  poi  utilizzato  dall’applicazione  .NET   C#  per  il  colloquio  con  SugarCRM:     • Creazione  di  un  nuovo  Progetto/Soluzione   • Creazione  della  Proxy  Class  tramite  la  funzione  Add  Web  Reference   • Compilazione  del  Progetto     Il   processo   di   creazione   della   Proxy   Class   richiede   obbligatoriamente   il   documento   WSDL   del   servizio   web   di   SugarCRM,   il   WSDL   può   essere   remoto   (http/s)  o  locale  (file  system).  Nel  nostro  caso  sfrutteremo  un’istanza  SugarCRM   (Community   Edition   6.1.2)   installata   sulla   piattaforma   di   PHPFog (PHPFog)   e   raggiungibile  all’indirizzo  https://shirus-­‐crm.phpfogapp.com.  Le  figure  mostrate  a   seguire   illustrano   alcune   delle   fasi   importanti   del   processo   di   creazione   del   progetto  su  SharpDevelop.              Figura  1  Creazione  del  nuovo  progetto  come  Class  Library.                                                                                                                   4  Vedere  bibliografia  (IBM, 2004), (Microsoft, 2005) e (SOA World Magazine, 2004)   14/11/11   2   This  document  is  issued  with  license  Creative  Commons  Attribution-­‐NonCommercial-­‐ShareAlike      
  • 3. Antonio  Musarra's  Blog   The  ideal  solution  for  a  problem   Blog:  http://musarra.wordpress.com   Mail:  antonio.musarra@gmail.com     Il  nuovo  progetto  deve  essere  creato  utilizzando  il  template  Class  Library  e   specificando   il   profilo   .NET   adeguato   (nel   nostro   caso   .NET   4   Client   Profile).   Il   progetto  sarà  creato  all’interno  di  una  soluzione  che  prenderà  il  nome  specificato   in  Solution  Name  (vedere  Figura  1).         Figura  2  Accesso  alla  funzione  di  Add  Web  Reference.   Una   volta   creato   il   progetto   è   possibile   proseguire   con   la   creazione   della   Proxy   Class   attraverso   la   funzione   Add   Web   Reference   raggiungibile   tramite   il   menù  contestuale  del  progetto.            Figura  3  Add  Web  Reference:  WSDL  del  servizio  web  SugarCRM.   Il   documento   WSDL   che   descrive   il   servizio   web   di   SugarCRM   nel   nostro   caso  è  https://shirus-­‐crm.phpfogapp.com/service/v2_1/soap.php?wsdl.  Per  ragioni   di  semplicità  ho  preferito  rendere  più  semplici  il  Reference  Name  e  il  Namespace   rispetto   ai   valori   proposti   di   default   (vedere   Figura   3).   Una   volta   acquisito   il   WSDL   è   possibile   visionare   le   operazioni   esposte   dal   servizio   web   tramite   la   linguetta  “Available  Web  Services”  (vedere  Figura  4).       14/11/11   3   This  document  is  issued  with  license  Creative  Commons  Attribution-­‐NonCommercial-­‐ShareAlike      
  • 4. Antonio  Musarra's  Blog   The  ideal  solution  for  a  problem   Blog:  http://musarra.wordpress.com   Mail:  antonio.musarra@gmail.com        Figura  4  Operazioni  esposte  dal  servizio  web.       Figura  5  Vista  del  progetto  dopo  l’operazione  Add  Web  Reference.   In   Figura   5   è   mostrato   il   risultato   ottenuto   dall’importazione   del   Web   Reference,   il   file   Reference.cs   contiene   la   nostra   Proxy   Class.   Per   completare   questa   prima   fase   non   resta   altro   che   compilare   il   progetto,   il   processo   di   compilazione  creerà  dentro  la  directory  bin,  la  dll  dell’assembly.                 14/11/11   4   This  document  is  issued  with  license  Creative  Commons  Attribution-­‐NonCommercial-­‐ShareAlike      
  • 5. Antonio  Musarra's  Blog   The  ideal  solution  for  a  problem   Blog:  http://musarra.wordpress.com   Mail:  antonio.musarra@gmail.com     2. Creazione  dell’applicazione  .NET  C#   All’interno   della   soluzione   creata   per   il   progetto   della   Proxy   Class,   dovremmo   aggiungere   un   nuovo   progetto   C#   che   chiameremo   per   esempio   SugarCRM_SOAP_Console_Client   utilizzando   il   template   Windows   Console   (categoria  Windows  Applications).     Prima  di  proseguire  oltre,  aggiungiamo  al  nuovo  progetto  il  riferimento  alle   librerie   SugarCRM_CE_SOAP_V21_ClientLibrary   e   System.Web.Services.   Il   riferimento   alle   librerie   deve   essere   aggiunto   utilizzando   la   funzione   Add   Reference  dal  menù  contestuale  del  progetto  (vedi  Figura  6  e  Figura  7).   La   semplice   applicazione   d’esempio   che   realizzeremo   dovrà   soddisfare   il   seguente  flow:     a) Login  per  l’utente  specificato;   b) Lettura  di  alcune  informazioni  sul  sistema;   c) Lettura  di  alcune  informazioni  sull’utente  che  ha  eseguito  il  login;   d) Inserimento  di  un  nuovo  contatto;   e) Lettura  dei  dati  del  contatto  inserito  in  precedenza;   f) Logout  dell’utente     Prima   di   passare   alla   codifica   del   flow   precedente,   vediamo   di   descrivere   brevemente  e  quali  sono  le  operazioni  del  servizio  web  che  dobbiamo  utilizzare   al   fine   di   poter   realizzare   il   flow   indicato   e   i   modi   d’utilizzo   dell’applicazione   stessa.  In  Tabella  1  sono  mostrate  in  ordine  le  operazioni  che  utilizzeremo.  Per   maggiori   informazioni   di   dettaglio   sulle   API   di   SugarCRM   consiglio   la   consultazione  della  relativa  documentazione.       Figura  6  Add  Reference.     14/11/11   5   This  document  is  issued  with  license  Creative  Commons  Attribution-­‐NonCommercial-­‐ShareAlike      
  • 6. Antonio  Musarra's  Blog   The  ideal  solution  for  a  problem   Blog:  http://musarra.wordpress.com   Mail:  antonio.musarra@gmail.com       Figura  7  Lista  riferimenti  del  progetto.     Order   Operazione   Descrizione   1   get_server_info   Restituisce  una  serie  d’informazioni  utili  a  identificare   i   dettagli   dell’installazione   di   SugarCRM   (esempio:   versione,  edizione,  etc…).   2   login   Esegue   il   processo   di   login   per   l’utente   specificato,   restituendo   l’identificativo   di   sessione   (SessionID).   Il   valore  della  SessionID  è  utilizzato  in  tutte  le  operazioni   che  richiedono  l’identificazione  dell’utente  corrente.   3   get_user_id   Restituisce   l’identificativo   dell’utente   specificando   la   sessione  corrente.   4   set_entry   Inserisce   un   item   per   il   modulo   specificato,   per   esempio  un  contatto,  leads,  accounts,  etc…   5   get_entry   Restituisce   un   oggetto   che   si   riferisce   al   modulo   specificato.     6   logout   Esegue  il  logout  dell’utente  corrente.   Tabella  1  Operazioni  del  servizio  web  utilizzate  dall’applicazione.     La   nostra   applicazione   di   tipo   Windows   Console   accetterà   come   input   la   coppia   username   e   password   più   l’indirizzo   (URL)   dell’istanza   SugarCRM   a   cui   desideriamo  connetterci.     Usage: SugarCRMClient.exe {username} {password} [SugarCRM URL] Listato  1  Uso  del  client  SugarCRM  via  console.   L’utilizzo   del   client   non   richiederà   obbligatoriamente   di   specificare   l’URL   dell’istanza   di   SugarCRM,   se   non   specificato   sarà   utilizzato   l’URL   da   cui   è   stato   creato  il  client  SOAP  (Proxy  Class).  Il  Listato  1  mostra  come  utilizzare  il  client  a   linea  di  comando  mentre  il  Listato  2  mostra  un  esempio  d’utilizzo.       14/11/11   6   This  document  is  issued  with  license  Creative  Commons  Attribution-­‐NonCommercial-­‐ShareAlike      
  • 7. Antonio  Musarra's  Blog   The  ideal  solution  for  a  problem   Blog:  http://musarra.wordpress.com   Mail:  antonio.musarra@gmail.com     SugarCRMClient.exe amusarra amusarra https://shirus-crm.phpfogapps.com Listato  2  Esempio  di  utilizzo  del  client  SugarCRM.   L’URL  non  deve  essere  quello  del  documento  WSDL  ma  bensì  il  root  address   di  SugarCRM,  sarà  poi  responsabilità  dell’applicazione  costruire  l’URL  completo   delle  API.  L’output  dell’applicazione  sarà  mostrato  in  console.   A  grandi  linee  abbiamo  definito  le  funzioni  richieste  e  come  l’applicazione   dovrà  essere  utilizzata,  a  questo  punto  possiamo  analizzare  brevemente  il  codice   della   nostra   applicazione.   I   blocchi   di   codice   a   seguire   sono   mostrati   rispettando   l’ordine  del  flow  indicato  in  precedenza.         // Create a new instance of SugarCRM SOAP Proxy Client shirus.crm.phpfogapp.com.sugarsoap client = new shirus.crm.phpfogapp.com.sugarsoap(); if (SugarCRM_URL != null) { client.Url = SugarCRM_URL.AbsoluteUri + "service/v2_1/soap.php"; } /** * Step 1) Try login to SugarCRM istance with username and password */ // Prepare a User Auth Object shirus.crm.phpfogapp.com.user_auth userAuthInfo = new shirus.crm.phpfogapp.com.user_auth(); userAuthInfo.user_name = sugarCRMUserName; userAuthInfo.password = GetMD5Hash(sugarCRMPassword,false); // Execute a login as admin shirus.crm.phpfogapp.com.entry_value userSession = client.login(userAuthInfo, "SugarCRM Console Client 1.0.0", null);   Listato  3  Operazione  di  login.     /** * Step 2) Get SugarCRM Server Info */ Console.WriteLine("SugarCRM EndPoint URL: " + client.Url); Console.WriteLine("SugarCRM Server Version: " + client.get_server_info().version); Console.WriteLine("SugarCRM Server Edition: " + client.get_server_info().flavor); Console.WriteLine("SugarCRM Server Time: " + client.get_server_info().gmt_time); /** * Step 3) Get logged user info */ String userId = client.get_user_id(userSession.id); Console.WriteLine("Welcome Your SessionID: " + userSession.id); Console.WriteLine("Get user data..."); Console.WriteLine("---------- BEGIN USER DATA ----------"); shirus.crm.phpfogapp.com.get_entry_result_version2 userInfo = client.get_entry(userSession.id, userSession.module_name, userId, null, null); 14/11/11   7   This  document  is  issued  with  license  Creative  Commons  Attribution-­‐NonCommercial-­‐ShareAlike      
  • 8. Antonio  Musarra's  Blog   The  ideal  solution  for  a  problem   Blog:  http://musarra.wordpress.com   Mail:  antonio.musarra@gmail.com     foreach (shirus.crm.phpfogapp.com.name_value nameValue in userInfo.entry_list[0].name_value_list) { if (nameValue.value.Length > 0 && nameValue.name != "user_hash") { Console.WriteLine(nameValue.name + ": " + nameValue.value); } } Console.WriteLine("---------- END USER DATA ----------");   Listato  4  Informazioni  sul  server  SugarCRM  e  sull’utente  appena  loggato.     /** * Step 4) Insert new contact */ Console.WriteLine("Try insert new Contact..."); Dictionary<string, string> contactsData = new Dictionary<string, string>(); contactsData.Add("first_name", "Antonio"); contactsData.Add("last_name","Musarra"); contactsData.Add("title", "IT Senior Consultant"); contactsData.Add("description", "Contacts created bye .NET SOAP Client"); contactsData.Add("email1","antonio.musarra@gmail.com"); shirus.crm.phpfogapp.com.name_value[] name_value_list = new shirus.crm.phpfogapp.com.name_value[contactsData.Count]; int i = 0; foreach (KeyValuePair<string, string> kvp in contactsData) { name_value_list[i] = new shirus.crm.phpfogapp.com.name_value(); name_value_list[i].name = kvp.Key; name_value_list[i].value = kvp.Value; i++; } shirus.crm.phpfogapp.com.new_set_entry_result contactResult = client.set_entry(userSession.id, "Contacts", name_value_list); Console.WriteLine("New Contact as Id:" + contactResult.id);   Listato  5  Inserimento  di  un  nuovo  contatto.     /** * Step 5) Get My Contacts */ Console.WriteLine("Get data for Contacts: " + contactResult.id); Console.WriteLine("---------- BEGIN CONTACTS DATA ----------"); shirus.crm.phpfogapp.com.get_entry_result_version2 myContacts = client.get_entry(userSession.id, "Contacts", contactResult.id, null, null); foreach (shirus.crm.phpfogapp.com.name_value nameValue in myContacts.entry_list[0].name_value_list) { if (nameValue.value.Length > 0) { Console.WriteLine(nameValue.name + ": " + nameValue.value); } } Console.WriteLine("---------- END CONTACTS DATA ----------"); /** 14/11/11   8   This  document  is  issued  with  license  Creative  Commons  Attribution-­‐NonCommercial-­‐ShareAlike      
  • 9. Antonio  Musarra's  Blog   The  ideal  solution  for  a  problem   Blog:  http://musarra.wordpress.com   Mail:  antonio.musarra@gmail.com     * Step 6) Logout */ client.logout(userSession.id); Console.WriteLine("User disconnected");   Listato  6  Recupero  dei  dati  del  contatto  e  logout  dell’utente.     Ricordo  che  l’intero  progetto  è  disponibile  sul  repository  pubblico  GitHub   https://github.com/amusarra/SugarCRM_CE_SOAP_V21_DotNetClientLibrary           Figura  8  Esecuzione  del  client  SugarCRMClient[0].       Figura  9  Esecuzione  del  client  SugarCRMClient[1].       14/11/11   9   This  document  is  issued  with  license  Creative  Commons  Attribution-­‐NonCommercial-­‐ShareAlike      
  • 10. Antonio  Musarra's  Blog   The  ideal  solution  for  a  problem   Blog:  http://musarra.wordpress.com   Mail:  antonio.musarra@gmail.com     Appendice     SugarCRM  on  PHPFog   L’istanza  di  SugarCRM  a  cui  abbiamo  fatto  riferimento  è  installata  sulla   piattaforma  di  cloud  PHPFog  i  cui  dati  di  accesso  sono  i  seguenti:     URL:  https://shirus-­‐crm.phpfogapp.com   User  Account:   • Administrator  =>  admin/admin   • User  =>  amusarra/amusarra   Riquadro  1  Dati  di  accesso  all’istanza  SugarCRM.     Creazione  Proxy  Class  via  SDK  .NET   Dato  il  file  WSDL  del  servizio  web,  possiamo  creare  la  Proxy  Class  utilizzando  i   tool  dell’SDK  .NET.  Il  tool  wsdl.exe  ci  permette  di  generare  la  Proxy  Class:     wsdl /language:CS /v /n:shirus.crm.phpfogapp.com /o:   SugarCRM_CE_SOAP_V21_ClientLibrary.cs https://shirus- crm.phpfogapp.com/service/v2_1/soap.php?wsdl   Il  parametro  language  ci  permette  di  specificare  uno  dei  linguaggi  supportati  da   .NET  Framework  (nell'esempio  è  richiesto  di  generare  una  classe  C#).  Il  risultato   della  precedente  operazione  è  la  generazione  del  file   SugarCRM_CE_SOAP_V21_ClientLibrary.cs,  contenente  il  codice  della  Proxy  Class   per  il  servizio  SOAP  di  SugarCRM.     A  questo  punto  non  ci  resta  che  compilare  il  file  di  cui  sopra,  sempre  utilizzando   l'SDK  .NET:     csc /t:library /out: SugarCRM_CE_SOAP_V21_ClientLibrary.dll SugarCRM_CE_SOAP_V21_ClientLibrary.cs /r:system.dll /r:system.xml.dll /r:system.web.services.dll   In  questo  modo  abbiamo  compilato  la  classe  come  libreria  di  classi  (/t:library)   indicando  come  risultato  della  compilazione  l’assembly   SugarCRM_CE_SOAP_V21_ClientLibrary.dll  ed  utilizzando  i  metadati  specificati   nei  parametri  /r.  A  questo  punto  il  file  SugarCRM_CE_SOAP_V21_ClientLibrary.dll   potrà  essere  utilizzato  come  libreria  dalle  applicazioni  .NET.   Riquadro  2  Creazione  della  Proxy  Class  via  SDK  .NET             14/11/11   10   This  document  is  issued  with  license  Creative  Commons  Attribution-­‐NonCommercial-­‐ShareAlike      
  • 11. Antonio  Musarra's  Blog   The  ideal  solution  for  a  problem   Blog:  http://musarra.wordpress.com   Mail:  antonio.musarra@gmail.com     Bibliography   Antonio  Musarra's  Blog.  «PHP  Application  on  the  Cloud.»  30  August  2011.   Antonio  Musarra's  Blog.  Antonio  Musarra.   <http://musarra.wordpress.com/2011/08/30/php-­‐application-­‐on-­‐the-­‐cloud/>.     IBM.  «Best  practices  for  Web  services  versioning.»  30  Jan  2004.  IBM   DeveloperWorks.  Michael  Ellis  (msellis@ca.ibm.com)  Kyle  Brown   (brownkyl@us.ibm.com).   <http://www.ibm.com/developerworks/webservices/library/ws-­‐version/>.     IC#Code.  «SharpDevelop.»  2000.  SharpDevelop.  IC#Code.   <http://sharpdevelop.net/OpenSource/SD/>.     Microsoft.  «.NET  Framework.»  2011.  Microsoft  MSDN.  Microsoft.   <http://msdn.microsoft.com/en-­‐en/netframework>.     —.  «Principles  of  Service  Design:  Service  Versioning  .»  August  2005.  Microsoft     MSDN.  John  Evdemon.  <http://msdn.microsoft.com/en-­‐ us/library/ms954726.aspx>.     PHPFog.  «Rock-­‐solid  Cloud  Platform  for  PHP.»  August  2010.  Rock-­‐solid  Cloud   Platform  for  PHP.  Lucas  Carlson.  <https://www.phpfog.com/>.     SOA  World  Magazine.  «Design  Strategies  for  Web  Services  Versioning.»  5  April   2004.  SOA  World  Magazine.  Anjali  Anagol-­‐Subbarao  Chris  Peltz.  <http://soa.sys-­‐ con.com/node/44356>.     SugarCRM  Inc.  «Sugar  Community  Edition  Documentation.»  2010.  Sugar   Community  Edition  Documentation.  SugarCRM  Inc.   <http://www.sugarcrm.com/crm/support/documentation/SugarCommunityEdi tion/6.1/-­‐docs-­‐Developer_Guides-­‐Sugar_Developer_Guide_6.1.0-­‐ Chapter%202%20Application%20Framework.html#9000244>.     —.  «Sugar  Community  Edition  Documentation.»  2010.  Sugar  Community  Edition   Documentation  |  SugarCRM  -­‐  Commercial  Open  Source  CRM.  SugarCRM  Inc.   <http://www.sugarcrm.com/crm/support/documentation/SugarCommunityEdi tion>.     —.  «Sugar  Community  Edition  Documentation  -­‐  API  Definition.»  2010.  Sugar   Community  Edition  Documentation.  SugarCRM  Inc.   <http://www.sugarcrm.com/crm/support/documentation/SugarCommunityEdi tion/6.1/-­‐docs-­‐Developer_Guides-­‐Sugar_Developer_Guide_6.1.0-­‐ Chapter%202%20Application%20Framework.html#9000303>.     —.  «SugarCRM  -­‐  Commercial  Open  Source  CRM.»  2004.  SugarCRM  -­‐  Commercial   Open  Source  CRM.  SugarCRM  Inc.  <http://www.sugarcrm.com/crm/>.   14/11/11   11   This  document  is  issued  with  license  Creative  Commons  Attribution-­‐NonCommercial-­‐ShareAlike      
  • 12. Antonio  Musarra's  Blog   The  ideal  solution  for  a  problem   Blog:  http://musarra.wordpress.com   Mail:  antonio.musarra@gmail.com     Wikipedia.  «.NET  Framework.»  15  July  2011.  Wikipedia  -­‐  The  Free  Encyclopedia.   Wikipedia.  <http://en.wikipedia.org/wiki/.NET_Framework>.       14/11/11   12   This  document  is  issued  with  license  Creative  Commons  Attribution-­‐NonCommercial-­‐ShareAlike