Un CRM dentro un CMS

Certamente il titolo dell’articolo può sembrare un po’ bizzarro ma non ho trovato titolo migliore. Avrei potuto dare un titolo del tipo “Integrazione tra CRM….” che a mio avviso per il tipo di soluzione descritta nel corso di quest’articolo, non si configura una vera integrazione.

Inizierei specificando meglio i soggetti del titolo attribuendogli un nome. I protagonisti sono, SugarCRM che implementa per l’appunto un sistema di Customer Relationship Management (abbreviato in CRM) e Liferay che invece implementa un sistema di Content Management System (abbreviato in CMS).

Stiamo attraversando una fase dov’è richiesta sempre di più l’integrazione tra i più disparati sistemi informativi che coprono responsabilità diverse, è come fare un puzzle, unire insiemi pezzi diversi in modo tale che la loro collaborazione consenta di raggiugere l’obiettivo, cercando di mantenere un’interfaccia unica per interagire con l’intero o parti del puzzle.

Nel corso di queste poche righe vedremo quindi come sia possibile e semplice mettere SugarCRM proprio “dentro” Liferay. Ipotizzando uno scenario dove Liferay implementa un portale operativo da cui è possibile accedere a informazioni e procedure di un’ipotetica azienda, non sarebbe una cosa fuori dal comune, consentire l’accesso al CRM direttamente dal portale senza essere obbligati a dover aprire una nuova finestra del browser evitando anche la ripetizione dell’autenticazione.

Raggiungere l’obiettivo è davvero semplice con Liferay, non sono richiesti sviluppi ma solamente attività di configurazione dell’iFrame Portlet, già disponibile di serie con Liferay. Quanto mostrato nel corso della trattazione è applicabile sia all’edizione Community sia all’edizione Enterprise di Liferay, la versione utilizza per quest’occasione è una 6.1 GA2 CE.

1.   Requisiti

Affinché la soluzione del “dentro” sia applicabile, è indispensabile che i seguenti requisiti siano soddisfatti:

  • Accesso al portale Liferay con un livello d’accesso di tipo amministrativo o con un ruolo tale da consentire l’aggiunta di applicazioni (portlet) e la possibilità di configurazione delle stesse;
  • Possibilità di esecuzione di attività di tipo sistemistico, tipo operazioni di start, stop e modifica delle configurazioni;
  • URL dell’istanza di SugarCRM.

2.   Funzionamento

Ogni utente del portale, quindi autenticato, potrà accedere direttamente dal portale alla propria area di lavoro del CRM senza spostarsi di “browser”, evitando per altro di ripetere la procedura d’autenticazione. Come introdotto in precedenza, questa possibilità è offerta dall’iFrame Portlet.

L’iFrame Portlet permette di inserire un’altra pagina HTML all’interno della pagina che ospita la portlet. Inoltre, l’utente può navigare attraverso la pagina “nascosta” senza perdere il contesto della pagina del portale.

L’iFrame Portlet utilizza il tag HTML iframe introdotto dalla versione 4 di HTML, ed è supportata in tutti i principali browser. L’iFrame Portlet consente di regolare la dimensione della pagina HTML e svariati altri attributi.

Una caratteristica importante di questa portlet e fondamentale in questo scenario è la possibilità di poter eseguire il processo di autenticazione al posto nostro. Sono supportati due tipi di autenticazione: Basic e Form, noi faremo uso del secondo metodo, comunque, la scelta dipende dal tipo di autenticazione supportata dall’applicazione web da integrare.

Avrete già intuito che un requisito indispensabile affinché l’autenticazione sia trasparente consiste nell’asserzione che sia username (solitamente l’attributo screen name) sia password dell’utente del portale coincida con le rispettive del CRM.

3.   Configurazione

Aggiunta la portlet su una vostra pagina, non resta che procedere con la configurazione i cui parametri principali e valori sono i seguenti:

  • URL dell’istanza di SugarCRM a cui volete dare l’accesso;
  • Tipo di autenticazione
    • Tipo: Form
    • Method: POST
    • Username
      • FieldName: user_name
      • Value: @screen_name@
    • Password:
      • FieldName: user_password
      • Value: @password@
    • Variabili Hidden
      • module=Users;action=Authenticate

I valori indicati come @screen_name@ e @password@ saranno poi sostituiti a runtime con i valori reali e in seguito inviati a SugarCRM nel processo d’autenticazione, ecco il motivo per cui è necessario che le credenziali coincidano; in caso contrario sarete necessariamente obbligati a eseguire manualmente l’autenticazione tramite la form di SugarCRM. In Figura 1 è mostrata la configurazione dell’iFrame portlet. L’URL specificato fa riferimento a un’istanza di SugarCRM CE 6.5 ospitata sul cloud Open Shift.

Figura 1 Configurazione iFrame Portlet per SugarCRM.

Figura 1 Configurazione iFrame Portlet per SugarCRM.

Esiste un meccanismo di sicurezza di Liferay tale per cui le vostre credenziali non sono memorizzate (in sessione, cookie, etc…) per impostazione predefinita, inoltre è possibile fare in modo che i soli utenti appartenenti a un determinato ruolo possano inviare la propria password a sistemi esterni tramite l’iFrame portlet.

Figura 2 Creazione del ruolo per l’autenticazione trasperente.

Figura 2 Creazione del ruolo per l’autenticazione trasperente.

