SlideShare a Scribd company logo
1 of 9
Download to read offline
Antonio	
  Musarra's	
  Blog	
   Document Revision:1.0-IT
The	
  ideal	
  solution	
  for	
  a	
  problem	
   Blog:	
  http://musarra.wordpress.com	
  
LinkedIn:	
  http://it.linkedin.com/in/amusarra	
  	
  
Mail:	
  antonio.musarra@gmail.com	
  
	
  
22/05/13	
   1	
  
This	
  document	
  is	
  issued	
  with	
  license	
  Creative	
  Commons	
  Attribution-­‐NonCommercial-­‐ShareAlike	
  
	
  
	
  
Introduzione	
  agli	
  Hooks	
  –	
  Primo	
  
Episodio	
  
L’insediamento	
   dell’Open	
   Source	
   nel	
   mondo	
   del	
   cosiddetto	
   Enterprise	
  
prosegue	
   in	
   modo	
   inesorabile	
   ma	
   alcune	
   organizzazioni	
   sono	
   ancora	
   restie	
  
all’adozione	
   di	
   software	
   Open	
   Source	
   e	
   hanno	
   delle	
   giustificate	
   ragioni.	
   La	
  
manutenzione	
  delle	
  personalizzazioni	
  (da	
  riesaminare	
  per	
  ogni	
  nuova	
  release)	
  è	
  
uno	
  dei	
  motivi	
  che	
  giustifica	
  questa	
  diffidenza	
  nei	
  confronti	
  dei	
  software	
  Open	
  
Source.	
  
Ipotizziamo	
   per	
   un	
   attimo	
   di	
   poter	
   “agganciare	
   tramite	
   un	
   arpione”	
   le	
  
personalizzazioni	
   implementate	
   senza	
   toccare	
   il	
   core	
   del	
   software,	
   direi	
   che	
  
sarebbe	
   un’operazione	
   fantastica,	
   bene,	
   Liferay	
   ha	
   introdotto	
   di	
   recente	
   un	
  
nuovo	
  tipo	
  di	
  plugin	
  che	
  prende	
  per	
  l’appunto	
  il	
  nome	
  di	
  Liferay	
  Hooks	
  (Liferay
Inc, 2012).	
  Questa	
  nuova	
  via	
  di	
  estensione	
  fornisce	
  un	
  livello	
  di	
  separazione	
  tra	
  le	
  
vostre	
   personalizzazioni	
   e	
   il	
   core	
   di	
   Liferay,	
   diminuendo	
   drasticamente	
   la	
  
complessità	
   di	
   personalizzazione,	
   introducendo	
   inoltre	
   una	
   notevole	
   libertà	
   di	
  
movimento	
  senza	
  la	
  preoccupazione	
  di	
  dover	
  tener	
  tracciata	
  del	
  codice	
  sorgente	
  
a	
  ogni	
  release	
  del	
  core	
  di	
  Liferay.	
  
Restando	
   nell’orto	
   delle	
   personalizzazioni,	
   un'altra	
   strada	
   “più	
   larga”	
   da	
  
percorrere	
   in	
   scenari	
   complessi,	
   dove	
   gli	
   altri	
   tipi	
   di	
   plugin	
   non	
   arrivano,	
   si	
  
chiama	
  Liferay	
  Ext	
  (Liferay Inc, 2012).	
  La	
  trattazione	
  di	
  questa	
  “bestia”	
  non	
  è	
  però	
  
oggetto	
  di	
  quest’articolo,	
  magari	
  di	
  un	
  futuro.	
  	
  	
  
A	
  questo	
  punto	
  direi	
  che	
  sia	
  venuto	
  il	
  momento	
  di	
  scrutare	
  più	
  da	
  vicino	
  gli	
  
hooks	
  e	
  per	
  quali	
  scopi	
  possano	
  essere	
  utilizzati,	
  per	
  poi	
  immediatamente	
  saltare	
  
alla	
   realizzazione	
   pratica	
   di	
   un	
   hook	
  per	
   personalizzare	
   Liferay.	
   La	
  versione	
  di	
  
riferimento	
  di	
  Liferay	
  è	
  la	
  6.1	
  edizione	
  Community	
  Edition.	
  
1. Obiettivo	
  
L’articolo	
   intende	
   comunicare	
   le	
   informazioni	
   base	
   che	
   riguardano	
   gli	
  
hooks	
  favorendo	
  l’aspetto	
  reale,	
  in	
  altre	
  parole,	
  far	
  capire	
  a	
  cosa	
  servono	
  tramite	
  
l’esposizione	
  e	
  realizzazione	
  di	
  un	
  caso	
  di	
  studio	
  quanto	
  più	
  possibile	
  vicino	
  al	
  
reale.	
   Sarà	
   quindi	
   presentato	
   un	
   caso	
   d’integrazione	
   che	
   farà	
   uso	
   degli	
   hooks,	
  
toccando	
   i	
   vari	
   aspetti	
   di	
   personalizzazione.	
   L’articolo	
   sarà	
   suddiviso	
   in	
   più	
  
episodi	
   per	
   evitare	
   una	
   “sbrodolata”	
   d’informazione	
   e	
   rendere	
   più	
   efficace	
  
l’assimilazione	
  di	
  quanto	
  esposto.	
  	
  
2. Gli	
  Hook	
  in	
  breve	
  
Che	
  cosa	
  sono	
  gli	
  hooks?	
  Il	
  nome	
  è	
  più	
  che	
  azzeccato,	
  in	
  effetti,	
  sono	
  parti	
  di	
  
codice	
  “agganciate”	
  a	
  Liferay	
  che	
  in	
  genere	
  sovrascrivono	
  alcune	
  delle	
  funzioni	
  
del	
  portale.	
  	
  	
  
Antonio	
  Musarra's	
  Blog	
   Document Revision:1.0-IT
The	
  ideal	
  solution	
  for	
  a	
  problem	
   Blog:	
  http://musarra.wordpress.com	
  
LinkedIn:	
  http://it.linkedin.com/in/amusarra	
  	
  
Mail:	
  antonio.musarra@gmail.com	
  
	
  
22/05/13	
   2	
  
This	
  document	
  is	
  issued	
  with	
  license	
  Creative	
  Commons	
  Attribution-­‐NonCommercial-­‐ShareAlike	
  
	
  
	
  
Tramite	
  questo	
  tipo	
  di	
  plugin	
  è	
  possibile	
  per	
  gli	
  sviluppatori	
  sovrascrivere	
  
parti	
  del	
  core	
  di	
  Liferay	
  con	
  le	
  proprie	
  implementazioni,	
  mantenendo	
  una	
  netta	
  
separazione	
  tra	
  il	
  codice	
  personalizzato	
  e	
  il	
  core	
  di	
  Liferay.	
  	
  
Qualcuno	
   potrebbe	
   giustamente	
   obiettare	
   con	
   una	
   domanda	
   del	
   tipo:	
  
perché	
  non	
  utilizzare	
  l’Ext	
  plugin?	
  Poiché	
  l’Ext	
  plugin	
  fornisce	
  l’accesso	
  completo	
  
alle	
   parti	
   interne	
   del	
   core	
   di	
   Liferay,	
   il	
   codice	
   personalizzato	
   diventerebbe	
  
strettamente	
   accoppiato	
   a	
   particolari	
   implementazioni	
   di	
   funzioni	
   interne	
   che	
  
spesso	
   potrebbero	
   cambiare	
   da	
   una	
   release	
   a	
   un’altra,	
   basterebbe	
   quindi	
   un	
  
semplice	
  cambio	
  di	
  firma	
  di	
  un	
  metodo	
  per	
  causare	
  un	
  gran	
  mal	
  di	
  testa	
  a	
  colui	
  il	
  
quale	
  deve	
  riesaminare	
  il	
  codice	
  personalizzato.	
  	
  
Così	
   come	
   portlet,	
   theme,	
   layout	
   e	
   così	
   via,	
   anche	
   gli	
   hooks	
   sono	
   hot-­‐
deployable1 ,	
   quindi	
   aggiungere	
   e	
   rimuovere	
   è	
   un’operazione	
   semplice.	
   La	
  
possibilità	
   di	
   suddividere	
   funzionalità	
   complesse	
   in	
   più	
   hook,	
   sviluppati	
   da	
  
persone	
  diverse,	
  rende	
  dinamico	
  l’ambiente	
  di	
  sviluppo	
  e	
  inoltre	
  l’uso	
  del	
  set	
  di	
  
API	
  pubbliche	
  di	
  Liferay	
  per	
  la	
  scrittura	
  dell’hook	
  rende	
  semplice	
  la	
  revisione	
  del	
  
codice	
  personalizzato	
  grazie	
  alla	
  corretta	
  segnalazione	
  dei	
  deprecati.	
  	
  Gli	
  hooks	
  
sono	
   stati	
   progettati	
   per	
   superare	
   molte	
   delle	
   limitazioni	
   dell’Ext	
   e	
   i	
   punti	
   di	
  
estensione	
  disponibili	
  crescono	
  a	
  ogni	
  release	
  di	
  Liferay	
  anche	
  grazie	
  ai	
  feedback	
  
ricevuti	
  da	
  parte	
  degli	
  utenti.	
  	
  
	
  Come	
  fare	
  a	
  scegliere	
  lo	
  strumento	
  di	
  estensione	
  più	
  adeguato?	
  Utilizzare	
  
gli	
  hook	
  dove	
  possibile.	
  Sono	
  più	
  semplici	
  da	
  implementare,	
  installare,	
  rimuovere	
  
e	
  manutenere.	
  Ricorre	
  all’uso	
  dell’Ext	
  (Liferay Inc, 2012)	
  solo	
  nel	
  caso	
  in	
  cui	
  ciò	
  
