Sei sulla pagina 1di 102

Indice

Introduzione ....................................................................................................................... 5

Capitolo 1 – Il Cloud Computing

1.1 Prefazione .........................................................................................................9


1.2 Storia del Cloud Computing ...........................................................................12
1.3 Layer di servizio al Cloud Computing ........................................................... 13
1.3.1 Hardware as a Service (HaaS) ...................................................... 14
1.3.2 Infrastructure as a Service (IaaS) ................................................ 14
1.3.3 Data as a Service (DaaS)................................................................ 15
1.3.4 Platform as a Service (PaaS) ......................................................... 16
1.3.5 Software as a Service (SaaS) ......................................................... 18
1.4 Modelli di distribuzione .................................................................................. 21
1.4.1 Public cloud .................................................................................... 21
1.4.2 Private cloud ................................................................................... 22
1.4.3 Hybrid cloud ................................................................................... 22
1.4.4 Community cloud ...........................................................................22
1.5 Opportunità per le aziende .............................................................................23
1.6 Rischi e pericoli ................................................................................................ 25
1.6.1 Sicurezza e privacy ........................................................................25
1.6.2 Limite della rete internet in Italia ................................................ 27
1.7 Indicazioni per l’utilizzo consapevole dei servizi cloud................................ 28
1.8 Considerazioni..................................................................................................29
1.8.1 Vantaggi .......................................................................................... 29
1.8.2 Svantaggi......................................................................................... 31

Capitolo 2 – Sistema Cloud Salesforce.com

2.1 Salesforce.com ..................................................................................................32


2.1.1 Customer Relationship Management ...........................................34
2.1.2 Service Cloud 2 ...............................................................................36
2.1.3 Collaboration Cloud (Chatter) ..................................................... 38
2.1.4 Custom Cloud (Force.com) .......................................................... 38

1
2.1.5 Data Cloud (Jigsaw) .......................................................................39
2.1.6 Analisi Saleforce.com CRM .......................................................... 39
2.1.7 Integrazione .................................................................................... 40
2.1.8 Applicazioni aggiuntive .................................................................41
2.2 Salesforce1 ........................................................................................................42
2.2.1 Salesforce come vetrina di app per clienti ...................................45
2.2.2 Applicazioni di settore per la piattaforma Salesforce1...............47
2.2.3 AppExchange applicazioni basate sulla piattaforma
Salesforce1 ...................................................................................... 49
2.2.4 Lightning ......................................................................................... 51
2.2.5 Cosa è un componente Lighting? ................................................. 53

Capitolo 3 – Piattaforma force.com

3.1 Visualforce ........................................................................................................57


3.1.1 Visualforce Markup ..........................................................................59
3.2 Apex
3.2.1 Prefazione ....................................................................................... 62
3.2.2 Come funziona Apex? ...................................................................64
3.2.3 Dati Primitivi ................................................................................. 64
3.2.4 Classi ............................................................................................... 65
3.2.5 Interfacce ........................................................................................ 66
3.2.6 Trigger ............................................................................................ 67
3.2.7 SOQL .............................................................................................. 68
3.2.8 Governor Limit ..............................................................................68

Capitolo 4 – Il progetto pilota

4.1 Specifiche ..........................................................................................................71


4.2 Operazioni preliminari .................................................................................... 71
4.3 Metodo Classico ............................................................................................... 74
4.3.1 Carrello ........................................................................................... 74
4.3.2 Lista Prodotti .................................................................................. 79
4.4 Lightning ..........................................................................................................84
4.4.1 Carrello ........................................................................................... 84

2
4.4.2 Lista Prodotti .................................................................................. 89
4.5 Collegamento con Salesforce1 ........................................................................95

Capitolo 5 – Conclusioni ...................................................................................................97

3
4
Introduzione

L’uso di dispositivi mobili è diventato la nuova normalità per rimanere in contatto in


entrambe le nostre vite: personali e professionali. Sempre più, viviamo le nostre vite
connessi a Internet, ma invece di sedersi ad una scrivania, ci stiamo connettendo sugli
aerei, in taxi, tra una riunione, in alberghi, o anche in fila per il caffè.
Seguiamo gli amici, lo stato di aggiornamento, la ricerca di imprese locali, collaboriamo
con i colleghi, i fornitori di posta elettronica, e molto altro.
E allo stesso tempo, ogni azienda sta lavorando duro e più velocemente verso il futuro
che deve abbracciare questo mondo mobile e la libertà che questa mobilità offre per fare
le cose, indipendentemente da dove sei e cosa si sta facendo.
Anche Salesforce, una tra le più grandi realtà CMR, si sta muovendo verso il futuro
cercando di rimanere aggiornata con le continue richieste dei clienti. Da qualche anno è
diventata una realtà importante sul mercato internazionale e proprio per questo motivo
ci appoggeremo a questa piattaforma per sviluppare delle applicazioni personalizzate
per dispositivi mobili che facilitino il lavoro di tutti i giorni, in particolare utilizzeremo
Salesforce1 la versione mobile di questa grande realtà.
Salesforce è una piattaforma in rapida espansione pensata per connettere i clienti ai
dispositivi e alle applicazioni di nuova generazione, tramite questo servizio è possibile
vendere, assistere e distribuire. Una piattaforma incentrata sul cliente pensata
appositamente per accelerare lo sviluppo e la distribuzione in un mondo orientato al
mobile come nucleo centrale la collaborazione social e un cloud salesforce al cento per
cento. All’interno possiamo trovare delle API per qualsiasi cosa, così da connettersi a
tutto, scambiare le applicazioni mobili di primo livello per permettere al cliente di
sviluppare e vendere all’istante applicazioni di nuova generazione; per la rivoluzione di
applicazioni aziendali è già disponibile una nuova applicazione per amministratori che
consente di eseguire modifiche al volo, un solo pulsante per connettersi a tutto, ai clienti
ai dipendenti ai partner ai prodotti a tutto ciò che hai creato in Salesforce e a tutto ciò

5
che deve ancora venire. In un istante le opportunità sono ovunque insieme alla capacità
di assistere i clienti in pochi secondi, interagire personalmente in modi completamente
nuovi per trasformare i clienti potenziali in clienti reali, creare qualsiasi cosa tu possa
immaginare e trasformare le idee in applicazioni complete nel più breve tempo possibile
senza hardware, senza software senza limiti di velocità.
Salesforce1 è l’applicazione mobile nata circa un anno fa per iOS e Android che
permette di visualizzare e lavorare con i dati della piattaforma Salesforce. Per rimanere
al passo con i tempi l’azienda è solita fare diverse release all’anno per aggiornare i
propri prodotti e servizi, l’ultimo aggiornamento, avvenuto a Settembre di quest’anno,
si è rivolto soprattutto all’applicazione mobile, in particolare si è parlato al modo di
sviluppare le applicazioni mobili per Salesforce1.
Si è quindi introdotto un metodo alternativo al tradizionale che si prospetta alla portata
di tutti e non solo per sviluppatori software; Lightning utilizza un approccio framework
di componenti per la costruzione di applicazioni, offrendo agli sviluppatori l'accesso a
funzionalità pre-cotte che si trovano comunemente in applicazioni come ad esempio una
barra di ricerca, un feed aggiornamenti, o uno strumento di photo-capture. Una nuova
interfaccia utente grafica offre ai professionisti un modo semplice per costruire le
proprie applicazioni in-house per la raccolta e la scelta di quali componenti di cui hanno
bisogno, e quali dati utilizzare.
Si è voluto quindi sviluppare un’applicazione nei due modi differenti per evidenziare i
pregi e i difetti che Lightning ha portato con se e vedere in prospettiva futura come
potrà evolvere il modo di sviluppare applicazioni sulla piattaforma cloud.
Di seguito vedremo:
 Un’introduzione al Cloud Computing e al successo che sta prendendo piede
proprio in questi anni, analizzeremo i pregi che questa tecnologia è in grado di
portare nel mondo di tutti i giorni e i rischi che si corre affidandosi ad essa.
 Passeremo dunque ad illustrarvi l’ambiente di sviluppo ovvero Salesforce e
l’applicazione che supporterà tutti i progetti sviluppati sulla piattaforma:
Salesforce1.
 Una breve introduzione ai linguaggi di programmazione utilizzati nello sviluppo
sottolineando alcuni componenti principali che ci hanno permesso di sviluppare
l’applicazione pilota.

6
 Quindi mostreremo le due applicazioni nei dettagli spiegando le differenze
fondamentali che ci sono utilizzando un metodo piuttosto che l’altro.
 Infine ci saranno delle considerazioni riguardo al nuovo metodo di sviluppare le
applicazioni tramite la piattaforma Salesforce.

7
8
Capitolo 1
Il cloud computing
1.1 Prefazione
Il cloud computing è un insieme di tecnologie per abilitare un accesso conveniente e su
richiesta a risorse computazionali condivise (ad esempio reti, server, memoria di massa,
applicazioni e servizi). Esse possono essere rapidamente procurate e rilasciate con un
minimo sforzo di gestione o di interazione con il fornitore del servizio. Questa
tecnologia offre all’utilizzatore le risorse come se fossero implementate da sistemi
diversi.
L’idea, infatti, è quella di dare un’implementazione eterogenea e distribuita - “cloud”, in
inglese nuvola1 - le cui caratteristiche e locazione spesso non sono note all’utilizzatore.
Il NIST2 fornisce una definizione standard al cloud computing:
“Cloud computing is a model for enabling convenient, on-demand network access to a
shared pool of configurable computing resources (e.g., networks, servers, storage,
applications, and services) that can be rapidly provisioned and released with minimal
management effort or service provider interaction”
“Il cloud computing è un modello che consente una convenienza attraverso l’accesso
(on-demand) ad una rete condivisa di pool di risorse di calcolo configurabili (ad
esempio, network, server, storage, applicazioni e servizi) che possono essere
rapidamente fornite e rilasciate con il minimo sforzo di gestione o con interazione del
service provider.”
La descrizione formale delinea 5 diverse peculiarità:
 Self service ed on-demand = il cliente può utilizzare il servizio su richiesta in
base alle sue necessità e nel momento in cui lo ritiene opportuno.
 Accesso di rete aderente agli standard = il cloud si basa sull’utilizzo di internet,
tutti i servizi sono disponibili sulla rete e utilizzabili da qualsiasi piattaforma
grazie a meccanismi standard predefiniti.

1
La nuvola ha da sempre rappresentato la rete internet
2
National Institute of standards and technology. ´E un’agenzia del governo degli Stati
Uniti d’America che si occupa della gestione delle tecnologie

9
 Resource pooling = le risorse del fornitore di servizio sono raccolte allo scopo di
servire gli utilizzatori attraverso un modello di erogazione multi-tenant. Gli
utenti non conoscono l’effettiva posizione fisica delle risorse se non ad un livello
di astrazione molto ampio. Queste ultime si adattano alle esigenze di chi le
richiede.
 Elasticità = le risorse sono fornite in modo elastico e veloce. Il cliente ha la
possibilità di acquistare l’uso di risorse in qualsiasi quantità ed in qualunque
momento, avendo la percezione di una disponibilità potenzialmente infinita che
si adatta alle proprie esigenze.
 Pas-as-you-go = i sistemi cloud controllano ed ottimizzano automaticamente
l’uso delle risorse. L’utilizzo delle stesse può essere monitorato e controllato in
modo trasparente per il fornitore e l’utilizzatore. In questo modo il cliente
pagherà solo l’utilizzo effettivo del servizio.
Il cloud computing nasce per ridurre e contenere i costi dell’IT3 migliorando il servizio
per aggiungere valore all’azienda e ai servizi che offre ai consumatori.
In Italia solo il 17% delle aziende ammette di avere in dotazione sistemi adeguati in
grado di diminuire i danni in caso di perdita. Tra le motivazioni vi è il mancato supporto
del top management e la preparazione inadeguata del personale IT nella pianificazione
dei rischi.
Nonostante il trend in forte crescita, l’Osservatorio Cloud & IICT As a Service dalla
School of Management del Politecnico di Milano ha analizzato la scarsa penetrazione in
Italia: nelle aziende sotto i 250 addetti, sono appena il 22% quelle che dichiarano
progetti avviati in quell’ambito ed un ampio 76% che non ne fa utilizzo.
Fino a pochi anni fa, l’utilizzo di un buon sistema IT in azienda era solo un valore
aggiunto, oggi le spese per un sistema informatico aziendale è un costo necessario. Non
avere un sistema IT, o averlo non adeguato, significava rimanere indietro a livello
competitivo. Ma adottarlo comporta una presa di responsabilità e la necessità di
affrontare dei problemi che potrebbero compromettere il sistema stesso e l’infrastruttura
aziendale: sicurezza, gestione della banda, costi di elettricità, attrezzature hardware e
non ultimo i costi di formazione del personale competente.

3
L’IT, Information Technology, indica l’insieme dei metodi e delle tecnologie che realizzano i sistemi di
trasmissione, ricezione ed elaborazione di informazioni

10
Contrastanti sono le opinioni degli esperti sulla vera utilità del cloud. Peter Sondergaard
sostenitore della “nuvola” e senior vice-president research di Gartner4, dichiara:
“Il cloud può garantire un sostegno all’innovazione e alla differenziazione delle aziende,
agendo nella fascia alta dei servizi. Impone alle aziende di valutare e decidere quale
ruolo vogliono avere se essere meri utenti di cloud, disinvestendo asset rilevanti e
ottenendo un servizio di qualità, oppure diventare provider, investendo in strutture a
supporto del business, prima all’interno dell’azienda e poi verso ‘esterno”.
Altri invece si esprimono negativamente. È il caso di Stallman che definisce il cloud
una moda che minaccia la computazione del 21esimo secolo come e peggio del software
proprietario.
“Una stupidaggine. Anzi, peggio di una stupidaggine: una campagna marketing.
Qualcuno dice che è inevitabile e quando sentite qualcuno dire così, è molto probabile
che si tratti di una strategia d’affari per renderlo vero. Una ragione per non usare le web
application è la perdita del controllo i dati fluiscono liberamente tra qualsiasi postazione
o thin client in giro per il mondo e i datacenter, ma a scapito della capacità del legittimo
proprietario di disporne a suo piacimento.
Basti pensare a cosa accadrebbe nel caso in cui un account venisse sottratto al suo
titolare: da quello stesso account potrebbe partire una reazione a catena, che
coinvolgerebbe tutti gli altri servizi ad esso collegati, stravolgendo le attività personali e
lavorative di quello stesso individuo. È un male proprio come usare programmi
proprietari. Fate il vostro lavoro su un vostro computer con un programma che rispetti le
vostre libertà: usando un programma proprietario sul server di qualcun altro si è senza
difese. Vi state mettendo nelle mani di chiunque abbia sviluppato quel software. Il
rischio è che se all’inizio questi servizi possono apparire più economici (o addirittura
gratuiti) rispetto alle abitudini attuali, nel lungo periodo possano invece rivelarsi
oltremodo costosi. E soprattutto, l’intera mole di informazioni personali (foto, appunti,
appuntamenti in agenda) o aziendali (budget, bilanci, piani strategici) sarebbe affidata
alla onestà e alla solidità di una azienda, esponendosi a tutti i rischi di boicottaggio o
incidenti che questo comporta.”

4
Gartner Inc. è una società multinazionale leader mondiale nella consulenza strategica, ricerca e analisi
nel campo dell’Information Technology con oltre 60.000 clienti nel mondo.

11
1.2 Storia del Cloud Computing
Nonostante il termine cloud sia considerato un vocabolo nuovo, la storia della “nuvola”
ha già percorso diversi anni e raggiunto la sua maturità.
Il vocabolo deriva da “mainframe”, espressione nata negli anni 60 quando John
McCarthy5 sosteneva la necessità dell’esistenza di diversi sistemi pubblici d’accesso
dove svolgere elaborazione di calcoli.
Negli anni 80 affiorò il termine personal computer e nelle aziende iniziò a sorgere il
problema di come poter condividere facilmente risorse tra i pc in dotazione ai
dipendenti. Nasce così l’architettura client/server.
Grazie all’avvento delle connessioni dialup, le aziende poterono iniziare ad
interconnettere le proprie filiali in modo più semplice. La diffusione del web e
l’aumentare della banda disponibile portò alla nascita delle prime Application Service
Provider(ASP).
Le ASP fornirono un’applicazione tramite accesso remoto. Ma i tempi non erano ancora
maturi e la soluzione proposta non ebbe il successo desiderato più o meno per le stesse
ragioni che ancora oggi ci spingono a guardare con diffidenza il cloud computing (ad es.
costi, sicurezza, qualità del servizio, etc).
Dopo il fallimento dei sistemi ASP vennero presentati da Connectix prima e VMWare
poi i loro prodotti per la virtualizzazione all’inizio del ventesimo secolo riscontrando un
notevole successo tra le aziende. Esse videro nella virtualizzazione una valida strategia
per ottimizzare l’infrastruttura IT.
La virtualizzazione6 è considerata uno dei sistemi fondatori dei servizi cloud
attualmente esistenti a pari merito con l’architettura SOA (Service oriented
architecture).
Quest’ultima nasce all’inizio del terzo millennio come supporto all’uso di servizi Web
per garantire l’interoperabilità tra diversi sistemi così da consentire l’utilizzo delle
singole applicazioni come componenti del processo di business e soddisfare le richieste
degli utenti in modo integrato e trasparente.

5
John McCarthy è stato un informatico statunitense che ha vinto il Premio Turing nel 1971 per i suoi
contributi nel campo dell’Intelligenza Artificiale. È stato infatti l’inventore del termine” Intelligenza
Artificiale” nel 1955
6
In informatica il termine virtualizzazione si riferisce alla possibilità di astrarre le componenti hardware,
cioè fisiche, degli elaboratori al fine di renderle disponibili al software in forma di risorsa virtuale

12
Questo paradigma ha permesso lo sviluppo di applicativi altamente portabili e
un’architettura distribuita, oltre alla possibilità di interconnettere ed utilizzare
facilmente software eterogenei ed eventualmente gestiti da altre aziende.
La parola “Cloud” prende vita ufficialmente agli inizi degli anni novanta per identificare
la serie di circuiti elettrici adibiti alla permutazione del traffico, audio o dati.
Ben presto i “monopolisti” mondali della tecnologia si resero conto dell’importanza
economica che poteva avere questo servizio. Microsoft iniziò il potenziamento dei
propri servizi internet mentre IBM concentrò le risorse nella stesura dell’Auonomic
Computing Manifesto, in cui descrive le tecniche principali per l’auto gestione dei
sistemi IT.
Amazon, la più importante azienda di vendita online si presentò sul mercato del cloud
pochi anni dopo. Partita con la modernizzazione dei propri data center per aumentare
l’efficienza computazione e ridurre il consumo di risorse elettriche, introdusse,
successivamente, gli Amazon Web Services, servizi per accedere da utenti esterni alla
propria struttura.
Inconsapevolmente gli utenti del nuovo secolo si introducono nella tecnologia cloud
grazie alle esperienze mondiali di Hotmail e Gmail.
In Italia la prima azienda che offre servizi cloud è Telecom Italia con la “Nuvola
Italiana”. Si presentano con l’obiettivo di:
“Accompagnare le imprese pubbliche e private italiane nel loro percorso verso
l’innovazione digitale per favorirne la crescita e renderle competitive, collaborative e
tecnologiche.”

