Costruire un client Java per SugarCRM


Ho avuto modo di accumulare diverse richieste da parte di persone che hanno incontrato delle difficoltà nello sviluppo di Client (Java, C#, PHP e Objective C) per l’interfaccia SOAP e REST messa a disposizione da SugarCRM.

Spesso la difficoltà nello sviluppo del client può dipendere da vari fattori, un breve elenco proveniente dalla mia esperienza sul campo:

  • Scelta del framework più adatto;
  • Limiti di alcuni framework a gestire determinate interfacce, magari perchè non supportano determinati standard WS-*;
  • Poca documentazione delle interfacce spesso priva di esempi

Ho appena completato e pubblicato il mio primo articolo della serie, che dovrebbe guidarvi alla costruzione di un client Java per SugarCRM. Il documento è disponibile su SlideShare: http://www.slideshare.net/amusarra/costruire-un-client-java-per-sugarcrm

Ho ritenuto opportuno creare un repository pubblico contenente quanto prodotto durante la stesura di quest’articolo. Il repository è raggiungibile all’indirizzo: https://github.com/amusarra/SugarCRMJavaSOAPClient

Per ogni vostra questione in merito al tema trattato, sono ben accetti i vostri commenti.

Bye,
Antonio Musarra.

14 pensieri su “Costruire un client Java per SugarCRM

  1. Pingback: Checkout SugarCRM Java SOAP Client | Antonio Musarra's Blog
  2. Pingback: Importazione Certificati SSL sul Java Keystore (JKS) « Antonio Musarra's Blog
  3. Salve Antonio,

    complimenti per l’articolo. Ho una domanda da fare. C’è un modo per passare l’username e la pass in modo dinamico quando si instanzia l’oggetto User_Auth? I webservice mettono a disposizione qualche metodo che ti restituisce l’username e la pass dell’utente per poi poter passarle al costruttore?

    Grazie mille per il contributo.

    • Ciao e grazie per l’apprezzamento.
      Certo che puoi passare username e password in modo dinamico, basta utilizzare i metodi setPassoword e setUser_name dell’oggetto User_auth. Io per ragioni di semplicità ho preferito cablare nel codice la coppia username/password.
      Non dovrebbero servirti delle operation per il get dello username e password dell’utente.

      Bye,
      Antonio.

      • Ciao grazie per la risposta tempestiva :P, ma cosa gli passo a quei metodi? come faccio a farmi restituire ad esempio che l’utente admin è loggato nella sessione corrente? se chiamo User_auth.getUserName() mi viene restituito il valore null…Devo fare una query sul modulo utenti? e farmi restituire il field name? Perchè a me interessa che per ogni utenza ( loggata ) dovrei prendere la lista di aziende e contatti.

        Un’altra domanda nelle classi java dove si trova il metodo get_user_id che si trova nella pagina soap.php di sugar?

      • Ciao Silv,
        la classe SugarCRMSoapClientAdvanced accetta tre parametri: {SugarCRM URL} {user name} {password}. Ti allego un esempio di output del client (eseguito con i paramentri:http://localhost:8888/CRM-6.2.2 admin admin)

        URL endpoint created successfully!
        URL endpoint: http://localhost:8888/CRM-6.2.2/service/v2/soap.php?wsdl
        Service created successfully
        Service Name:{http://www.sugarcrm.com/sugarcrm}sugarsoap
        Service WSDL:http://localhost:8888/CRM-6.2.2/service/v2/soap.php?wsdl
        Stub created successfully!
        SugarCRM Server Info...
        Version 6.2.2
        Flavor CE
        Login Successfully for admin
        Your session Id: fbfbaba9e0bd78f2e258ab0075a1d2dc
        Your UserId is: 1
        Get entries count was successful! Response: 2
        # Record n° 0
        Attribute Name: 'modified_by_name' Attribute Value: 'Administrator'
        Attribute Name: 'created_by_name' Attribute Value: 'Administrator'
        Attribute Name: 'id' Attribute Value: 'af8cdeb1-2e5a-e3c9-c4c7-4e77a5616426'
        Attribute Name: 'date_entered' Attribute Value: '2011-09-19 20:27:00'
        Attribute Name: 'date_modified' Attribute Value: '2011-09-19 21:13:41'
        Attribute Name: 'modified_user_id' Attribute Value: '1'
        Attribute Name: 'modified_user_name' Attribute Value: 'Administrator'
        Attribute Name: 'created_by' Attribute Value: '1'
        Attribute Name: 'description' Attribute Value: 'Contatto creato dal Client SOAP Java'
        Attribute Name: 'deleted' Attribute Value: '0'
        Attribute Name: 'first_name' Attribute Value: 'Deborah'
        Attribute Name: 'last_name' Attribute Value: 'Musarra'
        Attribute Name: 'title' Attribute Value: 'IT Senior Consultant'
        Attribute Name: 'do_not_call' Attribute Value: '0'
        Attribute Name: 'email1' Attribute Value: 'antonio.musarra@gmail.com'
        Attribute Name: 'opportunity_role_fields' Attribute Value: ' '
        Attribute Name: 'c_accept_status_fields' Attribute Value: ' '
        Attribute Name: 'm_accept_status_fields' Attribute Value: ' '
        # Record n° 1
        Attribute Name: 'modified_by_name' Attribute Value: 'Administrator'
        Attribute Name: 'created_by_name' Attribute Value: 'Administrator'
        Attribute Name: 'id' Attribute Value: 'e1c4ae8a-8d14-3a5f-a117-4e77a8c6a25e'
        Attribute Name: 'date_entered' Attribute Value: '2011-09-19 20:39:10'
        Attribute Name: 'date_modified' Attribute Value: '2011-09-19 20:39:10'
        Attribute Name: 'modified_user_id' Attribute Value: '1'
        Attribute Name: 'modified_user_name' Attribute Value: 'Administrator'
        Attribute Name: 'created_by' Attribute Value: '1'
        Attribute Name: 'description' Attribute Value: 'Contatto creato dal Client SOAP Java'
        Attribute Name: 'deleted' Attribute Value: '0'
        Attribute Name: 'first_name' Attribute Value: 'Antonio'
        Attribute Name: 'last_name' Attribute Value: 'Musarra'
        Attribute Name: 'title' Attribute Value: 'IT Senior Consultant'
        Attribute Name: 'do_not_call' Attribute Value: '0'
        Attribute Name: 'email1' Attribute Value: 'antonio.musarra@gmail.com'
        Attribute Name: 'opportunity_role_fields' Attribute Value: ' '
        Attribute Name: 'c_accept_status_fields' Attribute Value: ' '
        Attribute Name: 'm_accept_status_fields' Attribute Value: ' '
        Logout Successfully for admin

  4. Ciao Antonio,

    grazie mille per l’aiuto. Ho scritto una classe di test e funziona! :D, però i valori li scrivo sempre a mano volta per volta. Sugar mette a disposizione un metodo che restituisce username e pass dell’utente loggato così da passarli entrambi alla tua classe? Perchè in questo modo chiamo la classe e gli passo nel costruttore tre parametri ma li definisco sempre io, invece sarebbe bello che dalla sessione corrente mi venisse restituito l’username dell’utente loggato e anche la pass se è possibile per poi passarle direttamente alla tua classe come parametri, non so se mi sn spiegato.

    La tua classe mi è stata utilissima perchè devo far interagire due applicazioni una scritta in java ( Alfresco ) e l’altra appunto sugar ( PHP ). TI faccio queste domande perchè le utenze delle due applicazioni sono le stesse. Ho pensato ad un flusso del genere: Mi faccio restituire l’user e pass da Alfresco e poi li passo alla tua classe per loggarmi su sugar e farmi restituire le Aziende o i contatti dell’utenza di Alfresco che poi sarebbe la stessa loggata in sugar. Che ne pensi? 🙂

  5. Ciao Antonio,

    infatti in realtà dovrò implementare anche un sistema di SSO tra le due applicazioni. Però per il resto mi sembra che tornano i passi descritti da te, anche se poi si possono evolvere. Tu per l’SSO cosa mi consigli per iniziare a pensare a qualcosa? Ci sono degli strumenti flessibili e di apprendimento facile che possono soddisfare la mia esigenza?

    Ti ringrazio ancora per la tua enorme disponibilità ;).

    • Ciao Silv,
      esistono diverse soluzioni open CAS/SSO come per esempio JA-SIG Central Authentication Service (CAS), JOSSO, OpenSSO, etc. Alfresco non dovrebbe avere problemi d’integrazione con tutti questi strumenti, su SugarCRM ho qualche dubbio. SugarCRM riesce a fare authenticazione su server LDAP/AD oppure via SAML.

      Bye,
      Antonio.

  6. Ciao Antonio,

    sempre approposito di permessi e utenze, ho letto che con la professional edition di sugar si ha la possibilità di configurare i permessi per l’utente a livello di campi, è vero?

    se si volesse fare una cosa del genere con la CE si può impedire ad esempio ad un certo ruolo l’esecuzione di una logic hooks? Oppure rendere i campi di una vista di dettaglio di un certo modulo solo leggibili? ( classici campi in grigio ) .

    Grazie ancora per la tua disonibilità.

    • Ciao Silverio,
      la versione PRO e ENT hanno una gestione delle ACL molto più spinta dalla CE.
      L’accesso alle logic hooks potrebbe essere controllato via codice tramite l’oggetto ACL/ACLAction, così come anche la visibilità dei dati sulle viste.
      Per la CE esiste una modulo chiamato SecurityGroup che forse potrebbe rispondere a qualche tue requisito.

      Bye,
      Antonio.

  7. Pingback: SugarCRM Services: Build a Apache CXF Client « Antonio Musarra's Blog

Lascia un commento