che	
  è	
  richiesto	
  non	
  può	
  essere	
  soddisfatto	
  tramite	
  hook.	
  	
  
Nel	
  prossimo	
  paragrafo	
  vedremo	
  ciò	
  che	
  è	
  possibile	
  personalizzare	
  tramite	
  
hook.	
  	
  
3. Cos’è	
  possibile	
  personalizzare	
  tramite	
  Hook	
  
La	
  strada	
  consigliata	
  per	
  la	
  personalizzazione	
  delle	
  funzioni	
  base	
  di	
  Liferay,	
  
sono	
  gli	
  hooks	
  (Liferay Inc, 2012).	
  Tramite	
  gli	
  hooks	
  è	
  possibile	
  coprire	
  un	
  ampio	
  
spettro	
   di	
   necessità	
   e	
   dovrebbero	
   essere	
   utilizzati	
   al	
   posto	
   dell’Ext,	
   quando	
  
possibile.	
  Gli	
  hooks	
  sono	
  stati	
  progettati	
  per	
  personalizzare	
  fondamentalmente	
  
cinque	
  caratteristiche	
  principali	
  del	
  portale:	
  
	
  
• Portal	
  properties	
  
• Language	
  properties	
  
• Web	
  Resources	
  
• Performing	
  custom	
  actions	
  
• Services	
  
	
  
Come	
   per	
   le	
   portlet,	
   layout	
   e	
   temi,	
   anche	
   gli	
   hooks	
   sono	
   creati	
   e	
   gestiti	
  
utilizzando	
  il	
  Plugin	
  SDK2.	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
1	
  Il	
  processo	
  d’installazione	
  o	
  aggiornamento	
  di	
  componenti	
  a	
  un	
  server	
  in	
  esecuzione	
  senza	
  arrestare	
  e	
  riavviare	
  il	
  server	
  
stesso.	
  
2	
  E’	
  un	
  ambiente	
  di	
  sviluppo	
  che	
  aiuta	
  nello	
  sviluppo	
  di	
  tutti	
  i	
  tipi	
  di	
  plugin	
  di	
  Liferay	
  basato	
  sul	
  Apache	
  Ant,	
  di	
  recente	
  è	
  
stata	
  introdotta	
  anche	
  la	
  possibilità	
  di	
  realizzare	
  plugin	
  tramite	
  Apache	
  Maven.	
  
Antonio	
  Musarra's	
  Blog	
   Document Revision:1.0-IT
The	
  ideal	
  solution	
  for	
  a	
  problem	
   Blog:	
  http://musarra.wordpress.com	
  
LinkedIn:	
  http://it.linkedin.com/in/amusarra	
  	
  
Mail:	
  antonio.musarra@gmail.com	
  
	
  
22/05/13	
   3	
  
This	
  document	
  is	
  issued	
  with	
  license	
  Creative	
  Commons	
  Attribution-­‐NonCommercial-­‐ShareAlike	
  
	
  
	
  
	
  
Nella	
  trattazione	
  degli	
  hooks	
  e	
  in	
  particolare	
  del	
  caso	
  di	
  studio	
  illustrato	
  in	
  
seguito,	
  vedremo	
  i	
  seguenti	
  aspetti	
  che	
  saranno	
  suddivisi	
  in	
  episodi	
  diversi:	
  
	
  
• Portal	
  properties	
  
• Performing	
  custom	
  action	
  
• Web	
  Resources	
  
• Servlet	
  filter	
  hook	
  
4. Creazione	
  di	
  un	
  hook	
  
Gli	
   hooks	
   risiedono	
   all’interno	
   della	
   directory	
   hooks	
   del	
   Plugin	
   SDK.	
  
Esistono	
   vari	
   metodi	
   che	
   potete	
   utilizzare	
   per	
   creare	
   i	
   vostri	
   hooks	
   alcuni	
   dei	
  
quali	
  sono:	
  
	
  
• Developer	
  Studio	
  
• Comando	
  create	
  del	
  Plugin	
  SDK	
  
• Apache	
  Maven	
  
	
  
Per	
  maggiori	
  approfondimenti	
  sulla	
  creazione	
  degli	
  hooks	
  fare	
  riferimento	
  
a	
   (Liferay Inc, 2012)	
   per	
   i	
   primi	
   due	
   punti	
   mentre	
   per	
   l’ultimo	
   consiglio	
   la	
  	
  
consultazione	
   di	
   (Koivisto, Getting started with Liferay Maven SDK, 2012),	
  
(Koivisto, Developing Liferay Plugins with Maven, 2012) (Musarra, 2012)	
  
5. Caso	
  d’integrazione	
  tramite	
  Hook	
  
Gli	
   hooks	
   possono	
   essere	
   molto	
   efficaci	
   nelle	
   soluzioni	
   d’integrazione	
   tra	
  
Liferay	
  e	
  altri	
  sistemi	
  esterni.	
  In	
  questo	
  paragrafo	
  vedremo	
  come	
  poter	
  sfruttare	
  
gli	
  hooks	
  come	
  punto	
  “d’intermediazione”	
  tra	
  Liferay	
  e	
  un	
  sistema	
  di	
  CRM.	
  	
  
	
  
	
  
Figura	
  1	
  Macro	
  architettura	
  d’integrazione	
  tra	
  Liferay	
  e	
  CRM.	
  	
  
La	
   macro	
   architettura	
   d’integrazione	
   mostrata	
   in	
   Figura	
   1	
   illustra	
  
chiaramente	
  quali	
  sono	
  gli	
  elementi	
  interessati	
  dal	
  caso	
  d’integrazione	
  proposto.	
  
Volutamente	
  sono	
  stati	
  evidenziati	
  in	
  nero	
  gli	
  elementi	
  che	
  riguardano	
  il	
  CRM	
  
Liferay Portal
Hooks
CRM Integration
API
CRM System
Antonio	
  Musarra's	
  Blog	
   Document Revision:1.0-IT
The	
  ideal	
  solution	
  for	
  a	
  problem	
   Blog:	
  http://musarra.wordpress.com	
  
LinkedIn:	
  http://it.linkedin.com/in/amusarra	
  	
  
Mail:	
  antonio.musarra@gmail.com	
  
	
  
22/05/13	
   4	
  
This	
  document	
  is	
  issued	
  with	
  license	
  Creative	
  Commons	
  Attribution-­‐NonCommercial-­‐ShareAlike	
  
	
  
	
  
per	
  porre	
  l’accento	
  sul	
  fatto	
  che	
  devono	
  essere	
  considerati	
  vere	
  e	
  proprie	
  scatole	
  
nere	
  e	
  concentrare	
  l’attenzione	
  verso	
  gli	
  hooks.	
  
5.1 Ipotesi	
  d’integrazione	
  
Alcuni	
  degli	
  utenti	
  memorizzati	
  su	
  Liferay	
  (che	
  accedono	
  al	
  portale)	
  sono	
  
clienti	
   dell’ipotetica	
   azienda	
   Dontesta	
  Corporation	
  Ltd	
   (che	
   vende	
   prodotti	
   per	
  
l’equitazione)	
   e	
   le	
   schede	
   commerciali	
   dei	
   clienti	
   sono	
   registrate	
   sul	
   sistema	
  
interno	
  di	
  CRM.	
  Non	
  necessariamente	
  gli	
  utenti	
  definiti	
  su	
  Liferay	
  sono	
  clienti	
  
dell’azienda	
  e	
  di	
  conseguenza	
  gestiti	
  sul	
  CRM.	
  L’esigenza	
  dell’azienda	
  è	
  di	
  dare	
  la	
  
possibilità	
  d’accesso	
  diretto	
  alle	
  schede	
  dei	
  contatti	
  e	
  aziende	
  direttamente	
  dal	
  
portale	
  Liferay.	
  	
  
	
  
	
  
Figura	
  2	
  Esempio	
  di	
  UI	
  per	
  accesso	
  alle	
  schede	
  CRM	
  del	
  contatto	
  e	
  azienda.	
  
Il	
  mockup3	
  illustrato	
  in	
  Figura	
  2	
  è	
  un	
  buon	
  esempio	
  di	
  come	
  l’interfaccia	
  
utente	
  su	
  Liferay	
  si	
  dovrebbe	
  presentare	
  agli	
  utenti	
  per	
  consentire	
  loro	
  l’accesso	
  
alle	
  schede	
  del	
  CRM.	
  Con	
  un	
  po’	
  d’occhio	
  è	
  possibile	
  notare	
  come	
  il	
  mockup	
  di	
  
Figura	
   2	
   è	
   spudoratamente	
   vicinissimo	
   alla	
   lista	
   Utenti	
   e	
   Organizzazioni	
  
accessibile	
  da	
  pannello	
  di	
  controllo	
  di	
  Liferay.	
  
Garantire	
   l’accesso	
   alle	
   schede	
   (contatto	
   e	
   azienda)	
   si	
   traduce	
   nella	
  
necessità	
   di	
   poter	
   memorizzare	
   alcuni	
   dati	
   presenti	
   sul	
   CRM	
   come	
   attributi	
  
aggiuntivi	
  dell’utente	
  Liferay.	
  I	
  dati	
  da	
  prelevare	
  dal	
  sistema	
  di	
  CRM	
  sono:	
  
	
  
• L’identificativo	
  del	
  contatto;	
  
• L’identificativo	
  dell'azienda	
  cui	
  il	
  contatto	
  appartiene.	
  
	
  
I	
  dati	
  sopra	
  menzionati	
  sono	
  indispensabili	
  per	
  comunicare	
  al	
  CRM	
  quale	
  
contatto	
  o	
  azienda	
  s’intende	
  visualizzare.	
  L’accesso	
  ai	
  dati	
  del	
  CRM	
  da	
  parte	
  di	
  
Liferay	
   avviene	
   tramite	
   la	
   scatola	
   nera	
   CRM	
   Integration	
   API	
   indicata	
   nel	
  