1.3 Layer di servizio al Cloud Computing


Ci sono 5 tipologie fondamentali di servizi cloud. È importante per le imprese che si
avvicinano alla tecnologia studiare ogni aspetto dei vari modelli per adattarli al meglio
in base alle necessità aziendali.
Per le PMI che si confrontano per la prima volta alle soluzioni e servizi di Cloud
Computing non è facile districarsi tra le molteplici offerte di mercato.

13
1.3.1 Hardware as a Service (HaaS)
Se le risorse a disposizione nei computer non sono sufficienti per elaborare una quantità
ampia di dati, il servizio HaaS (hardware-as-a-service, Hardware come servizio) si
rivolge ad un provider e usufruisce di una delle loro macchine. In questo modo il
fruitore manda i dati via internet nella macchina scelta, essa li elabora restituendoli
pronti all’uso. Le piattaforme cloud HaaS sono pensate per consentire ai clienti di
chiedere risorse in tempo reale, passando da 10 a 1000 istanze in pochi minuti, e
soprattutto fornendo loro strumenti che permettano di gestirle. Per questo, solitamente, i
provider di soluzioni HaaS forniscono servizi come il Load Balancing7, lo storage cloud
e strumenti per la gestione del networking all’interno della propria rete
nell’infrastruttura cloud. È attualmente la tipologia di servizio più difficile da
realizzare, per via degli altissimi investimenti richiesti. La privacy si presenta come
aspetto negativo al servizio insieme ad eventuali responsabilità sui malfunzionamenti
delle infrastrutture. In questi casi è sempre consigliabile leggere attentamente le clausole
del contratto e studiare le caratteristiche dei servers per adattarli al meglio alle proprie
esigenze aziendali.

1.3.2 Infrastructure as a Service (IaaS)


La IaaS (infrastructure-as-a-service, infrastruttura come servizio) è legata alla nascita
dell’architettura cloud HaaS. Nella struttura IaaS più server possono lavorare
parallelamente e contemporaneamente in maniera del tutto concorrente. La differenza
rispetto ai sistemi HaaS è che il cloud IaaS non offre singole macchine per l’utilizzo ma
mette a disposizione intere infrastrutture di server collegati tra di loro. Questi ultimi
elaborano i dati e assegnano le risorse soltanto su richiesta e non a priori. Le risorse
necessarie ai propri sistemi o applicazioni variano sia a crescere che a decrescere in base
alle esigenze. In questo modo il cliente paga solo il servizio che utilizza permettendo un
notevole risparmio a livello economico.
Chi utilizza un’infrastruttura cloud di tipo IaaS non ha esigenze di manutenzione
hardware grazie alla scalabilità e all’affidabilità del servizio. In questo modo l’azienda

7
Il load balancing, in italiano bilanciamento del carico, è una tecnica informatica che consiste nel
distribuire il carico di uno specifico servizio, ad esempio la fornitura di un sito web, tra più server

14
ha a disposizione, virtualizzato, un computer tradizionale con tutti i suoi elementi: CPU,
Ram, storage e schede di rete con connettività
Il modello di Amazon EC2/S313 è il più famoso esempi o di servizi o IaaS: non vi sono
limiti di utilizzo, il cliente può installare il sistema operativo che preferisce e utilizzarlo
in unione ad altre istanze virtuali per bilanciare il carico delle sue applicazioni online.
Per quanto riguarda i costi, in Italia, si è soliti offrire servizi IaaS in modalità flat con
fatturazioni periodiche. Normalmente i servizi IaaS dovrebbero avere una fatturazione a
“consumo” in quanto il fornitore ha un costo solo quando viene creata un’istanza e non
quando è ferma.
Si è adattata a questa esigenza Aruba. Il servizio cloud di Aruba permette alla clientela
di creare e gestire in completa autonomia cloud server realizzando l’infrastruttura più
adatta alle proprie esigenze, da una singola macchina alle architetture più complesse. Si
caratterizza per scalabilità delle risorse (CPU, Ram e Spazio disco), tariffazione di
quanto effettivamente usato (pay-per-use), zero costi di startup, massima trasparenza e
facilità di progettazione.

1.3.3 Data as a Service (DaaS)


Nel Data as a Service, anche detto Daas, gli elementi fondamentali sono i dati. Sono
disponibili in vari formati ed ad applicazioni diverse come se fossero presenti nel disco
locale di un normale computer.
Il fornitore offre all’utente una quantità di spazio in una serie di server. Questo può
essere adoperato per memorizzare online dati di qualsiasi tipo. In questo modo in caso
di avaria dei propri dischi o supporti di memorizzazione, tali documenti non vengono
smarriti. Sono disponibili, dunque, in postazioni diverse da quelle in cui questi dati sono
fisicamente memorizzati.

15
I servizi DaaS possono essere considerati un’evoluzione dei servizi ftp web che i
maggiori providers, tempo fa, mettevano a disposizione. In base al canone lo spazio
aumenta o diminuisce. Il lato più utile del DasS è la possibilità di avere delle
applicazioni scritte ad hoc per l’accesso e la sincronizzazione dei dati tra le varie
periferiche.

Figura 1: Modello di cloud computing DaaS

La probabilità di perdita dei dati è molto bassa perché le informazioni vengono spesso
copiate e replicate su più macchine, ragion per cui se una smette di funzionare ve ne
sono altre che possono recuperare i dati.
Il problema di base è lo stesso dei precedenti tipi di cloud: la privacy. Non sempre i dati
subiscono processi di codificazione durante la comunicazione tra il cloud e il cliente. A
volte, le autorità competenti, o gli addetti al servizio cloud possono prendere visione dei
dati per svariati motivi, motivi molto spesso approvati e firmati dal cliente stesso senza
rendersene realmente conto.

1.3.4 Platform as a Service (PaaS)


Per PaaS si intende l’erogazione al cliente di un’intera piattaforma cloud, alla quale il
fruitore ha accesso tramite un determinato framework distribuito.

16
Esso può essere utilizzato per scrivere applicazioni, per replicarle e migliorare il
funzionamento anche al crescere delle visite. Per questo si definisce il cloud PaaS una
tecnologia più tecnica pensata quindi per gli sviluppatori che vogliono scrivere le loro
applicazioni managed grazie all’infrastruttura cloud. In questo modo è il software che si
occupa di aumentare le risorse o diminuirle in base alle richieste.

Figura 2: Modello di cloud computing PaaS

Il cliente non si deve preoccupare di quanto spazio occupa il database o come debba
distribuire il carico di lavoro. Di tutto questo se ne occupa il fornitore dei servizio.
Esempi noti sono Google AppEngine o Microsoft Azure. In entrambi lo sviluppatore
può eseguire il suo codice all’interno della piattaforma utilizzando le funzionalità e le
API della stessa senza curarsi della gestione dei server dove questo viene eseguito.
Attualmente il PaaS è uno dei rami della tecnologia cloud maggiormente interessata alla
crescita.
Il 42% di questo mercato è detenuto dagli Stati Uniti ed è in forte crescita il Giappone e
solo dopo l’Europa. Si stima una crescita delle infrastrutture PaaS fino ad un valore di
2,9 miliardi di dollari entro il 2016.
Fabrizio Biscotti, Research Director di Gartner, afferma che il cloud PaaS è una
tecnologia in fase di crescita:

17
“Of all the cloud technological aspects, infrastructure as a service (IaaS) and software as
a service (SaaS) are the most mature and established from a competitive landscape
perspective, while PaaS is the least evolved. For this reason, PaaS is where the battle
between vendors and products is set to intensify the most. It comes as no surprise that
the PaaS competitive landscape is still in flux, with traditional application infrastructure
vendors facing competition from new large players moving into the market, and myriad
specialised PaaS pure players cutting into their slice of profits.”
“Tutti gli aspetti tecnologici del cloud, Infrastructure as a service(IaaS) e software as a
service (SaaS) sono le più mature e stabili da un punto di vista competitivo
complessivo, mentre il PaaS è il meno evoluto. Per questo motivo, il Pass si colloca
dove la battaglia tra fornitori e prodotti si intensifica. Non, quindi, una sorpresa che il
panorama competitivo del PaaS sia ancora in evoluzione, con fornitori di infrastrutture
di applicazioni tradizionali che affrontano la concorrenza dei nuovi grandi operatori
mobili nel mercato, e una miriade di fornitori PaaS specializzati nella loro fetta di
profitti.”

1.3.5 Software as a Service (SaaS)


La SaaS offre l’utilizzo di programmi in remoto, spesso attraverso un server web, quindi
attraverso l’uso di internet.
L’applicazione permette, utilizzando un’unica base comune di programmi applicativi, di
essere utilizzata da numerosi utenti concorrenti. In questo modo l’applicazione ha una
gestione centralizzata: gli aggiornamenti e la manutenzione vengono effettuate dal
fornitore e il cliente/utente non deve preoccuparsi di scaricare e installare i programmi o
aggiornamenti eventuali.

18
Il canone del servizio è proporzionale al numero di utenti e alle funzionalità richieste. È
necessario un numero minimo di utenti, generalmente molto basso, i quali attraverso il
contratto di fornitura hanno diritto ad una disponibilità inizialmente ridotta (quantità di
spazio su disco, banda di rete, etc), facilmente incrementabile pagando una quota
aggiuntiva al canone iniziale. In questo modo il servizio si differenzia e si adatta in base
alle varie esigenze. Il SaaS condivide, in parte, la filosofia del modello ASP8, oggi in
disuso. Nel modello ASP il provider acquista il software dal produttore e lo rende
disponibile online a differenza della tecnologia Saas in cui il software viene distribuito
dal produttore stesso. Nelle applicazioni della precedente tecnologia, spesso non era
possibile un utilizzo in modalità client/server o erano sprovviste di interfaccia utente, gli
aggiornamenti erano poco frequenti e la capacità di migliorare le applicazioni risultava
limitata.

Figura 3: Modello di cloud computing SaaS

Adottando il cloud SaaS il cliente si libera di una serie di costi. Non è necessario
acquistare un server per installare l’applicativo e si è completamente svincolati da
problematiche legate all’infrastruttura.

