Questo corposo articolo illustra in modo pratico come utilizzare lo strumento Scheduler di SugarCRM per implementare un caso d'integrazione dove due sistemi (uno dei quali è SugarCRM) scambiano un flusso dati XML all’interno del quale viaggiano i dati degli accounts che devono essere aggiornati o inseriti sul sistema di CRM.
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