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.

public static String getPassword(PortletRequest portletRequest, String password) 
throws PortalException, SystemException {

if (!isPasswordTokenEnabled(portletRequest)) {
return StringPool.BLANK;
}
if (Validator.isNull(password) || password.equals("@password@")) {
password = PortalUtil.getUserPassword(portletRequest);
if (password == null) {
password = StringPool.BLANK;
}
}
return password;
}

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.

###
# IFrame Portlet
###
# Specify a role name that a user must be associated with in order to
# configure the IFrame portlet to use the @password@ token. This token is
# used to post the password of users who access this portlet in order to
# automatically login to the framed site.
#
# No role is required by default. However, it is recommended that you
# specify a role in high security environments where users who configure
# this portlet may attempt password theft. See LPS-5272 for more
# information.
#
iframe.password.token.role=iFrameUserToken
##
## Session
##
#
# Set this to true to store the user's password in the session.
#
session.store.password=true

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