8
Active Server Pages (Pagine Server Attive sono pagine web contenenti, oltre al puro codice HTML, degli
script che verranno eseguiti dal server per generare runtime il codice HTML da inviare al browser
dell’utente

19
Un sondaggio realizzato da ZeroUno9 dal titolo” Che ne pensi del SaaS?” ha analizzato
16 esperienze ritrovando un 40% che afferma come la capacità di rispondere alle
esigenze del business sia il fattore trainante principale per l’adozione del modello SaaS.

Figura 4: Analisi a 16 aziende alla domanda” Cosa ne pensi del cloud SaaS”

Una critica mossa al modello SaaS è quella relativa alla sicurezza dei dati affidati ad
una terza parte.
Il fornitore del servizio potrebbe avere interesse a manipolare o rivendere i dati di un
proprio cliente. Per questo è necessario leggere con attenzione i termini del contratto
che il cliente sottoscrive.
Un altro problema potrebbe essere legato ai tentativi di intrusione malevola dall’esterno.
Bisogna ricordare, però, che spesso il fornitore di SaaS è in grado di costruire
un’architettura di sicurezza notevolmente più robusta di quanto possono fare le singole
aziende. La manutenzione, l’aggiornamento e l’implementazione di queste infrastrutture
sono effettuate da specialisti dedicati.
Infine gran parte degli atti illeciti legati alla sottrazione di dati e informazioni viene
perpetrata da personale infedele interno alle aziende. Il provider SaaS può configurare
sul database manager delle politiche di sicurezza in modo che il proprio personale abbia
autorizzazioni per amministrare i database, ma non per consultarne le informazioni. In
questo modo questi ultimi non potranno avere accesso diretto alla base di dati grazie a
meccanismi di sicurezza. In questo modo, il livello di sicurezza è maggiore rispetto alla

9
ZeroUno rivista mensile punto di riferimento in Italia per l’analisi, l’approfondimento e
l’aggiornamento dello sviluppo delle tecnologie ICT

20
situazione in cui il database si trovi fisicamente in azienda. La comunicazione tra
provider SaaS e cliente avviene spesso in modo sicuro perché criptata utilizzando
tecnologie SSL (Secure Sockets Layer) ovvero dei particolari protocolli che permettono
la crittografia. Per queste ragioni il modello SaaS risulta particolarmente appropriato per
quelle piccole e medie imprese che costituiscono la maggioranza nel tessuto economico
italiano.

1.4 Modelli di distribuzione


Vi sono vari modelli di distribuzione del cloud computing. Ne distinguiamo 4:

Figura 5: Modelli di distribuzione cloud

1.4.1 Public cloud


In una public cloud il servizio è allestito e gestito totalmente dal fornitore di servizi di
cloud computing. L’infrastruttura della “nuvola” è di proprietà di un’organizzazione che

21
vende i servizi ai privati o ad un gruppo di imprese. Le offerte iniziali possono essere
gratuite oppure distribuite secondo un modello pay-per-usage.
In generale, i fornitori di cloud pubblico come Amazon AWS, Microsoft e Google
possiedono e gestiscono l’accesso alle infrastrutture e l’offerta solo tramite Internet.
Spesso infatti la connessione diretta non è disponibile.
I principali vantaggi per l’utilizzatore sono dati dall’annullamento dei costi di start-up e
la delega della gestione dei rischi al fornitore. Tuttavia la maggior preoccupazione
rimane la sicurezza e la privacy dei dati.

1.4.2 Private cloud


Il private cloud è gestito dalla stessa azienda che se ne serve. Questo modello è stato
definito anche “Internal cloud”. L’uso è esclusivo di una singola azienda o di un gruppo
per il solo uso interno. La sicurezza e la riservatezza è sicuramente un punto di forza per
questo tipo di modello. Esso trasforma le risorse IT dell’azienda in servizi e le rende
dinamiche, flessibili e economicamente vantaggiose. Richiede un notevole grado di
capacità di virtualizzazione e un’ottima organizzazione dei costi. Esempi di private
cloud sono VmWare e SalesForce.

1.4.3 Hybrid cloud


L’infrastruttura è formata dalla composizione di una o più cloud che possono essere
pubbliche o private. I soggetti rimangono unici, ma sono legati insieme per garantire la
maggiore integrità dei dati. Utilizzando i modelli ibridi le aziende sono in grado di
ottenere dei buoni risultati in termine di affidabilità e gestione dei guasti grazie
all’usabilità a livello locale immediato senza dipendere dalla connessione internet.
Per utilizzare al meglio questo modello è necessaria un’attenta analisi di quali servizi
debbano appartenere al private e quali al modello pubblico.

1.4.4 Community cloud


Rappresenta un nuovo modello di distribuzione in fase di prova. Nella community la
“nuvola” è condivisa tra diverse imprese spesso appartenenti ad una comunità specifica
in cui condividono degli ambiti. Possono essere gestiti sia internamente sia da una terza

22
parte. In questo modo i costi risultano meno distribuiti rispetto al cloud pubblico ma
sicuramente maggiormente del cloud privato. Dei casi di community cloud sono
apps.gov e data.gov, servizi cloud computing offerti dal governo degli Stati Uniti.

1.5 Opportunità per le aziende


I benefici derivanti dall’adozione dei modelli Cloud sono ben noti e aumentano
maggiormente con l’utilizzo della tecnologia da parte dell’aziende.
La “nuvola” permette di lavorare con la base degli strumenti di sempre ma in modo
dinamico, mobile e tecnologicamente avanzato.
Sintetizziamo in questi punti i benefici riscontrati dalle realtà aziendali che adottano il
cloud computing:
• Permette di condividere le informazioni e i dati tra vari dispositivi, diversi e collocati
in svariati luoghi, in modo semplice e sicuro.
• Elimina il problema di gestione dell’infrastruttura da parte dell’azienda. Con il cloud
l’azienda ha solo bisogno di una buona connessione a Internet, un browser o, al più, un
piccolo software client.
• Garantisce la scalabilità. Permette, infatti, di allocare risorse potenzialmente infinite e
strutturare economie di scala limitando i rischi di un costoso investimento in
infrastrutture IT fisiche.
• Vengono ridotti i costi grazie all’alleggerimento dei Data Center aziendali con
conseguente riduzione di energia.
• Si azzerano i costi di licenze e di acquisto di hardware grazie al modello di pagamento
adottato dal cloud (Pay per use = pagamento a consumo).
In Italia il cloud stenta a decollare ma cresce l’interesse delle aziende. Secondo un
sondaggio effettuato da Enter The Cloud il 43% sta valutando se adottare una soluzione
cloud e in quali modalità, il 16% ha elaborato una strategia che adotteranno entro il
2016 e il 20% hanno già una soluzione cloud all’interno della propria azienda. Un
restante 21% non ha nessun piano in merito alla “nuvola”.
Alla domanda perché le aziende scelgono una soluzione cloud, gli intervistati hanno
risposto come descritto nella figura.

23
Figura 6: Perché le aziende scelgono una soluzione cloud

I progetti di public cloud analizzati hanno portato a riduzione del Total Cost of
Ownership10 stimabili tra il 10 e il 20%.
Entro il 2015, il Cloud potrebbe comportare un potenziale risparmi da 450 milioni a 1,5
miliardi di euro. In conclusione grazie al Cloud un’azienda può continuare a lavorare
come ha sempre fatto ma splendendo di meno, consumando meno, senza dover gestire
la manutenzione e coordinando le attività in mobilità.

Figura 7: Stato di adozione del cloud computing in Italia.

10
Total Cost of Ownership (TCO), in italiano costo totale di proprietà o costo totale di possesso, è un
approccio sviluppato da Gartner nel 1987, utilizzato per calcolare tutti i costi del ciclo di vita di
un’apparecchiatura informatica IT, per l’acquisto, l’installazione, la gestione, la manutenzione e il suo
smantellamento

24
1.6 Rischi e pericoli
È vero che adottare il cloud computing significa risparmiare e dotarsi di un sistema
avanzato ma è anche vero che il processo di cambiamento potrebbe portare dei problemi
e dei pericoli.
Secondo una ricerca di NextValue11 il 32% delle aziende italiane che si dichiarano non
interessate al cloud nel 36% lo fa perché teme possibili rischi di privacy o
conservazione dei dati. Il 35% lo giudica ancora un’offerta immatura e il 29% non
intende utilizzare il cloud per la mancanza di chiarezza su investimenti necessari e
ritorni. Più della metà delle aziende italiane (56%), infatti, ammette che il proprio staff
IT non è pronto per il cloud e solo una minima percentuale compresa tra il 12% e il 13%
considera il personale molto preparato.
Ciò che manca sarebbe l’esperienza: solo una persona su 4 del team IT (25%) ha avuto
qualche esperienza con il cloud.
Differenti invece le opinioni dei Cio europei. Essi dichiarano che il motivo principale
per non adottare il cloud è legato alla mancanza di informazioni fornite e ai dubbi legati
alla disponibilità a lungo termine dell’offerta da parte dei fornitori.
Ad oggi i rischi sono sintetizzati in 2 espressioni chiave:
• Sicurezza e privacy
• Limiti della rete Internet

1.6.1 Sicurezza e privacy


A frenare il successo del cloud computing nelle aziende italiane è sicuramente la paura
legata ai rischi connessi alla sicurezza. Se da un lato l’83% degli intervistati pensa che il
passaggio al cloud possa migliorare la propria sicurezza, il 78% è timoroso di non
raggiungere livelli di sicurezza adeguati.
Vi sono casi di aziende che operano in settori critici nei quali non è possibile far
divulgare i dati verso l’esterno. Spesso si tratta di dati strategici e particolarmente
importanti per il business di un’azienda.
Scegliere un servizio cloud spesso significa affidarsi quasi completamente al provider e
alla sua professionalità nella cura dell’infrastruttura e nell’applicazione di tutte le best

11
Società fornitrice di servizi di consulenza a tutti gli attori nelle industries
dell’Automotive e dell’Insurance

25
practice in fatti di sicurezza. La soluzione cloud non rimuove i problemi aziendali già
esistenti in un contesto imprenditoriale. Se una piattaforma è insicura, spostarla sul
cloud non ne cambia le proprietà al contrario ne aumenta la complessità dei canali con
effetti che riducono la sicurezza complessiva.
I seguenti aspetti, secondo il Garante per la Protezione dei Dati personali 12, necessitano
di una particolare attenzione:
• Bisogna tener presente che l’utente, affidando i dati ai sistemi di un fornitore remoto,
ne perde il controllo diretto ed esclusivo. Questo dipende anche dai meccanismi di
sicurezza adottati dal service provider scelto.
• Il servizio scelto potrebbe essere il risultato finale di una catena di servizi acquisiti da
parte di altri service provider spesso diversi dal fornitore con il quale si stipula il
contratto. In questo modo l’utente potrebbe non sempre essere in grado di sapere chi
può gestire ed accedere i propri dati.
• I fornitori spesso custodiscono dati di singoli e di organizzazioni diverse che
potrebbero avere interessi ed esigenze differenti e perfino, delle volte, contrastanti o in
concorrenza.
• I dati possono essere conservati in luoghi geografici differenti con normative
applicabili differenti in caso di contenzioso tra l’utente e il fornitore. Ci potrebbero
essere problemi anche in relazione alle disposizioni nazionali che disciplinano il
trattamento e la sicurezza dei dati.
Inoltre ricordiamo che il trattamento di dati personali mediante un sistema di cloud
computing equivale a un trattamento dei dati da parte di terzi secondo l’articolo 10a
LPD. Prevede che il trattamento di dati personali può essere affidato a terzi (nella
fattispecie i fornitori di servizi di cloud computing) mediante convenzione o per legge
se tale trattamento non è diverso da quello che il mandate stesso (l’utilizzatore di servizi
di cloud computing) avrebbe il diritto di fare e se nessun obbligo legale o contrattuale di
mantenere il segreto lo vieta. Il mandante deve in particolare assicurarsi che il terzo
garantisca la sicurezza dei dati.
Per questo necessario al momento della stipula dei contratti prestare molta attenzione ai
termini del servizio e informazioni in maniera adeguata sulle modalità dell’èrogazione

12
Il Garante per la protezione dei dati personali è un’autorità amministrativa indipendente per
assicurare la tutela dei diritti e delle libertà fondamentali e il rispetto della dignità nel trattamento dei
dati personali

26
del servizio e gli accorgimenti previsti per garantire il corretto trattamento dei dati nella
cloud. È quindi opportuno:
“Razionalizzarne le peculiarità al fine di individuare i potenziali rischi insiti in tali
servizi e quindi poter adottare efficaci e specifiche misure di protezione”
Da approfondire il caso degli Stati Uniti. In questo paese si registra il maggior numero
di utilizzatori di servizi cloud, in special modo di architettura SaaS. Per questo è stata
decretata una legge federale statunitense soggetta a critiche severe e a dubbi sulla sua
legittimità. La normativa derivante dall’attuazione del Usa Patriot Act rende
obbligatorio per le società statunitensi, per gli hosting provider americani o hosting
provider europei legate a società statunitensi, di consentire l’accesso a ogni dato
personale da parte delle agenzie di intelligence degli Stati Uniti. Significativa la sezione
215 del Patriot Act e le sezioni 504, 505 e 358 che autorizzano le ricerche sia con che
senza la supervisione di un giudice. Queste azioni possono rimanere segrete per un
tempo indeterminato sconosciuto all’indagato.

1.6.2 Limite della rete internet in Italia


Il servizio cloud è fornito attraverso la rete Internet che potrebbe risultare inaccessibile
o troppo lenta in caso di picchi di traffico. Il contratto deve prevedere dei specifici
controlli sulle prestazioni adeguati al costo del servizio.
Senza una connessione veloce e affidabile tutti i vantaggi di un sistema cloud vengono
persi, dovendone affrontare altri per il disservizio reso. Non ha dubbi in proposito
Giovanni Rando Mazzarino, direttore operations e tecnologie di Lottomatica:
“Anche noi seguiamo con molto interesse l’evoluzione di un concetto così innovativo
come il cloud computing. Proprio per questo, però, non possiamo evitare di constatare
che, a nostro avviso, sono le stesse caratteristiche principali su cui poggia questo nuovo
paradigma It a determinare, nel nostro Paese, i più grossi ostacoli a una sua diffusione.
Per quanto riguarda le infrastrutture di rete poi, per molte, moltissime zone del nostro
Paese l’accesso alla banda larga è ancora un’utopia e la fibra ottica tocca solo
determinate città. In entrambi i casi credo che il denominatore comune sia l’assenza di
un Sistema Paese capace di sostenere le aziende nel corso di processi evolutivi così
importanti”

27
I dati dell’ISTAT24 dimostrano che l’Italia è molto in ritardo in termini di diffusione
delle tecnologie informatiche rispetto agli altri paesi europei. In una classifica preparata
dall’Istituto il nostro paese si trova solo al 18esimo posto in Europa con l’83% delle
aziende che accedono alla rete tramite banda larga e va ricordato che tale velocità di
connessione, definita “larga” è comunque inferiore alla media di quella europea.
Questo gap digitale influenza negativamente e ostacola molto la diffusione del Cloud
Computing che ha come requisito fondamentale la disponibilità di una buona
connessione alla rete.

Figura 8: Imprese che utilizzano la banda larga

1.7 Indicazioni per l’utilizzo consapevole dei servizi cloud


Secondo il documento rilasciato dal Garante per la Protezione dei dati personali “Cloud
computing: indicazioni per l’utilizzo consapevole dei servizi” sono suggerite delle
indicazioni da seguire affinché l’utilizzo del cloud sia ottimale e esente di rischi:

28
1. Analizzare in maniera ottimale e consapevole rischi e benefici dei servizi che si
vogliono adottare.
2. Effettuare un’attenta verifica sull’affidabilità del fornitore attraverso lo studio della
sua stabilità societaria, referenze e garanzie in merito di confidenzialità dei dati e misure
straordinarie in caso di malfunzionamenti.
3. Preferire i servizi che favoriscono la portabilità dei dati per usufruire in pieno dello
scopo intrinseco del cloud. In questo modo un eventuale passaggio da un fornitore ad un
altro non comporterà un danno irreparabile o difficilmente gestibile.
4. Assicurarsi la disponibilità dei dati in caso di necessità attraverso l’analisi attenta del
contratto e dei servizi offerti in base al canone pagato. Importante sono i sistemi di
salvataggio (backup) dei dati nella cloud.
5. Selezionare i dati da inserire nella cloud. Infatti alcuni dati, per loro natura, non sono
compatibili non tutti i livelli di sicurezza offerti (dati sanitari, genetici, reddituali, etc).
6. Non perdere di vista i dati valutando accuratamente se i dati vengano spostati dal
fornitore iniziale a un servizio di stoccaggio dati acquisito da un terzo.
7. Informarsi su dove andranno a risiedere concretamente i dati per comprendere la
giurisdizione e la legge applicabile.
8. Prestare molta attenzione alle clausole contrattuali per eventuali condizioni che in una
prima analisi poco accurata si tengono a non considerare.
9. Verificare le politiche di persistenza dei dati per la loro conservazione.
10. Preferire servizi con opportune cautele per tutelare la confidenzialità dei dati e la
loro sicurezza.
11. Formare adeguatamente il personale IT interno in modo che gli stessi siano in grado
di acquisire e inserire in modo consono dei dati nella cloud.

1.8 Considerazioni
1.8.1 Vantaggi
Per parlare dei benefici che porta l’utilizzo di un modello cloud riprendiamo la
definizione di Cloud Computing del NIST nella quale sono descritte le cinque principali
caratteristiche offerte:

29
• Richiesta Self-service: un utente può gestire le risorse computazionali senza il bisogno
di interagire con il personale del provider cloud scelto.
• Ampio accesso dalla rete: l’accesso al cloud avviene dalla rete ed è quindi garantito ad
una moltitudine di piattaforme differenti come portatili, palmari, callulari, etc.
• Pool di risorse: i sistemi fisici e virtuali sono allocati o riallocati dinamicamente ove
necessario. Le macchine fisiche vengono nascoste all’utente al quale, vengono, invece,
presentate come: macchine virtuali, storage, memoria, lavoro computazionale,
connettività.
• Flessibilità: in ogni momento si può richiedere un upgrade o downgrade del sistema in
base alle esigenze e il cliente può acquistare risorse in qualunque momento e in ogni
quantità.
• Servizio Misurato: il gestore fornisce dei tagli specifici di ogni servizio in modo che il
cliente possa sempre far riferimento ad una metrica conosciuta, di solito definita come:
totale di storage usato, numero di transazioni, banda, potenza computazionale usata, etc.
A queste cinque caratteristiche principali si possono affiancare altre caratteristiche
vantaggiose quali:
• Costi Ridotti: grazie all’alta efficienza delle reti cloud, spesso si ha una forte riduzione
dei costi.
• Comodità d’uso: in relazione al servizio che viene offerto si potrebbe riuscire a
implementare il servizio senza utilizzo di hardware o software sotto licenza.
• Qualità del servizio: La QoS viene offerta da contratto dal proprio vendor.
• Affidabilità: L’affidabilità viene garantita dall’ottima capacità di bilanciamento del
carico nelle reti cloud superiore a quello garantito da un singolo organismo.
• Gestione dell’IT fuori sede: la dislocazione del cloud computing permette di
concentrare l’attenzione solo sul business dell’azienda, lasciando la gestione IT ad altri
con conseguente risparmio sui costi.
• Manutenzione e Aggiornamenti semplificati: gli utenti hanno accesso alle versioni
degli applicativi, sempre aggiornati, grazie al sistema centralizzato offerto dal cloud.
• Esigui costi iniziali: il capitale da investire è estremamente ridotto.

30
1.8.2 Svantaggi
Mentre i benefici del cloud computing sono innumerevoli, i suoi svantaggi sono limitati.
Normalmente i maggiori vantaggi vengono ritrovati nell’adozione del cloud dalle
piccole organizzazioni rispetto a quelle più grandi, in quanto le ultime possono dotarsi
di un personale IT interno all’azienda, che sviluppa in loco soluzioni software adatte
alle proprie necessità.
Le applicazioni e i servizi offerti in cloud, molto spesso, non sono personalizzabili
secondo le proprie esigenze e sono molto limitati rispetto ad un software sviluppato
direttamente in azienda.
Un altro problema del cloud è quello della latenza, legato alla connettività: se la propria
applicazione richiede una grande mole di dati da trasferire, allora il cloud non è la scelta
migliore da adottare, in quanto i benefici portati da una grande capacità computazionale
verrebbero in gran parte offuscati.
Se la nuvola si estende attraverso più nazioni allora potrebbe sorgere il problema delle
differenti giurisdizioni. I provider o i governi coinvolti di solito non offrono grande
aiuto nel risolvere questo tipo di problemi che vengono di consueto affibbiati al cliente.
La questione sulla privacy e sulla sicurezza, al centro del dibattito sugli svantaggi del
Cloud, non devono essere sottovalutate. Quando i propri dati “viaggiano” al di fuori dei
propri sistemi, aumenta il rischio che vengano intercettati. Non si può contare sul
proprio provider come garante della privacy se questa non è garantita dal rispettivo
governo come nel caso dei sistemi Google in Cina. Molti contenuti sono stati filtrati o
rimossi a causa delle delibere del governo Cinese.
Dopo cinque anni di contrattazioni e dopo aver scoperto che alcuni hacker cinesi
avevano avuto accesso agli account di posta di molti cittadini, Google ha deciso di
spostare i propri server ad Hong Kong.
Si può vedere quindi, come gli svantaggi di adottare un’infrastruttura Cloud, sebbene di
numero inferiore rispetto ai vantaggi, non sono per nulla da sottovalutare. Molto spesso
l’utilizzo del Cloud introduce più problemi di quelli che si avevano prima della sua
adozione.

31
32
Capitolo 2
Sistema Cloud Salesforce.com
2.1 SALESFORCE.com

Salesforce.com è una società di cloud


computing con sede a San Francisco,
con uffici regionali in Dublino (che
coprono Europa, Medio Oriente e Africa), Singapore (che copre Asia e Pacifico meno
del Giappone), e Tokyo (per il Giappone) ed è famosa per il suo CRM13.
Salesforce.com è stata fondata nel marzo 1999 dall'ex executive Oracle Marc Benioff,
Parker Harris, Dave Moellenhoff, e Frank Dominguez ed è specializzata in software di
tipo SaaS.
Nel giugno 2004 la società è stata quotata sul New York Stock Exchange sotto il
simbolo di borsa “CRM”.
A fine dicembre 2007 tra le pioniere del CRM on-demand troviamo anche
Salesforce.com che afferma di aver raggiunto oltre 38mila clienti paganti e quasi un
milione di utenti registrati.
Nel 2009 viene lanciato Service Cloud e a metà anno Salesforce integra Twitter nel
proprio CRM. Gartner 14pone, nel MQ 2009, salesforce.com come primo CRM da punto
di vista delle funzionalità e servizi offerti.
A gennaio 2010, salesforce.com ha iniziato a promuovere l'utilizzo di codici a barre 2D
(SPARQCode) per l'esportazione di informazioni di contatto per telefoni cellulari e a
metà anno uscì Salesforce Chatter che offre alle aziende un nuovo livello di
collaborazione possibile grazie al cloud facendo leva sulle funzionalità social e ai feed
in tempo reale resi famosi da servizi consumer quali Facebook, Twitter e Google Buzz.

13
Il concetto di customer relationship management (termine inglese spesso abbreviato in CRM) o
gestione delle relazioni coi clienti è legato al concetto di fidelizzazione dei clienti.
14
Gartner Inc. è una società multinazionale leader mondiale nella consulenza strategica, ricerca e analisi
nel campo dell'Information Technology con oltre 60.000 clienti nel mondo.

33
Nel gennaio 2011 Salesforce.com, ha annunciato l'acquisizione di DimDim, fornitore di
software per la videoconferenza con un esborso di 31 milioni di dollari.
Satesforce.com è il terzo più grande fornitore di CRM con 1,3 miliardi di dollari di
fatturato annuo, oltre 75.000 clienti e più di due milioni di utenti.
Inoltre vanta anche di una Fondazione Salesforce.com che si basa su un'idea molto
semplice: modello “The 1/1/1”. I dipendenti trascorrono l'1% del proprio tempo
stipendiato in attività di volontariato. L'1% delle licenze vengono donate o scontate in
modo no-profit alle aziende in modo che possano concentrarsi sulle loro missioni
principali e non perdere risorse per la gestione dei dati e l'efficienza operativa. In fine
l'1% del patrimonio netto fornendo fondi per borse di studio e assistenza monetaria per
sostenere i giovani, la tecnologia e progetti di volontariato dipendente.

2.1.1 Customer Relationship Management


La soluzione CRM di Salesforce.com è in versione On Demand e suddivisa in diverse
grandi categorie:
 Sales Cloud 2
 Service Cloud 2
 Collaboration Cloud (Chatter)
 Custom Cloud (Force.com)
 Data Cloud (compresi Jigsaw)

2.1.2 Sales Cloud 2


Sale Cloud 2 è una applicazione destinata a comparti di vendita e marketing, eseguita in
remoto in modo che l'utente possa accedere da qualunque luogo attraverso Internet da
un dispositivo mobile (Mobile Lite) o da un computer. Sales Cloud comprende
strumenti di vendita collaborativa chiamata Chatter, che fornisce in tempo reale ai
rappresentanti di commercio un protocollo completo del cliente e la sua storia, permette
di gestire campagne di marketing, di spesa e analisi prestazioni.
Tra le altre attività troviamo l'utilizzo di dati business Jigsaw per accedere a oltre 20
milioni di contatti di lavoro, l'integrazione con Outlook chiamato Salesforce for
Outlook.

34
Tra le funzioni:
 Chatter
 Accounts e contacts: tramite un’unica schermata si può avere una visione unica
di tutte le informazioni relative ai tuoi clienti attuali e lead, incluse le attività e
tutta la cronologia.
 Vendite e marketing: collaborano tra loro mentre i rappresentanti commerciali
convertono i lead generati dal marketing.
 Opportunità e creazione di preventivi: permette di creare rapidamente i tuoi
preventivi con un clic impostando metodologie di vendita con monitoraggio
delle varie fasi e cronologia dettagliata delle opportunità.
 Gestione dei dati con Jigsaw si hanno sempre informazioni aggiornate sui
contatti aziendali.

Figura 9: Schermata della Pagina Iniziale di Salesforce.com

35
 Analisi e previsioni tramite il cruscotto digitale si può avere traccia delle
vendite e una visione reale delle attività.
 Visual process manager automatizza processi complessi come preventivazione,
configurazione dei prodotti e metodologie di vendita.
 E-mail e produttività con Sales Cloud vi è compatibilità con Microsoft Outlook
o Gmail.com, strumenti utilizzati quotidianamente permettendo la normale
interazione da un’unica posizione.
 Libreria di contenuti i documenti di tutta l'azienda sono raccolti in un'unica
posizione, senza così ricreare doppie copie non aggiornate e utilizzando sempre
la versione più aggiornata.
 Genius collega le persone e le risorse della tua azienda favorendo la crescita
basata sui successi del passato.
 Partner visione unificata dei canali commerciali diretti ed indiretti permettendo
di evitare attese per gli aggiornamenti da parte di terzi partner.
 Mobile Lite è la nuova applicazione di salesforce.com, che permette agli utenti
di accedere a Sales Cloud e Service Cloud dai loro dispositivi mobili. Il servizio
Mobile Lite permette agli utenti finali di effettuare chiamate e inviare mail,
aggiornare attività e incarichi, così come visualizzare informazioni relative ai
clienti e ai contatti, vantaggi, opportunità, casistiche, soluzioni, asset e cruscotti,
il tutto da i loro dispositivi mobili. Mobile Lite offre un selezione delle
funzionalità presenti nella versione completa e, in solo pochi click, i clienti
possono passare alla modalità full.
 AppExchange è il marketplace di applicazioni online che ore possibilità in
qualsiasi area aziendale.

2.1.2 Service Cloud 2


Il Service Cloud offre alle aziende un call center, per l'assistenza ai clienti, che consente
di tenere traccia di eventi provenienti da ogni canale, e automaticamente pesarne
l'importanza.
Il portale Salesforce CRM-client fornisce all'azienda la possibilità di monitorare i propri
casi 24 ore al giorno, include un social networking plugin che permette all'utente di

36
partecipare alla conversazione sulla loro azienda su siti di social networking, fornisce
strumenti di analisi e di altri servizi tra cui e-mail, strumenti di chat, di ricerca di
Google, e l'accesso ai diritti dei clienti e dei contratti.
Tra le funzioni:
 Chatter
 Call center con tutte le informazioni sui clienti e la relativa cronologia in
un'unica posizione, i tuoi agenti possono fornire l'assistenza puntuale ed e-ciente
che oggi i consumatori si aspettano.
 Portale clienti che ore ai clienti la scelta di usufruire di servizi self-service
inviando le informazioni dal call center a un portale Web sicuro tramite
tecnologia push.
 Social network ascolta e partecipa alle conversazioni sull'azienda sui social
network con i moduli appositi per le comunità web come Twitter e Facebook.
 Conoscenza fornisce risposte accurate su tutti i punti di contatto con i clienti
attingendo a una knowledge base centralizzata collegata a ogni canale.
 Analisi
 Indirizzo e-mail si fornisce un'assistenza rapida ed e-ciente con strumenti per la
posta elettronica integrati che consentono di memorizzare modelli, inviare e-
mail e sapere quando vengono lette.
 Chat offre ai clienti la possibilità di chattare direttamente con un addetto
dell'assistenza clienti in tempo reale. L'intero sistema viene monitorato e gestito
in Salesforce.
 Community consente ai clienti di pubblicare idee, collaborare tra loro e fornirti
feedback utili.
 Ricerca siccome molti clienti utilizzano i motori di ricerca per trovare le risposte
a domande sui prodotti e servizi, è possibile far comparire le risposte provenienti
dalla knowledge base aziendale ai primi posti nell'elenco dei risultati di ricerca
 Partner
 Dispositivi mobili
 Visual Process Manager
 AppExchange

37
 Contratti e diritti grazie alla visibilità istantanea su contratti e sul livello di
servizi e diritti dei vari clienti, gli agenti sono in grado di assicurare a ogni
interlocutore la migliore assistenza possibile.

2.1.3 Collaboration Cloud (Chatter)


Uscito nel giugno 2010, Chatter conta ad oggi 60 mila utenti ed è una piattaforma di
collaborazione aziendale in tempo reale che unisce persone e dati in modo sicuro in un
ambiente privato progettato per essere un Facebook per le imprese.
Chatter accelera la scomparsa di Microsoft SharePoint e IBM Lotus Notes, liberando le
aziende dai costi e dalla complessità dei software legacy di collaborazione. Fa leva sulle
funzionalità social e ai feed aggiornati in tempo reale e resi famosi da servizi consumer
quali Facebook, Twitter e Google Buzz. L'informazione è alimentata in modo proattivo
attraverso un uso di notizie in tempo reale.
Gli utenti possono seguire i colleghi e trovare dati importanti ricevendo gli
aggiornamenti ad esempio di una vendita importante o i consigli sul lavoro di un
collega. Gli utenti possono formare gruppi e inviare messaggi.

Figura 9: I cardini del sistema Force.com

2.1.4 Custom Cloud (Force.com)


Force.com è una piattaforma di cloud computing per creare le proprie applicazioni
aziendali e siti web in maniera rapida e semplice, in quanto qualsiasi azienda ha bisogno

38
di applicazioni per le risorse umane o applicazioni di inventario. La piattaforma
Force.com di Salesforce.com è un prodotto SaaS e permette agli sviluppatori esterni di
creare applicazioni aggiuntive che si integrano in salesforce.com. Queste applicazioni
sono costruite utilizzando Apex (un linguaggio proprietario di programmazione simile a
Java per la piattaforma Force.com) e Visualforce (una sintassi XML-like per la
costruzione di interfacce utente in formato HTML, AJAX e Flex).
Force.com è legata a prodotti che ne fanno una piattaforma eseguibile su Database.com
e si basa su Appforce per sviluppare applicazioni aziendali, VMforce per le applicazioni
Java, Siteforce per la creazione di siti web con contenuti ricchi di dati, ISVforce per la
vendita delle applicazioni commerciali e il tutto si appoggia a database.com, database
cloud aziendale al quale si a-dano 87.200 aziende in tutto il mondo, creato su standard
aperti, progettato per applicazioni mobili e social networking.

2.1.5 Data Cloud (Jigsaw)


A maggio 2010 Salesforce.com ha annunciato di aver completato l'acquisizione di
Jigsaw, azienda privata leader nei data service crowd-source situata a San Matteo in
California. Con questa acquisizione, salesforce.com fa il suo ingresso in un mercato da
3 miliardi di dollari come quello dei data service aziendali cloud-based.
Jigsaw è una business directory dove si possono trovare contatti e informazioni sulle
aziende. L'elenco delle attività ha informazioni su contatti privati e aziende pubbliche.
Ogni contatto business su Jigsaw è completo di nome, titolo, e-mail e telefono. Possiede
contatti altrove introvabili e ore contatti di lavoro in qualsiasi azienda in ogni reparto e
in qualsiasi settore.
Jigsaw cerca di mappare ogni organizzazione aziendale, contatto per contatto e di
mantenere sempre aggiornati attraverso uno sforzo collaborativo.
Con l'acquisizione di Jigsaw, Salesforce prevede di offrire ai propri utenti la possibilità
di localizzare più facilmente, acquistare, e gestire informazioni che possono integrarsi
perfettamente nei loro database.
Non a caso Gartner pone Saleforce tra i visionari del settore del Social CRM Magic
Quadrant 2010 per i suoi strumenti sociali come Chatter, Ideas e Jigsaw.

39
2.1.6 Analisi Saleforce.com CRM
Punti di forza Jigsaw genera un fatturato annuo di 20 milioni di dollari e Saleforce.com
propone una offerta promozionale aggressiva per Chatter.
Salesforce.com ha introdotto strumenti social per la vendita attraverso un approccio a
doppio binario, fornendo supporto alle vendite e il necessario servizio dati. Il vendor ha
integrato le funzionalità sociali all'interno delle sue applicazioni CRM già esistenti. Si
sfrutta la comunicazione interna meno strutturata tra le varie parti (sfruttando profili
personali e i feed provenienti da contatti e gruppi in tempo reale). Con l'acquisizione dei
dati di Jigsaw si sfruttano i servizi di pulizia impliciti da parte della comunità al fine di
incoraggiarne la crescita.
L'offerta di Jigsaw è basata su una comunità di 1,2 milioni di soci che accedono
liberamente alle informazioni in cambio del mantenimento della pulizia dei dati di
contatti business per circa 21 milioni di elementi. Il tasso di precisione dichiarato è
stimato del 36%.
La mancanza di attenzione in ambito B2C deriva dalla inesistenza di una piattaforma
per sostenere le comunità pubbliche con un certo grado di autonomia da parte della
azienda. Il settore commerciale necessita di uno strumento per aumentare la capacità di
ascolto e per seguire i commenti sul web pubblico.
Gli utenti del servizio di Jigsaw inizialmente si registrano e aggiungono contatti
trascorrendo del tempo per la pulizia dei dati, ma alla lunga questo fattore può diventare
stancante. Le nuove UI spesso confondono i vecchi utenti e alcuni utilizzatori di Chatter
hanno espresso disagio per la mole di volumi di traffico informatico, alert, discussioni,
voci che distraggono in quanto inutili o ridondanti.

2.1.7 Integrazione
L'integrazione è una delle maggiori sfide da affrontare nel corso di progetti IT.
Force.com semplifica l'integrazione sia con applicazioni on-premise, come ad esempio
Microsoft, Oracle e SAP, sia con altre soluzioni di terze parti e service cloud esterni,
quali i servizi Amazon Web e Google AppEngine.

40
Più della metà di tutto il traffico presente sulla piattaforma Force.com si basa
sull'integrazione system-to-system, che è oggigiorno l'API aziendale più affidabile ed
efficace disponibile sul mercato.
Aspetti chiave di Force.com sono l'architettura multi-tenant base delle economie di
scala di dimensioni consistenti, della sicurezza e dell'innovazione, ma fonte di una
semplice integrazione con le interfacce di servizi Web.
Vi sono API di servizi Web per una semplice integrazione seguendo i principi
dell'approccio service-oriented architecture (SOA). Rispetto a un'integrazione punto a
punto costante, l'API di servizi Web garantisce un semplice accesso ad applicazioni,
dati e configurazioni.

2.1.8 Applicazioni aggiuntive


AppExchange, lanciato nel 2005, è un marketingplace per il cloud computing
application costruito da salesforce.com per fornire a partner o a sviluppatori di terze
parti uno spazio dove offrire agli utenti nuove applicazioni da acquistare e aggiungere al
proprio ambiente salesforce.com.
A ottobre 2010 si contavano oltre 900 applicazioni disponibili da più di 450 fornitori di
software indipendenti.
Tutti i partner salesforce.com possono distribuire applicazioni e soluzioni su
AppExchange. Le applicazioni create sulla piattaforma Force.com sono installate dai
clienti direttamente personalizzando la propria applicazione CRM oltre alle funzioni
standard previste. La personalizzazione può essere fatta su ogni scheda (contatti, report,
appuntamenti), con l'aggiunta di campi personalizzati deniti-utente in rapporto
all'applicazione installata.
Si naviga facilmente tra le applicazioni di AppExchange e, nel caso si sia interessati, è
possibile scaricare gli script di advanced call gratuiti per provare quanto è facile
ampliare le potenzialità di Salesforce.com con applicazioni aggiuntive. Nel caso non si
trovasse l'applicazione adatta alla propria situazione, anche un amministratore di
sistema con poche conoscenze tecniche può preparare una nuova applicazione nella
sezione delle Applicazioni Personalizzate.

41
Relazione con Social Network Nel colloquio telefonico avuto con il sig. Protani,
rappresentante di vendita, è stata spiegata la necessità di un sistema oltre al discorso
prevalentemente offerto da Chatter principalmente B2B.
Si è parlato di un partner che avrebbe potuto fornire un servizio di tipo B2C, ma
nell'email successiva al contatto telefonico sono solamente state presentate le offerte
economiche delle differenti versioni qui riportato con i relativi costi dimostrando come
Salesforce sia comunque interessante oltre dal punto di vista funzionale sia dal punto di
vista economico, soprattutto per una nuova start-up aziendale con limitati budget e
ampie prospettive pubblicitarie.

2.2 Salesforce1
Nella vita quotidiana, siamo circondati da migliaia di
Apps, da notifiche social che vengono aggiornate ai nostri
telefoni automaticamente fino alle scarpe che
immediatamente comunicare quante calorie abbiamo
bruciato.
Eppure, al lavoro, non si è preso ancora preso pieno vantaggio da queste tecnologie.
E con il marea di compiti che dobbiamo svolgere solo per mantenere la produttività
minima, è una sfida per offrire una esperienza al cliente sempre sorprendente. In poche
parole, non abbiamo dati e approfondimenti a portata di mano per spostarsi più
velocemente.
Così come fa un business tenere il passo con le aspettative in questo nuovo mondo iper-
connesso? Come fa un CIO, o un amministratore delegato, anche cominciare a pensare
di offrire applicazioni sia per i clienti e dipendenti che aiutano a incrementare la
produttività e la competitività in ogni reparto? E come si fa a garantire che costruiti per
il social e mobile dal prendano piede?
Come si può collegare clienti, dipendenti, e anche i vostri prodotti per arrivare al futuro
prima? Come si fa a collegare nulla a tutto ciò?
La risposta è salesfoce1 platform
Salesforce1 è il nuovo Customer Relationship Manager (CRM) di Salesforce, ma
definirlo tale sarebbe davvero riduttivo: è una piattaforma che permette alle imprese un
monitoraggio completo delle attività dei clienti, come quelle dei dipendenti, e di gestire

42
ogni aspetto della produttività aziendale da iOS oppure Android. Non importa quale sia
il settore del proprio business – dall’alta moda ai videogiochi – perché la app aggrega i
servizi dai social network al cloud storage, dando una panoramica su tutti gli ultimi
aggiornamenti.
È difficile spiegare esaurientemente cosa sia Salesforce1 perché le funzionalità della
piattaforma sono numerose — forse, addirittura troppo. Include delle caratteristiche
paragonabili ai Secure Work Space di BlackBerry per inviare le applicazioni agli
impiegati, ma permette anche di controllare l’andamento delle campagne pubblicitarie o
ricevere dei dati dalla cosiddetta «internet delle cose». Se c’è qualcosa che non mi
convince è proprio nel numero delle feature implementate, che rischia di rendere
l’applicazione confusionaria.
Fortunatamente, Salesforce1 ha una struttura modulare che consente un’estrema
personalizzazione della piattaforma: le imprese non sono costrette a utilizzare tutte le
funzioni previste. Quelle più utili riguardano il marketing, perché l’azienda è leader nel
monitoraggio delle vendite e più in generale del tracking delle attività dei consumatori.
Salesforce1 è una
piattaforma cloud che offre
tutti gli strumenti necessari
per rendere il mondo più
veloce e più facile da
costruire tramite desktop e
mobile ciò è possibile
trasformando le idee in
applicazioni più veloci,
vendere, dare servizi, creare
mercato, e gestire il tuo Figura 10 Connettività Salesforce1

business come mai prima. La piattaforma Salesforce1 riunisce Force.com, Heroku, e


ExactTarget in una famiglia di servizi cloud.
Salesforce1 piattaforma è una piattaforma Cliente rivoluzionaria, progettata per
collegare i clienti alla prossima generazione di dispositivi e applicazioni.
La Piattaforma Salesforce1 offre servizi potenti come lo sviluppo point-and-click,
logica di business, SDK mobile analytics, di sviluppo multi-linguaggio, la

43
collaborazione sociale, e soluzioni di cloud identità. Esso comprende anche servizi
come componenti di interfaccia utente, layout di pagina flessibili per cellulari, un 1: 1
motore coinvolgimento del cliente, e le azioni-tutte personalizzate orientate per andare
veloce. E poiché si tratta di API-prima, si può costruire la vostra applicazione con
qualsiasi esperienza o utente che si desidera-ti aiuta a connettersi con la prossima
generazione di dispositivi, applicazioni e clienti in un modo completamente nuovo.
La piattaforma Salesforce1 è progettata per consentire i non-sviluppatori di costruire
applicazioni mobili e desktop. Con i nuovi strumenti dichiarati, tutti gli stakeholder
possono costruire una nuova applicazione con semplici passaggi. Ed è facile e veloce, le
applicazioni si costruiscono per adattarsi ai cambiamenti di business come si
presentano.
Che significato ha salesforce1?
Per gli sviluppatori:
 Una piattaforma di cloud API-first, il che significa che tutte le applicazioni sono
connesse ai dati aziendali
 Una App estendibile con framework di interfaccia utente, che consente di
costruire più velocemente che mai
 Supporto per tutte le ultime HTML5 e framework JavaScript mobili, come
Angular, Backbone, e più
 Un SDK per costruire applicazioni nuove e personalizzate per Android e iOS
 Distribuzione istantanea, la distribuzione in tempo reale
 Altri strumenti di produttività per andare ancora più veloce
Per gli utenti aziendali:
 Creare un'applicazione con dei semplici passaggi
 Portare una idea di business nella vita con un App, che sia solcial e mobile,
all'istante
 Costruire Apps, orientati all'azione, intelligenti, contestualmente consapevoli
 Fornire dati e approfondimenti per ogni dipendente
 Aggiungere nuovi utenti e controllare l'accesso utente con pochi clic

44
3.1 Salesforce come vetrina di app per clienti
Ecco una vetrina di applicazioni personalizzate integrate con la piattaforma Salesforce1
sfruttando nuove API e la Salesforce1 Mobile SDK. Queste incredibili app sono
progettate per coinvolgere e deliziare i dipendenti e clienti nel mondo delle aspettative
accelerati. È solo un esempio degli oltre quattro milioni di applicazioni create sulla
piattaforma cloud.

Eccone alcuni esempi:


 Trunk club (Moda)
I clienti del servizio di shopping personalizzato di Trunk Club possono
connettersi con i loro stilisti da qualsiasi luogo tramite i loro dispositivi mobili,
con un app costruita sulla piattaforma Salesforce1. Possono richiedere nuovi
indumenti ed ottenere allestimento consigli su acquisti passati.
 Kelly Services (Informazione)
Progetto talentuoso: gli utenti iPad possono cercare, sfogliare e scaricare white
paper, ricerche, relazioni industriali, e video sui temi occupazionali fondamentali
che riguardano il posto di lavoro globale di oggi.
 ADP (Vendita sul campo)
ADP ha costruito una intera suite di applicazioni ottimizzata per i cellulari,
compresi gli aiuti digitali di vendita, gestione degli ordini e pianificatori

45
itinerario, sulla piattaforma Salesforce1. I rappresentanti possono trovare gli
itinerari più promettenti e le prospettive sui loro device e firmare contratti anche
dalla strada.
 Kimberly-Clark (Comunicazione con il cliente)
Professional Healthy Workplace app di Kimberly-Clark per iPad permette di
mantenere una trasparenza di progetti business to business tra i vari team e
condividere e progressi con i clienti in tempo reale.
 Academy of art university (Istruzione)
Campus App di AAU fornisce informazioni personalizzate agli studenti, tra cui
orari di classe e indicazioni per l'utilizzo di bus navetta universitario per
arrivarci. L'applicazione integra perfettamente le informazioni classe da
Salesforce e un sistema GPS in tempo reale che mostra le posizioni dei bus.
 Virgin America (applicazione social)
Virgin America utilizza un cellulare intranet sociale per fornire informazioni
aziendali critiche ai propri dipendenti, mantenendo i compagni di squadra
collegati e impegnati, ovunque si trovino.
 LEVIEV Extraordinary Diamonds (Catalogo)
LEVIEV Extraordinary Diamonds crea personali e intime esperienze per il
clienti con un App mobile che mette in mostra il suo inventario globale di
diamanti. Utilizzando Salesforce, ripetizioni possono mostrare diamanti dal
showroom di tutto il mondo in tempo reale.
 Time Warner CABLE (Aiuto vendita)
Time Warner Cable da un facile accesso ai dati veloce e affidabile, come mappe
del territorio, tramite un app iPad costruita sulla piattaforma Salesforce1.
L'applicazione consente anche presentazioni di vendita più interessanti e
interattivi per una migliore performance di vendita.
 Comcast (vendite sul campo)
Comcast permette vendite sul campo con un'applicazione facile da usare,
costruita sulla piattaforma Salesforce1. L'azienda ha sviluppato un app iPad per
mostrare servizi e di confronto di risparmio per i clienti, generare preventivi e
contratti, e cattura firme elettroniche sul posto.

46
3.2 Applicazioni di settore per la piattaforma Salesforce1
La Mobile App Salesforce1 è l'ultimo app business. Rende le vostre applicazioni
Salesforce esistenti istantaneamente mobili e si può costruire e distribuire nuovi per
ogni dipendente. Qui ci sono solo alcune idee si può costruire per iniziare.

Apps per servizi finanziari


Dal settore bancario alle assicurazioni, costruire applicazioni di preventivo e
inserimento dei vostri nuovi clienti più velocemente che mai e fornire una comunità
investitore vivace per rimanere in contatto.
 Account Onboarding App
Deliziare i vostri clienti, rendendo registrazione di nuovi clienti un facile e
veloce esperienza qualsiasi canale, in qualsiasi momento, qualsiasi prodotto (uno
o molti).
 Personal Investing Community App
Creare una comunità sociale privata per condividere investire conoscenze,
intuizioni, e le tendenze che influenzano le strategie di investimento personali.
 First Notice of Loss App
Rispondere ai crediti di assicurazione da qualsiasi luogo e pagare i clienti più
velocemente della concorrenza
 Compliance App

47
Rendere più semplice per i vostri banchieri per navigare norme operative
attraverso built-in app regole, informazioni, documenti dell'ordine, reporting,
gestione e visibilità
 Commercial Onboarding App
Prendete la complessità e la confusione di configurazione multi-prodotto e la
realizzazione attraverso diverse squadre. Girare in un app che guida la velocità,
l'efficienza e la soddisfazione del cliente.
 Small Business Portfolio App
Rimanga sulla parte superiore del vostro portafoglio di clienti delle PMI;
servizio, cross-sell e gestire l'esposizione, attività, eventi e avvisi da un'unica
applicazione.
 Quoting App
Aumentare il flusso di vendite e di ottenere una migliore qualità accordo con
veloce preventivo; pre-qualificare le vostre prospettive in tempo reale su
qualsiasi dispositivo.

High-tech app
Costruire applicazioni per monitorare la distribuzione, domande di brevetto,
hardware IT, e il capitale umano con Channel App, Asset Apps Management,
Recruiting Apps e Apps Project.
 Intellectual Property App
Fonte e tenere traccia dei mezzi di brevetto delle idee più importanti nella vostra
azienda; riconoscere e premiare i titolari di brevetti
 Software Development App
Automatizzare il processo di sviluppo agile, monitorando ogni storia in un unico
posto in modo da poter spedire il prodotto più velocemente.
 Quality Control App
Cattura, pista, e la relazione sui risultati di ogni fase del processo di QA per
ridurre i difetti e aumentare i profitti.
 Quote-to-order App
Girare le vendite in contanti più veloce, automatizzando la preventivo, firma, e il
processo di evasione degli ordini non appena il cliente dice "sì".

48
 Licensing App
Aumentare la visibilità e risparmiare sui costi delle licenze software ridondanti
di tracciamento e la gestione di tutti in un unico posto.
 Project App
Gestire i progetti chiave come go-to-market o lanciare eventi direttamente dal
tuo telefono in modo da non perdere mai una pietra miliare.

3.3 AppExchange applicazioni basate sulla piattaforma Salesforce1


Oltre 2.000 applicazioni sono state costruite sulla piattaforma Salesforce1 per aiutarvi a
andare più veloce. Qui ci sono solo alcuni esempi delle applicazioni che la
AppExchange mette a portata di mano, immediatamente.

49
50
2.2.4 Lightning
Di recente è stato introdotto un nuovo metodo per sviluppare applicazioni sulla
piattaforma Salesforce che interagiscono in modo veloce e automatico con i dispositivi
mobili che hanno installato il programma Salesforce1.
Solo con l’ultima versione è infatti possibile sviluppare software tramite componenti
Lightning. The Lightning Component framework è un quadro moderno per la creazione
di applicazioni di una sola pagina progettate per la crescita. Il framework supporta lo
sviluppo di componenti multi-tier che soddisfa il client e il server. Esso utilizza
JavaScript sul lato client e Apex sul lato server.
Si pensa che Lightning avrà un notevole impatto per l’azienda Salesforce, i suoi clienti,
i partner e gli sviluppatori proprio come lo sono stati a suo tempo gli oggetti
personalizzati, AppExchange, Apex Code, Visualforce, e la Mobile App Salesforce1.
Lightning si presenta come la prossima generazione di Salesforce1 Platform. Lo scorso
anno al fine di avviare la Mobile App Salesforce1, l’azienda ha avuto bisogno di
costruire una interfaccia utente mobile ottimizzata. Ma nella grande tradizione di
Salesforce, si è adottato un approccio a lungo termine per la progettazione di qualcosa
che potesse scalare. In primo luogo, hanno costruito Lightning framework e quindi
hanno costruito tutta l'interfaccia utente utilizzando componenti Lightning. Ci è voluto
un po’ di tempo, e un sacco di gente si chiese perché. Ci sono molti framework
JavaScript là fuori, quindi perché costruiamo la tutta loro?
Questo è molto più di framework JavaScript. Se si guarda a Salesforce in un accezione
più ampia, si può vedere quello che è realmente: un sacco di componenti dell'interfaccia
utente che sono disposte su pagine progettati per funzionare per qualsiasi forma o
dimensione dello schermo. I team di sviluppo interni costruiscono i componenti per il
feed Chatter, barra di ricerca, grafici, elenchi di record, pagine di record, modificare le
pagine, liste collegate, e altro ancora. E questi componenti sono disposti in modo
diverso in tutto l'applicazione, su diversi schermi e dispositivi e contesti. Ciò è fatto in
modo tale da lasciare che gli sviluppatori e i clienti si muovano in modo molto più
veloce. Perché ora, non dobbiamo ricodificare un componente ogni volta che vogliamo
che appaia su una pagina diversa o su un dispositivo con una nuova forma.
Un anno dopo il lancio di Salesforce1, l’azienda è pronta ad aprire questo framework in
modo che gli sviluppatori possono creare i propri componenti Lightning, e modificare

51
ed estendere quelli già presenti. Ciò che rende davvero unico questa apertura è che non
è rivolta solo agli sviluppatori. È infatti pronta la Lightning App Builder che permetterà
ai non-sviluppatori di comporre le applicazioni con tutti i componenti creati da
Salesforce, i nostri partner, e tutti gli sviluppatori nel nostro ecosistema.
Un buon modo per pensare a tutto questo è l’analogia con aziende Toyota. Ciò che
realmente fanno è la progettazione e il montaggio di componenti di macchine. È questa
idea che si può costruire una macchina fuori gamma con componenti riutilizzabili che
permette a una casa automobilistica come la Toyota di andare più veloce e concentrare
più energia sul design e le caratteristiche delle loro automobili che li differenzia sul
mercato. Questa stessa idea applicata a Salesforce per lo sviluppo di applicazioni mobili
è ciò che aiuterà ogni reparto IT e permetterà di velocizzare i processi e fornire più
innovazione.
Si consentirà agli sviluppatori di costruire nuovi componenti e di distribuirli ai clienti
tramite AppExchange, lasciare che i nostri clienti siano gli autori dei propri componenti,
e quindi portare tutto insieme con i componenti all'interno di App Builder.
Come in Salesforce si può può costruire un applicazione con point-and-click e risolvere
i problemi, e poi tutto ad un tratto è necessario fare qualcosa che richiede la scrittura del
codice. È come guidare l'auto lungo la spiaggia e improvvisamente appare una scogliera
di fronte a voi e dovete chiamare uno sviluppatore per costruire un ponte. Con
Lightning si sta spostando quella scogliera molto più lontano.
Per essere chiari, non sto dicendo che non hai bisogno di più sviluppatori. Il punto
chiave è che gli sviluppatori possono ora costruire i componenti invece di costruire
applicazioni partendo da zero. Questo significa che gli sviluppatori possono ora andare
più veloce e riutilizzare i componenti che aiuteranno tutti in tutto l’ecosistema per
andare più veloce.
In sintesi a quanto detto l’utilizzo di questa nuova tecnica porta con se molti vantaggi
tra i quali:
 Viene fornito con un set di componenti adattabili per dare il via alla costruzione
di applicazioni. Non c'è bisogno di spendere il vostro tempo per ottimizzare le
applicazioni per i vari dispositivi, saranno componenti stessi a prendersi cura di
questo per voi.

52
 Migliora le performance, il framework utilizza JSON per lo scambio di dati tra il
server e il client, per massimizzare l'efficienza, il server invia solo i dati che è
necessario per l'utente. Utilizza in modo intelligente il server, il browser, i
dispositivi, e la rete in modo da poter concentrarsi sulla logica e le interazioni
delle tue applicazioni.
 Utilizza un'architettura event-driven per una migliore disaccoppiamento tra i
componenti.
 Sviluppo più rapido, consente ai team di lavorare più velocemente con
componenti adattabili che funzionano perfettamente con i desktop e dispositivi
mobili. Costruire un'applicazione con i componenti facilita la progettazione in
parallelo, migliorando l'efficienza complessiva dello sviluppo.
I componenti sono incapsulati e le relative parti interne rimangono private,
mentre la loro forma pubblica è visibile per i consumatori del componente.
Questa forte separazione dà agli autori libertà di cambiare i dettagli interni di
implementazione ed isola i consumatori dei componenti alle modifiche da
apportare.
 Compatibilità del browser, le applicazioni sono sensibili a fornire un'esperienza
piacevole all’utente. Il framework di componenti Lightning supporta la più
recente tecnologia browser come HTML5, CSS3, e eventi di tocco.

2.2.5 Cosa è un componente Lightin?


I componenti sono le unità autonome e riutilizzabili di un appicazione. Rappresentano
una sezione riutilizzabile dell'interfaccia utente, e possono variare in granularità da una
singola linea di testo ad un intera applicazione.
Il framework comprende una serie di componenti predefiniti. È possibile assemblare e
configurare i componenti per formare nuovi componenti in un applicazione. I
componenti sono resi per la produzione di elementi DOM HTML all'interno del
browser. Un componente può contenere altri componenti, così come HTML, CSS,
JavaScript, o qualsiasi altro codice Web-enabled. Ciò consente di creare applicazioni di
sofisticate interfacce utente.
I dettagli di implementazione di un componente sono incapsulati. Questo permette al
consumatore di un componente di concentrarsi sulla costruzione di loro applicazioni,

53
mentre l'autore del componente in grado di innovare e di apportare modifiche senza
rompere i consumatori. È possibile configurare i componenti impostando gli attributi di
nome che si espongono nella loro definizione. Componenti interagiscono con il loro
ambiente attraverso l'ascolto o la pubblicazione di eventi.
Programmazione event-driven è usato in molte lingue e ambiti, come JavaScript e Java
Swing. L'idea è di creare dei gestori che rispondono agli eventi delle interfacce che si
verificano.
Un componente registra che possa generare un evento nella sua marcatura. Gli eventi
vengono sparati da azioni di controllo JavaScript che sono in genere attivati da un
utente che interagisce con l'interfaccia utente.
Ci sono due tipi di eventi nel framework:
• Gli eventi dei componenti vengono gestite dal componente stesso o di un componente
che crea un'istanza o contiene il componente.
• eventi di applicazione sono essenzialmente un tradizionale modello di publish-
subscribe. Tutti i componenti che forniscono un gestore per l'evento ricevono una
notifica quando l'evento viene generato.
I gestori di azioni di controllo sono scritti in JavaScript.
Ad oggi non è ancora disponibile Lightning Built App, una console molto utile e
semplice per sviluppare applicazioni con componenti Lightning tramite semplici
operazioni intuitive di point and click è quindi d’obbligo rivolgersi alla developer
console di Salesforce.
Prima di poter sviluppare applicazioni in questo modo è necessario creare un prefisso
namespace, il prefisso deve essere globalmente univoco in tutte le organizzazioni di
Salesforce. I prefissi sono case-insensitive e avere una lunghezza massima di 15
caratteri alfanumerici. Il namespace viene utilizzato come prefisso per i componenti e le
classi Apex che state creando, inoltre fornisce parte dell’indirizzo web per accedere
direttamente all’applicazione da voi creata.
È poi necessario abilitare i componenti Lightning ciò permetterà di trattare i nuovi tipi
di elementi e implementare in automatico la developer console che solo poi sarà in
grado di creare, modificare e gestire Applicazioni, Componenti ed Eventi Lightinig.
Un componente Lightning contiene al suo interno il componente stesso o la
applicazione, se di applicazione di tratta, e tutte le risorse correlate:

54
Component o Application: l'unica risorsa necessaria in un pacchetto. Contiene markup
per il componente o applicazione. Ogni oggetto contiene un solo componente o risorsa
app.
CSS Styles: contiene lo stile del componente.
Contoller: vi sono metodi controllore del lato client per gestire gli eventi nel
componente.
Documentation: Una descrizione, codice di esempio, e uno o più riferimenti a
componenti d’esempio.
Render: contiene il render del componente del lato cliente così facendo si ignora quello
predefinito.
Helper: funzioni JavaScript che possono essere chiamate da qualsiasi parte di codice
JavaScript contenuto nel pacchetto del componente.

Per poter sviluppare la nostra applicazione con la nuova tecnica è necessario creare
un’applicazione Lightning, questa è il punto di ingresso per il nostro progetto, può
contenere altri componenti e markup HTML.

55
Il seguente diagramma di flusso riepiloga il flusso di dati in app. L'applicazione
recupera i dati da record attraverso una combinazione di controllo lato client e funzioni
di supporto, e un controller Apex, che si creerà più avanti.

56
Capitolo 3
Piattaforma force.com
3.1 Visualforce
Visualforce è un framework che consente agli sviluppatori di creare sofisticate
interfacce utente personalizzate che possono essere ospitate in nativo sulla piattaforma
Force.com. Il quadro Visualforce include un linguaggio basato su tag markup, simile a
HTML, e un insieme di server-side "controllori standard" che rendono le operazioni di
database di base, come le query e salva, molto semplice da eseguire.
Nel linguaggio di marcatura Visualforce, ogni tag Visualforce corrisponde ad un
grossolano o granulare componente di interfaccia utente, come una sezione di una
pagina, un elenco collegato, o di un campo. Il comportamento dei componenti
Visualforce può sia essere controllato dalla stessa logica che viene utilizzato in pagine
standard Salesforce, o sviluppatori possono associare loro logica con una classe
controllore scritta in Apex.
- Campione di componenti Visualforce e dei loro corrispondenti Tags-
Gli sviluppatori possono utilizzare Visualforce per creare una definizione di pagina
Visualforce. Una definizione della pagina è composta da due elementi primari:
 Visualforce markup
 Un controller Visualforce
Visualforce markup è composto di tag Visualforce, HTML, JavaScript, o qualsiasi altro
codice Web-enabled incorporato all'interno di un unico <apice: pagina> tag. Il markup
definisce i componenti dell'interfaccia utente che dovrebbero essere inclusi nella pagina,
e il modo in cui dovrebbero apparire.
Un controller Visualforce è un insieme di istruzioni che specificano cosa succede
quando un utente interagisce con i componenti di cui associati Visualforce markup,
come ad esempio quando un utente fa clic su un pulsante o un link. Controller offrono
anche l'accesso ai dati che devono essere visualizzati in una pagina, e possono
modificare il comportamento del componente.

57
Uno sviluppatore può utilizzare un controller standard fornita dalla piattaforma
Force.com, o aggiungere la logica di controllo personalizzato con una classe scritta in
Apex:
 Un controller standard costituito dalla stessa funzionalità e la logica che viene
utilizzato per una pagina standard Salesforce. Ad esempio, se si utilizza il
controller Account standard, facendo clic su un pulsante Salva in una pagina
Visualforce comporta lo stesso comportamento a fare clic su Salva una pagina
standard account di modifica. Se si utilizza un controller standard su una pagina
e l'utente non ha accesso all'oggetto, la pagina visualizza un messaggio di errore
di privilegi insufficienti. È possibile evitare questo controllando l'accessibilità
dell'utente per un oggetto e la visualizzazione dei componenti in modo
appropriato.
 Un controller elenco standard consente di creare pagine Visualforce che possono
essere visualizzati o agire su una serie di record. Esempi di pagine di Salesforce
esistenti che funzionano con una serie di record includono pagine della lista,
liste collegate, e pagine delle azioni di massa.
 Un controller personalizzato è una classe scritta in Apex che implementa tutte le
logiche di una pagina, non sfruttando un controller standard. Se si utilizza un
controller personalizzato, è possibile definire nuovi elementi di navigazione o
comportamenti, ma è necessario anche re implementare alcuna funzionalità che
era già previsto in un controller standard. Come altre classi Apex, i controller
personalizzati eseguiti interamente in modalità sistema, in cui le autorizzazioni
per gli oggetti e a livello di campo dell'utente corrente vengono ignorati. È
possibile specificare se un utente può eseguire i metodi in un controller
personalizzato basato sul profilo dell'utente.
 Un'estensione controller è una classe scritta in Apex che aggiunge o sostituisce il
comportamento in un controller standard o personalizzato. Estensioni
consentono di sfruttare le funzionalità di un altro controllore nell'inserire la tua
logica personalizzata.

58
3.1.1Visualforce markup
Per impostazione predefinita, Visualforce genera automaticamente un valido HTML (e
XML) del documento richiesto per garantire la validità della pagina.
Per le pagine che utilizzano questo comportamento automatico, Visualforce aggiunge
tag HTML in due contesti: un contesto semplice richiesta get, quando una pagina viene
inizialmente caricato e resa; e un contesto postback, quando si ritorna da un <apex:

form>, in Ajax le richieste sono realizzate con un <apex: actionXXX>.

Figura 11 Esempio pagina Visualforce

In un contesto get, l'HTML reso dal Visualforce è un po’ rilassato. Aggiunge <html>
per avvolgere la pagina, tag <head> per avvolgere il titolo della pagina ed eventuali
fogli di stile o script aggiunti alla pagina utilizzando <apex: stylesheet> o <apex:

includeScript>, e <body> per incapsulare il contenuto della pagina.


HTML generato da altri tag Visualforce sarà completa e valida HTML, e non è possibile
salvare una pagina Visualforce con XML statico non valido. Tuttavia, HTML aggiunto
da espressioni che accedono metodi controller, campi sObject e altre fonti non
Visualforce non è convalidato da Visualforce prima che sia tornato. È quindi possibile
restituire un documento XML non valida attraverso una richiesta GET.
In un contesto di postback, Visualforce è più severa. Perché potrebbe essere necessario
inserire in un DOM esistente il contenuto della richiesta, la risposta HTML è post-

59
elaborati per assicurarsi che sia valido. Questo "mettere in ordine" correzioni mancanti e
tag non chiusi, rimuove i tag non validi o attributi, e altrimenti pulisce HTML non
valido in modo che inserirà perfettamente nel DOM di qualsiasi pagina è tornato
indietro a. Questo comportamento è volto a garantire che i tag che aggiornano un DOM
esistente, come ad esempio <apice: actionHandler>, funzionano in modo affidabile.
È possibile aggiungere attributi arbitrari di molti componenti Visualforce che verranno
utilizzati per il rendering HTML.
Qua sono elencati alcuni componenti utilizzabile nelle pagine:
<apex:column> <apex:commandButton>
<apex:commandLink> <apex:component>
<apex:dataTable> <apex:form>
<apex:iframe> <apex:image>
<apex:outputPanel> <apex:outputText>
<apex:page> <apex:pageBlock>
<apex:pageBlockButtons> <apex:pageBlockSection>
<apex:pageBlockSectionItem> <apex:pageBlockTable>
<apex:panelBar> <apex:panelBarItem>

Tra i tanti ho imparato a conoscerne alcuni indispensabili per lo sviluppo


dell’applicazione che andrò poi ad illustrarvi.
Tutte le pagine devono essere inserite all'interno di un singolo tag componente di
pagina: <apex:page>. Le pagine come ogni altro tag possono avere degli attributi,
questi aggiungono informazioni alla pagina e ne segnano le caratteristiche, possono
essere dei semplici nomi per far rifermento al componente nelle istruzioni successive
oppure possono specificare delle azioni o ancora il controllore personalizzato che
utilizzerà la pagina come interfaccia con l’utente.
Con <apex:pageBlock> si intende un'area di una pagina che utilizza styling simile alla
comparsa di una pagina di dettaglio Salesforce, ma senza alcun contenuto predefinito.
Per poter mostrare un elenco di dati visualizzati come una tabella all'interno di una o <

apex: pageBlock> o < apex: pageBlockSection>, simile a una lista collegata o elenco
in una pagina standard Salesforce si utilizza <apex: pageBlockTable>. Come per <

apex: dataTable>, una <apex: pageBlockTable> è definito mediante iterazione su un


insieme di dati, visualizzando informazioni su una voce di dati per riga. L'insieme di
dati può contenere fino a 1.000 voci.

60
Il corpo del < apex: pageBlockTable> contiene uno o più componenti della colonna che
specificano quali informazioni devono essere visualizzate per ogni voce di dati, simile a
una tabella. A differenza del < apex: dataTable> componente, lo stile di default per <

apex: pageBlockTable> appartiene a stili standard di Salesforce.


Si noti che se si specifica un campo sObject come attributo valore per una colonna,
l'etichetta associata per il campo viene utilizzato come intestazione di colonna per
impostazione predefinita. Per ignorare questo comportamento, utilizzare l'attributo
headerValue sulla colonna o intestazione sfaccettatura della colonna <apex:column>.
Atri modi per poter rappresentare una lista di oggetti contenuti in una tabella che ne
specifica alcuni dettagli sono il componente <apex:repeat> o anche <apex:dataTable>.
Un pulsante che viene reso come un elemento di input HTML con l'attributo type
impostato a submit, reset, or image, a seconda dei valori specificati del tag <apex:

commandButton>. Il pulsante esegue un'azione definita da un controller, e poi o aggiorna


la pagina corrente, o passa a una pagina diversa in base alla variabile PageReference
restituito dall'azione.
Un componente < apex: commandButton> deve sempre essere un figlio di un < apex:

form> questo determina una sezione di una pagina Visualforce che consente agli utenti
di inserire input. Il corpo del modulo determina i dati che vengono visualizzati e il
modo in cui è elaborato. Si tratta di una buona pratica di utilizzare un solo < apex:

form> tag in un componente pagina o personalizzata.


Come < apex: commandButton> anche <apex:commandLink> risulta essere un
componente di input e come tale dovrà essere figlio di un componente < apex: form> è
un collegamento che esegue un'azione definita da un controller, e poi o aggiorna la
pagina corrente, o passa a una pagina diversa in base alla variabile PageReference
restituito dall'azione.
Per finire < apex: outputField> risulta essere un display di sola lettura di un'etichetta o
di un valore per un campo su un oggetto Salesforce. Un < apex: outputField>

componente rispetta gli attributi del campo associato, tra cui come deve essere
visualizzato per l'utente. Ad esempio, se il specificato < apex: outputField>

componente è un campo di valuta, viene visualizzato il simbolo di valuta appropriato.


Analogamente, se il <apex: outputField> componente è un campo di ricerca o un URL,
il valore del campo viene visualizzato come collegamento.

61
3.2 Apex
3.2.1 Prefazione
Apex è un linguaggio di programmazione fortemente tipizzato, orientato agli oggetti,
che consente agli sviluppatori di eseguire istruzioni di flusso e di controllo delle
transazioni sul server della piattaforma Force.com in combinazione con le chiamate alle
API Force.com. Utilizzando la sintassi che assomiglia a Java e si comporta come stored
procedure del database, Apex consente agli sviluppatori di aggiungere logica di
business per la maggior parte degli eventi di sistema, inclusi i clic dei pulsanti,
aggiornamenti dei record correlati, e le pagine Visualforce. Codice Apex può essere
avviata da richieste di servizi Web e di trigger su oggetti.
Come linguaggio, Apex è:
Integrato
 Apex offre supporto integrato per idiomi piattaforma Force.com comuni, tra cui:
chiamate Data Manipulation Language (DML), ad esempio INSERT, UPDATE
e DELETE , che includono built-in gestione DmlException
 Inline Salesforce Object Query Language (SOQL) e Salesforce Object Search
Language ( SOSL ) query che restituiscono elenchi di record Soggetto
 Looping che consentono l'elaborazione di massa di più record alla volta
 Blocco sintassi che impedisce conflitti di aggiornamento dei record
 Chiamate API Force.com personalizzata pubbliche che possono essere costruiti
da metodi Apex memorizzati
 Avvisi ed errori emesso quando un utente tenta di modificare o eliminare un
oggetto personalizzato o un campo a cui fa riferimento Apex
Facile da usare
Apex si basa su linguaggi Java familiari, come la sintassi variabile e di espressione, il
blocco e la sintassi condizionale, sintassi ciclo, oggetto e notazione degli array, e così
via. Dove Apex introduce nuovi elementi, si utilizza la sintassi e la semantica che sono
facili da capire e incoraggiare l'uso efficiente della piattaforma Force.com. Di
conseguenza, Apex produce codice che è sia sintetica e facile da scrivere.

62
Focalizzato verso i dati
Apex è progettato per infilare insieme di query multiple e istruzioni DML in una singola
unità di lavoro sul server della piattaforma Force.com, tanto quanto gli sviluppatori
utilizzano stored procedure del database per infilare insieme più istruzioni di
transazione su un server di database. Si noti che, come le altre stored procedure del
database, Apex non tenta di fornire un sostegno generale per il rendering elementi
nell'interfaccia utente.
Rigoroso
Apex è un linguaggio fortemente tipizzato che utilizza riferimenti diretti a oggetti dello
schema, come nomi di oggetto e di campo. Non riesce rapidamente in fase di
compilazione se tutti i riferimenti non sono validi, e memorizza tutti i campi
personalizzati, le dipendenze oggetto, e di classe in metadati per assicurarsi che non
vengono eliminati, mentre richiesto dal codice Apex attiva.
Hosted
Apex è interpretato, eseguito e controllato interamente dalla piattaforma Force.com.
Multi-tenant consapevole
Come il resto della piattaforma Force.com, Apex viene eseguito in un ambiente multi-
tenant. Di conseguenza, il motore di runtime Apex è progettato per proteggere da vicino
contro il codice in fuga, impedendogli di monopolizzare le risorse condivise. Qualsiasi
codice che viola i limiti non riesce con i messaggi di errore di facile comprensione.
Automaticamente aggiornabile
Apex mai bisogno di essere riscritta quando altre parti della piattaforma Force.com
vengono aggiornati. Poiché il codice compilato viene memorizzato come metadati nella
piattaforma, si ottiene sempre aggiornato automaticamente con il resto del sistema.
Facile da testare
Apex fornisce il supporto built-in per la creazione di test di unità e di esecuzione, tra cui
i risultati dei test che indicano la quantità di codice è coperto, e quali parti del codice
potrebbe essere più efficiente. Salesforce.com garantisce che il codice Apex funziona
sempre come ci si aspetta, eseguendo tutti i test unitari memorizzati nei metadati prima
di qualsiasi aggiornamento della piattaforma.
A versione

63
È possibile salvare il codice Apex contro diverse versioni delle API Force.com. Ciò
consente di mantenere un comportamento.

3.2.2 Come funziona Apex?


Tutti Apex gira interamente on-demand sulla piattaforma Force.com, come mostrato
nella figura seguente:

Figura 12: Come funziona Apex

Apex è compilato, eseguito, e memorizzato interamente sulla piattaforma Force.com


Quando uno sviluppatore scrive e salva il codice Apex alla piattaforma, il server
applicazioni prima piattaforma compila il codice in un insieme astratto di istruzioni che
possono essere comprese dall'interprete runtime Apex, e quindi salva queste istruzioni
come metadati.
Quando un utente finale avvia l'esecuzione di Apex, magari facendo clic su un pulsante
o l'accesso a una pagina Visualforce, il server delle applicazioni della piattaforma
recupera le istruzioni compilate dai metadati e li invia tramite l'interprete runtime prima
di restituire il risultato. L'utente finale osserva alcuna differenza nel tempo di
esecuzione di richieste di piattaforma standard.

3.2.3 Dati Primitivi


Apex utilizza gli stessi tipi di dati primitivi come l'API SOAP. Tutti i tipi di dati
primitivi vengono passati per valore.
Tutte le variabili Apex, se sono variabili membro di classe o variabili di metodo,
vengono inizializzate a null. Assicurarsi di inizializzare le variabili a valori appropriati
prima di utilizzarli. Ad esempio, inizializzare una variabile booleana su false.

64
Apex tipi di dati primitivi includono: Boolean, Date, Datetime, Decimal, Double, ID,
Integer, Long, Object, String.
Le collezioni di oggetti sono strutture dati dinamiche, il loro utilizzo passa attraverso il
concetto di Tipo Generico: il tipo degli oggetti raccolti nella collezione viene istanziato
al momento in cui si definisce la variabile/si crea l’oggetto collezione.
Esistono vari tipi di collezioni:
List<Tipo> Collezione ordinata
Set<Tipo> Collezione non ordinata
Map<TipoC,TIpoV> Collezioni di coppie chiave-valore.

3.2.4 Classi
Come in Java, è possibile creare classi di Apex. Una classe è un modello o progetto da
cui vengono creati oggetti. Un oggetto è un'istanza di una classe. Ad esempio, la classe
PurchaseOrder descrive un intero ordine di acquisto, e tutto ciò che si può fare con un
ordine di acquisto. Un'istanza della classe PurchaseOrder è un ordine di acquisto
specifico che si invia o riceve.
Tutti gli oggetti contengono stato e il comportamento, cioè, le cose che un oggetto
conosce su se stesso, e le cose che un oggetto può fare. Lo stato di un oggetto
PurchaseOrder, ciò che sa, include l'utente che ha inviato, la data e l'ora di creazione, e
se è stata segnalata come importante. Il comportamento di un PurchaseOrder oggetto,
che cosa può fare, include il controllo di inventario, la spedizione di un prodotto, o la
notifica di un cliente.
Una classe può contenere variabili e metodi. Le variabili vengono utilizzati per
specificare lo stato di un oggetto, come ad esempio il nome dell'oggetto o tipo. Dal
momento che queste variabili sono associate a una classe e sono membri di essa, sono
comunemente indicati come variabili membro. I metodi sono utilizzati per controllare il
comportamento, come ad esempio getOtherQuotes o copyLineItems.
Una classe può contenere altre classi, tipi di eccezione, e il codice di inizializzazione.
Un'interfaccia è come una classe in cui nessuno dei metodi sono stati implementati, le
firme di metodo sono lì, ma il corpo di ogni metodo è vuoto. Per utilizzare
un'interfaccia, un'altra classe deve implementare questo comportamento fornendo un
corpo per tutti i metodi contenuti nell'interfaccia.

65
Utilizzare la seguente sintassi per la definizione delle classi:
private | public | global [virtual | abstract | with sharing | without sharing | (none)]
class ClassName [implements InterfaceNameList | (none)] [extends ClassName |
(none)]
{
// The body of the class
}

Il modificatore di accesso private dichiara che questa classe è conosciuta solo a livello
locale, che è, solo da questa sezione di codice. Questo è l'accesso di default per le classi
interne.
Il modificatore di accesso public dichiara che questa classe è visibile nell'applicazione.
Il modificatore di accesso global dichiara che questa classe è conosciuto da tutto il
codice Apex ovunque. Tutte le classi che contengono i metodi definiti con la parola
chiave WebService devono essere dichiarate come globale. Se un metodo o una classe
interna è dichiarata come globale, la classe esterna, di livello superiore deve anche
essere definito come globale.
Le parole chiave with sharing | without sharing specificano la modalità di condivisione
per questa classe.
La definizione modificatore virtual dichiara che questa classe consente l'estensione e le
sostituzioni. Non è possibile sostituire un metodo con la parola chiave override meno
che la classe è stata definita come virtuale.
La definizione modificatore abstract dichiara che questa classe contiene metodi astratti,
vale a dire metodi che hanno solo la loro firma dichiarati e nessun corpo definiti.
Una classe può implementare più interfacce, ma solo estendere una classe esistente.
Questa restrizione significa che Apex non supporta l'ereditarietà multipla. I nomi di
interfaccia nell'elenco sono separati da virgole.

3.2.5 Interfacce
Un'interfaccia è come una classe in cui nessuno dei metodi sono stati implementati, le
firme di metodo sono lì, ma il corpo di ogni metodo è vuoto. Per utilizzare
un'interfaccia, un'altra classe deve implementare questo comportamento fornendo un
corpo per tutti i metodi contenuti nell'interfaccia.

66
Interfacce in grado di fornire un livello di astrazione al codice. Si separano
l'implementazione specifica di un metodo dalla dichiarazione di tale metodo. In questo
modo si può avere diverse implementazioni di un metodo basato sulla vostra
applicazione specifica.
Definizione di un'interfaccia è simile a definire una nuova classe. Ad esempio, una
società potrebbe avere due tipi di ordini di acquisto, quelli che provengono da clienti e
altri che vengono da loro dipendenti. Entrambi sono un tipo di ordine di acquisto.
Supponiamo che avevi bisogno di un metodo per fornire uno sconto. L'importo dello
sconto può dipendere dal tipo di ordine di acquisto.
È possibile modellare il concetto generale di un ordine di acquisto come interfaccia e
avere implementazioni specifiche per clienti e dipendenti. Nell'esempio seguente
l'attenzione è solo l'aspetto sconto di un ordine di acquisto.

3.2.6 Trigger
Un trigger reagisce all’evento di aggiornamento su uno o più oggetti nel database, la
sintassi in Apex si presenta così:
Trigger {Nome Trigger} on {Oggetto} ({eventi})
{
Codice
}

Dove Oggetto è un oggetto (standard o custom) del DB ed eventi è la lista di eventi di


aggiornamento cui reagire. Gli eventi si presentano solitamente in questo modo:
before/after specificano se il trigger deve scattare prima o dopo che l’operazione di
aggiornamento viene effettuata, insert/update/delete/undelete sono gli eventi di
aggiornamento.
Quando il trigger scatta? Questo succede perché alcuni oggetti hanno subito delle
modifiche è importante sapere quali sono gli oggetti colpiti dagli eventi, ogni trigger ha
associato un insieme dei nuovi oggetti e un insieme dei vecchi oggetti.
Trigger.new è insieme dei nuovi oggetti creati, Trigger.old è insieme degli oggetti prima
della modifica o cancellati.
I trigger possono effettuare operazioni di DML, cioè di aggiornamento dei dati.
Quindi, un trigger può operare sugli sObject creandoli, ottenendoli con una query,
modificandoli. Poi, le modifiche agli sObject devono essere materializzate sul DB.

67
Apex fornisce alcune istruzioni che materializzano le operazioni fatte sulla copia in
memoria centrale degli sObject.
Es. se a fa riferimento a un sObject
insert a; inserisce il nuovo ogg. Nel DB
Update a; aggiorna l’ogg. Nel DB
Delete a; cancella
undelete a; annulla la cancellazione
Upsert a; inserisce o aggiorna

3.2.7 SOQL
All’interno del codice Apex è sempre possibile interrogare il DB. Il linguaggio di
interrogazione si chiama SOQL SalesForce Object Query Language: un’espressione
racchiusa tra parentesi quadre e che inizia con la parola SELECT è una query SOQL.
Dichiarazioni SOQL restituiscono un elenco di sObjects, un unico Soggetto, o un
Integer per le query di metodo di conteggio.
È simile a SQL, ma non ci sono i Join, per poter effettuare operazioni di join su diverse
tabelle è necessario seguire I collegamenti dati dale relazioni con la notazione puntata.
Quando il risultato restituito è rappresentato da una lista di oggetti è possibile scorrere
questo elenco tramite strutture apposite:
for (variable : [soql_query]) {
code_block
}

Così facendo, il ciclo attinge un oggetto per volta dal result set della query, il result set è
su disco e non viene caricato tutto in memoria centrale.
Quando l’occupazione dello heap si avvicina al limite massimo, il garbage collector
riesce a ripulire, perché gli oggetti vengono utilizzati solo in una iterazione del for.

3.2.8 Governor Limit


Perché Apex viene eseguito in un ambiente multi-tenant, il motore di runtime Apex
applica rigorosamente una serie di limiti per garantire che fuga Apex non
monopolizzare le risorse condivise. Se qualche codice Apex mai supera un limite, il
governatore associato emette un'eccezione di runtime che non può essere gestito.

68
I limiti Apex, o governatori, fanno rispettare le statistiche descritte nelle seguenti tabelle
e sezioni:
 Per-Transaction Apex Limits: Questi limiti valgono per ogni transazione Apex.
Per Batch Apex, questi limiti vengono resettati per ogni esecuzione di un batch
di record nel metodo execute.
 Force.com Platform Apex Limits: non applicati alla singola transazione ma
all’intera piattaforma.
 Static Apex Limits
 Size-Specific Apex Limits
 Miscellaneous Apex Limits

69
70
Capitolo 4
Il progetto pilota
4.1 Specifiche
Creazione di una applicazione supportata da Salesforce1 che permetta di gestire i
prodotti contenuti nel database Salesforce e quindi creare un preventivo di vendita.
In particolare si dovranno creare due pagine la prima deve visualizzare i prodotti
contenuti nel carrello dell’utente che sta utilizzando l’applicazione; oltre al nome del
prodotto sarà possibile visualizzare una piccola descrizione, se salvata nei dettagli
dell’istanza, il costo unitario e la quantità di prodotto richiesta, inoltre a pie pagina sarà
possibile osservare un preventivo della spesa attuale e il numero di elementi presenti nel
carrello.
La seconda pagina invece sarà la lista di tutti i prodotti presenti nel database, oltre a tutti
i dettagli dell’oggetto ogni istanza avrà vicino a se un bottone che consentirà di
aggiungere tale prodotto al carrello dell’utente che utilizza l’applicazione; in fondo alla
lista ci sarà un contatore che mostrerà il numero di prodotti presenti nel carrello, in
questo modo è possibile osservare immediatamente il corretto funzionamento di tutti i
bottoni presenti nella pagina.
Abbiamo voluto sviluppare l’applicazione in due modi differenti:
 Approccio più classico con l’utilizzo di pagine Visualforce e Controller Apex,
tipico della stesura di applicazioni per Salesforce
 Approccio innovativo con l’utilizzo di componenti Lightning, un metodo nuovo
disponibile da poco, infatti è stato introdotto solo nell’ultima realise risalente a
Ottobre 2014.

4.2 Operazioni preliminari


Poiché Salesforce1 si basa sulla piattaforma e sui dati contenuti in Salesforce, per prima
cosa che abbiamo creato alcuni oggetti custom per memorizzare e gestire i prodotti nel
database centrale.

71
Si è dunque creato l’oggetto Prodotto, ProdottoCarrello, Carrello inoltre utilizzeremo
anche l’oggetto Utente già presente di default nel pacchetto Salesforce.
L’oggetto Prodotto contiene i campi standard: ID, Creato Da, Nome Prodotto, Titolare,
Ultima Modifica Di; oltre a questi ci saranno anche i campi personalizzati: Descrizione
e Prezzo.
Alcuni campi standard saranno inizializzati in modo automatico dalla piattaforma
mentre i campi personalizzati di questo oggetto non presentano alcun vincolo se non il
tipo di dato da inserire: testo per quanto riguarda la descrizione e valuta/numerico con
due cifre dopo la virgola per il prezzo.
Questo oggetto ha lo scopo principale di fornire una base per memorizzare tutti i
prodotti che è possibile acquistare dal venditore che avrà istallata la app sul suo
dispositivo mobile.

Figura 13 Dettagli oggetto personalizzato

72
L’oggetto Carrello legato all’Utente, ogni utente che utilizzerà la nostra applicazione
avrà assegnato in automatico un carrello, questo servirà ad identificare quali prodotti
ogni utente ha intenzione di acquistare.
Infine l’oggetto ProdottoCarrello contiene i campi standar: ID, Creato Da, Nome
ProdottoCarrello, Titolare, Ultima Modifica Di; oltre a questi ci saranno anche i campi
personalizzati: Prezzo, Prodotto, Quantità e Utente.
Anche per questo oggetto i campi standard sono inizializzati in modo automatico dalla
piattaforma Salesforce mentre alcuni dei campi personalizzati presentano delle
limitazioni poiché legati ad altri oggetti, sto parlando dei campi Prodotto che verrà
scelto tra la lista dei prodotti vista in precedenza e Utente il quale verrà assegnato in
automatico ed avrà il valore del Carrello associato all’Utente che sta creando l’istanza.
Questo oggetto memorizza tutti i prodotti che si vuole acquistare specificando l’oggetto

Figura 14 Relazione tra gli oggetti utilizzati

vero e proprio e il compratore.

73
4.3 Metodo Classico
Una volta creati gli oggetti siamo passati a costruire le pagine di iterazione con l’utente:
 Una lista degli oggetti del carrello dell’utente con la visualizzazione del totale
della spesa selezionata, per ogni prodotto è specificato il nome, la quantità e il
prezzo unitario.
 Una lista di tutti i prodotti del catalogo tra cui scegliere per aggiungere istanze
nel carrello
Per ogni funzione è stato necessario creare una pagina Visualforce e un controller Apex
legati tra loro. La pagina Visualforce fornisce la base grafica sulla quale il controller
gestisce tutte le operazioni e dialoga con il database Salesforce.
Di seguito sono disponibili i sorgenti delle pagine create con spiegazione dei vari
componenti e le soluzioni risultanti:

4.3.1 Carrello:
<apex:page controller="ControllerCarrello">
<apex:outputLabel value="{!exec_message}" id="msg"/>
<apex:pageBlock id="blocco" >
<apex:form >
<apex:commandButton value="SvuotaCarrello"
action="{!SvuotaCarrello}">
</apex:commandButton>
</apex:form>
<apex:pageBlockTable value="{!ListaProdottiCarrello}" var="f">
<apex:column value="{!f.NomeProdotto__c}"/>
<apex:column value="{!f.Prezzo__c}"/>
<apex:column value="{!f.Quantit__c}"/>
<apex:column >
<apex:form >
<apex:commandButton value="Modifica"
action="{!URLFOR($Action.ProdottoCarrello__c.View,
f.ID)}">
</apex:commandButton>
</apex:form>
</apex:column>
<apex:column >
<apex:form >
<apex:commandButton action="{!Elimina }"
value="Elimina articolo" rerender="blocco">

