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.
Corso introduttivo di Design Pattern in Java per Elis - 1
Un CRM dentro un CMS v1.0
1. Antonio
Musarra's
Blog
The
ideal
solution
for
a
problem
Blog:
http://musarra.wordpress.com
Mail:
antonio.musarra@gmail.com
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.
23/09/12
-‐
Document
Revision:
1.0
1
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
2. Antonio
Musarra's
Blog
The
ideal
solution
for
a
problem
Blog:
http://musarra.wordpress.com
Mail:
antonio.musarra@gmail.com
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
23/09/12
-‐
Document
Revision:
1.0
2
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
3. Antonio
Musarra's
Blog
The
ideal
solution
for
a
problem
Blog:
http://musarra.wordpress.com
Mail:
antonio.musarra@gmail.com
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.
23/09/12
-‐
Document
Revision:
1.0
3
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
4. Antonio
Musarra's
Blog
The
ideal
solution
for
a
problem
Blog:
http://musarra.wordpress.com
Mail:
antonio.musarra@gmail.com
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
23/09/12
-‐
Document
Revision:
1.0
4
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
5. Antonio
Musarra's
Blog
The
ideal
solution
for
a
problem
Blog:
http://musarra.wordpress.com
Mail:
antonio.musarra@gmail.com
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
23/09/12
-‐
Document
Revision:
1.0
5
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
6. Antonio
Musarra's
Blog
The
ideal
solution
for
a
problem
Blog:
http://musarra.wordpress.com
Mail:
antonio.musarra@gmail.com
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.
23/09/12
-‐
Document
Revision:
1.0
6
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike