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: [email protected]
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: [email protected]
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: [email protected]
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: [email protected]
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: [email protected]
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: [email protected]
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: [email protected]
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: [email protected]
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: [email protected]
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: [email protected]
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: [email protected]
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: [email protected]
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: [email protected]
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: [email protected]
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: [email protected]
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_Enterprise/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_Enterprise/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_Developer_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_Developer_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_Developer_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_Developer_Guide_7.2/70_API/Application/Module_Loader/30_Introduction_to_the_Manifest/ SugarCRM. (2014). Developer Guide - Job Queue - Introduction. Tratto da SugarCRM Support Site: http://support.sugarcrm.com/02_Documentation/04_Sugar_Developer/Sugar_Developer_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_Developer_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/100Troubleshooting/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