74
<apex:param name="IDprodotto" value="{!f.ID}"
assignTo="{!idprod}" />
</apex:commandButton>
</apex:form>
</apex:column>
</apex:pageBlockTable>
Totale Carrello: {! totale} €
</apex:pageBlock>
</apex:page>

Si può subito notare dalla prima riga l’utilizzo di un controller custom dichiarato con il
comando controller="ControllerCarrello".
Successivamente vi è la chiamata a un metodo nel controller che restituisce un
messaggio di errore nel caso in cui non si trovi il carrello corrispondente al cliente che
sta usufruendo del servizio.
La pagina inizia a popolarsi di vari componenti chiave per far interagire il cliente con
l’applicazione. Come prima cosa si può osservare un pulsante con etichetta “Svuota
Carrello” impostato in modo tale da effettuare una chiamata al controller una volta
permuto.
Al di sotto del pulsante si va a collocare una tabella con cinque colonne: la tabella fa
riferimento alla lista di prodotti contenuti nel carrello dell’utente, questa lista è ottenuto
tramite la chiamata al metodo getListaProdottiCarrello del controller associato.
Le colonne della lista conterranno in ordine: il nome del prodotto, il prezzo unitario del
prodotto, la quantità di prodotti dello stesso tipo presenti nel carrello, per finire gli
ultimi due comparti saranno occupati da due pulsanti che in ordine permetteranno di
visualizzare i dettagli del prodotto selezionato tramite una chiamata standard Salesforce
action = “{! URLFOR ($Action.ProdottoCarrello__c.View, f.ID)}” ed eliminare una
quantità di prodotto dal carrello con chiamando una funzione personalizzata action =
“{! Elimina}".