Tramite delle properties di configurazione è possibile abilitare la memorizzazione della password (in chiaro) in sessione e specificare inoltre il ruolo da assegnare agli utenti che devono avere la possibilità di trasmettere la password all’esterno tramite la portlet iFrame.

Listato 1 Get della password dalla sessione (Link su Gist ).

Il Listato 1 mostra il metodo getPassword() della classe IFrameUtil del package com.liferay.portlet.iframe.util che recupera la password utente dalla sessione effettuando prima un controllo dell’associazione ruolo/utente tramite il metodo isPasswordTokenEnabled().

Figura 3 Associazione del ruolo all’utente.

Figura 3 Associazione del ruolo all’utente.

Listato 2 Configurazione file di properties portal-ext.properties (Link su Gist)

La configurazione (vedi Listato 2) mostra il ruolo (di un nome a vostra scelta) cui gli utenti devono appartenere e l’esplicita istruzione di memorizzare in sessione la password dell’utente. L’applicazione di questa configurazione richiede l’operazione di riavvio del portale. Il file di configurazione portal-ext.properties si trova o deve essere creato all’interno della directory webapps/ROOT/WEB-INF/classes.

A portale riavviato e portlet configurata in precedenza, basterà accedere con le vostre credenziali per avere la vostra area di lavoro CRM pronta all’uso, così come mostrato in Figura 4.

Figura 4 Il CRM dentro il CMS.

Figura 4 Il CRM dentro il CMS.

In Figura 5 è invece mostrato il passaggio dei parametri all’applicazione target, in questo caso SugarCRM. Ho evidenziato in particolare l’attributo password, passato in chiaro.

Figura 5 - Passaggio della password all'istanza di SugarCRM

Figura 5 – Passaggio della password all’istanza di SugarCRM

4.   Conclusioni

In questo breve articolo abbiamo visto come sia semplice integrare SugarCRM “dentro” Liferay sfruttando la potenzialità messa a disposizione dall’iFrame portlet. E’ senz’altro comodo poter eseguire l’autenticazione in modo trasparente. Questa soluzione può essere adottata per integrare qualunque tipo di applicazione web.

Antonio Musarra

I began my journey into the world of computing from an Olivetti M24 PC (http://it.wikipedia.org/wiki/Olivetti_M24) bought by my father for his work. Day after day, quickly taking control until … Now doing business consulting for projects in the enterprise application development using web-oriented technologies such as J2EE, Web Services, ESB, TIBCO, PHP.

You may also like...

  • Pingback: RE: Liferay with SugarCRM using iframe - Forums - Liferay.com

  • Karel Balac

    Antonio, please do you have an english version of this article?

    • http://musarra.wordpress.com Antonio Musarra

      Hi Karel,
      at this moment I have not the english version of the article. I hope in the next days I will able translate this article.

      Thanks you.

  • Karel Balac

    Many thanks Antonio. But im unable where can i find part Listing 1 and 2:

    “Through the configuration properties you can enable the storage of the password (unencrypted) in session, and also specify the role to be assigned to users who need to be able to send your password to the outside through the iFrame portlet.” and “Listing 2 shows GetPassword() class IFrameUtil com.liferay.portlet.iframe.util package that retrieves the user’s password from the session, checking the association role/user using the method isPasswordTokenEnabled().”

    I have succesfully configured Iframe portlet by Figure 1, role by Figure 2 assigned to user, same users with passwords in Liferay and SugarCRM, byt i cannot find where to change “configuration properties where i can enable the storage of the password”

    Many thnaks for your help

    Karel

    • http://musarra.wordpress.com Antonio Musarra

      Hi Karel,
      the configuration shown in Listing 2 must be specified in the file portal-ext.properties. This file must be created or found within the directory webapps/ROOT/WEB-INF/classes.
      I have updated also article.

      Bye,
      Antonio.

      • Karel Balac

        Hi Antonio, I created fikle portal-ext.properties and now iframe send username correctly but password still not. I have error message “You must specify a valid username and password.”.
        Need I set somewhere Listing 1 – Get clear password from session?

        Thanks

        Karel

        • http://musarra.wordpress.com Antonio Musarra

          Hi Karle,
          Q: Need I set somewhere Listing 1 – Get clear password from session?
          R: No. This is the class to get the clear password of the user.
          After create the portal-ext.properties, have you restarted liferay?
          Do you remember that the passwords must be equal (between Liferay and SugarCRM)?

          Bye,
          Antonio.

  • Karel Balac

    Hi Antonio,

    After create the portal-ext.properties, have you restarted liferay? YES
    Do you remember that the passwords must be equal (between Liferay and SugarCRM)? also YES

    In my portal-ext.properties is only configuration showed on Listing 2, is it enough?

    Regards

    Karel

    • http://musarra.wordpress.com Antonio Musarra

      Hi Karel,
      Q:In my portal-ext.properties is only configuration showed on Listing 2, is it enough?
      R: YES
      It ‘s really weird.
      You also have the role associated with the user?

      Bye,
      Antonio.

      • Karel Balac

        Hi Antonio,

        You also have the role associated with the user? also YES

        its really weird

        • http://musarra.wordpress.com Antonio Musarra

          Hi Karel,
          try to send me (antonio.musarra@gmail.com) the configuration of the iFrame Portlet.

          Bye and a good week end.
          Antonio.

  • Karel Balac

    sended.

    Thanks

    Karel