diagramma	
  di	
  Figura	
  1.	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
3	
  Per	
  mockup	
  si	
  intende	
  comunemente	
  la	
  riproduzione	
  di	
  un	
  oggetto	
  originale	
  ad	
  uso	
  didattico,	
  dimostrativo,	
  
scenografico	
  o	
  di	
  comunicazione	
  visiva	
  
	
  
Antonio	
  Musarra's	
  Blog	
   Document Revision:1.0-IT
The	
  ideal	
  solution	
  for	
  a	
  problem	
   Blog:	
  http://musarra.wordpress.com	
  
LinkedIn:	
  http://it.linkedin.com/in/amusarra	
  	
  
Mail:	
  antonio.musarra@gmail.com	
  
	
  
22/05/13	
   5	
  
This	
  document	
  is	
  issued	
  with	
  license	
  Creative	
  Commons	
  Attribution-­‐NonCommercial-­‐ShareAlike	
  
	
  
	
  
5.2 Dove	
  memorizzare	
  i	
  dati	
  del	
  CRM	
  
E’	
   plausibile	
   pensare	
   ai	
   dati	
   provenienti	
   dal	
   CRM	
   come	
   estensione	
   del	
  
modello	
   utente	
   di	
   Liferay,	
   d’altronde	
   questi	
   dati	
   arricchiscono	
   l’utente	
   di	
   altre	
  
informazioni.	
   Liferay	
   mette	
   a	
   nostra	
   disposizione	
   uno	
   strumento	
   davvero	
  
potente	
   che	
   consente	
   facilmente	
   di	
   realizzare	
   quanto	
   pensato	
   e	
   illustrato	
   in	
  
Figura	
  3.	
  	
  
	
  
	
  
Figura	
  3	
  Modello	
  Utente	
  Liferay	
  esteso.	
  
Sicuramente	
   il	
   nome	
   di	
   campi	
   personalizzati	
   (Francia, 2011)	
   (o	
   custom	
  
fields)	
   non	
   suona	
   del	
   tutto	
   nuovo,	
   bene,	
   questo	
   è	
   lo	
   strumento	
   con	
   il	
   quale	
  
definire	
  sul	
  modello	
  utente	
  due	
  nuovi	
  attributi	
  (topic	
  Extended	
  CRM	
  Attribute	
  di	
  
Figura	
  3)	
  specificandone	
  anche	
  il	
  tipo:	
  
	
  
• ContactId:	
  attributo	
  di	
  tipo	
  stringa	
  il	
  cui	
  valore	
  è	
  l’identificativo	
  (UUID4)	
  
del	
  contatto	
  sul	
  sistema	
  di	
  CRM;	
  
• AccountId:	
  attributo	
  di	
  tipo	
  stringa	
  il	
  cui	
  valore	
  è	
  l’identificativo	
  (UUID)	
  
dell’azienda	
  cui	
  il	
  contatto	
  appartiene;	
  
	
  
I	
   due	
   nuovi	
   attributi	
   creati	
   per	
   il	
   modello	
   utente	
   di	
   Liferay	
   conterranno	
  
quindi	
  i	
  valori	
  necessari	
  per	
  recuperare	
  in	
  seguito	
  le	
  informazioni	
  di	
  dettaglio	
  del	
  
contatto	
   e	
   azienda.	
   	
   In	
   Figura	
   4	
   è	
   mostrato	
   il	
   dettaglio	
   di	
   un	
   utente	
   e	
   in	
  
particolare	
  sono	
  evidenziati	
  i	
  valori	
  dei	
  due	
  attributi	
  ContactId	
  e	
  AccountId.	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
4	
  L'identificativo	
  univoco	
  universale	
  (universally	
  unique	
  identifier	
  o	
  UUID)	
  è	
  un	
  identificativo	
  standard	
  usato	
  nelle	
  
infrastrutture	
  software,	
  standardizzato	
  dalla	
  Open	
  Software	
  Foundation	
  (OSF)	
  come	
  parte	
  di	
  un	
  ambiente	
  distribuito	
  di	
  
computazione.	
  
	
  
Antonio	
  Musarra's	
  Blog	
   Document Revision:1.0-IT
The	
  ideal	
  solution	
  for	
  a	
  problem	
   Blog:	
  http://musarra.wordpress.com	
  
LinkedIn:	
  http://it.linkedin.com/in/amusarra	
  	
  
Mail:	
  antonio.musarra@gmail.com	
  
	
  
22/05/13	
   6	
  
This	
  document	
  is	
  issued	
  with	
  license	
  Creative	
  Commons	
  Attribution-­‐NonCommercial-­‐ShareAlike	
  
	
  
	
  
	
  
	
  
Figura	
  4	
  Dettaglio	
  dell’utente	
  con	
  particole	
  vista	
  degli	
  attributi	
  CRM.	
  
5.3 Quando	
  e	
  come	
  memorizzare	
  i	
  dati	
  del	
  CRM	
  
Direi	
   che	
   siamo	
   arrivati	
   al	
   punto	
   interessante	
   del	
   caso	
   d’integrazione.	
   E’	
  
stato	
  definito	
  l’obiettivo,	
  i	
  dati	
  del	
  CRM	
  cui	
  accedere	
  e	
  quale	
  strumento	
  utilizzare	
  
per	
  memorizzare	
  questi	
  ultimi,	
  non	
  resta	
  che	
  altro	
  che	
  scoprire	
  quando	
  accedere	
  
al	
  CRM	
  per	
  recuperare	
  i	
  dati	
  di	
  nostro	
  interesse	
  e	
  come	
  memorizzarli	
  su	
  i	
  due	
  
nuovi	
  attributi	
  definiti	
  in	
  precedenza.	
  
Il	
  portale	
  Liferay	
  supporta	
  un	
  gran	
  numero	
  di	
  eventi	
  che	
  accadono	
  in	
  certe	
  
situazioni	
   e	
   tramite	
   hook	
   è	
   possibile	
   quindi	
   eseguire	
   una	
   o	
   più	
   azioni	
  
personalizzate	
   (performing	
   custom	
   actions)	
   al	
   verificarsi	
   di	
   un	
   determinato	
  
evento.	
   Le	
   azioni	
   che	
   sono	
   eseguite	
   per	
   ognuno	
   degli	
   eventi	
   supportati	
   dal	
  
portale,	
   sono	
   definite	
   nel	
   file	
   di	
   configurazione	
   portal.properties.	
   Attraverso	
  
l’hook	
  dovremmo	
  quindi:	
  
	
  
• Estendere	
  il	
  file	
  di	
  configurazione	
  portal.properties;	
  
• Creare	
  la	
  nuova	
  azione	
  da	
  eseguire	
  per	
  un	
  determinato	
  evento.	
  	
  
	
  
Il	
  tipo	
  di	
  evento	
  che	
  calza	
  a	
  pennello	
  con	
  il	
  nostro	
  caso	
  d’integrazione	
  è	
  di	
  
user	
  login	
  e	
  in	
  particolare	
  l’evento	
  login	
  post	
  action.	
  Quest’evento	
  è	
  idoneo	
  per	
  
eseguire	
  l’azione	
  di	
  recupero	
  e	
  memorizzazione	
  dei	
  dati	
  ContactId	
  e	
  AccountId.	
  	
  
	
  
Antonio	
  Musarra's	
  Blog	
   Document Revision:1.0-IT
The	
  ideal	
  solution	
  for	
  a	
  problem	
   Blog:	
  http://musarra.wordpress.com	
  
LinkedIn:	
  http://it.linkedin.com/in/amusarra	
  	
  
Mail:	
  antonio.musarra@gmail.com	
  
	
  
22/05/13	
   7	
  
This	
  document	
  is	
  issued	
  with	
  license	
  Creative	
  Commons	
  Attribution-­‐NonCommercial-­‐ShareAlike	
  
	
  
	
  
	
  
Figura	
  5	
  Processo	
  di	
  login	
  sul	
  portale	
  Liferay.	
  
Il	
   processo	
   mostrato	
   in	
   Figura	
   5	
   rende	
   più	
   chiaro	
   il	
   processo	
   di	
   login.	
   Il	
  
diagramma	
  mostra	
  solamente	
  la	
  parte	
  di	
  processo	
  di	
  nostro	
  interesse.	
  L’evento	
  
di	
  login	
  post	
  action	
  è	
  scatenato	
  nel	
  momento	
  in	
  cui	
  è	
  stato	
  accertato	
  che	
  l’utente	
  
abbia	
  inserito	
  le	
  corrette	
  credenziali,	
  a	
  quel	
  punto	
  tramite	
  l’Event	
  Processor	
  sono	
  
eseguite	
   tutte	
   le	
   azioni	
   definite	
   dalla	
   proprietà	
   login.events.post.	
   Il	
   file	
  
portal.properties	
  del	
  nostro	
  hook,	
  dovrebbe	
  contenere	
  la	
  configurazione	
  mostrata	
  
al	
  Listato	
  1.	
  
	
  
##
## Portal Events
##
#
# Login event
#
login.events.post=it.dontesta.liferay.portal.events.LoginPostAction
Listato	
  1	
  Definizione	
  dell’azione	
  da	
  eseguire	
  all’evento	
  di	
  login	
  post	
  action.	
  
L’azione	
  da	
  eseguire	
  nel	
  momento	
  in	
  cui	
  avviene	
  l’evento,	
  è	
  una	
  classe	
  che	
  
estende	
   la	
   classe	
   astratta	
   com.liferay.portal.kernel.events.Action	
   di	
   cui	
   occorre	
  
implementare	
   il	
   metodo	
   com.liferay.portal.kernel.events.Action#run().	
   Ricordo	
  
che	
  non	
  siamo	
  limitati	
  a	
  specificare	
  una	
  sola	
  classe.	
  