Per concludere in coda alla tabella sarà possibile visualizzare il valore totale della merce
presente nel carrello, questo è il risultato di una funzione chiamata ogni qual volta si
genera la pagina. Il totale della spesa risulterà sempre aggiornato grazie all’attributo
rerender="blocco" che ricarica la pagina ogni qual volta si faccia una modifica al
carrello.

75
Di seguito è riportato il controller della pagina appena vista e il controller Padre che
condivide alcune funzioni con tutte le classi custom per questo progetto:

public virtual class BasicController {


protected Carrello__c carrello=null;
public String exec_message {get; set;}
public Boolean EditingMode {get; set;}
protected void recuperaCarrello(){
exec_message='';
try{ carrello= [SELECT ID, Prodotti__c, Totale__c
FROM Carrello__c
WHERE ID = :UserInfo.getUserId()]];
}
catch(Exception e){
exec_message='No valid User';
}
}

public String UrlToJump {get; set;}


public PageREference jump(){
PageReference pgref = null;
if(UrlToJump!=null)
pgref = new PageReference(UrlToJump);
return pgref;
}
}

public class ControllerCarrello extends BasicController {


public String idprod { get; set; }
public ControllerCarrello(){
recuperaCarrello();
}

public List<ProdottoCarrello__c> getListaProdottiCarrello(){


return [SELECT ID,NomeProdotto__c, Prezzo__c, Quantit__c
FROM ProdottoCarrello__c
WHERE Carrello__c = :UserInfo.getUserId()];
}

public Decimal getTotale(){


Decimal totale=0;

76
List<ProdottoCarrello__c> Prodotti = getListaProdottiCarrello();
for (ProdottoCarrello__c p : Prodotti){
totale += (p.Prezzo__c*p.Quantit__c);
}
return totale;
}

public PageReference SvuotaCarrello(){


List<ProdottoCarrello__c> Prodotti= getListaProdottiCarrello();
for (ProdottoCarrello__c p : Prodotti){
delete p;}
return null;
}

public PageReference Elimina (){


ProdottoCarrello__c Prodotto=
[SELECT ID, NomeProdotto__c, Prezzo__c, Quantit__c
FROM ProdottoCarrello__c
WHERE ID=: idprod And Carrello__c=: UserInfo.getUserId()];
if(Prodotto.Quantit__c<=1)
delete Prodotto;
else {
Prodotto.Quantit__c=Prodotto.Quantit__c-1;
update Prodotto;}
return null;
}
}

