sugarcrm: come realizzare un custom scheduler. un esempio completo

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 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 DIMPORTAZIONE 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

Upload: antonio-musarra

Post on 18-Dec-2014

360 views

Category:

Technology


1 download

DESCRIPTION

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.

TRANSCRIPT

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

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

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

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

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

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).

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

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.

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

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.

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

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.

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

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.

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

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.

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

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.

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

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

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

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.

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

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.

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

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.

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

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.

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

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