un crm dentro un cms v1.0
DESCRIPTION
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.TRANSCRIPT
Antonio Musarra's Blog The ideal solution for a problem Blog: http://musarra.wordpress.com
Mail: [email protected]
23/09/12 -‐ Document Revision: 1.0 1 This document is issued with license Creative Commons Attribution-‐NonCommercial-‐ShareAlike
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.
Antonio Musarra's Blog The ideal solution for a problem Blog: http://musarra.wordpress.com
Mail: [email protected]
23/09/12 -‐ Document Revision: 1.0 2 This document is issued with license Creative Commons Attribution-‐NonCommercial-‐ShareAlike
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
o Tipo: Form o Method: POST
• Username o FieldName: user_name o Value: @screen_name@
• Password: o FieldName: user_password o Value: @password@
• Variabili Hidden o 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
Antonio Musarra's Blog The ideal solution for a problem Blog: http://musarra.wordpress.com
Mail: [email protected]
23/09/12 -‐ Document Revision: 1.0 3 This document is issued with license Creative Commons Attribution-‐NonCommercial-‐ShareAlike
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.
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.
Antonio Musarra's Blog The ideal solution for a problem Blog: http://musarra.wordpress.com
Mail: [email protected]
23/09/12 -‐ Document Revision: 1.0 4 This document is issued with license Creative Commons Attribution-‐NonCommercial-‐ShareAlike
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.
Il Listato 2 mostra il metodo getPassword() della classe IFrameUtil del package com.liferay.portlet.iframe.util che recupera la password utente dalla
Antonio Musarra's Blog The ideal solution for a problem Blog: http://musarra.wordpress.com
Mail: [email protected]
23/09/12 -‐ Document Revision: 1.0 5 This document is issued with license Creative Commons Attribution-‐NonCommercial-‐ShareAlike
sessione effettuando prima un controllo dell’associazione ruolo/utente tramite il metodo isPasswordTokenEnabled().
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
La configurazione mostra il ruolo (di un nome a vostra scelta) cui gli utenti devono appartenere e l’esplicita istruzione di memorizzare in sessione la
Antonio Musarra's Blog The ideal solution for a problem Blog: http://musarra.wordpress.com
Mail: [email protected]
23/09/12 -‐ Document Revision: 1.0 6 This document is issued with license Creative Commons Attribution-‐NonCommercial-‐ShareAlike
password dell’utente. L’applicazione di questa configurazione richiede l’operazione di riavvio del portale.
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.
Figura 4 Il CRM dentro il CMS.
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.