Nel BasicController sono presenti due funzioni base: la prima permette di ottenere il
carrello corrispondente all’utente che sta utilizzando l’applicazione e nel caso non sia
presente alcun carrello per tale utente rilascia un messaggio di errore. La seconda
funzione permette di cambiare pagina di visualizzata, una volta passato il riferimento
alla pagina di destinazione è possibile cambiare interfaccia.
Nel classe Apex ControllerCarrello specifica per il controllo della pagina dedicata al
carrello si può notare innanzitutto il costruttore che richiama la funzione basic per
controllare la presenza o meno del carrello riferito all’utente. Successivamente ci sono
tutti i metodi richiamati dai pulsanti visti dalla pagina Visualforce e quelli utili per
ottenere informazioni sullo stato del carrello.
Ad esempio getListaProdottiCarrello()è il metodo richiamato quando si entra nel
blocco pageBlockTable, serve a selezionare tutti i prodotti contenuti nel carrello

77
dell’utente; per fare ciò eseguo una query sui ProdottiCarrelli specificando che l’utente
sia lo stesso che sta eseguendo le operazioni.
getTotale() sfrutta il metodo appena definito per ricavare la lista di prodotti
appartenenti all’utente, una volta ottenuta, la scorre e moltiplica la quantità per il valore
unitario del prodotto e somma il risultato al contatore che alla fine del ciclo conterrà il
valore totale del carrello.
SvuotaCarrello() utilizzando il metodo getListaProdottiCarrello()ottiene tutti i
prodotti dell’utente e successivamente tramite un ciclo for li cancella tutti dal database
Salesforce.
Infine il metodo Elimina() che viene chiamato dal bottone appartenente alla tabella,
quando questo viene premuto oltre ad avviare l’azione corrispondente passa al
controller il valore del prodotto a cui fa riferimento la riga in cui si trova, così facendo è
possibile al seleziona il prodotto del carrello corrispondente tramite una query che
selezionerà il prodotto con lo stesso ID e l’utente corrispondente alla persona che sta
svolgendo le operazioni.
Una volta selezionato il prodotto se questo ha una quantità maggiore di uno si limiterà a
diminuire il valore di una unità, se la quantità è invece uno eliminerà il prodotto dalla
lista del carrello dell’utente.
Ecco come risulta la versione web:

78
E come si vedrà su dispositivo mobile:

Oltre alla visualizzazione e gestione del carrello abbiamo sviluppato una pagina che
permetta di aggiungere nuovi prodotti al carrello con un semplice click da una lista di
prodotti disponibili, come prima abbiamo avuto bisogno di una pagina Visualforce e
una classe controller Apex:

4.3.2 Lista Prodotti


<apex:page Controller="ListaProdotti">
<apex:pageBlock id="blocco">
<apex:pageBlockTable value="{!ListaProdotti}" var="a" >
<apex:column value="{!a.Name}"/>
<apex:column value="{!a.Descrizione__c}"/>
<apex:column value="{!a.Prezzo__c}"/>
<apex:column >
<apex:form >

79
<apex:commandButton
action="{!URLFOR($Action.Prodotto__c.View, a.ID) }"
value="Vedi"/>
</apex:form>
</apex:column>
<apex:column >
<apex:form >
<apex:commandButton action="{!AggiungiACarrello }"
value="Aggiungi A Carrello" rerender="blocco">
<apex:param name="IDprodotto"
value="{!a.ID}" assignTo="{!idprod}" />
</apex:commandButton>
</apex:form>
</apex:column>
</apex:pageBlockTable>
Numero di Articoli nel Carrello: {!NumeroArticoli}
</apex:pageBlock>
</apex:page>

La prima riga di comando specifica che il controllore utilizzato per questa pagina
corrisponde alla classe Apex ListaProdotti che vedremo tra poco.
Come prima cosa si può vedere la tabella di tutti i prodotti, ogni riga conterrà
nell’ordine il nome, una descrizione, se è presente, e il prezzo del prodotto, in coda ai
dati principali che caratterizzano un prodotto avranno i due bottoni “Vedi”, per guardare
i dettagli del prodotto a cui la riga fa riferimento e “Aggiungi a Carrello” che permette
di inserire il prodotto desiderato nel carrello dell’utente.
Infine al di sotto della tabella ci sarà sempre attiva e aggiornata una notifica riguardo al
numero di prodotti presenti nel carrello dell’utente che sta utilizzando l’applicazione.
Vediamo ora nello specifico la classe che ci permette di fare tutte le operazioni:

public class ListaProdotti extends BasicController {


public String idprod { get; set; }
public ProdottoCarrello__c pc;

public ListaProdotti(){
recuperaCarrello();
}

public List<Prodotto__c> getListaProdotti(){


return [SELECT Name, Prezzo__c, Descrizione__c
FROM Prodotto__c];

80
}

public Decimal getNumeroArticoli(){


List<ProdottoCarrello__c> prod=
[SELECT id, Carrello__c, Quantit__c,
NomeProdotto__c, Prezzo__c
FROM ProdottoCarrello__c
WHERE Carrello__c=: UserInfo.getUserId()];
Decimal tot=0;
For(ProdottoCarrello__c a: prod){
tot= tot + a.Quantit__c;
}
return tot;
}

public PageReference AggiungiACarrello(){


ProdottoCarrello__c pc;
List<Prodotto__c> p;
system.debug('****** idprod=' + idprod);
p=[SELECT ID, Name, Prezzo__c
FROM Prodotto__c
WHERE ID=:idprod];
try{
pc = [SELECT id, Carrello__c, Quantit__c,
NomeProdotto__c, Prezzo__c
FROM ProdottoCarrello__c
WHERE NomeProdotto__c=:idprod And Carrello__c=:
UserInfo.getUserId()];
pc.Quantit__c += 1;
update pc;
}
catch(Exception e){
system.debug('****** catch ' + UserInfo.getUserId());
}
if(pc==null)
{
pc = new ProdottoCarrello__c();
pc.Carrello__c=UserInfo.getUserId();
pc.Quantit__c=1;
pc.NomeProdotto__c=p.get(0).ID;
pc.Prezzo__c= p.get(0).Prezzo__c;
insert pc;
}
return null;

81
}
}

Come per il controller del carrello anche questa classe Apex estende la classe Basic per
ereditare alcuni metodi di cui si servirà.
Il costruttore come nel caso precedente controlla che esista il carrello che fa riferimento
all’utente corrente, nel caso non dovesse esistere imposta un messaggio d’errore.
Il metodo getListaProdotti() viene chiamato quando si entra nel blocco
pageBlockTable, serve a selezionare tutti i prodotti contenuti nel database Salesforce;
per fare ciò eseguo una query sui Prodotti non mettendo nessun vincolo nel specifica
where.
getNumeroArticoli() serve a contare il numero di prodotti nel carrello dell’utente,
quindi dopo avere inserito in una lista di ProdottoCarrello il risultato della query che
cerca tra i prodotti del carrello quelli che hanno nel valore utente l’ID dell’utente
corrente. Si itera questa lista e si sommano tra loro tutte le quantità degli oggetti
presenti.
Per finire il metodo AggiungiACarrello() permette di aggiungere il prodotto desiderato
al carrello dell’utente una volta che si preme il pulsante corrispondente. Quando si attiva
il metodo si passa anche il valore dell’ID del prodotto corrispondente. Questo valore
viene utilizzato per recuperare l’istanza del prodotto all’interno della classe del
controllore tramite una query nella quale si specifica l’ID del prodotto desiderato, la
ricerca ci servirà per estrarre informazioni del prodotto nel caso in cui il questo non sia
già tra i prodotti del carrello.
Sempre tramite il valore passato dalla pagina Visualforce si fa ora una ricerca tra i
prodotti del carrello cercando un prodotto che abbia il valore Prodotto corrispondente
all’ID passato e il valore utente uguale all’Utente che sta utilizzando l’applicazione.
Poiché questa ricerca potrebbe dare come risultato un valore nullo e quindi incorrere in
un eccezione, questa operazione viene effettuata in un try catch; nel caso in cui si trova
un istanza che risponde alle richieste vuol dire che esiste già un prodotto nel carrello e
quindi si prende l’istanza e si incrementa la quantità di un’unità e si chiede di
aggiornare tale istanza. Se invece la ricerca non porta ad alcun risultato si cade in
un’eccezione catturata appunto dal try catch e quindi si crea una nuova istanza con i
valori del prodotto trovato nella prima query e valore di quantità impostato di default a

82
uno. Una volta creata l’istanza si manda la richiesta di inserire questa nel database
Salesforce.

Ecco come risulta la versione web:

E come si vedrà su dispositivo mobile:

In diversi punti del codice è possibile notare il comando system.debug questo risulta
essere del codice molto utile in fase di sviluppo per comprendere meglio il
funzionamento delle varie azioni e la scoperta di vari malfunzionamenti del programma
dovuti ad una cattiva sintassi o banali errori del programmatore.

83
4.4 Lightning
Tramite la developer console si può inizializzare una app Lightining tramite semplici
click, una volta creata ci troviamo di fronte ad una pagina vuota pronta per essere
popolata con nuovi o vecchi componenti.

4.4.1 Carrello
<aura:application >
<link href='/resource/bootstrap/' rel="stylesheet"/>
<div class="container">
<h1>Carrello</h1>
<pag:form1/>
</div>
</aura:application>

Seguendo la guida si è in grado di scaricare dal sito Salesforce alcuni pacchetti


contenenti degli stili preimpostati utilizzabili nei propri progetti. Una volta caricati gli
aggiornamenti sulla piattaforma sarà possibile richiamare layout più gradevoli
aggiungendo una riga di codice nella parte di visualizzazione del componente, nel
nostro caso <link href='/resource/bootstrap/' rel="stylesheet"/> si riferisce
proprio allo stile presentato nel tutorial.
Oltre all’impostazione dello stile in questo componente ci siamo limitati a intestare la
pagina con il nome appropriato per poi lasciare il resto ad un nuovo componente:
<pag:form1/>.

I componenti sono gli elementi costitutivi di un applicazione. Essi possono essere


collegati anche a una classe controllore Apex per caricare i dati.
Nel componente form1 ci limitiamo a dichiarare l’aspetto che avrà la nostra pagina
ovvero: una lista di prodotti con in coda il totale valore dei prodotti presenti nella
pagina, per far ciò abbiamo bisogno di questo codice:

<aura:component controller="pag.Controller">
<aura:handler name="init" value="{!this}" action="{!c.doInit}" />
<aura:attribute name="prodotticarrello" type="pag.ProdottoCarrello__c[]"/>
<aura:attribute name="total" type="Double" default="0.00" />
<div class="row">
<aura:iteration items="{!v.prodotticarrello}" var="prodottocarrello">

84
<pag:ListaProdottiCarrello prodottocarrello="{!prodottocarrello}"/>
</aura:iteration>
</div>
<div class="row">
<div class="{!v.total >= 100 ? 'alert alert-danger' :
'alert alert-success'}">
<h3>Total Expenses</h3>$<ui:outputNumber value="{!v.total}"
format=".00"/>
</div>
</div>
</aura:component>

Dalla prima riga si può notare che in questo componente si farà utilizzo di un
controllore esterno dal nome Controller, dallo schema visto in precedenza la chiamata
ad una classe esterna non è però così semplice, il comando deve passare dal controller
client e dall’helper per poter uscire dal componente stesso.
Questo passaggio avviene tramite delle chiamate a funzioni contenute nei rispettivi
comparti, nella seconda riga è infatti possibile vedere come si chiami la funzione doInit
del controller client con la seguente sintassi action="{!c.doInit}" possiamo subito
vedere come poi nel controller del componente questa sia una funzione che non fa altro
che chiamarne un’altra contenuta nell’helper:
({
doInit : function(component, event, helper) {
helper.getProdottiCarrello(component);
},
})