All’interno	
   del	
   metodo	
   run()	
   andrà	
   inserito	
   il	
   codice	
   necessario	
   per	
  
eseguire	
  i	
  seguenti	
  task:	
  
	
  
• Recupero	
  dell’utente	
  che	
  ha	
  eseguito	
  con	
  successo	
  il	
  login;	
  
• Prendere	
  contatto	
  con	
  il	
  CRM	
  presentandosi	
  con	
  le	
  credenziali	
  dell’utente	
  
che	
  ha	
  appena	
  eseguito	
  il	
  login;	
  
• Recupero	
   i	
   dati	
   d’interesse	
   dal	
   CRM,	
   che	
   ricordo	
   essere,	
   il	
   ContactId	
   e	
  
l’AccountId;	
  
• Recupero	
  l’Expando	
  Bridge5	
  sul	
  modello	
  dell’utente;	
  
• Tramite	
  l’ausilio	
  dell’Expando	
  Bridge	
  memorizzo	
  i	
  dati	
  ricevuti	
  dal	
  CRM	
  nei	
  
rispettivi	
  attributi	
  estesi	
  definiti	
  in	
  precedenza	
  (vedi	
  Figura	
  3).	
  	
  
	
  
	
  
	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
5	
  E’	
  l’interfaccia	
  d’accesso	
  ai	
  custom	
  fields	
  di	
  un	
  determinato	
  model.	
  
Antonio	
  Musarra's	
  Blog	
   Document Revision:1.0-IT
The	
  ideal	
  solution	
  for	
  a	
  problem	
   Blog:	
  http://musarra.wordpress.com	
  
LinkedIn:	
  http://it.linkedin.com/in/amusarra	
  	
  
Mail:	
  antonio.musarra@gmail.com	
  
	
  
22/05/13	
   8	
  
This	
  document	
  is	
  issued	
  with	
  license	
  Creative	
  Commons	
  Attribution-­‐NonCommercial-­‐ShareAlike	
  
	
  
	
  
