SlideShare a Scribd company logo
1 of 15
Download to read offline
Antonio Musarra's Blog Document Revision: 1.0
The ideal solution for a problem Blog: http://www.dontesta.it
LinkedIn: http://it.linkedin.com/in/amusarra
Google+: https://plus.google.com/+AntonioMusarra
Mail: antonio.musarra@gmail.com
11/08/14 1
This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike
SugarCRM: Come realizzare un Custom
Scheduler. Un esempio completo.
INDICE
INTRODUZIONE ..............................................................................................................3
1. JOB QUEUE ................................................................................................................4
1.2 SCHEDULER...................................................................................................................................4
1.3 SCHEDULER JOBS .........................................................................................................................5
2. COME CREARE UN CUSTOM SCHEDULER........................................................5
2.1 IMPLEMENTAZIONE DEL PROCESSO D’IMPORTAZIONE DATI.............................................6
3. COME ORGANIZZARE IL PROGETTO DI SVILUPPO........................................7
4. BUILD DEL PACCHETTO D’INSTALLAZIONE .................................................11
5. INSTALLAZIONE DEL CUSTOM SCHEDULER ................................................ 12
6. CONCLUSIONI......................................................................................................... 14
UN PICCOLO FAVORE................................................................................................... 14
RISORSE............................................................................................................................ 15
Antonio Musarra's Blog Document Revision: 1.0
The ideal solution for a problem Blog: http://www.dontesta.it
LinkedIn: http://it.linkedin.com/in/amusarra
Google+: https://plus.google.com/+AntonioMusarra
Mail: antonio.musarra@gmail.com
11/08/14 2
This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike
L’articolo è rivolto a un pubblico che abbia una conoscenza base di SugarCRM dal
punto di vista della terminologia e in particolare dello sviluppo. All’interno dell’articolo
troverete inoltre i riferimenti alle risorse trattate per successivi approfondimenti.
Quanto trattato da quest’articolo ha validità per tutte le edizioni1
di SugarCRM
dalla versione 6.5 alla 7.2. I riferimenti a SugarCRM sono riferiti all’edizione Enterprise
versione 7.2.
Quanto realizzato nel corso dell’articolo è disponibile sul repository (pubblico)
GitHub SugarCRMJobXMLImporter raggiungibile all’URL
https://github.com/amusarra/SugarCRMJobXMLImporter.
1 SugarCRM è disponibile in cinque diverse edizioni, ciascuna con funzionalità aggiuntive. SugarCRM Community Edition è l'edizione
livello di base, SugarCRM Professional, SugarCRM Corporate, SugarCRM Enterprise e SugarCRM Ultimate. Su questo documento
Antonio Musarra's Blog Document Revision: 1.0
The ideal solution for a problem Blog: http://www.dontesta.it
LinkedIn: http://it.linkedin.com/in/amusarra
Google+: https://plus.google.com/+AntonioMusarra
Mail: antonio.musarra@gmail.com
11/08/14 3
This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike
Introduzione
Obiettivo di quest’articolo è mostrare come poter sfruttare a nostro favore il
componente Scheduler (SugarCRM, 2014) di SugarCRM per realizzare un caso d’uso
come quello indicato in Figura 1 che non si discosta poi molto da una situazione reale.
L’utilizzo dello strumento Scheduler è la scelta più adeguata per il genere di attività che il
caso di studio propone.
Figura 1 Diagramma d’integrazione dati tra un sistema di CRM e uno di Billing.
Il diagramma di Figura 1 mostra due sistemi che scambiano un flusso dati XML
(tramite un’area di storage su di una SAN2
) all’interno del quale viaggiano i dati degli
accounts che devono essere aggiornati o inseriti sul sistema di CRM.
La sequenza delle attività d’integrazione per il nostro caso d’uso è:
1. Il sistema di billing3
deposita (sull’area di storage condivisa) un flusso XML
contenente i dati degli accounts da aggiornare o inserire;
2. Il sistema di CRM, nello specifico SugarCRM, legge il flusso XML
(dall’area di storage condivisa) ed esegue l’operazione di aggiornamento o
inserimento sull’entità accounts.
Lo schema del flusso XML deve essere condiviso tra i due sistemi affinché
l’integrazione avvenga con successo.
Nei capitoli a seguire vedremo quindi come realizzare su SugarCRM un task che
implementi l’importazione dei dati degli accounts dal flusso XML fornito dal sistema di
2 Una Storage Area Network (SAN) è una rete o parte di una rete ad alta velocità di trasmissione (generalmente Gigabit/sec) costituita
esclusivamente da dispositivi di memorizzazione di massa, in alcuni casi anche di tipi e tecnologie differenti. Il suo scopo è di rendere
tali risorse d’immagazzinamento (storage) disponibili per qualsiasi computer (generalmente application server e DBMS server)
connesso ad essa.
3 Un sistema di billing è responsabile della gestione digitale dei documenti di certificazione delle transazioni B2C (Business to
Consumer) o anche B2B (Business to Business) che, in genere, segue il pagamento per beni e servizi effettuato attraverso sistemi di
transazione elettronica. Un sistema di billing basato su Java è per esempio JBilling (http://www.jbilling.com).
Antonio Musarra's Blog Document Revision: 1.0
The ideal solution for a problem Blog: http://www.dontesta.it
LinkedIn: http://it.linkedin.com/in/amusarra
Google+: https://plus.google.com/+AntonioMusarra
Mail: antonio.musarra@gmail.com
11/08/14 4
This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike
billing, vedremo inoltre come organizzare il progetto di sviluppo per creare il pacchetto
d’installazione da caricare sulla propria istanza SugarCRM tramite il Module Loader
(SugarCRM, 2014).
Il prossimo capitolo è dedicato a una breve introduzione del sistema Job Queue
(SugarCRM, 2014) alla base del servizio Scheduler.
1. Job Queue
Il Job Queue gestisce l’esecuzione di operazioni automatizzate all’interno di
SugarCRM. Questo componente è costituito da quattro elementi, di cui i due di nostro
interesse sono:
• Scheduler
• SchedulersJobs
In Figura 2 è mostrato il diagramma di collaborazione tra gli elementi che
costituiscono il sistema di Job Queue.
Figura 2 Collaborazione tra i componenti del Job Queue.
1.2 Scheduler
SugarCRM fornisce un servizio di pianificazione in grado di eseguire operazioni in
modo asincrono su base periodica. Lo Scheduler s’integra con i servizi di pianificazione
disponibili sui sistemi operativi Linux/Unix e Windows.
Il servizio dello Scheduler è governabile attraverso una semplice interfaccia (GUI)
raggiungibile dal pannello di amministrazione SugarCRM.
Antonio Musarra's Blog Document Revision: 1.0
The ideal solution for a problem Blog: http://www.dontesta.it
LinkedIn: http://it.linkedin.com/in/amusarra
Google+: https://plus.google.com/+AntonioMusarra
Mail: antonio.musarra@gmail.com
11/08/14 5
This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike
Le attività pianificate dal servizio dello Scheduler sono memorizzate all’interno
della tabella del data base di SugarCRM chiamata scheduler.
1.3 Scheduler Jobs
I Jobs rappresentano le singole esecuzioni dell’operazione pianificata (in genere) dal
servizio dello Scheduler. Il Job è caratterizzato da un insieme di proprietà, quella più
importante (oltre a quella che definisce il nome del Job necessaria per la creazione dello
stesso) si chiama target. Questa proprietà definisce la funzione o la URL che deve essere
chiamata dal Job.
La funzione definita dalla proprietà target, deve ritornare un valore di tipo
booleano (true o false). Nel caso in cui la proprietà target definisca una URL, i codici
HTTP4
di stato minori di 400 sono considerati equiparati al valore booleano true.
La tabella chiamata job_queue del data base di SugarCRM memorizza ogni job
eseguito dal sistema Job Queue.
2. Come creare un custom Scheduler
La creazione di un nuovo Job da far eseguire al servizio Scheduler è un’attività
molto semplice da portare a compimento. I passi fondamentali per creare un nuovo Job
per poi utilizzarlo sono:
• Definizione dell’etichetta per il nuovo Job. Questo consente
d’indentificare il nuovo Job in fase di creazione della pianificazione del
Job stesso;
• Definizione della funzione. Funzione che conterrà al suo interno il
codice necessario per implementare il requisito funzionale;
• Utilizzo del Job. Completati i passi precedenti, è possibile procedere
all’esecuzione dell’attività di Quick & Repair (SugarCRM, 2014) per poi
saltare alla creazione di un’attività pianificata (SugarCRM, 2014).
Nel nostro caso l’etichetta associata al Job è XML Importer Accounts mentre il
nome della funzione è XmlImporterJobs.
La modalità di creazione del nuovo Job è basata sull’Extension Framework
(SugarCRM, 2014) introdotto dalla versione 6.3 di SugarCRM.
I file base da creare per realizzare il custom scheduler sono:
• [en_us|it_it].xmlImporterJobs.php. Definizione dell’etichetta del Job
per la lingua inglese e italiana;
4 I codici di stato http quelli definiti dall'ITEF (RFC 2616) sono disponibili a https://tools.ietf.org/html/rfc2616#section-6.1.1.
Antonio Musarra's Blog Document Revision: 1.0
The ideal solution for a problem Blog: http://www.dontesta.it
LinkedIn: http://it.linkedin.com/in/amusarra
Google+: https://plus.google.com/+AntonioMusarra
Mail: antonio.musarra@gmail.com
11/08/14 6
This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike
• XMLImporterTask.php. Definizione e implementazione della funzione
XmlImporterJobs.
2.1 Implementazione del processo d’importazione dati
La funzione XmlImporterJob implementa il processo d’importazione dati dal file
XML così come descritto nel primo paragrafo d’introduzione e mostrato tramite il
flowchart di Figura 3.
Figura 3 Flowchart del processo d’importazione dati dal flusso XML.
Antonio Musarra's Blog Document Revision: 1.0
The ideal solution for a problem Blog: http://www.dontesta.it
LinkedIn: http://it.linkedin.com/in/amusarra
Google+: https://plus.google.com/+AntonioMusarra
Mail: antonio.musarra@gmail.com
11/08/14 7
This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike
Il processo implementato è molto semplice e sul flowchart per ragioni di spazio ho
evitato di rappresentare le condizioni di errore modellando il solo flusso principale.
Volendo fare una sintesi del processo, il flusso si svolge nel seguente modo:
1) Lettura del parametro di configurazione che indica il path completo dell’area di
storage condivisa dove il sistema di billing pubblica i flussi XML;
2) Scansione del contenuto della directory condivisa;
a) Lettura di ogni file XML trovato
i) Per ogni account
(1) Se esiste sul sistema SugarCRM, allora esegue un aggiornamento degli
attributi dell’account esistente;
(2) Se non esiste sul sistema SugarCRM, allora esegue un nuovo inserimento
dell’account sul data base.
Qualcuno di voi sicuramente avrà notato che sul flowchart non c’è segno
dell’eliminazione dei file XML una volta terminata l’elaborazione. Questa parte di
processo manca semplicemente per ragioni di spazio e pigrizia da parte mia, infatti,
questa non è stata neanche implementata sul progetto finale.
L’implementazione di questo processo d’importazione dati si riduce a pochissime e
semplici righe di codice (appena 50), dove sono utilizzate funzioni standard di PHP per:
• Leggere il contenuto del path della directory condivisa tramite la funzione
scandir (The PHP Group, 2014);
• Leggere i file XML come oggetto SimpleXMLElement (The PHP Group,
2014) tramite la funzione simplexml_load_file (The PHP Group, 2014).
e le API SugarCRM per:
• Leggere il parametro di configurazione tramite l’API Configurator
(SugarCRM, 2014);
• Lavorare con i bean di SugarCRM tramite l’API BeanFactory (SugarCRM,
2014).
3. Come organizzare il progetto di sviluppo
Fino a questo momento abbiamo visto quali sono gli elementi necessari per la
realizzazione di un custom scheduler che soddisfi i requisiti discussi nella parte introduttiva
dell’articolo.
La realizzazione del custom scheduler è un’estensione del modulo Scheduler e come
tale può essere quindi installato su di un’istanza SugarCRM tramite il Module Loader
realizzando un opportuno pacchetto d’installazione.
Antonio Musarra's Blog Document Revision: 1.0
The ideal solution for a problem Blog: http://www.dontesta.it
LinkedIn: http://it.linkedin.com/in/amusarra
Google+: https://plus.google.com/+AntonioMusarra
Mail: antonio.musarra@gmail.com
11/08/14 8
This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike
Per realizzare il pacchetto (in formato zip) del nostro custom scheduler e installarlo
attraverso il Module Loader, occorre utilizzare l’Extension Framework tramite il manifest
(SugarCRM, 2014) file e organizzare il progetto di sviluppo.
Su come organizzare il progetto di sviluppo, non ci sono “regole ufficiali” scritte e
quanto mostrato in Figura 4 è la struttura dei folder/files che utilizzo solitamente per
progetti del genere.
Figura 4 Struttura del progetto di sviluppo per il custom scheduler.
Come qualcuno di voi avrà già notato dalla Figura 4, utilizzo il tool Ant5
per
generare il pacchetto zip che sarà poi installato sull’istanza SugarCRM via Module
Loader. Possiamo descrivere la struttura di questo progetto nel modo seguente:
• Per il tool Ant
o build.properties: File di properties (in stile java) che in questo caso
contiene la sola proprietà version il cui valore è utilizzato nel nome del
pacchetto zip generato in fase di build;
o build.xml: Direttive generali per il tool Ant;
o build: Folder contenente lo specifico file xml Ant con le direttive per il
build del pacchetto zip;
o dist: Folder dove sono memorizzati i pacchetti zip per ogni build
eseguito via Ant. Sul repository questa directory non è presente perché
creata in modo autonomo Ant.
• Per il Module Loader
o LICENSE.txt: File di testo contenente il testo della licenza d’uso;
o README.txt: File di testo contenente note in genere che sono mostrate
nella fase d’installazione del pacchetto;
o manifest.php: File che contiene le direttive d’installazione lette dal
Module Loader in fase di caricamento del pacchetto;
o jobs: Folder contenente il file php con la definizione e implementazione
della funzione target;
5 Apache Ant (http://ant.apache.org/) è un software per l'automazione del processo di build. È simile a make ma scritto in Java ed è
principalmente orientato allo sviluppo in Java. Ant è un progetto Apache, open source, ed è rilasciato sotto licenza Apache.
Antonio Musarra's Blog Document Revision: 1.0
The ideal solution for a problem Blog: http://www.dontesta.it
LinkedIn: http://it.linkedin.com/in/amusarra
Google+: https://plus.google.com/+AntonioMusarra
Mail: antonio.musarra@gmail.com
11/08/14 9
This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike
§ language: Folder contenente i file per ogni lingua supportata.
All’interno di ogni file è definita l’etichetta da associare al nuovo
Job;
o scripts: Folder contente gli script php associati alle azioni supportate dal
Module Loader. In questo caso le azioni per le quali eseguire delle
operazioni su SugarCRM sono due:
§ post_install: Associato lo script post_install.php;
§ post_uninstall: Associato lo script post_uninstall.php;
Il Module Loader per eseguire l’installazione del pacchetto ha bisogno del manifest
file (manifest.php) dove all’interno sono definite una serie di proprietà lette durante il
caricamento e utilizzate durante il processo d’installazione.
Il manifest file è diviso in due sezioni, una di definizione generale chiamata Manifest
Definitions con le proprietà di base del pacchetto da installare e l’altra chiamata Installdef
Definitions dove sono indicate le direttive d’installazione per ogni elemento di SugarCRM
(layout, beans, scheduler, etc…) e le azioni del processo d’installazione (pre_execute,
post_execute, etc…).
Gli elementi da installare come estensione del modulo Scheduler sono i file della
lingua e lo script php (XMLImporterTask.php) che implementa il nostro custom
scheduler. Dopo il processo d’installazione è stata prevista la creazione di una nuova
attività pianificata per il Job XmlImporterJobs che abbiamo creato, evitiamo così la
creazione manuale, è stato inoltre previsto che in caso di disinstallazione del pacchetto
venisse rimossa l’attività pianificata creata in fase d’installazione.
Per l’azione post_install del Module Loader lo script post_install.php è il
responsabile della creazione dell’attività pianificata e del parametro di configurazione
JobXMLImporter_XMLDataFilePath che definisce il path completo dei file XML da cui
importare i dati.
Per l’azione post_uninstall del Module Loader lo script post_uninstall.php è il
responsabile dell’eliminazione dell’attività pianificata creata in fase d’installazione.
Il Listato 1 e Listato 2 mostrano le sezioni del manifest file per il nostro pacchetto
d’installazione del custom scheduler.
Antonio Musarra's Blog Document Revision: 1.0
The ideal solution for a problem Blog: http://www.dontesta.it
LinkedIn: http://it.linkedin.com/in/amusarra
Google+: https://plus.google.com/+AntonioMusarra
Mail: antonio.musarra@gmail.com
11/08/14 10
This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike
$manifest	
  =	
  	
  
	
  	
  array(	
  
	
  
	
   'key'	
  =>	
  'ba2b4a8efaf959e6770c4e3e5f429f9ff960b7a5',	
  
	
   'acceptable_sugar_versions'	
  =>	
  array(	
  
	
   'regex_matches'	
  =>	
  array(	
  
	
   	
   	
   	
   0	
  =>	
  '6.5.*',	
  
	
   	
   	
   	
   1	
  =>	
  '7.*'	
  
	
   	
   	
   ),	
  
	
   ),	
  
	
   'acceptable_sugar_flavors'	
  =>	
  array(	
  
	
   	
   	
   0	
  =>	
  'PRO',	
  
	
   	
   	
   1	
  =>	
  'ENT',	
  
	
   	
   	
   2	
  =>	
  'CE'	
  
	
   ),	
  
	
   'name'	
  	
  	
  	
  =>	
  'JobXMLImporter',	
  
	
   'description'	
  	
  =>	
  'Scheduler	
  Job	
  for	
  import	
  XML	
  Data	
  to	
  SugarCRM	
  Data	
  Base',	
  
	
   'is_uninstallable'	
  =>	
  true,	
  
	
   'author'	
  	
  	
  =>	
  'Antonio	
  Musarra',	
  
	
   'published_date'	
  =>	
  'January	
  4,	
  2014',	
  
	
   'version'	
  	
  	
  =>	
  '1.0.0',	
  
	
   'readme'	
  =>	
  'README.txt',	
  
	
   'type'	
  	
  	
  	
  =>	
  'module',	
  
);	
  
Listato 1 Sezione Manifest Definitions del manifest file.
Di particolare interesse è la seconda sezione del manifest file mostrata nel Listato 2
dove sono evidenti gli elementi da installare e gli script legati alle azioni del Module
Loader. Come potete notare dal manifest file, è stata specificata la sola azione di
post_uninstall, il motivo è semplice, l’azione post_install è eseguita se il Moduler Loader
trova lo script php chiamato esattamente post_install.php all’interno della directory
scripts.
$installdefs	
  =	
  array(	
  
	
   	
   'id'	
  	
  =>	
  'JobXMLImporter_SchedulerJob',	
  
	
   	
   'post_uninstall'	
  =>	
  array(	
  
	
   	
   	
   	
   '<basepath>/scripts/post_uninstall.php',	
  
	
   	
   ),	
  
	
   	
   'language'	
  =>	
  array	
  (	
  
	
   	
   	
   0	
  =>	
  
	
   	
   	
   array	
  (	
  
	
   	
   	
   'from'	
  =>	
  '<basepath>/jobs/language/en_us.xmlImporterJobs.php',	
  
	
   	
   	
   'to_module'	
  =>	
  'Schedulers',	
  
	
   	
   	
   'language'	
  =>	
  'en_us',	
  
	
   	
   	
   ),	
  
	
   	
   	
   1	
  =>	
  
	
   	
   	
   array	
  (	
  
	
   	
   	
   'from'	
  =>	
  '<basepath>/jobs/language/it_it.xmlImporterJobs.php',	
  
	
   	
   	
   'to_module'	
  =>	
  'Schedulers',	
  
	
   	
   	
   'language'	
  =>	
  'it_it',	
  
	
   	
   	
   ),	
  
	
   	
   ),	
  
	
   	
   'scheduledefs'	
  =>	
  array	
  (	
  
	
   	
   	
   	
   array(	
  
	
   	
   	
   	
   'from'	
  =>	
  '<basepath>/jobs/XMLImporterTask.php'	
  
	
   	
   	
   	
   ),	
  
	
   	
   ),	
  
);	
  
Listato 2 Sezione Installdef Definitions del manifest file.
Abbiamo visto come organizzare il progetto in modo da rendere semplice la
creazione del pacchetto d’installazione per il nostro custom scheduler e la struttura del
manifest file, quest’ultimo fondamentale per istruire il Module Loader. Nel prossimo
Antonio Musarra's Blog Document Revision: 1.0
The ideal solution for a problem Blog: http://www.dontesta.it
LinkedIn: http://it.linkedin.com/in/amusarra
Google+: https://plus.google.com/+AntonioMusarra
Mail: antonio.musarra@gmail.com
11/08/14 11
This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike
capitolo vedremo come fare il build del progetto per creare il pacchetto zip
d'installazione.
4. Build del pacchetto d’installazione
Il build del pacchetto tramite il tool Ant genera un file zip (dentro la directory dist
vedi Figura 4) il cui contenuto è mostrato in Figura 5.
Figura 5 Contenuto del pacchetto d’installazione creato con il tool Ant.
Ottenere il pacchetto zip da installare è molto semplice utilizzando Ant.
Supponendo di partire dal progetto disponibile sul repository GitHub, i comandi
necessari per il build sono i seguenti:
	
  
$	
  git	
  clone	
  https://github.com/amusarra/SugarCRMJobXMLImporter.git	
  
$	
  cd	
  SugarCRMJobXMLImporter	
  
$	
  ant	
  
Listato 3 Clonazione del progetto da GitHub e build via Ant.
Dal comando ant è possibile omettere il nome del task da eseguire perché quello di
default è la creazione del pacchetto zip.
	
  
Buildfile:	
  /private/tmp/SugarCRMJobXMLImporter/build.xml	
  
	
  
package:	
  
	
  	
  	
  	
  	
  	
  [zip]	
  Building	
  zip:	
  
/private/tmp/SugarCRMJobXMLImporter/dist/JobXMLImporter_SchedulerJob_1.0.0-­‐8.zip	
  
	
  
BUILD	
  SUCCESSFUL	
  
Total	
  time:	
  0	
  seconds	
  
Listato 4 Output del processo di build via Ant.
Al termine del processo di build il pacchetto zip è disponibile all’interno della
directory dist. Fate attenzione al naming del file, dove il numero di versione (nell’esempio
del Listato 4 è 1.0.0) e il build number (nell’esempio del Listato 4 è 8) sono dinamici. Il
primo valore deriva dalla proprietà version definita all’interno del file build.properties e il
secondo gestito da Ant. Il valore del build number è incrementale, quindi, a ogni build è
incrementato di un’unità.
Considerate che ci siamo fermati all’utilizzo base, sarebbe possibile direttamente da
Ant eseguire il cosiddetto direct deploy, task molto comodo durante la fase di sviluppo.
Antonio Musarra's Blog Document Revision: 1.0
The ideal solution for a problem Blog: http://www.dontesta.it
LinkedIn: http://it.linkedin.com/in/amusarra
Google+: https://plus.google.com/+AntonioMusarra
Mail: antonio.musarra@gmail.com
11/08/14 12
This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike
Direi che l’utilizzo di Ant anche in progetti diversi da Java è produttivo ma soprattutto
comodo per chi sviluppa velocizzando parecchi task.
5. Installazione del Custom Scheduler
Ottenuto il pacchetto zip, è possibile procedere con l’installazione del custom
scheduler nel modo consueto. Per maggiori informazioni sull’installazione dei pacchetti
consultare la sezione Module Loader dell’Administration Guide (SugarCRM, 2014).
In Figura 6 è mostrata la fase d’installazione del pacchetto con evidenza
dell’esecuzione dell’azione post_install.
Ricordiamo che per l’azione post_install, lo script creerà una nuova attività
pianificata relativa al Job XmlImporterJobs oltre a rendere disponibile sul file
config_override.php il parametro di configurazione JobXMLImporter_XMLDataFilePath
tramite il quale sarà possibile specificare il path dove il Job cercherà i file XML da cui
leggere i dati degli accounts da importare su SugarCRM.
Figura 6 Visualizzazione dello stato di avanzamento dell’installazione.
Nella Figura 7 è mostrata la nuova attività pianificata creata dopo l’installazione
tramite l’esecuzione dell’azione post_install, mentre il Listato 5 mostra il nuovo
parametro di configurazione inserito all’interno del file config_override.php sempre
dall’azione post_install.
Antonio Musarra's Blog Document Revision: 1.0
The ideal solution for a problem Blog: http://www.dontesta.it
LinkedIn: http://it.linkedin.com/in/amusarra
Google+: https://plus.google.com/+AntonioMusarra
Mail: antonio.musarra@gmail.com
11/08/14 13
This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike
Figura 7 Attività pianificata inserita con l’azione post_install del Module Loader.
	
  
<?php	
  
/***CONFIGURATOR***/	
  
$sugar_config['JobXMLImporter_XMLDataFilePath']	
  =	
  '/SharedFS/CRM/JobXMLImporter/xmldata';	
  
/***CONFIGURATOR***/	
  
Listato 5 Nuovo parametro di configurazione utilizzato dal custom scheduler.
Il progetto SugarCRMJobXMLImporter sul repository GitHub contiene una
directory chiamata xmlDataExample all’interno della quale è disponibile un file xml di
esempio.
Il Listato 6 riporta i log del Job in esecuzione. Da questi log è possibile seguire con
semplicità il flusso del processo che abbiamo visto in uno dei precedenti capitoli (vedi
Figura 3 Flowchart del processo d’importazione dati dal flusso XML.). L’attività
pianificata è stata creata per eseguire il Job quando possibile, quest’impostazione può
essere modificata dal pannello di amministrazione, specificando un intervallo di tempo
secondo le proprie necessità, con la possibilità di agire su altri parametri di
configurazione.
	
  
Fri	
  Aug	
  	
  1	
  00:48:03	
  2014	
  [2142][1][INFO]	
  Running:	
  XmlImporterContactsJobs	
  
Fri	
  Aug	
  	
  1	
  00:48:03	
  2014	
  [2142][1][INFO]	
  Scanning	
  XML	
  Data	
  dir	
  
/SharedFS/CRM/JobXMLImporter/xmldata...	
  
Fri	
  Aug	
  	
  1	
  00:48:03	
  2014	
  [2142][1][INFO]	
  Scanning	
  XML	
  Data	
  dir	
  
/SharedFS/CRM/JobXMLImporter/xmldata...	
  [Found	
  3	
  files]	
  
Fri	
  Aug	
  	
  1	
  00:48:03	
  2014	
  [2142][1][INFO]	
  Processing	
  accounts_data_200140731.xml	
  file...	
  
Fri	
  Aug	
  	
  1	
  00:48:03	
  2014	
  [2142][1][INFO]	
  Processing	
  account	
  with	
  id	
  130d7312-­‐7be8-­‐de1a-­‐756a-­‐
53ce2dd949f7...	
  
Fri	
  Aug	
  	
  1	
  00:48:03	
  2014	
  [2142][1][INFO]	
  Query:SELECT	
  TOP	
  1	
  	
  accounts.*	
  FROM	
  accounts	
  	
  WHERE	
  
accounts.id	
  =	
  N'130d7312-­‐7be8-­‐de1a-­‐756a-­‐53ce2dd949f7'	
  
Fri	
  Aug	
  	
  1	
  00:48:03	
  2014	
  [2142][1][INFO]	
  Update	
  record	
  account...	
  
Fri	
  Aug	
  	
  1	
  00:48:03	
  2014	
  [2142][1][INFO]	
  Query:UPDATE	
  accounts	
  
Fri	
  Aug	
  	
  1	
  00:48:03	
  2014	
  [2142][1][INFO]	
  Query	
  Execution	
  Time:0.013454914093018	
  
Fri	
  Aug	
  	
  1	
  00:48:03	
  2014	
  [2142][1][INFO]	
  Processing	
  account	
  with	
  id	
  id1...	
  
Fri	
  Aug	
  	
  1	
  00:48:03	
  2014	
  [2142][1][INFO]	
  Query:SELECT	
  TOP	
  1	
  	
  accounts.*	
  FROM	
  accounts	
  	
  WHERE	
  
accounts.id	
  =	
  N'id1'	
  
Fri	
  Aug	
  	
  1	
  00:48:03	
  2014	
  [2142][1][INFO]	
  Insert	
  new	
  record	
  account...	
  
Fri	
  Aug	
  	
  1	
  00:48:03	
  2014	
  [2142][1][INFO]	
  Query:INSERT	
  INTO	
  accounts	
  
(id,name,date_entered,date_modified,modified_user_id,created_by,description,deleted,phone_fax)	
  
Fri	
  Aug	
  	
  1	
  00:48:03	
  2014	
  [2142][1][INFO]	
  End:	
  XmlImporterContactsJobs	
  
Listato 6 Job in azione.
Antonio Musarra's Blog Document Revision: 1.0
The ideal solution for a problem Blog: http://www.dontesta.it
LinkedIn: http://it.linkedin.com/in/amusarra
Google+: https://plus.google.com/+AntonioMusarra
Mail: antonio.musarra@gmail.com
11/08/14 14
This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike
6. Conclusioni
Saper scegliere gli strumenti adeguati per la realizzazione di uno o più requisiti può
fare la differenza in termini di Time To Market6
(o TTM) ma soprattutto di manutenibilità.
Per il caso di studio proposto, la scelta d’utilizzare il sistema di Job Queue di SugarCRM e
il Module Loader unito all’Extension Framework è stata più che adeguata.
Abbiamo visto come sia stato semplice implementare il processo d’integrazione del
caso di studio utilizzando gli strumenti di SugarCRM e organizzando il progetto in modo
semplice e funzionale, affiancando per ultimo strumenti esterni per la semplificazione di
alcuni task legati al deploy.
Un piccolo favore
Per quanta passione e soddisfazione possa portare
scrivere contenuti di questo tipo, ciò comporta
anche un grande dispendio di tempo e risorse.
Se i contenuti gratuiti offerti in quest’articolo sono stati utili per te, potresti
restituirmi il favore condividendo l’articolo sui canali di social network, in modo da
rendere utile anche per gli altri ciò che ho scritto.
Clicca sulle immagini per condividere:
Vi aspetto su Antonio Musarra’s Blog - The ideal solution for a problem
(http://www.dontesta.it/blog/)
6 Il Time To Market (o TTM) è una espressione anglofona che indica il tempo che intercorre dall'ideazione di un prodotto alla sua
effettiva commercializzazione.
Antonio Musarra's Blog Document Revision: 1.0
The ideal solution for a problem Blog: http://www.dontesta.it
LinkedIn: http://it.linkedin.com/in/amusarra
Google+: https://plus.google.com/+AntonioMusarra
Mail: antonio.musarra@gmail.com
11/08/14 15
This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike
Risorse
SugarCRM. (2014). Administration Guide - Module Loader. Tratto da SugarCRM Support:
http://support.sugarcrm.com/02_Documentation/01_Sugar_Editions/02_Sugar_Enter
prise/Sugar_Enterprise_7.2/Administration_Guide/07_Developer_Tools/21_Module_
Loader/
SugarCRM. (2014). Administration Guide - Schedulers. Tratto da SugarCRM Support:
http://support.sugarcrm.com/02_Documentation/01_Sugar_Editions/02_Sugar_Enter
prise/Sugar_Enterprise_7.2/Administration_Guide/05_System/41_Schedulers/
SugarCRM. (2014). Developer Guide - BeanFactory. Tratto da SugarCRM Support:
http://support.sugarcrm.com/02_Documentation/04_Sugar_Developer/Sugar_Develo
per_Guide_7.2/70_API/Classes/BeanFactory/
SugarCRM. (2014). Developer Guide - Configurator. Tratto da SugarCRM Support:
http://support.sugarcrm.com/02_Documentation/04_Sugar_Developer/Sugar_Develo
per_Guide_7.2/70_API/Classes/Configurator/
SugarCRM. (2014). Developer Guide - Extension Framework. Tratto da SugarCRM Support:
http://support.sugarcrm.com/02_Documentation/04_Sugar_Developer/Sugar_Develo
per_Guide_7.2/50_Extension_Framework/
SugarCRM. (2014). Developer Guide - Introduction to the Manifest. Tratto da SugarCRM
Support:
http://support.sugarcrm.com/02_Documentation/04_Sugar_Developer/Sugar_Develo
per_Guide_7.2/70_API/Application/Module_Loader/30_Introduction_to_the_Manifes
t/
SugarCRM. (2014). Developer Guide - Job Queue - Introduction. Tratto da SugarCRM Support
Site:
http://support.sugarcrm.com/02_Documentation/04_Sugar_Developer/Sugar_Develo
per_Guide_7.2/70_API/Application/Job_Queue/00_Introduction
SugarCRM. (2014). Developer Guide - Module Loader. Tratto da SugarCRM Support:
http://support.sugarcrm.com/02_Documentation/04_Sugar_Developer/Sugar_Develo
per_Guide_7.2/70_API/Application/Module_Loader
SugarCRM. (2014). Knowledge Base - Running Quick Repair and Rebuild. Tratto da SugarCRM
Support:
http://support.sugarcrm.com/04_Find_Answers/02KB/02Administration/100Troubles
hooting/Running_Quick_Repair_and_Rebuild/
The PHP Group. (2014). scandir. Tratto da PHP Manual:
http://php.net/manual/it/function.scandir.php
The PHP Group. (2014). simplexml_load_file. Tratto da PHP Manual:
http://it2.php.net/manual/it/function.simplexml-load-file.php
The PHP Group. (2014). The SimpleXMLElement class. Tratto da PHP Manual:
http://it2.php.net/manual/it/class.simplexmlelement.php

More Related Content

What's hot

Introduzione a Liferay Message BUS
Introduzione a Liferay Message BUSIntroduzione a Liferay Message BUS
Introduzione a Liferay Message BUSAntonio 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
 
Running Kettle Job by API
Running Kettle Job by APIRunning Kettle Job by API
Running Kettle Job by APIAntonio Musarra
 
Costruire un client .NET per SugarCRM
Costruire un client .NET per SugarCRMCostruire un client .NET per SugarCRM
Costruire un client .NET per SugarCRMAntonio Musarra
 
Configure Kettle debug session
Configure Kettle debug sessionConfigure Kettle debug session
Configure Kettle debug sessionAntonio Musarra
 
Introduzione agli Hooks – Primo Episodio
Introduzione agli Hooks – Primo EpisodioIntroduzione agli Hooks – Primo Episodio
Introduzione agli Hooks – Primo EpisodioAntonio Musarra
 
J-SugarCRM UserSync TechnicalGuide
J-SugarCRM UserSync TechnicalGuideJ-SugarCRM UserSync TechnicalGuide
J-SugarCRM UserSync TechnicalGuideAntonio Musarra
 
PHP Documentation APIs on the fly
PHP Documentation APIs on the flyPHP Documentation APIs on the fly
PHP Documentation APIs on the flyAntonio Musarra
 
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriJoomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriAlessandro Nadalin
 

What's hot (12)

Introduzione a Liferay Message BUS
Introduzione a Liferay Message BUSIntroduzione a Liferay Message BUS
Introduzione a Liferay Message BUS
 
Costruire un client Java per SugarCRM
Costruire un client Java per SugarCRMCostruire un client Java per SugarCRM
Costruire un client Java per SugarCRM
 
Running Kettle Job by API
Running Kettle Job by APIRunning Kettle Job by API
Running Kettle Job by API
 
J-SugarCRM UserSync 1.0
J-SugarCRM UserSync 1.0J-SugarCRM UserSync 1.0
J-SugarCRM UserSync 1.0
 
Costruire un client .NET per SugarCRM
Costruire un client .NET per SugarCRMCostruire un client .NET per SugarCRM
Costruire un client .NET per SugarCRM
 
Configure Kettle debug session
Configure Kettle debug sessionConfigure Kettle debug session
Configure Kettle debug session
 
Introduzione agli Hooks – Primo Episodio
Introduzione agli Hooks – Primo EpisodioIntroduzione agli Hooks – Primo Episodio
Introduzione agli Hooks – Primo Episodio
 
J-SugarCRM UserSync TechnicalGuide
J-SugarCRM UserSync TechnicalGuideJ-SugarCRM UserSync TechnicalGuide
J-SugarCRM UserSync TechnicalGuide
 
PHP Documentation APIs on the fly
PHP Documentation APIs on the flyPHP Documentation APIs on the fly
PHP Documentation APIs on the fly
 
TYPO3 CMS 7.3 - le novita
TYPO3 CMS 7.3 - le novitaTYPO3 CMS 7.3 - le novita
TYPO3 CMS 7.3 - le novita
 
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriJoomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
 
ORM Java - Hibernate
ORM Java - HibernateORM Java - Hibernate
ORM Java - Hibernate
 

Similar to SugarCRM: Come realizzare un Custom Scheduler. Un esempio completo.

Paper presentazione social media
Paper presentazione social mediaPaper presentazione social media
Paper presentazione social mediaalessioemireni
 
Dashboard user guide
Dashboard user guideDashboard user guide
Dashboard user guideData Ware srl
 
Integrazione Sistemi CRM (Joomla) & CRM (SugarCRM)
Integrazione Sistemi CRM (Joomla) & CRM (SugarCRM)Integrazione Sistemi CRM (Joomla) & CRM (SugarCRM)
Integrazione Sistemi CRM (Joomla) & CRM (SugarCRM)Antonio Musarra
 
Realizzazione di un applicativo per la gestione di fogli di lavoro integrato ...
Realizzazione di un applicativo per la gestione di fogli di lavoro integrato ...Realizzazione di un applicativo per la gestione di fogli di lavoro integrato ...
Realizzazione di un applicativo per la gestione di fogli di lavoro integrato ...Saverio Tonon
 
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...Luca Bressan
 
Progetto 2.0
Progetto 2.0Progetto 2.0
Progetto 2.0pcaboni
 
SESAMO (application login automator): evoluzioni applicative e considerazioni...
SESAMO (application login automator): evoluzioni applicative e considerazioni...SESAMO (application login automator): evoluzioni applicative e considerazioni...
SESAMO (application login automator): evoluzioni applicative e considerazioni...AndrijaCiric1
 
Smau Milano2108_CNA
Smau Milano2108_CNASmau Milano2108_CNA
Smau Milano2108_CNASMAU
 
Technical manual (1)
Technical manual (1)Technical manual (1)
Technical manual (1)cpro2011
 
E suap - cloud computing (Italian)
E suap - cloud computing (Italian)E suap - cloud computing (Italian)
E suap - cloud computing (Italian)Sabino Labarile
 
Adobe TechConnection: Flex Best Practices
Adobe TechConnection: Flex Best PracticesAdobe TechConnection: Flex Best Practices
Adobe TechConnection: Flex Best Practicesmarcocasario
 
AreaMVC: un'architettura software basata sulla semplicità
AreaMVC: un'architettura software basata sulla semplicitàAreaMVC: un'architettura software basata sulla semplicità
AreaMVC: un'architettura software basata sulla semplicitàGiulio Destri
 
Caratterizzazione dei sistemi cloud per la Pubblica Amministrazione
Caratterizzazione dei sistemi cloud per la Pubblica AmministrazioneCaratterizzazione dei sistemi cloud per la Pubblica Amministrazione
Caratterizzazione dei sistemi cloud per la Pubblica AmministrazioneAmmLibera AL
 
Extended summary of “Understanding the Performance Costs and Benefits of Pri...
Extended summary of “Understanding the Performance Costs  and Benefits of Pri...Extended summary of “Understanding the Performance Costs  and Benefits of Pri...
Extended summary of “Understanding the Performance Costs and Benefits of Pri...RiccardoDeMonte
 
Progettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computerProgettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computerAlessandro Mascherin
 
Il modello di Cloud della PA
Il modello di Cloud della PAIl modello di Cloud della PA
Il modello di Cloud della PAMassimo Talia
 
Servizi nei sistemi informativi basati su web
Servizi nei sistemi informativi basati su webServizi nei sistemi informativi basati su web
Servizi nei sistemi informativi basati su webFulvietta Favore
 

Similar to SugarCRM: Come realizzare un Custom Scheduler. Un esempio completo. (20)

Paper presentazione social media
Paper presentazione social mediaPaper presentazione social media
Paper presentazione social media
 
Dashboard user guide
Dashboard user guideDashboard user guide
Dashboard user guide
 
Una azienda tra le nuvole
Una azienda tra le nuvoleUna azienda tra le nuvole
Una azienda tra le nuvole
 
Integrazione Sistemi CRM (Joomla) & CRM (SugarCRM)
Integrazione Sistemi CRM (Joomla) & CRM (SugarCRM)Integrazione Sistemi CRM (Joomla) & CRM (SugarCRM)
Integrazione Sistemi CRM (Joomla) & CRM (SugarCRM)
 
Realizzazione di un applicativo per la gestione di fogli di lavoro integrato ...
Realizzazione di un applicativo per la gestione di fogli di lavoro integrato ...Realizzazione di un applicativo per la gestione di fogli di lavoro integrato ...
Realizzazione di un applicativo per la gestione di fogli di lavoro integrato ...
 
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
 
Progetto 2.0
Progetto 2.0Progetto 2.0
Progetto 2.0
 
SESAMO (application login automator): evoluzioni applicative e considerazioni...
SESAMO (application login automator): evoluzioni applicative e considerazioni...SESAMO (application login automator): evoluzioni applicative e considerazioni...
SESAMO (application login automator): evoluzioni applicative e considerazioni...
 
Smau Milano2108_CNA
Smau Milano2108_CNASmau Milano2108_CNA
Smau Milano2108_CNA
 
Technical manual (1)
Technical manual (1)Technical manual (1)
Technical manual (1)
 
E suap - cloud computing (Italian)
E suap - cloud computing (Italian)E suap - cloud computing (Italian)
E suap - cloud computing (Italian)
 
Adobe TechConnection: Flex Best Practices
Adobe TechConnection: Flex Best PracticesAdobe TechConnection: Flex Best Practices
Adobe TechConnection: Flex Best Practices
 
AreaMVC: un'architettura software basata sulla semplicità
AreaMVC: un'architettura software basata sulla semplicitàAreaMVC: un'architettura software basata sulla semplicità
AreaMVC: un'architettura software basata sulla semplicità
 
Caratterizzazione dei sistemi cloud per la Pubblica Amministrazione
Caratterizzazione dei sistemi cloud per la Pubblica AmministrazioneCaratterizzazione dei sistemi cloud per la Pubblica Amministrazione
Caratterizzazione dei sistemi cloud per la Pubblica Amministrazione
 
Extended summary of “Understanding the Performance Costs and Benefits of Pri...
Extended summary of “Understanding the Performance Costs  and Benefits of Pri...Extended summary of “Understanding the Performance Costs  and Benefits of Pri...
Extended summary of “Understanding the Performance Costs and Benefits of Pri...
 
Cloud computing
Cloud computingCloud computing
Cloud computing
 
Manuale sicurnet duvri
Manuale sicurnet duvriManuale sicurnet duvri
Manuale sicurnet duvri
 
Progettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computerProgettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computer
 
Il modello di Cloud della PA
Il modello di Cloud della PAIl modello di Cloud della PA
Il modello di Cloud della PA
 
Servizi nei sistemi informativi basati su web
Servizi nei sistemi informativi basati su webServizi nei sistemi informativi basati su web
Servizi nei sistemi informativi basati su web
 

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
 
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...Antonio Musarra
 
Liferay & Salesforce.com
Liferay & Salesforce.comLiferay & Salesforce.com
Liferay & Salesforce.comAntonio 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
 
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
 
Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi Style
Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi StyleLiferay 7: Come realizzare un client SOAP con Apache CXF in OSGi Style
Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi StyleAntonio Musarra
 
Liferay - Quick Start 1° Episodio
Liferay - Quick Start 1° EpisodioLiferay - Quick Start 1° Episodio
Liferay - Quick Start 1° EpisodioAntonio 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
 
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
 

More from Antonio Musarra (15)

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
 
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...
 
Liferay & Salesforce.com
Liferay & Salesforce.comLiferay & Salesforce.com
Liferay & Salesforce.com
 
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
 
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
 
JAX-WS e JAX-RS
JAX-WS e JAX-RSJAX-WS e JAX-RS
JAX-WS e JAX-RS
 
Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi Style
Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi StyleLiferay 7: Come realizzare un client SOAP con Apache CXF in OSGi Style
Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi Style
 
OSGi e Liferay 7
OSGi e Liferay 7OSGi e Liferay 7
OSGi e Liferay 7
 
Liferay - Quick Start 1° Episodio
Liferay - Quick Start 1° EpisodioLiferay - Quick Start 1° Episodio
Liferay - Quick Start 1° Episodio
 
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
 
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)
 

SugarCRM: Come realizzare un Custom Scheduler. Un esempio completo.

  • 1. Antonio Musarra's Blog Document Revision: 1.0 The ideal solution for a problem Blog: http://www.dontesta.it LinkedIn: http://it.linkedin.com/in/amusarra Google+: https://plus.google.com/+AntonioMusarra Mail: antonio.musarra@gmail.com 11/08/14 1 This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike SugarCRM: Come realizzare un Custom Scheduler. Un esempio completo. INDICE INTRODUZIONE ..............................................................................................................3 1. JOB QUEUE ................................................................................................................4 1.2 SCHEDULER...................................................................................................................................4 1.3 SCHEDULER JOBS .........................................................................................................................5 2. COME CREARE UN CUSTOM SCHEDULER........................................................5 2.1 IMPLEMENTAZIONE DEL PROCESSO D’IMPORTAZIONE DATI.............................................6 3. COME ORGANIZZARE IL PROGETTO DI SVILUPPO........................................7 4. BUILD DEL PACCHETTO D’INSTALLAZIONE .................................................11 5. INSTALLAZIONE DEL CUSTOM SCHEDULER ................................................ 12 6. CONCLUSIONI......................................................................................................... 14 UN PICCOLO FAVORE................................................................................................... 14 RISORSE............................................................................................................................ 15
  • 2. Antonio Musarra's Blog Document Revision: 1.0 The ideal solution for a problem Blog: http://www.dontesta.it LinkedIn: http://it.linkedin.com/in/amusarra Google+: https://plus.google.com/+AntonioMusarra Mail: antonio.musarra@gmail.com 11/08/14 2 This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike L’articolo è rivolto a un pubblico che abbia una conoscenza base di SugarCRM dal punto di vista della terminologia e in particolare dello sviluppo. All’interno dell’articolo troverete inoltre i riferimenti alle risorse trattate per successivi approfondimenti. Quanto trattato da quest’articolo ha validità per tutte le edizioni1 di SugarCRM dalla versione 6.5 alla 7.2. I riferimenti a SugarCRM sono riferiti all’edizione Enterprise versione 7.2. Quanto realizzato nel corso dell’articolo è disponibile sul repository (pubblico) GitHub SugarCRMJobXMLImporter raggiungibile all’URL https://github.com/amusarra/SugarCRMJobXMLImporter. 1 SugarCRM è disponibile in cinque diverse edizioni, ciascuna con funzionalità aggiuntive. SugarCRM Community Edition è l'edizione livello di base, SugarCRM Professional, SugarCRM Corporate, SugarCRM Enterprise e SugarCRM Ultimate. Su questo documento
  • 3. Antonio Musarra's Blog Document Revision: 1.0 The ideal solution for a problem Blog: http://www.dontesta.it LinkedIn: http://it.linkedin.com/in/amusarra Google+: https://plus.google.com/+AntonioMusarra Mail: antonio.musarra@gmail.com 11/08/14 3 This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike Introduzione Obiettivo di quest’articolo è mostrare come poter sfruttare a nostro favore il componente Scheduler (SugarCRM, 2014) di SugarCRM per realizzare un caso d’uso come quello indicato in Figura 1 che non si discosta poi molto da una situazione reale. L’utilizzo dello strumento Scheduler è la scelta più adeguata per il genere di attività che il caso di studio propone. Figura 1 Diagramma d’integrazione dati tra un sistema di CRM e uno di Billing. Il diagramma di Figura 1 mostra due sistemi che scambiano un flusso dati XML (tramite un’area di storage su di una SAN2 ) all’interno del quale viaggiano i dati degli accounts che devono essere aggiornati o inseriti sul sistema di CRM. La sequenza delle attività d’integrazione per il nostro caso d’uso è: 1. Il sistema di billing3 deposita (sull’area di storage condivisa) un flusso XML contenente i dati degli accounts da aggiornare o inserire; 2. Il sistema di CRM, nello specifico SugarCRM, legge il flusso XML (dall’area di storage condivisa) ed esegue l’operazione di aggiornamento o inserimento sull’entità accounts. Lo schema del flusso XML deve essere condiviso tra i due sistemi affinché l’integrazione avvenga con successo. Nei capitoli a seguire vedremo quindi come realizzare su SugarCRM un task che implementi l’importazione dei dati degli accounts dal flusso XML fornito dal sistema di 2 Una Storage Area Network (SAN) è una rete o parte di una rete ad alta velocità di trasmissione (generalmente Gigabit/sec) costituita esclusivamente da dispositivi di memorizzazione di massa, in alcuni casi anche di tipi e tecnologie differenti. Il suo scopo è di rendere tali risorse d’immagazzinamento (storage) disponibili per qualsiasi computer (generalmente application server e DBMS server) connesso ad essa. 3 Un sistema di billing è responsabile della gestione digitale dei documenti di certificazione delle transazioni B2C (Business to Consumer) o anche B2B (Business to Business) che, in genere, segue il pagamento per beni e servizi effettuato attraverso sistemi di transazione elettronica. Un sistema di billing basato su Java è per esempio JBilling (http://www.jbilling.com).
  • 4. Antonio Musarra's Blog Document Revision: 1.0 The ideal solution for a problem Blog: http://www.dontesta.it LinkedIn: http://it.linkedin.com/in/amusarra Google+: https://plus.google.com/+AntonioMusarra Mail: antonio.musarra@gmail.com 11/08/14 4 This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike billing, vedremo inoltre come organizzare il progetto di sviluppo per creare il pacchetto d’installazione da caricare sulla propria istanza SugarCRM tramite il Module Loader (SugarCRM, 2014). Il prossimo capitolo è dedicato a una breve introduzione del sistema Job Queue (SugarCRM, 2014) alla base del servizio Scheduler. 1. Job Queue Il Job Queue gestisce l’esecuzione di operazioni automatizzate all’interno di SugarCRM. Questo componente è costituito da quattro elementi, di cui i due di nostro interesse sono: • Scheduler • SchedulersJobs In Figura 2 è mostrato il diagramma di collaborazione tra gli elementi che costituiscono il sistema di Job Queue. Figura 2 Collaborazione tra i componenti del Job Queue. 1.2 Scheduler SugarCRM fornisce un servizio di pianificazione in grado di eseguire operazioni in modo asincrono su base periodica. Lo Scheduler s’integra con i servizi di pianificazione disponibili sui sistemi operativi Linux/Unix e Windows. Il servizio dello Scheduler è governabile attraverso una semplice interfaccia (GUI) raggiungibile dal pannello di amministrazione SugarCRM.
  • 5. Antonio Musarra's Blog Document Revision: 1.0 The ideal solution for a problem Blog: http://www.dontesta.it LinkedIn: http://it.linkedin.com/in/amusarra Google+: https://plus.google.com/+AntonioMusarra Mail: antonio.musarra@gmail.com 11/08/14 5 This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike Le attività pianificate dal servizio dello Scheduler sono memorizzate all’interno della tabella del data base di SugarCRM chiamata scheduler. 1.3 Scheduler Jobs I Jobs rappresentano le singole esecuzioni dell’operazione pianificata (in genere) dal servizio dello Scheduler. Il Job è caratterizzato da un insieme di proprietà, quella più importante (oltre a quella che definisce il nome del Job necessaria per la creazione dello stesso) si chiama target. Questa proprietà definisce la funzione o la URL che deve essere chiamata dal Job. La funzione definita dalla proprietà target, deve ritornare un valore di tipo booleano (true o false). Nel caso in cui la proprietà target definisca una URL, i codici HTTP4 di stato minori di 400 sono considerati equiparati al valore booleano true. La tabella chiamata job_queue del data base di SugarCRM memorizza ogni job eseguito dal sistema Job Queue. 2. Come creare un custom Scheduler La creazione di un nuovo Job da far eseguire al servizio Scheduler è un’attività molto semplice da portare a compimento. I passi fondamentali per creare un nuovo Job per poi utilizzarlo sono: • Definizione dell’etichetta per il nuovo Job. Questo consente d’indentificare il nuovo Job in fase di creazione della pianificazione del Job stesso; • Definizione della funzione. Funzione che conterrà al suo interno il codice necessario per implementare il requisito funzionale; • Utilizzo del Job. Completati i passi precedenti, è possibile procedere all’esecuzione dell’attività di Quick & Repair (SugarCRM, 2014) per poi saltare alla creazione di un’attività pianificata (SugarCRM, 2014). Nel nostro caso l’etichetta associata al Job è XML Importer Accounts mentre il nome della funzione è XmlImporterJobs. La modalità di creazione del nuovo Job è basata sull’Extension Framework (SugarCRM, 2014) introdotto dalla versione 6.3 di SugarCRM. I file base da creare per realizzare il custom scheduler sono: • [en_us|it_it].xmlImporterJobs.php. Definizione dell’etichetta del Job per la lingua inglese e italiana; 4 I codici di stato http quelli definiti dall'ITEF (RFC 2616) sono disponibili a https://tools.ietf.org/html/rfc2616#section-6.1.1.
  • 6. Antonio Musarra's Blog Document Revision: 1.0 The ideal solution for a problem Blog: http://www.dontesta.it LinkedIn: http://it.linkedin.com/in/amusarra Google+: https://plus.google.com/+AntonioMusarra Mail: antonio.musarra@gmail.com 11/08/14 6 This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike • XMLImporterTask.php. Definizione e implementazione della funzione XmlImporterJobs. 2.1 Implementazione del processo d’importazione dati La funzione XmlImporterJob implementa il processo d’importazione dati dal file XML così come descritto nel primo paragrafo d’introduzione e mostrato tramite il flowchart di Figura 3. Figura 3 Flowchart del processo d’importazione dati dal flusso XML.
  • 7. Antonio Musarra's Blog Document Revision: 1.0 The ideal solution for a problem Blog: http://www.dontesta.it LinkedIn: http://it.linkedin.com/in/amusarra Google+: https://plus.google.com/+AntonioMusarra Mail: antonio.musarra@gmail.com 11/08/14 7 This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike Il processo implementato è molto semplice e sul flowchart per ragioni di spazio ho evitato di rappresentare le condizioni di errore modellando il solo flusso principale. Volendo fare una sintesi del processo, il flusso si svolge nel seguente modo: 1) Lettura del parametro di configurazione che indica il path completo dell’area di storage condivisa dove il sistema di billing pubblica i flussi XML; 2) Scansione del contenuto della directory condivisa; a) Lettura di ogni file XML trovato i) Per ogni account (1) Se esiste sul sistema SugarCRM, allora esegue un aggiornamento degli attributi dell’account esistente; (2) Se non esiste sul sistema SugarCRM, allora esegue un nuovo inserimento dell’account sul data base. Qualcuno di voi sicuramente avrà notato che sul flowchart non c’è segno dell’eliminazione dei file XML una volta terminata l’elaborazione. Questa parte di processo manca semplicemente per ragioni di spazio e pigrizia da parte mia, infatti, questa non è stata neanche implementata sul progetto finale. L’implementazione di questo processo d’importazione dati si riduce a pochissime e semplici righe di codice (appena 50), dove sono utilizzate funzioni standard di PHP per: • Leggere il contenuto del path della directory condivisa tramite la funzione scandir (The PHP Group, 2014); • Leggere i file XML come oggetto SimpleXMLElement (The PHP Group, 2014) tramite la funzione simplexml_load_file (The PHP Group, 2014). e le API SugarCRM per: • Leggere il parametro di configurazione tramite l’API Configurator (SugarCRM, 2014); • Lavorare con i bean di SugarCRM tramite l’API BeanFactory (SugarCRM, 2014). 3. Come organizzare il progetto di sviluppo Fino a questo momento abbiamo visto quali sono gli elementi necessari per la realizzazione di un custom scheduler che soddisfi i requisiti discussi nella parte introduttiva dell’articolo. La realizzazione del custom scheduler è un’estensione del modulo Scheduler e come tale può essere quindi installato su di un’istanza SugarCRM tramite il Module Loader realizzando un opportuno pacchetto d’installazione.
  • 8. Antonio Musarra's Blog Document Revision: 1.0 The ideal solution for a problem Blog: http://www.dontesta.it LinkedIn: http://it.linkedin.com/in/amusarra Google+: https://plus.google.com/+AntonioMusarra Mail: antonio.musarra@gmail.com 11/08/14 8 This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike Per realizzare il pacchetto (in formato zip) del nostro custom scheduler e installarlo attraverso il Module Loader, occorre utilizzare l’Extension Framework tramite il manifest (SugarCRM, 2014) file e organizzare il progetto di sviluppo. Su come organizzare il progetto di sviluppo, non ci sono “regole ufficiali” scritte e quanto mostrato in Figura 4 è la struttura dei folder/files che utilizzo solitamente per progetti del genere. Figura 4 Struttura del progetto di sviluppo per il custom scheduler. Come qualcuno di voi avrà già notato dalla Figura 4, utilizzo il tool Ant5 per generare il pacchetto zip che sarà poi installato sull’istanza SugarCRM via Module Loader. Possiamo descrivere la struttura di questo progetto nel modo seguente: • Per il tool Ant o build.properties: File di properties (in stile java) che in questo caso contiene la sola proprietà version il cui valore è utilizzato nel nome del pacchetto zip generato in fase di build; o build.xml: Direttive generali per il tool Ant; o build: Folder contenente lo specifico file xml Ant con le direttive per il build del pacchetto zip; o dist: Folder dove sono memorizzati i pacchetti zip per ogni build eseguito via Ant. Sul repository questa directory non è presente perché creata in modo autonomo Ant. • Per il Module Loader o LICENSE.txt: File di testo contenente il testo della licenza d’uso; o README.txt: File di testo contenente note in genere che sono mostrate nella fase d’installazione del pacchetto; o manifest.php: File che contiene le direttive d’installazione lette dal Module Loader in fase di caricamento del pacchetto; o jobs: Folder contenente il file php con la definizione e implementazione della funzione target; 5 Apache Ant (http://ant.apache.org/) è un software per l'automazione del processo di build. È simile a make ma scritto in Java ed è principalmente orientato allo sviluppo in Java. Ant è un progetto Apache, open source, ed è rilasciato sotto licenza Apache.
  • 9. Antonio Musarra's Blog Document Revision: 1.0 The ideal solution for a problem Blog: http://www.dontesta.it LinkedIn: http://it.linkedin.com/in/amusarra Google+: https://plus.google.com/+AntonioMusarra Mail: antonio.musarra@gmail.com 11/08/14 9 This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike § language: Folder contenente i file per ogni lingua supportata. All’interno di ogni file è definita l’etichetta da associare al nuovo Job; o scripts: Folder contente gli script php associati alle azioni supportate dal Module Loader. In questo caso le azioni per le quali eseguire delle operazioni su SugarCRM sono due: § post_install: Associato lo script post_install.php; § post_uninstall: Associato lo script post_uninstall.php; Il Module Loader per eseguire l’installazione del pacchetto ha bisogno del manifest file (manifest.php) dove all’interno sono definite una serie di proprietà lette durante il caricamento e utilizzate durante il processo d’installazione. Il manifest file è diviso in due sezioni, una di definizione generale chiamata Manifest Definitions con le proprietà di base del pacchetto da installare e l’altra chiamata Installdef Definitions dove sono indicate le direttive d’installazione per ogni elemento di SugarCRM (layout, beans, scheduler, etc…) e le azioni del processo d’installazione (pre_execute, post_execute, etc…). Gli elementi da installare come estensione del modulo Scheduler sono i file della lingua e lo script php (XMLImporterTask.php) che implementa il nostro custom scheduler. Dopo il processo d’installazione è stata prevista la creazione di una nuova attività pianificata per il Job XmlImporterJobs che abbiamo creato, evitiamo così la creazione manuale, è stato inoltre previsto che in caso di disinstallazione del pacchetto venisse rimossa l’attività pianificata creata in fase d’installazione. Per l’azione post_install del Module Loader lo script post_install.php è il responsabile della creazione dell’attività pianificata e del parametro di configurazione JobXMLImporter_XMLDataFilePath che definisce il path completo dei file XML da cui importare i dati. Per l’azione post_uninstall del Module Loader lo script post_uninstall.php è il responsabile dell’eliminazione dell’attività pianificata creata in fase d’installazione. Il Listato 1 e Listato 2 mostrano le sezioni del manifest file per il nostro pacchetto d’installazione del custom scheduler.
  • 10. Antonio Musarra's Blog Document Revision: 1.0 The ideal solution for a problem Blog: http://www.dontesta.it LinkedIn: http://it.linkedin.com/in/amusarra Google+: https://plus.google.com/+AntonioMusarra Mail: antonio.musarra@gmail.com 11/08/14 10 This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike $manifest  =        array(       'key'  =>  'ba2b4a8efaf959e6770c4e3e5f429f9ff960b7a5',     'acceptable_sugar_versions'  =>  array(     'regex_matches'  =>  array(           0  =>  '6.5.*',           1  =>  '7.*'         ),     ),     'acceptable_sugar_flavors'  =>  array(         0  =>  'PRO',         1  =>  'ENT',         2  =>  'CE'     ),     'name'        =>  'JobXMLImporter',     'description'    =>  'Scheduler  Job  for  import  XML  Data  to  SugarCRM  Data  Base',     'is_uninstallable'  =>  true,     'author'      =>  'Antonio  Musarra',     'published_date'  =>  'January  4,  2014',     'version'      =>  '1.0.0',     'readme'  =>  'README.txt',     'type'        =>  'module',   );   Listato 1 Sezione Manifest Definitions del manifest file. Di particolare interesse è la seconda sezione del manifest file mostrata nel Listato 2 dove sono evidenti gli elementi da installare e gli script legati alle azioni del Module Loader. Come potete notare dal manifest file, è stata specificata la sola azione di post_uninstall, il motivo è semplice, l’azione post_install è eseguita se il Moduler Loader trova lo script php chiamato esattamente post_install.php all’interno della directory scripts. $installdefs  =  array(       'id'    =>  'JobXMLImporter_SchedulerJob',       'post_uninstall'  =>  array(           '<basepath>/scripts/post_uninstall.php',       ),       'language'  =>  array  (         0  =>         array  (         'from'  =>  '<basepath>/jobs/language/en_us.xmlImporterJobs.php',         'to_module'  =>  'Schedulers',         'language'  =>  'en_us',         ),         1  =>         array  (         'from'  =>  '<basepath>/jobs/language/it_it.xmlImporterJobs.php',         'to_module'  =>  'Schedulers',         'language'  =>  'it_it',         ),       ),       'scheduledefs'  =>  array  (           array(           'from'  =>  '<basepath>/jobs/XMLImporterTask.php'           ),       ),   );   Listato 2 Sezione Installdef Definitions del manifest file. Abbiamo visto come organizzare il progetto in modo da rendere semplice la creazione del pacchetto d’installazione per il nostro custom scheduler e la struttura del manifest file, quest’ultimo fondamentale per istruire il Module Loader. Nel prossimo
  • 11. Antonio Musarra's Blog Document Revision: 1.0 The ideal solution for a problem Blog: http://www.dontesta.it LinkedIn: http://it.linkedin.com/in/amusarra Google+: https://plus.google.com/+AntonioMusarra Mail: antonio.musarra@gmail.com 11/08/14 11 This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike capitolo vedremo come fare il build del progetto per creare il pacchetto zip d'installazione. 4. Build del pacchetto d’installazione Il build del pacchetto tramite il tool Ant genera un file zip (dentro la directory dist vedi Figura 4) il cui contenuto è mostrato in Figura 5. Figura 5 Contenuto del pacchetto d’installazione creato con il tool Ant. Ottenere il pacchetto zip da installare è molto semplice utilizzando Ant. Supponendo di partire dal progetto disponibile sul repository GitHub, i comandi necessari per il build sono i seguenti:   $  git  clone  https://github.com/amusarra/SugarCRMJobXMLImporter.git   $  cd  SugarCRMJobXMLImporter   $  ant   Listato 3 Clonazione del progetto da GitHub e build via Ant. Dal comando ant è possibile omettere il nome del task da eseguire perché quello di default è la creazione del pacchetto zip.   Buildfile:  /private/tmp/SugarCRMJobXMLImporter/build.xml     package:              [zip]  Building  zip:   /private/tmp/SugarCRMJobXMLImporter/dist/JobXMLImporter_SchedulerJob_1.0.0-­‐8.zip     BUILD  SUCCESSFUL   Total  time:  0  seconds   Listato 4 Output del processo di build via Ant. Al termine del processo di build il pacchetto zip è disponibile all’interno della directory dist. Fate attenzione al naming del file, dove il numero di versione (nell’esempio del Listato 4 è 1.0.0) e il build number (nell’esempio del Listato 4 è 8) sono dinamici. Il primo valore deriva dalla proprietà version definita all’interno del file build.properties e il secondo gestito da Ant. Il valore del build number è incrementale, quindi, a ogni build è incrementato di un’unità. Considerate che ci siamo fermati all’utilizzo base, sarebbe possibile direttamente da Ant eseguire il cosiddetto direct deploy, task molto comodo durante la fase di sviluppo.
  • 12. Antonio Musarra's Blog Document Revision: 1.0 The ideal solution for a problem Blog: http://www.dontesta.it LinkedIn: http://it.linkedin.com/in/amusarra Google+: https://plus.google.com/+AntonioMusarra Mail: antonio.musarra@gmail.com 11/08/14 12 This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike Direi che l’utilizzo di Ant anche in progetti diversi da Java è produttivo ma soprattutto comodo per chi sviluppa velocizzando parecchi task. 5. Installazione del Custom Scheduler Ottenuto il pacchetto zip, è possibile procedere con l’installazione del custom scheduler nel modo consueto. Per maggiori informazioni sull’installazione dei pacchetti consultare la sezione Module Loader dell’Administration Guide (SugarCRM, 2014). In Figura 6 è mostrata la fase d’installazione del pacchetto con evidenza dell’esecuzione dell’azione post_install. Ricordiamo che per l’azione post_install, lo script creerà una nuova attività pianificata relativa al Job XmlImporterJobs oltre a rendere disponibile sul file config_override.php il parametro di configurazione JobXMLImporter_XMLDataFilePath tramite il quale sarà possibile specificare il path dove il Job cercherà i file XML da cui leggere i dati degli accounts da importare su SugarCRM. Figura 6 Visualizzazione dello stato di avanzamento dell’installazione. Nella Figura 7 è mostrata la nuova attività pianificata creata dopo l’installazione tramite l’esecuzione dell’azione post_install, mentre il Listato 5 mostra il nuovo parametro di configurazione inserito all’interno del file config_override.php sempre dall’azione post_install.
  • 13. Antonio Musarra's Blog Document Revision: 1.0 The ideal solution for a problem Blog: http://www.dontesta.it LinkedIn: http://it.linkedin.com/in/amusarra Google+: https://plus.google.com/+AntonioMusarra Mail: antonio.musarra@gmail.com 11/08/14 13 This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike Figura 7 Attività pianificata inserita con l’azione post_install del Module Loader.   <?php   /***CONFIGURATOR***/   $sugar_config['JobXMLImporter_XMLDataFilePath']  =  '/SharedFS/CRM/JobXMLImporter/xmldata';   /***CONFIGURATOR***/   Listato 5 Nuovo parametro di configurazione utilizzato dal custom scheduler. Il progetto SugarCRMJobXMLImporter sul repository GitHub contiene una directory chiamata xmlDataExample all’interno della quale è disponibile un file xml di esempio. Il Listato 6 riporta i log del Job in esecuzione. Da questi log è possibile seguire con semplicità il flusso del processo che abbiamo visto in uno dei precedenti capitoli (vedi Figura 3 Flowchart del processo d’importazione dati dal flusso XML.). L’attività pianificata è stata creata per eseguire il Job quando possibile, quest’impostazione può essere modificata dal pannello di amministrazione, specificando un intervallo di tempo secondo le proprie necessità, con la possibilità di agire su altri parametri di configurazione.   Fri  Aug    1  00:48:03  2014  [2142][1][INFO]  Running:  XmlImporterContactsJobs   Fri  Aug    1  00:48:03  2014  [2142][1][INFO]  Scanning  XML  Data  dir   /SharedFS/CRM/JobXMLImporter/xmldata...   Fri  Aug    1  00:48:03  2014  [2142][1][INFO]  Scanning  XML  Data  dir   /SharedFS/CRM/JobXMLImporter/xmldata...  [Found  3  files]   Fri  Aug    1  00:48:03  2014  [2142][1][INFO]  Processing  accounts_data_200140731.xml  file...   Fri  Aug    1  00:48:03  2014  [2142][1][INFO]  Processing  account  with  id  130d7312-­‐7be8-­‐de1a-­‐756a-­‐ 53ce2dd949f7...   Fri  Aug    1  00:48:03  2014  [2142][1][INFO]  Query:SELECT  TOP  1    accounts.*  FROM  accounts    WHERE   accounts.id  =  N'130d7312-­‐7be8-­‐de1a-­‐756a-­‐53ce2dd949f7'   Fri  Aug    1  00:48:03  2014  [2142][1][INFO]  Update  record  account...   Fri  Aug    1  00:48:03  2014  [2142][1][INFO]  Query:UPDATE  accounts   Fri  Aug    1  00:48:03  2014  [2142][1][INFO]  Query  Execution  Time:0.013454914093018   Fri  Aug    1  00:48:03  2014  [2142][1][INFO]  Processing  account  with  id  id1...   Fri  Aug    1  00:48:03  2014  [2142][1][INFO]  Query:SELECT  TOP  1    accounts.*  FROM  accounts    WHERE   accounts.id  =  N'id1'   Fri  Aug    1  00:48:03  2014  [2142][1][INFO]  Insert  new  record  account...   Fri  Aug    1  00:48:03  2014  [2142][1][INFO]  Query:INSERT  INTO  accounts   (id,name,date_entered,date_modified,modified_user_id,created_by,description,deleted,phone_fax)   Fri  Aug    1  00:48:03  2014  [2142][1][INFO]  End:  XmlImporterContactsJobs   Listato 6 Job in azione.
  • 14. Antonio Musarra's Blog Document Revision: 1.0 The ideal solution for a problem Blog: http://www.dontesta.it LinkedIn: http://it.linkedin.com/in/amusarra Google+: https://plus.google.com/+AntonioMusarra Mail: antonio.musarra@gmail.com 11/08/14 14 This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike 6. Conclusioni Saper scegliere gli strumenti adeguati per la realizzazione di uno o più requisiti può fare la differenza in termini di Time To Market6 (o TTM) ma soprattutto di manutenibilità. Per il caso di studio proposto, la scelta d’utilizzare il sistema di Job Queue di SugarCRM e il Module Loader unito all’Extension Framework è stata più che adeguata. Abbiamo visto come sia stato semplice implementare il processo d’integrazione del caso di studio utilizzando gli strumenti di SugarCRM e organizzando il progetto in modo semplice e funzionale, affiancando per ultimo strumenti esterni per la semplificazione di alcuni task legati al deploy. Un piccolo favore Per quanta passione e soddisfazione possa portare scrivere contenuti di questo tipo, ciò comporta anche un grande dispendio di tempo e risorse. Se i contenuti gratuiti offerti in quest’articolo sono stati utili per te, potresti restituirmi il favore condividendo l’articolo sui canali di social network, in modo da rendere utile anche per gli altri ciò che ho scritto. Clicca sulle immagini per condividere: Vi aspetto su Antonio Musarra’s Blog - The ideal solution for a problem (http://www.dontesta.it/blog/) 6 Il Time To Market (o TTM) è una espressione anglofona che indica il tempo che intercorre dall'ideazione di un prodotto alla sua effettiva commercializzazione.
  • 15. Antonio Musarra's Blog Document Revision: 1.0 The ideal solution for a problem Blog: http://www.dontesta.it LinkedIn: http://it.linkedin.com/in/amusarra Google+: https://plus.google.com/+AntonioMusarra Mail: antonio.musarra@gmail.com 11/08/14 15 This document is issued with license Creative Commons Attribution-NonCommercial-ShareAlike Risorse SugarCRM. (2014). Administration Guide - Module Loader. Tratto da SugarCRM Support: http://support.sugarcrm.com/02_Documentation/01_Sugar_Editions/02_Sugar_Enter prise/Sugar_Enterprise_7.2/Administration_Guide/07_Developer_Tools/21_Module_ Loader/ SugarCRM. (2014). Administration Guide - Schedulers. Tratto da SugarCRM Support: http://support.sugarcrm.com/02_Documentation/01_Sugar_Editions/02_Sugar_Enter prise/Sugar_Enterprise_7.2/Administration_Guide/05_System/41_Schedulers/ SugarCRM. (2014). Developer Guide - BeanFactory. Tratto da SugarCRM Support: http://support.sugarcrm.com/02_Documentation/04_Sugar_Developer/Sugar_Develo per_Guide_7.2/70_API/Classes/BeanFactory/ SugarCRM. (2014). Developer Guide - Configurator. Tratto da SugarCRM Support: http://support.sugarcrm.com/02_Documentation/04_Sugar_Developer/Sugar_Develo per_Guide_7.2/70_API/Classes/Configurator/ SugarCRM. (2014). Developer Guide - Extension Framework. Tratto da SugarCRM Support: http://support.sugarcrm.com/02_Documentation/04_Sugar_Developer/Sugar_Develo per_Guide_7.2/50_Extension_Framework/ SugarCRM. (2014). Developer Guide - Introduction to the Manifest. Tratto da SugarCRM Support: http://support.sugarcrm.com/02_Documentation/04_Sugar_Developer/Sugar_Develo per_Guide_7.2/70_API/Application/Module_Loader/30_Introduction_to_the_Manifes t/ SugarCRM. (2014). Developer Guide - Job Queue - Introduction. Tratto da SugarCRM Support Site: http://support.sugarcrm.com/02_Documentation/04_Sugar_Developer/Sugar_Develo per_Guide_7.2/70_API/Application/Job_Queue/00_Introduction SugarCRM. (2014). Developer Guide - Module Loader. Tratto da SugarCRM Support: http://support.sugarcrm.com/02_Documentation/04_Sugar_Developer/Sugar_Develo per_Guide_7.2/70_API/Application/Module_Loader SugarCRM. (2014). Knowledge Base - Running Quick Repair and Rebuild. Tratto da SugarCRM Support: http://support.sugarcrm.com/04_Find_Answers/02KB/02Administration/100Troubles hooting/Running_Quick_Repair_and_Rebuild/ The PHP Group. (2014). scandir. Tratto da PHP Manual: http://php.net/manual/it/function.scandir.php The PHP Group. (2014). simplexml_load_file. Tratto da PHP Manual: http://it2.php.net/manual/it/function.simplexml-load-file.php The PHP Group. (2014). The SimpleXMLElement class. Tratto da PHP Manual: http://it2.php.net/manual/it/class.simplexmlelement.php