Come vedremo poi, questa funzione chiamerà a sua volta il metodo nella classe Apex
Controller che svolgerà il vero e proprio compito di interagire con il database
Salesforce, ricavando le informazioni volute.
Al fine di comprendere meglio il codice è utile comprendere come funzionano le
chiamate tra la parte grafica e il controller interno di un componente; per poter
richiamare una funzione contenuta nel controller a seguito di un evento quale l’ingresso
in una nuova pagina piuttosto che la pressione di un pulsante è sufficiente specificare
all’interno dell’attributo adatto, “action” per quanto riguarda inizializzazione di pagina
o “press” per quanto riguarda i bottoni, il nome della funzione contenuta nell’altra
scheda del componente, per potersi collegare è poi necessario utilizzare la seguente

85
sintassi “{!c.azione}”. Il c. serve proprio a indicare la presenza della funzione
all’interno della parte controller del componente.
Al contrario se il controller ha bisogno di recuperare informazioni dalla parte grafica, ad
esempio il valore di un attributo piuttosto che il testo contenuto in un interfaccia utente
è necessario creare una variabile che conterrà il dato da memorizzare e poi inizializzarla
nel seguente modo: component.get(“v.nomeattribute”) per quanto riguarda gli attributi e
component.find(“nomeui”) per quanto riguarda i valori contenuti nelle caselle di testo
che fanno da interfaccia tra utente e applicazione.
Tornando alla parte del componente dopo aver inizializzato le variabili dichiarati nelle
prime righe si passa ad un blocco iteration che ha come attributo la lista degli oggetti
nel carrello e al suo interno vi è un nuovo componente che de contiene la descrizione di
come e cosa si visualizzerà per ogni oggetto contenuto nella lista.
In coda alla lista si può osservare uno spazio dedicato alla notifica del totale della spesa
presente nel carrello, il valore viene calcolato tramite l’azione ="{!v.total}" che va a
prendere il valore contenuto nella variabile locale total inizializzato all’apertura della
pagina.
Osserviamo ora l’helper del componente:
({
getProdottiCarrello: function(component) {
var action = component.get("c.getProdottiCarrello");
var self = this;
action.setCallback(this, function(a) {
component.set("v.prodotticarrello", a.getReturnValue());
self.updateTotal(component);
});
$A.enqueueAction(action);
},
updateTotal : function(component) {
var prodotti = component.get("v.prodotticarrello");
var total = 0;
for(var i=0; i<prodotti.length; i++){
var e = prodotti[i];
total += e.pag__Prezzo__c*e.pag__Quantit__c;
}
//Update counters
component.set("v.total", total);
},
})

86
In questa parte si può osservare come viene richiamato il Controller esterno per ricavare
la lista di prodotti desiderata, nell’helper come in qualsiasi parte del compoinente non
c’è nessun tipo di query le interrogazioni al database Saleforce vengono effettuate da
classi esterne.
Nella classe Apex Contoller ci sono tutte le azioni che richiedono iterazioni con il
database centrale:
public class Controller {
@AuraEnabled
public static List<Prodotto__c> getProdotti() {
return [SELECT id, name, Descrizione__c, Prezzo__c
FROM Prodotto__c];
}
@AuraEnabled
public static List<ProdottoCarrello__c> getProdottiCarrello() {
return [SELECT id, name, NomeProdotto__c, Quantit__c,
Prezzo__c, Carrello__c
FROM ProdottoCarrello__c];
}
}

I metodi contenuti in questa classe servono a recuperare tutti gli oggetti delle del
database e inserirli in una lista che sarà poi utilizzata dall’applicazione per contare,
visualizzare o modificare ciò che si desidera.

87
Da web si potrà vedere quanto segue:

Mentre da dispositivo mobile ecco il risultato:

88
4.4.2 Lista Prodotti
L’applicazione per inserire dei prodotti nel carrello è più complessa di quella appena
vista poiché non si limita a ricavare delle informazioni dal database ma ne inserisce di
nuove o ne modifica alcune se queste già esistono.
Come per la prima schermata abbiamo creato un applicazione che contenga tutti i
componenti, grazie a questa è possibile chiedere delle anteprime web e testare i vari
componenti e metodi che si aggiunge durante lo sviluppo del progetto, oltre al
riferimento del macro componente c’è l’indicazione dello stile che l’applicazione dovrà
assumere, nel nostro caso quella predefinita nel pacchetto scaricato da salesforce, e il
titolo che si troverà in alto alla pagina.
Passiamo ad esaminare ora la pagina vera e propria:
<aura:component controller="pag.Controller1" implements="force:appHostable">
<!-- Inizializzaziaone degli attributi -->
<aura:handler name="init" value="{!this}" action="{!c.doInit}" />
<!-- Definizione degli attributi che fanno riferimento a liste di oggetti
personalizzati -->
<aura:attribute name="prodotti" type="pag.Prodotto__c[]"/>

89
<aura:attribute name="prodotticarrello"
type="pag.ProdottoCarrello__c[]"/>
<!-- Definizione delgli attributi utilizzati come contatori -->
<aura:attribute name="total" type="Double" default="0.00" />
<aura:attribute name="pro" type="Double" default="0" />

<form>
<fieldset>
<ui:button label="Aggiorna" press="{!c.doInit}"/>
</fieldset>
</form>

<!-- Composizione della pagina: lista di prodotti disponibili -->


<div class="row">
<aura:iteration items="{!v.prodotti}" var="prodotto">
<pag:DettagliProdotto prodotto="{!prodotto}"/>
</aura:iteration>
</div>
<!-- Informazioni riguardo il carrello dell'utente -->
<div class="row">
<div class="{!v.total >= 100 ? 'alert alert-danger' : 'alert alert-
success'}">
<h3>Valore totale del carrello</h3>$<ui:outputNumber
value="{!v.total}" format=".00"/>
</div>
<div class="alert alert-success">
<h3>Numero di articoli nel carrello</h3><ui:outputNumber
value="{!v.pro}"/>
</div>
</div>
</aura:component>

Dopo la parte di definizione e inizializzazione di variabili utili alla soluzione della


pagina stessa si più osservare un bottone che serve ad aggiornare la pagina quando si
vuole, in particolare è stato pensato per aggiornare l’applicazione dopo l’aggiunta di
prodotti nel carrello in modo da aver sempre sotto occhio il totale della spesa e il
numero di oggetti presenti nel carrello. La soluzione non risulta essere tra le più eleganti
ma è sicuramente la più efficace poiché essendo ancora una versione beta alcuni
comandi non sono ancora ottimizzati e tra le varie funzioni che necessitano di revisione
c’è anche quella di rerender() e Supererender() che avremmo utilizzato per aggiornare la
pagina ad ogni pressione di bottoni che permettono la modifica del carrello.

90
Premendo sul bottone appena sotto il titolo si attiverà la funzione che viene svolta ogni
qualvolta si accede alla pagina aggiornando di conseguenza tutte le liste e i vari
contatori presenti nella pagina.
Al di sotto del bottone c’è il blocco iterator nel quale tramite la lista di prodotti mostra
tutti i prodotti disponibili nel catalogo, all’interno di questo blocco vi è un altro
componente che per ogni oggetto specifica i dettagli da mostrare e il bottone per
aggiungere l’oggetto correlato al carrello dell’utente.
Infine sul fondo della pagina sarà visualizzato il costo totale degli oggetti e il numero di
prodotti presenti nel carrello.
Vediamo ora in dettaglio il componente all’interno dell’iterator:
<aura:component controller="pag.Controller1" implements="force:appHostable">
<aura:attribute name="prodotto" type="pag.Prodotto__c"/>
<div class='listRecord recordLayout blue'>
<a aura:id="prodotto" >
<div class="itemTitle">{!v.prodotto.name}</div>
<div class="recordItem">Descrizione:
<ui:outputText
value="{!v.prodotto.pag__Descrizione__c}"/>
</div>
<div class="recordItem">Prezzo:
<ui:outputNumber
value="{!v.prodotto.pag__Prezzo__c}" format=".00"/>
</div>
<form>
<fieldset>
<ui:button label="Submit" press="{!c.Prova}"/>
</fieldset>
</form>
</a>
</div>
</aura:component>

Tramite il passaggio di parametri espresso al momento della chiamata del componente è


possibile ottenere l’oggetto che si sta analizzando inizializzando un attributo con il
nome specificato all’interno del nuovo componente:
<aura:attribute name="prodotto" type="pag.Prodotto__c"/>

Con questo oggetto è poi semplice estrarre tutte le informazioni utili da visualizzare per
riconoscere di che oggetto si sta parlando.

91
In coda all’elenco di dati testuali troviamo un bottone che richiama la funzione prova
del controller.
({
myAction : function(component, event, helper) {

},
Prova : function(component, event, helper) {
var prodotto = component.get("v.prodotto.ID");
//alert("il bottone funziona "+ prodotto);
helper.Aggiorna(component, prodotto);
this.superRerender();
}
})

La funzione non fa altro che estrarre il valore ID del prodotto corrispondente al bottone
per poi chiamare la funzione Aggiorna dell’helper alla quale viene passato anche il
valore appena estratto.
Aggiorna: function(component, prodotto) {
this.upsertExpense(component, prodotto, function(a) {});
},
upsertExpense : function(component, prodotto, callback) {
//alert("xxx");
var action = component.get("c.AggiungiProdotto");
action.setParams({
"prodotto": prodotto
});
if (callback) {
action.setCallback(this, callback);
}
$A.enqueueAction(action);
}

Nell’helper non si fa altro che girare il compito al controllore esterno, quello che
realmente dialoga con il database Salesforce, e assicurarsi che il l’azione sia eseguita.
@AuraEnabled
public static string AggiungiProdotto(String prodotto) {
ProdottoCarrello__c pc;
List<Prodotto__c> p;
system.debug('****** idprod=' + prodotto);
p=[SELECT ID, Name, Prezzo__c
FROM Prodotto__c
WHERE ID=:prodotto];
try

92
{
pc = [SELECT id, Carrello__c, Quantit__c, NomeProdotto__c,
Prezzo__c
FROM ProdottoCarrello__c
WHERE NomeProdotto__c=:prodotto And Carrello__c=:
UserInfo.getUserId()];
pc.Quantit__c += 1;
update pc;
}
catch(Exception e)
{system.debug('****** catch ' + UserInfo.getUserId());
}
if(pc==null)
{
pc = new ProdottoCarrello__c();
pc.Carrello__c=UserInfo.getUserId();
pc.Quantit__c=1;
pc.NomeProdotto__c=p.get(0).ID;
pc.Prezzo__c= p.get(0).Prezzo__c;
insert pc;
}
return null;
}

Il controllore esterno come si può vedere ricevuto l’ID del prodotto crea un istanza di
questo tramite la query che lo va a ricercare tra i vari prodotti in memoria;
successivamente controlla se l’articolo sia già presente all’interno del carrello, se così
fosse aggiunge una quantità all’articolo e salva, altrimenti crea una nuova istanza del
prodotto carrello con i valori del prodotto che si è cercato e il carrello corrispondente
all’utente che sta effettuando le operazioni.

Il risultato finale è il seguente, da web:

93
Da dispositivo mobile:

94
4.5 Collegamento con Salesforce1
In entrambi i casi per poter portare le applicazioni su dispositivo mobile quale tablet o
cellulare è stato necessario associare i progetti da noi create a delle tab personalizzata
Salesforce, in particolare tab Visualforce per la prima versione e tab Aura per la
seconda. Solo in questo modo è possibile inserire poi le nostre applicazioni all’interno
di Salaesforce1 tramite il gestore mobile da poco presente sulla piattaforma.

95
96
Capitolo 5
Conclusioni
Salesforce è una grande realtà nel mondo CMR, da poco è entrata nella top ten del suo
settore e promette di crescere ancora nei prossimi anni, proprio per questo motivo
abbiamo scelto questa piattaforma per sviluppare applicazioni mobile.
L’introduzione dei componenti Lightning e quindi un nuovo modo di sviluppare
applicazioni sulla piattaforma è stato l’argomento centrale dell’ultimo aggiornamento di
Salesforce tenutosi alla fine di Settembre, trovando molto interessante questa novità
abbiamo quindi voluto realizzare i progetti con le due tecniche differenti per mettere in
luce le differenze e i benefici che la novità porterà con se.
Dal punto di vista dello sviluppatore l’esperienza è stata molto positiva. Il doversi
cimentare con nuovi linguaggi di programmazione, riuscendo a sviluppare un prodotto
funzionante è stato sicuramente fonte di soddisfazione personale. Con costanza e
dedizione siamo riusciti a superare i problemi che man mano si presentavano e quindi
ad apprendere in modo corretto i vari metodi di sviluppo.
Nella sua semplicità i progetti pilota interagiscono a pieno con il database centrale
mostrando le operazioni base sulle tabelle quali inserimento modifica ed eliminazione
attraverso un interfaccia utente molto semplice e intuitiva.
Utilizzando le diverse tecniche per la creazione delle applicazioni ho potuto osservare la
grande robustezza del metodo classico e le grandi potenzialità che Lightning potrà avere
nell’immediato futuro.
Il riutilizzo di componenti tipici e l’integrazione di diverse parti per l’assemblaggio di
applicazioni personalizzate tramite semplici point and click risulteranno operazioni alla
portata di tutti, e ciò porterà con se ad un allargamento in modo significativo del
serbatoio di clienti da cui attingere.
Tuttavia ad oggi c’è ancora qualche difficoltà nello sviluppo con il nuovo metodo in
quanto se da una parte la console dedicata non è ancora disponibile dall’altra gli
elementi creati nel con Lightning non risultano essere ancora compatibili con la
versione Android di Salesforce1 per di più se si vogliono creare elementi nuovi, tramite
la console dello sviluppatore, la documentazione a riguardo risulta essere scarsa e poco

97
adatta per le esigenze di un nuovo sviluppatore. Questi sono tutti dettagli già emersi nei
vari forum, l’azienda ha prontamente risposto dicendo che è solo questione di tempo, il
prodotto è stato lanciato ad Ottobre con qualche difetto e ora si sta provvedendo al
miglioramento in risposta alle richieste espresse dai clienti.
La creazione personalizzata di componenti sulla console sviluppatore ha evidenziato un
consistente utilizzo di JavaScript per la programmazione del controller dal lato client,
ciò comporta molti vantaggi quali una maggior personalizzazione della pagina e una
comunicazione più veloce tra utente e dispositivo, ma ha portato con se anche un
piccolo difetto notato in fase di programmazione, ovvero l’impossibilità di individuare
degli errori in fase di sviluppo.
Nella fase di programmazione ho potuto notare che se incorrevo in un qualsiasi errore,
quali la scorretta sintassi o la ricerca di un valore non presente nel database o ancora
l’assegnazione di un valore a una variabile di un altro tipo, al momento del salvataggio
il compilatore Visualforce segnalava immediatamente la presenza dell’errore
indicandone anche la riga in cui era presente così facendo era molto semplice capire
cosa modificare per fare in modo che l’applicazione potesse funzionare in modo
corretto, per di più era possibile osservare il debug dell’esecuzione per catturare
eventuali loop.
Cosa diversa accade per la programmazione di JavaScript che accetta qualsiasi cosa,
una scorretta sintassi e anche funzioni non esistenti ciò è risultato molto scomodo per
me come per qualsiasi altro programmatore che non riesce a vedere il risultato finale
anche solo per l’omissione di un punto e virgola o lo scorretto nome di una funzione
chiamata dal controller client.
Facendo attenzione ai dettagli la soluzione di Lightning risulta essere più flessibile e
personalizzabile rispetto alla versione classica che puntando molto all’efficacia del
prodotto utilizza interfacce utenti standard con poca possibilità di variazione.
Con l’aggiornamento promesso potrà sicuramente rivoluzionare in modo positivo il
modo di costruire le applicazioni mobili e lanciare verso il successo la tecnologia cloud
alla base del prodotto.

98
Ringraziamenti

Desidero ringraziare il professore Psaila, relatore di questa tesi, per la grande


disponibilità e cortesia dimostratemi, e per tutto l’aiuto fornito durante la stesura.
Un sentito ringraziamento ai miei genitori, che, con il loro incrollabile sostegno morale
ed economico, mi hanno permesso di raggiungere questo traguardo.
Infine desidero ringraziare di cuore tutti i parenti e amici che mi sono stati vicini in
questi ultimi mesi, e dalle cui sorprendenti manifestazioni di affetto ho tratto la forza
per superare i momenti più difficili, e ho ritrovato gli stimoli per dedicarmi a questa tesi
di laurea.

99
100
Bibliografia
 Inserto speciale del “Il Sole 24 Ore”: Cloud Computing. (11 Aprile2014).
Articolo In Italia pronte le aziende a cura di Alessandro Longo.
 Pell Mell, Timothy Grance (2009), The Nist Definition of Cloud
Computing,2009. Reperibile al sito http://csrc.nist.gov.
 CA Technologies (2011), Insights: Data Protection and the Cloud 2014.
Reperibile al sito http://www.ca.com/it/default.aspx.
 Osservatorio Cloud e ICT as a Service (2012), Il Cloud ´e la nuova tecnologia di
frontiera trattata al Convegno del Politecnico di Milano,Cloud Economy: ultima
chiamata. Reperibile al sito http://www.infracom.it.
 Automic vision and Manifesto (2003), IBM. Reperibile al sito
http://www.research.ibm.com/autonomic/manifesto/
 Sondaggio realizzato da ZeroUno in collaborazione con ClubIT dal titolo Cosa
ne pensi del SaaS. Reperibile al sito http://www.zerounoweb.it
 Ricerca di Gartner Inc. societ´a multinazionale per la consulenza strategica
(2012). Reperibile al sito http://www.enterthecloud.it/mercato/cloud-paas-
gartner/
 Sondaggio di Enter the Cloud (Marzo 2012) reperibile al sito
http://www.enterthecloud.it/mercato/cloud-survey-2012-lo-stato-delcloud-
computing-in-italia/
 Ricerca che ha coinvolto 130 Cio di grandi imprese italiane e 660 Responsabili
IT relativi alle medie i piccole imprese italiane pubblicata dall’Osservatorio
Cloud & Ict As a Service dalla School of Management del Politecnico di Milano
reperibile al sito http://www.impresacity.it/speciali/2012/hp-cloud/articolo1.php
 Ricerca di NextValue su un campione di 100 Chief Information Officer (CIO) di
medio-grandi aziende italiane, mediante interviste dirette. Per quanto riguarda
invece la raccolta dei dati sul territorio europeo, ´e stata conivolta CIOnet, un
social network internazionale al quale partecipano i responsabili dei sistemi
informativi. Il network ´e attivo nei paesi di Belgio, Francia, Spagna, Olanda e
Gran Bretagna. Reperibile al sito http://www.businessmagazine.it

101
 Documento rilasciato dal Garante per la protezione dei dati personali, Cloud
computing: indicazioni per l’utilizzo consapevole dei servizi. Reperibile al sito:
http://www.garanteprivacy.it/documents/10160/10704/1819933
 Guida per sviluppatori di Visualforce reperibile al sito:
http://www.salesforce.com/us/developer/docs/pages
 Guida per sviluppatori di Apex reperibile al sito:
https://www.salesforce.com/us/developer/docs/apexcode/index_Left.htm
 Salesforce1 Mobile App Developer Guide
 Lightning Components Developer Guide
 Introducing Salesforce1 Lightning, Oct 13 2014:
http://blogs.salesforce.com/company/2014/10/introducing-salesforce1-
lightning.html
 Piattaforma Salesforce per lo sviluppo del progetto e la documentazione della
nuova release: https://emea.salesforce.com

102