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...

No Responses

  1. Karel Balac scrive:

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

  2. Karel Balac scrive:

    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

    • Antonio Musarra scrive:

      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 scrive:

        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

        • Antonio Musarra scrive:

          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.

  3. Karel Balac scrive:

    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

  4. Karel Balac scrive:

    sended.

    Thanks

    Karel

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">