package it.dontesta.liferay.portal.events;
/**
*
*/
public class LoginPostAction extends Action {
/*
* (non-Javadoc)
*
* @see com.liferay.portal.kernel.events.Action#run(javax.servlet.http.
* HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
public void run(HttpServletRequest request, HttpServletResponse response)
throws ActionException {
}
	
  
Listato	
  2	
  Classe	
  che	
  implementa	
  l’azione	
  da	
  eseguire	
  sull’evento	
  login	
  post	
  action.	
  
I	
   dati	
   così	
   ottenuti	
   e	
   memorizzati	
   sui	
   campi	
   personalizzati	
   saranno	
  
utilizzati	
   in	
   seguito	
   per	
   accedere	
   alle	
   schede	
   di	
   dettaglio	
   del	
   CRM	
   (Contatto	
   e	
  
Azienda).	
  In	
  Figura	
  6	
  un	
  piccolo	
  assaggio.	
  
	
  
	
  
Figura	
  6	
  Scheda	
  di	
  dettaglio	
  Azienda	
  aperta	
  da	
  Liferay.	
  
6. Conclusioni	
  
Questo	
  primo	
  episodio	
  è	
  stato	
  molto	
  stringato	
  sulla	
  parte	
  introduttiva	
  degli	
  
hooks	
  cercando	
  comunque	
  di	
  sintetizzare	
  al	
  meglio	
  gli	
  aspetti	
  più	
  importanti	
  per	
  
poi	
   focalizzare	
   l’attenzione	
   su	
   un	
   caso	
   di	
   studio	
   abbastanza	
   vicino	
   al	
   reale.	
   In	
  
questa	
   prima	
   parte,	
   con	
   l’aiuto	
   del	
   caso	
   di	
   studio,	
   è	
   stata	
   affrontata	
   la	
  
Antonio	
  Musarra's	
  Blog	
   Document Revision:1.0-IT
The	
  ideal	
  solution	
  for	
  a	
  problem	
   Blog:	
  http://musarra.wordpress.com	
  
LinkedIn:	
  http://it.linkedin.com/in/amusarra	
  	
  
Mail:	
  antonio.musarra@gmail.com	
  
	
  
22/05/13	
   9	
  
This	
  document	
  is	
  issued	
  with	
  license	
  Creative	
  Commons	
  Attribution-­‐NonCommercial-­‐ShareAlike	
  
	
  
	
  
personalizzazione	
  di	
  Liferay	
  tramite	
  hooks,	
  concentrandosi	
  su,	
  Portal	
  properties	
  e	
  
Performing	
  custom	
  action.	
  
Nei	
  prossimi	
  episodi	
  vedremo	
  i	
  rimanenti	
  aspetti	
  (Web	
  Resources	
  e	
  Servlet	
  
filter	
  hook)	
  ultimando	
  il	
  caso	
  di	
  studio.	
  A	
  conclusione	
  di	
  tutti	
  gli	
  episodi	
  ci	
  sarà	
  
anche	
  il	
  regalo	
  finale,	
  il	
  repository	
  contenente	
  i	
  sorgenti	
  del	
  progetto	
  oggetto	
  di	
  
studio.	
  
L’articolo	
   è	
   stato	
   pubblicato	
   sul	
   blog	
   D'VEL	
   TECH	
   BLOG	
   all’indirizzo	
  
http://blog.d-­‐vel.com/web/blog/home/-­‐/blogs/introduzione-­‐agli-­‐hooks:-­‐primo-­‐
episodio?_33_redirect=%2Fweb%2Fblog%2F	
  
	
  
Bibliografia	
  
Francia,	
  J.	
  (2011,	
  July	
  1).	
  ExpandoTable	
  sulle	
  vostre	
  entità	
  custom!	
  Tratto	
  da	
  
D'VEL	
  TECH	
  BLOG	
  :	
  http://blog.d-­‐vel.com/web/blog/home/-­‐
/blogs/expandotable-­‐sulle-­‐vostre-­‐entita-­‐custom!	
  
	
  
Koivisto,	
  M.	
  (2012,	
  Mar	
  3).	
  Developing	
  Liferay	
  Plugins	
  with	
  Maven.	
  Tratto	
  da	
  
SlideShare:	
  http://www.slideshare.net/koivimik/developing-­‐liferay-­‐plugins-­‐
with-­‐maven	
  
	
  
Koivisto,	
  M.	
  (2012,	
  Feb	
  1).	
  Getting	
  started	
  with	
  Liferay	
  Maven	
  SDK.	
  Tratto	
  da	
  
Liferay	
  Blog:	
  http://www.liferay.com/it/web/mika.koivisto/blog/-­‐
/blogs/getting-­‐started-­‐with-­‐liferay-­‐maven-­‐sdk	
  
	
  
Liferay	
  Inc.	
  (2012).	
  Creating	
  a	
  Hook.	
  Tratto	
  da	
  Liferay	
  Portal	
  6.1	
  -­‐	
  Development	
  
Guide:	
  http://www.liferay.com/it/documentation/liferay-­‐
portal/6.1/development/-­‐/ai/creating-­‐a-­‐ho-­‐4	
  
	
  
Liferay	
  Inc.	
  (2012).	
  Ext	
  plugins.	
  Tratto	
  da	
  Liferay	
  Portal	
  6.1	
  -­‐	
  Development	
  Guide:	
  
http://www.liferay.com/it/documentation/liferay-­‐portal/6.1/development/-­‐
/ai/ext-­‐plugi-­‐4	
  
	
  
Liferay	
  Inc.	
  (2012).	
  Hooks.	
  Tratto	
  da	
  Liferay	
  Portal	
  6.1	
  -­‐	
  Development	
  Guide:	
  
http://www.liferay.com/it/documentation/liferay-­‐portal/6.1/development/-­‐
/ai/hoo-­‐4	
  
	
  
Musarra,	
  A.	
  (2012,	
  Oct	
  18).	
  Creare	
  progetti	
  Liferay	
  tramite	
  il	
  plugin	
  m2eclipse	
  
(Maven	
  for	
  Eclipse).	
  Tratto	
  da	
  Antonio	
  Musarra's	
  Blog:	
  
http://musarra.wordpress.com/2012/10/18/creare-­‐progetti-­‐liferay-­‐tramite-­‐il-­‐
plugin-­‐m2eclipse-­‐maven-­‐for-­‐eclipse/	
  
	
  
	
  

More Related Content

What's hot

SugarCRM REST API: Un’applicazione in appena dieci minuti
SugarCRM REST API: Un’applicazione in appena dieci minutiSugarCRM REST API: Un’applicazione in appena dieci minuti
SugarCRM REST API: Un’applicazione in appena dieci minutiAntonio Musarra
 
#2014LRIS - Liferay in a Cloud-Driven World
#2014LRIS - Liferay in a Cloud-Driven World#2014LRIS - Liferay in a Cloud-Driven World
#2014LRIS - Liferay in a Cloud-Driven Worldkino2k
 
Come configurare Liferay 6.0 per PostgreSQL
Come configurare Liferay 6.0 per PostgreSQLCome configurare Liferay 6.0 per PostgreSQL
Come configurare Liferay 6.0 per PostgreSQLAntonio Musarra
 
Liferay Web Services - Come importare utenti da un foglio Excel
Liferay Web Services - Come importare utenti da un foglio ExcelLiferay Web Services - Come importare utenti da un foglio Excel
Liferay Web Services - Come importare utenti da un foglio ExcelAntonio Musarra
 
Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1Antonio Musarra
 
Spring Framework
Spring FrameworkSpring Framework
Spring FrameworkNaLUG
 
Java Spring Basics - Donato Andrisani - Gabriele Manfredi
Java Spring Basics - Donato Andrisani - Gabriele ManfrediJava Spring Basics - Donato Andrisani - Gabriele Manfredi
Java Spring Basics - Donato Andrisani - Gabriele ManfrediGabriele Manfredi
 
Un backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringUn backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringMarcello Teodori
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)Valerio Radice
 
Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8Valerio Radice
 
Modulo 6 Spring Framework Core E Aop
Modulo 6 Spring Framework Core E AopModulo 6 Spring Framework Core E Aop
Modulo 6 Spring Framework Core E Aopjdksrl
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsMarcello Teodori
 
Costruire un client .NET per SugarCRM
Costruire un client .NET per SugarCRMCostruire un client .NET per SugarCRM
Costruire un client .NET per SugarCRMAntonio Musarra
 
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015Codemotion
 
Acadevmy - Angular Overview
Acadevmy - Angular OverviewAcadevmy - Angular Overview
Acadevmy - Angular OverviewFrancesco Sciuti
 

What's hot (20)

SugarCRM REST API: Un’applicazione in appena dieci minuti
SugarCRM REST API: Un’applicazione in appena dieci minutiSugarCRM REST API: Un’applicazione in appena dieci minuti
SugarCRM REST API: Un’applicazione in appena dieci minuti
 
#2014LRIS - Liferay in a Cloud-Driven World
#2014LRIS - Liferay in a Cloud-Driven World#2014LRIS - Liferay in a Cloud-Driven World
#2014LRIS - Liferay in a Cloud-Driven World
 
Come configurare Liferay 6.0 per PostgreSQL
Come configurare Liferay 6.0 per PostgreSQLCome configurare Liferay 6.0 per PostgreSQL
Come configurare Liferay 6.0 per PostgreSQL
 
Liferay Web Services - Come importare utenti da un foglio Excel
Liferay Web Services - Come importare utenti da un foglio ExcelLiferay Web Services - Come importare utenti da un foglio Excel
Liferay Web Services - Come importare utenti da un foglio Excel
 
Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Spring - Ecosistema
Spring - EcosistemaSpring - Ecosistema
Spring - Ecosistema
 
Spring @Aspect e @Controller
Spring @Aspect e @Controller Spring @Aspect e @Controller
Spring @Aspect e @Controller
 
Java Spring Basics - Donato Andrisani - Gabriele Manfredi
Java Spring Basics - Donato Andrisani - Gabriele ManfrediJava Spring Basics - Donato Andrisani - Gabriele Manfredi
Java Spring Basics - Donato Andrisani - Gabriele Manfredi
 
Un backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringUn backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con Spring
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)
 
Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8
 
Modulo 6 Spring Framework Core E Aop
Modulo 6 Spring Framework Core E AopModulo 6 Spring Framework Core E Aop
Modulo 6 Spring Framework Core E Aop
 
Spring 2.5
Spring 2.5Spring 2.5
Spring 2.5
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa Struts
 
Spring Intro
Spring IntroSpring Intro
Spring Intro
 
Costruire un client .NET per SugarCRM
Costruire un client .NET per SugarCRMCostruire un client .NET per SugarCRM
Costruire un client .NET per SugarCRM
 
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
 
Microservices
MicroservicesMicroservices
Microservices
 
Acadevmy - Angular Overview
Acadevmy - Angular OverviewAcadevmy - Angular Overview
Acadevmy - Angular Overview
 

Similar to Introduzione agli Hooks – Primo Episodio

Workshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
Workshop ASP.NET Core e Angular in produzione con Docker e KubernetesWorkshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
Workshop ASP.NET Core e Angular in produzione con Docker e Kubernetesblexin
 
Cloud & No-Coding: come fare su Azure?
Cloud & No-Coding: come fare su Azure?Cloud & No-Coding: come fare su Azure?
Cloud & No-Coding: come fare su Azure?Andrea Carratta
 
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platformAngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platformGabriele Gaggi
 
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkGiovanni Buffa
 
II modulo – come gestire
II modulo – come gestireII modulo – come gestire
II modulo – come gestireBeesolution
 
2 Esercitazione (18/19)
2 Esercitazione (18/19)2 Esercitazione (18/19)
2 Esercitazione (18/19)Andrea Gorrini
 
Usiamo bene WordPress
Usiamo bene WordPressUsiamo bene WordPress
Usiamo bene WordPressPaolo Valenti
 
Cefriel Della Valle Web 2.0 And Soa Bif
Cefriel Della Valle Web 2.0 And Soa BifCefriel Della Valle Web 2.0 And Soa Bif
Cefriel Della Valle Web 2.0 And Soa BifEmanuele Della Valle
 
Google Chrome Extensions & Plugin vs Firefox
Google Chrome Extensions & Plugin vs FirefoxGoogle Chrome Extensions & Plugin vs Firefox
Google Chrome Extensions & Plugin vs FirefoxWikiCorsoWeb
 
Bene, usiamo WordPress.
Bene, usiamo WordPress.Bene, usiamo WordPress.
Bene, usiamo WordPress.Paolo Valenti
 
Quarto Modulo Web 2 : i contenuti.
Quarto Modulo Web 2 : i contenuti.Quarto Modulo Web 2 : i contenuti.
Quarto Modulo Web 2 : i contenuti.Fabrizio Martire
 
Silverlight in Action
Silverlight in ActionSilverlight in Action
Silverlight in ActionDotNetMarche
 

Similar to Introduzione agli Hooks – Primo Episodio (20)

Jquery mobile per App
Jquery mobile per AppJquery mobile per App
Jquery mobile per App
 
Workshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
Workshop ASP.NET Core e Angular in produzione con Docker e KubernetesWorkshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
Workshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
 
Cloud & No-Coding: come fare su Azure?
Cloud & No-Coding: come fare su Azure?Cloud & No-Coding: come fare su Azure?
Cloud & No-Coding: come fare su Azure?
 
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platformAngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
 
Link. javascript ajax
  Link. javascript ajax  Link. javascript ajax
Link. javascript ajax
 
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un framework
 
II modulo – come gestire
II modulo – come gestireII modulo – come gestire
II modulo – come gestire
 
BEEing
BEEingBEEing
BEEing
 
2 Esercitazione (18/19)
2 Esercitazione (18/19)2 Esercitazione (18/19)
2 Esercitazione (18/19)
 
Usiamo bene WordPress
Usiamo bene WordPressUsiamo bene WordPress
Usiamo bene WordPress
 
Grasso Frameworks Ajax
Grasso Frameworks AjaxGrasso Frameworks Ajax
Grasso Frameworks Ajax
 
Cefriel Della Valle Web 2.0 And Soa Bif
Cefriel Della Valle Web 2.0 And Soa BifCefriel Della Valle Web 2.0 And Soa Bif
Cefriel Della Valle Web 2.0 And Soa Bif
 
Google Chrome Extensions & Plugin vs Firefox
Google Chrome Extensions & Plugin vs FirefoxGoogle Chrome Extensions & Plugin vs Firefox
Google Chrome Extensions & Plugin vs Firefox
 
Google chrome
Google chromeGoogle chrome
Google chrome
 
Bene, usiamo WordPress.
Bene, usiamo WordPress.Bene, usiamo WordPress.
Bene, usiamo WordPress.
 
Quarto Modulo Web 2 : i contenuti.
Quarto Modulo Web 2 : i contenuti.Quarto Modulo Web 2 : i contenuti.
Quarto Modulo Web 2 : i contenuti.
 
Silverlight in Action
Silverlight in ActionSilverlight in Action
Silverlight in Action
 
Tesina Grupposis
Tesina GrupposisTesina Grupposis
Tesina Grupposis
 
IC2009 Information R-Evolution
IC2009 Information R-EvolutionIC2009 Information R-Evolution
IC2009 Information R-Evolution
 
Microsoft Fast - Overview
Microsoft Fast - OverviewMicrosoft Fast - Overview
Microsoft Fast - Overview
 

More from Antonio Musarra

Liferay Portal CE 7.4: Come configurare Oracle Database 19c
Liferay Portal CE 7.4: Come configurare Oracle Database 19cLiferay Portal CE 7.4: Come configurare Oracle Database 19c
Liferay Portal CE 7.4: Come configurare Oracle Database 19cAntonio Musarra
 
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...Antonio Musarra
 
Come installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19c
Come installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19cCome installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19c
Come installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19cAntonio Musarra
 
Come installare Liferay 7 su JBOSS EAP con il supporto​ Oracle Database
Come installare Liferay 7 su JBOSS EAP con il supporto​ Oracle DatabaseCome installare Liferay 7 su JBOSS EAP con il supporto​ Oracle Database
Come installare Liferay 7 su JBOSS EAP con il supporto​ Oracle DatabaseAntonio Musarra
 
SugarCRM: Come realizzare un Custom Scheduler. Un esempio completo.
SugarCRM: Come realizzare un Custom Scheduler. Un esempio completo.SugarCRM: Come realizzare un Custom Scheduler. Un esempio completo.
SugarCRM: Come realizzare un Custom Scheduler. Un esempio completo.Antonio Musarra
 
How to Build a Java client for SugarCRM
How to Build a Java client for SugarCRMHow to Build a Java client for SugarCRM
How to Build a Java client for SugarCRMAntonio Musarra
 
Introduzione a Liferay Message BUS
Introduzione a Liferay Message BUSIntroduzione a Liferay Message BUS
Introduzione a Liferay Message BUSAntonio Musarra
 
Un CRM dentro un CMS v1.0
Un CRM dentro un CMS v1.0Un CRM dentro un CMS v1.0
Un CRM dentro un CMS v1.0Antonio Musarra
 
Running Kettle Job by API v1.2
Running Kettle Job by API v1.2Running Kettle Job by API v1.2
Running Kettle Job by API v1.2Antonio Musarra
 
SugarCRM Web Services: Build a Apache CXF Client
SugarCRM Web Services: Build a Apache CXF ClientSugarCRM Web Services: Build a Apache CXF Client
SugarCRM Web Services: Build a Apache CXF ClientAntonio Musarra
 
Building a Client .NET for SugarCRM
Building a Client .NET for SugarCRMBuilding a Client .NET for SugarCRM
Building a Client .NET for SugarCRMAntonio Musarra
 
Come configurare Liferay 6.0 per Oracle
Come configurare Liferay 6.0 per OracleCome configurare Liferay 6.0 per Oracle
Come configurare Liferay 6.0 per OracleAntonio Musarra
 
HOW TO SAML Password Management (Note)
HOW TO SAML Password Management (Note)HOW TO SAML Password Management (Note)
HOW TO SAML Password Management (Note)Antonio Musarra
 
J-SugarCRM UserSync TechnicalGuide
J-SugarCRM UserSync TechnicalGuideJ-SugarCRM UserSync TechnicalGuide
J-SugarCRM UserSync TechnicalGuideAntonio Musarra
 
Costruire un client Java per SugarCRM
Costruire un client Java per SugarCRMCostruire un client Java per SugarCRM
Costruire un client Java per SugarCRMAntonio Musarra
 
Configure Kettle debug session
Configure Kettle debug sessionConfigure Kettle debug session
Configure Kettle debug sessionAntonio Musarra
 

More from Antonio Musarra (17)

Liferay Portal CE 7.4: Come configurare Oracle Database 19c
Liferay Portal CE 7.4: Come configurare Oracle Database 19cLiferay Portal CE 7.4: Come configurare Oracle Database 19c
Liferay Portal CE 7.4: Come configurare Oracle Database 19c
 
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...
 
Come installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19c
Come installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19cCome installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19c
Come installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19c
 
Come installare Liferay 7 su JBOSS EAP con il supporto​ Oracle Database
Come installare Liferay 7 su JBOSS EAP con il supporto​ Oracle DatabaseCome installare Liferay 7 su JBOSS EAP con il supporto​ Oracle Database
Come installare Liferay 7 su JBOSS EAP con il supporto​ Oracle Database
 
SugarCRM: Come realizzare un Custom Scheduler. Un esempio completo.
SugarCRM: Come realizzare un Custom Scheduler. Un esempio completo.SugarCRM: Come realizzare un Custom Scheduler. Un esempio completo.
SugarCRM: Come realizzare un Custom Scheduler. Un esempio completo.
 
How to Build a Java client for SugarCRM
How to Build a Java client for SugarCRMHow to Build a Java client for SugarCRM
How to Build a Java client for SugarCRM
 
Introduzione a Liferay Message BUS
Introduzione a Liferay Message BUSIntroduzione a Liferay Message BUS
Introduzione a Liferay Message BUS
 
Un CRM dentro un CMS v1.0
Un CRM dentro un CMS v1.0Un CRM dentro un CMS v1.0
Un CRM dentro un CMS v1.0
 
Running Kettle Job by API v1.2
Running Kettle Job by API v1.2Running Kettle Job by API v1.2
Running Kettle Job by API v1.2
 
SugarCRM Web Services: Build a Apache CXF Client
SugarCRM Web Services: Build a Apache CXF ClientSugarCRM Web Services: Build a Apache CXF Client
SugarCRM Web Services: Build a Apache CXF Client
 
Building a Client .NET for SugarCRM
Building a Client .NET for SugarCRMBuilding a Client .NET for SugarCRM
Building a Client .NET for SugarCRM
 
Come configurare Liferay 6.0 per Oracle
Come configurare Liferay 6.0 per OracleCome configurare Liferay 6.0 per Oracle
Come configurare Liferay 6.0 per Oracle
 
HOW TO SAML Password Management (Note)
HOW TO SAML Password Management (Note)HOW TO SAML Password Management (Note)
HOW TO SAML Password Management (Note)
 
J-SugarCRM UserSync TechnicalGuide
J-SugarCRM UserSync TechnicalGuideJ-SugarCRM UserSync TechnicalGuide
J-SugarCRM UserSync TechnicalGuide
 
J-SugarCRM UserSync 1.0
J-SugarCRM UserSync 1.0J-SugarCRM UserSync 1.0
J-SugarCRM UserSync 1.0
 
Costruire un client Java per SugarCRM
Costruire un client Java per SugarCRMCostruire un client Java per SugarCRM
Costruire un client Java per SugarCRM
 
Configure Kettle debug session
Configure Kettle debug sessionConfigure Kettle debug session
Configure Kettle debug session
 

Introduzione agli Hooks – Primo Episodio

  • 1. Antonio  Musarra's  Blog   Document Revision:1.0-IT The  ideal  solution  for  a  problem   Blog:  http://musarra.wordpress.com   LinkedIn:  http://it.linkedin.com/in/amusarra     Mail:  antonio.musarra@gmail.com     22/05/13   1   This  document  is  issued  with  license  Creative  Commons  Attribution-­‐NonCommercial-­‐ShareAlike       Introduzione  agli  Hooks  –  Primo   Episodio   L’insediamento   dell’Open   Source   nel   mondo   del   cosiddetto   Enterprise   prosegue   in   modo   inesorabile   ma   alcune   organizzazioni   sono   ancora   restie   all’adozione   di   software   Open   Source   e   hanno   delle   giustificate   ragioni.   La   manutenzione  delle  personalizzazioni  (da  riesaminare  per  ogni  nuova  release)  è   uno  dei  motivi  che  giustifica  questa  diffidenza  nei  confronti  dei  software  Open   Source.   Ipotizziamo   per   un   attimo   di   poter   “agganciare   tramite   un   arpione”   le   personalizzazioni   implementate   senza   toccare   il   core   del   software,   direi   che   sarebbe   un’operazione   fantastica,   bene,   Liferay   ha   introdotto   di   recente   un   nuovo  tipo  di  plugin  che  prende  per  l’appunto  il  nome  di  Liferay  Hooks  (Liferay Inc, 2012).  Questa  nuova  via  di  estensione  fornisce  un  livello  di  separazione  tra  le   vostre   personalizzazioni   e   il   core   di   Liferay,   diminuendo   drasticamente   la   complessità   di   personalizzazione,   introducendo   inoltre   una   notevole   libertà   di   movimento  senza  la  preoccupazione  di  dover  tener  tracciata  del  codice  sorgente   a  ogni  release  del  core  di  Liferay.   Restando   nell’orto   delle   personalizzazioni,   un'altra   strada   “più   larga”   da   percorrere   in   scenari   complessi,   dove   gli   altri   tipi   di   plugin   non   arrivano,   si   chiama  Liferay  Ext  (Liferay Inc, 2012).  La  trattazione  di  questa  “bestia”  non  è  però   oggetto  di  quest’articolo,  magari  di  un  futuro.       A  questo  punto  direi  che  sia  venuto  il  momento  di  scrutare  più  da  vicino  gli   hooks  e  per  quali  scopi  possano  essere  utilizzati,  per  poi  immediatamente  saltare   alla   realizzazione   pratica   di   un   hook  per   personalizzare   Liferay.   La  versione  di   riferimento  di  Liferay  è  la  6.1  edizione  Community  Edition.   1. Obiettivo   L’articolo   intende   comunicare   le   informazioni   base   che   riguardano   gli   hooks  favorendo  l’aspetto  reale,  in  altre  parole,  far  capire  a  cosa  servono  tramite   l’esposizione  e  realizzazione  di  un  caso  di  studio  quanto  più  possibile  vicino  al   reale.   Sarà   quindi   presentato   un   caso   d’integrazione   che   farà   uso   degli   hooks,   toccando   i   vari   aspetti   di   personalizzazione.   L’articolo   sarà   suddiviso   in   più   episodi   per   evitare   una   “sbrodolata”   d’informazione   e   rendere   più   efficace   l’assimilazione  di  quanto  esposto.     2. Gli  Hook  in  breve   Che  cosa  sono  gli  hooks?  Il  nome  è  più  che  azzeccato,  in  effetti,  sono  parti  di   codice  “agganciate”  a  Liferay  che  in  genere  sovrascrivono  alcune  delle  funzioni   del  portale.      
  • 2. Antonio  Musarra's  Blog   Document Revision:1.0-IT The  ideal  solution  for  a  problem   Blog:  http://musarra.wordpress.com   LinkedIn:  http://it.linkedin.com/in/amusarra     Mail:  antonio.musarra@gmail.com     22/05/13   2   This  document  is  issued  with  license  Creative  Commons  Attribution-­‐NonCommercial-­‐ShareAlike       Tramite  questo  tipo  di  plugin  è  possibile  per  gli  sviluppatori  sovrascrivere   parti  del  core  di  Liferay  con  le  proprie  implementazioni,  mantenendo  una  netta   separazione  tra  il  codice  personalizzato  e  il  core  di  Liferay.     Qualcuno   potrebbe   giustamente   obiettare   con   una   domanda   del   tipo:   perché  non  utilizzare  l’Ext  plugin?  Poiché  l’Ext  plugin  fornisce  l’accesso  completo   alle   parti   interne   del   core   di   Liferay,   il   codice   personalizzato   diventerebbe   strettamente   accoppiato   a   particolari   implementazioni   di   funzioni   interne   che   spesso   potrebbero   cambiare   da   una   release   a   un’altra,   basterebbe   quindi   un   semplice  cambio  di  firma  di  un  metodo  per  causare  un  gran  mal  di  testa  a  colui  il   quale  deve  riesaminare  il  codice  personalizzato.     Così   come   portlet,   theme,   layout   e   così   via,   anche   gli   hooks   sono   hot-­‐ deployable1 ,   quindi   aggiungere   e   rimuovere   è   un’operazione   semplice.   La   possibilità   di   suddividere   funzionalità   complesse   in   più   hook,   sviluppati   da   persone  diverse,  rende  dinamico  l’ambiente  di  sviluppo  e  inoltre  l’uso  del  set  di   API  pubbliche  di  Liferay  per  la  scrittura  dell’hook  rende  semplice  la  revisione  del   codice  personalizzato  grazie  alla  corretta  segnalazione  dei  deprecati.    Gli  hooks   sono   stati   progettati   per   superare   molte   delle   limitazioni   dell’Ext   e   i   punti   di   estensione  disponibili  crescono  a  ogni  release  di  Liferay  anche  grazie  ai  feedback   ricevuti  da  parte  degli  utenti.      Come  fare  a  scegliere  lo  strumento  di  estensione  più  adeguato?  Utilizzare   gli  hook  dove  possibile.  Sono  più  semplici  da  implementare,  installare,  rimuovere   e  manutenere.  Ricorre  all’uso  dell’Ext  (Liferay Inc, 2012)  solo  nel  caso  in  cui  ciò   che  è  richiesto  non  può  essere  soddisfatto  tramite  hook.     Nel  prossimo  paragrafo  vedremo  ciò  che  è  possibile  personalizzare  tramite   hook.     3. Cos’è  possibile  personalizzare  tramite  Hook   La  strada  consigliata  per  la  personalizzazione  delle  funzioni  base  di  Liferay,   sono  gli  hooks  (Liferay Inc, 2012).  Tramite  gli  hooks  è  possibile  coprire  un  ampio   spettro   di   necessità   e   dovrebbero   essere   utilizzati   al   posto   dell’Ext,   quando   possibile.  Gli  hooks  sono  stati  progettati  per  personalizzare  fondamentalmente   cinque  caratteristiche  principali  del  portale:     • Portal  properties   • Language  properties   • Web  Resources   • Performing  custom  actions   • Services     Come   per   le   portlet,   layout   e   temi,   anche   gli   hooks   sono   creati   e   gestiti   utilizzando  il  Plugin  SDK2.                                                                                                                   1  Il  processo  d’installazione  o  aggiornamento  di  componenti  a  un  server  in  esecuzione  senza  arrestare  e  riavviare  il  server   stesso.   2  E’  un  ambiente  di  sviluppo  che  aiuta  nello  sviluppo  di  tutti  i  tipi  di  plugin  di  Liferay  basato  sul  Apache  Ant,  di  recente  è   stata  introdotta  anche  la  possibilità  di  realizzare  plugin  tramite  Apache  Maven.  
  • 3. Antonio  Musarra's  Blog   Document Revision:1.0-IT The  ideal  solution  for  a  problem   Blog:  http://musarra.wordpress.com   LinkedIn:  http://it.linkedin.com/in/amusarra     Mail:  antonio.musarra@gmail.com     22/05/13   3   This  document  is  issued  with  license  Creative  Commons  Attribution-­‐NonCommercial-­‐ShareAlike         Nella  trattazione  degli  hooks  e  in  particolare  del  caso  di  studio  illustrato  in   seguito,  vedremo  i  seguenti  aspetti  che  saranno  suddivisi  in  episodi  diversi:     • Portal  properties   • Performing  custom  action   • Web  Resources   • Servlet  filter  hook   4. Creazione  di  un  hook   Gli   hooks   risiedono   all’interno   della   directory   hooks   del   Plugin   SDK.   Esistono   vari   metodi   che   potete   utilizzare   per   creare   i   vostri   hooks   alcuni   dei   quali  sono:     • Developer  Studio   • Comando  create  del  Plugin  SDK   • Apache  Maven     Per  maggiori  approfondimenti  sulla  creazione  degli  hooks  fare  riferimento   a   (Liferay Inc, 2012)   per   i   primi   due   punti   mentre   per   l’ultimo   consiglio   la     consultazione   di   (Koivisto, Getting started with Liferay Maven SDK, 2012),   (Koivisto, Developing Liferay Plugins with Maven, 2012) (Musarra, 2012)   5. Caso  d’integrazione  tramite  Hook   Gli   hooks   possono   essere   molto   efficaci   nelle   soluzioni   d’integrazione   tra   Liferay  e  altri  sistemi  esterni.  In  questo  paragrafo  vedremo  come  poter  sfruttare   gli  hooks  come  punto  “d’intermediazione”  tra  Liferay  e  un  sistema  di  CRM.         Figura  1  Macro  architettura  d’integrazione  tra  Liferay  e  CRM.     La   macro   architettura   d’integrazione   mostrata   in   Figura   1   illustra   chiaramente  quali  sono  gli  elementi  interessati  dal  caso  d’integrazione  proposto.   Volutamente  sono  stati  evidenziati  in  nero  gli  elementi  che  riguardano  il  CRM   Liferay Portal Hooks CRM Integration API CRM System
  • 4. Antonio  Musarra's  Blog   Document Revision:1.0-IT The  ideal  solution  for  a  problem   Blog:  http://musarra.wordpress.com   LinkedIn:  http://it.linkedin.com/in/amusarra     Mail:  antonio.musarra@gmail.com     22/05/13   4   This  document  is  issued  with  license  Creative  Commons  Attribution-­‐NonCommercial-­‐ShareAlike       per  porre  l’accento  sul  fatto  che  devono  essere  considerati  vere  e  proprie  scatole   nere  e  concentrare  l’attenzione  verso  gli  hooks.   5.1 Ipotesi  d’integrazione   Alcuni  degli  utenti  memorizzati  su  Liferay  (che  accedono  al  portale)  sono   clienti   dell’ipotetica   azienda   Dontesta  Corporation  Ltd   (che   vende   prodotti   per   l’equitazione)   e   le   schede   commerciali   dei   clienti   sono   registrate   sul   sistema   interno  di  CRM.  Non  necessariamente  gli  utenti  definiti  su  Liferay  sono  clienti   dell’azienda  e  di  conseguenza  gestiti  sul  CRM.  L’esigenza  dell’azienda  è  di  dare  la   possibilità  d’accesso  diretto  alle  schede  dei  contatti  e  aziende  direttamente  dal   portale  Liferay.         Figura  2  Esempio  di  UI  per  accesso  alle  schede  CRM  del  contatto  e  azienda.   Il  mockup3  illustrato  in  Figura  2  è  un  buon  esempio  di  come  l’interfaccia   utente  su  Liferay  si  dovrebbe  presentare  agli  utenti  per  consentire  loro  l’accesso   alle  schede  del  CRM.  Con  un  po’  d’occhio  è  possibile  notare  come  il  mockup  di   Figura   2   è   spudoratamente   vicinissimo   alla   lista   Utenti   e   Organizzazioni   accessibile  da  pannello  di  controllo  di  Liferay.   Garantire   l’accesso   alle   schede   (contatto   e   azienda)   si   traduce   nella   necessità   di   poter   memorizzare   alcuni   dati   presenti   sul   CRM   come   attributi   aggiuntivi  dell’utente  Liferay.  I  dati  da  prelevare  dal  sistema  di  CRM  sono:     • L’identificativo  del  contatto;   • L’identificativo  dell'azienda  cui  il  contatto  appartiene.     I  dati  sopra  menzionati  sono  indispensabili  per  comunicare  al  CRM  quale   contatto  o  azienda  s’intende  visualizzare.  L’accesso  ai  dati  del  CRM  da  parte  di   Liferay   avviene   tramite   la   scatola   nera   CRM   Integration   API   indicata   nel   diagramma  di  Figura  1.                                                                                                                     3  Per  mockup  si  intende  comunemente  la  riproduzione  di  un  oggetto  originale  ad  uso  didattico,  dimostrativo,   scenografico  o  di  comunicazione  visiva    
  • 5. Antonio  Musarra's  Blog   Document Revision:1.0-IT The  ideal  solution  for  a  problem   Blog:  http://musarra.wordpress.com   LinkedIn:  http://it.linkedin.com/in/amusarra     Mail:  antonio.musarra@gmail.com     22/05/13   5   This  document  is  issued  with  license  Creative  Commons  Attribution-­‐NonCommercial-­‐ShareAlike       5.2 Dove  memorizzare  i  dati  del  CRM   E’   plausibile   pensare   ai   dati   provenienti   dal   CRM   come   estensione   del   modello   utente   di   Liferay,   d’altronde   questi   dati   arricchiscono   l’utente   di   altre   informazioni.   Liferay   mette   a   nostra   disposizione   uno   strumento   davvero   potente   che   consente   facilmente   di   realizzare   quanto   pensato   e   illustrato   in   Figura  3.         Figura  3  Modello  Utente  Liferay  esteso.   Sicuramente   il   nome   di   campi   personalizzati   (Francia, 2011)   (o   custom   fields)   non   suona   del   tutto   nuovo,   bene,   questo   è   lo   strumento   con   il   quale   definire  sul  modello  utente  due  nuovi  attributi  (topic  Extended  CRM  Attribute  di   Figura  3)  specificandone  anche  il  tipo:     • ContactId:  attributo  di  tipo  stringa  il  cui  valore  è  l’identificativo  (UUID4)   del  contatto  sul  sistema  di  CRM;   • AccountId:  attributo  di  tipo  stringa  il  cui  valore  è  l’identificativo  (UUID)   dell’azienda  cui  il  contatto  appartiene;     I   due   nuovi   attributi   creati   per   il   modello   utente   di   Liferay   conterranno   quindi  i  valori  necessari  per  recuperare  in  seguito  le  informazioni  di  dettaglio  del   contatto   e   azienda.     In   Figura   4   è   mostrato   il   dettaglio   di   un   utente   e   in   particolare  sono  evidenziati  i  valori  dei  due  attributi  ContactId  e  AccountId.                                                                                                                     4  L'identificativo  univoco  universale  (universally  unique  identifier  o  UUID)  è  un  identificativo  standard  usato  nelle   infrastrutture  software,  standardizzato  dalla  Open  Software  Foundation  (OSF)  come  parte  di  un  ambiente  distribuito  di   computazione.    
  • 6. Antonio  Musarra's  Blog   Document Revision:1.0-IT The  ideal  solution  for  a  problem   Blog:  http://musarra.wordpress.com   LinkedIn:  http://it.linkedin.com/in/amusarra     Mail:  antonio.musarra@gmail.com     22/05/13   6   This  document  is  issued  with  license  Creative  Commons  Attribution-­‐NonCommercial-­‐ShareAlike           Figura  4  Dettaglio  dell’utente  con  particole  vista  degli  attributi  CRM.   5.3 Quando  e  come  memorizzare  i  dati  del  CRM   Direi   che   siamo   arrivati   al   punto   interessante   del   caso   d’integrazione.   E’   stato  definito  l’obiettivo,  i  dati  del  CRM  cui  accedere  e  quale  strumento  utilizzare   per  memorizzare  questi  ultimi,  non  resta  che  altro  che  scoprire  quando  accedere   al  CRM  per  recuperare  i  dati  di  nostro  interesse  e  come  memorizzarli  su  i  due   nuovi  attributi  definiti  in  precedenza.   Il  portale  Liferay  supporta  un  gran  numero  di  eventi  che  accadono  in  certe   situazioni   e   tramite   hook   è   possibile   quindi   eseguire   una   o   più   azioni   personalizzate   (performing   custom   actions)   al   verificarsi   di   un   determinato   evento.   Le   azioni   che   sono   eseguite   per   ognuno   degli   eventi   supportati   dal   portale,   sono   definite   nel   file   di   configurazione   portal.properties.   Attraverso   l’hook  dovremmo  quindi:     • Estendere  il  file  di  configurazione  portal.properties;   • Creare  la  nuova  azione  da  eseguire  per  un  determinato  evento.       Il  tipo  di  evento  che  calza  a  pennello  con  il  nostro  caso  d’integrazione  è  di   user  login  e  in  particolare  l’evento  login  post  action.  Quest’evento  è  idoneo  per   eseguire  l’azione  di  recupero  e  memorizzazione  dei  dati  ContactId  e  AccountId.      
  • 7. Antonio  Musarra's  Blog   Document Revision:1.0-IT The  ideal  solution  for  a  problem   Blog:  http://musarra.wordpress.com   LinkedIn:  http://it.linkedin.com/in/amusarra     Mail:  antonio.musarra@gmail.com     22/05/13   7   This  document  is  issued  with  license  Creative  Commons  Attribution-­‐NonCommercial-­‐ShareAlike         Figura  5  Processo  di  login  sul  portale  Liferay.   Il   processo   mostrato   in   Figura   5   rende   più   chiaro   il   processo   di   login.   Il   diagramma  mostra  solamente  la  parte  di  processo  di  nostro  interesse.  L’evento   di  login  post  action  è  scatenato  nel  momento  in  cui  è  stato  accertato  che  l’utente   abbia  inserito  le  corrette  credenziali,  a  quel  punto  tramite  l’Event  Processor  sono   eseguite   tutte   le   azioni   definite   dalla   proprietà   login.events.post.   Il   file   portal.properties  del  nostro  hook,  dovrebbe  contenere  la  configurazione  mostrata   al  Listato  1.     ## ## Portal Events ## # # Login event # login.events.post=it.dontesta.liferay.portal.events.LoginPostAction Listato  1  Definizione  dell’azione  da  eseguire  all’evento  di  login  post  action.   L’azione  da  eseguire  nel  momento  in  cui  avviene  l’evento,  è  una  classe  che   estende   la   classe   astratta   com.liferay.portal.kernel.events.Action   di   cui   occorre   implementare   il   metodo   com.liferay.portal.kernel.events.Action#run().   Ricordo   che  non  siamo  limitati  a  specificare  una  sola  classe.   All’interno   del   metodo   run()   andrà   inserito   il   codice   necessario   per   eseguire  i  seguenti  task:     • Recupero  dell’utente  che  ha  eseguito  con  successo  il  login;   • Prendere  contatto  con  il  CRM  presentandosi  con  le  credenziali  dell’utente   che  ha  appena  eseguito  il  login;   • Recupero   i   dati   d’interesse   dal   CRM,   che   ricordo   essere,   il   ContactId   e   l’AccountId;   • Recupero  l’Expando  Bridge5  sul  modello  dell’utente;   • Tramite  l’ausilio  dell’Expando  Bridge  memorizzo  i  dati  ricevuti  dal  CRM  nei   rispettivi  attributi  estesi  definiti  in  precedenza  (vedi  Figura  3).                                                                                                                             5  E’  l’interfaccia  d’accesso  ai  custom  fields  di  un  determinato  model.  
  • 8. Antonio  Musarra's  Blog   Document Revision:1.0-IT The  ideal  solution  for  a  problem   Blog:  http://musarra.wordpress.com   LinkedIn:  http://it.linkedin.com/in/amusarra     Mail:  antonio.musarra@gmail.com     22/05/13   8   This  document  is  issued  with  license  Creative  Commons  Attribution-­‐NonCommercial-­‐ShareAlike       package it.dontesta.liferay.portal.events; /** * */ public class LoginPostAction extends Action { /* * (non-Javadoc) * * @see com.liferay.portal.kernel.events.Action#run(javax.servlet.http. * HttpServletRequest, javax.servlet.http.HttpServletResponse) */ @Override public void run(HttpServletRequest request, HttpServletResponse response) throws ActionException { }   Listato  2  Classe  che  implementa  l’azione  da  eseguire  sull’evento  login  post  action.   I   dati   così   ottenuti   e   memorizzati   sui   campi   personalizzati   saranno   utilizzati   in   seguito   per   accedere   alle   schede   di   dettaglio   del   CRM   (Contatto   e   Azienda).  In  Figura  6  un  piccolo  assaggio.       Figura  6  Scheda  di  dettaglio  Azienda  aperta  da  Liferay.   6. Conclusioni   Questo  primo  episodio  è  stato  molto  stringato  sulla  parte  introduttiva  degli   hooks  cercando  comunque  di  sintetizzare  al  meglio  gli  aspetti  più  importanti  per   poi   focalizzare   l’attenzione   su   un   caso   di   studio   abbastanza   vicino   al   reale.   In   questa   prima   parte,   con   l’aiuto   del   caso   di   studio,   è   stata   affrontata   la  
  • 9. Antonio  Musarra's  Blog   Document Revision:1.0-IT The  ideal  solution  for  a  problem   Blog:  http://musarra.wordpress.com   LinkedIn:  http://it.linkedin.com/in/amusarra     Mail:  antonio.musarra@gmail.com     22/05/13   9   This  document  is  issued  with  license  Creative  Commons  Attribution-­‐NonCommercial-­‐ShareAlike       personalizzazione  di  Liferay  tramite  hooks,  concentrandosi  su,  Portal  properties  e   Performing  custom  action.   Nei  prossimi  episodi  vedremo  i  rimanenti  aspetti  (Web  Resources  e  Servlet   filter  hook)  ultimando  il  caso  di  studio.  A  conclusione  di  tutti  gli  episodi  ci  sarà   anche  il  regalo  finale,  il  repository  contenente  i  sorgenti  del  progetto  oggetto  di   studio.   L’articolo   è   stato   pubblicato   sul   blog   D'VEL   TECH   BLOG   all’indirizzo   http://blog.d-­‐vel.com/web/blog/home/-­‐/blogs/introduzione-­‐agli-­‐hooks:-­‐primo-­‐ episodio?_33_redirect=%2Fweb%2Fblog%2F     Bibliografia   Francia,  J.  (2011,  July  1).  ExpandoTable  sulle  vostre  entità  custom!  Tratto  da   D'VEL  TECH  BLOG  :  http://blog.d-­‐vel.com/web/blog/home/-­‐ /blogs/expandotable-­‐sulle-­‐vostre-­‐entita-­‐custom!     Koivisto,  M.  (2012,  Mar  3).  Developing  Liferay  Plugins  with  Maven.  Tratto  da   SlideShare:  http://www.slideshare.net/koivimik/developing-­‐liferay-­‐plugins-­‐ with-­‐maven     Koivisto,  M.  (2012,  Feb  1).  Getting  started  with  Liferay  Maven  SDK.  Tratto  da   Liferay  Blog:  http://www.liferay.com/it/web/mika.koivisto/blog/-­‐ /blogs/getting-­‐started-­‐with-­‐liferay-­‐maven-­‐sdk     Liferay  Inc.  (2012).  Creating  a  Hook.  Tratto  da  Liferay  Portal  6.1  -­‐  Development   Guide:  http://www.liferay.com/it/documentation/liferay-­‐ portal/6.1/development/-­‐/ai/creating-­‐a-­‐ho-­‐4     Liferay  Inc.  (2012).  Ext  plugins.  Tratto  da  Liferay  Portal  6.1  -­‐  Development  Guide:   http://www.liferay.com/it/documentation/liferay-­‐portal/6.1/development/-­‐ /ai/ext-­‐plugi-­‐4     Liferay  Inc.  (2012).  Hooks.  Tratto  da  Liferay  Portal  6.1  -­‐  Development  Guide:   http://www.liferay.com/it/documentation/liferay-­‐portal/6.1/development/-­‐ /ai/hoo-­‐4     Musarra,  A.  (2012,  Oct  18).  Creare  progetti  Liferay  tramite  il  plugin  m2eclipse   (Maven  for  Eclipse).  Tratto  da  Antonio  Musarra's  Blog:   http://musarra.wordpress.com/2012/10/18/creare-­‐progetti-­‐liferay-­‐tramite-­‐il-­‐ plugin-­‐m2eclipse-­‐maven-­‐for-­‐eclipse/