Cos’è Apex in Salesforce?
Apex è un linguaggio di programmazione orientato agli oggetti e fortemente tipizzato sviluppato da Salesforce per la creazione di Software as a Service (SaaS) e Customer Relationship Management (CRM). Apex aiuta gli sviluppatori a creare applicazioni SaaS di terze parti e aggiungere logica di business agli eventi di sistema fornendo supporto di database back-end e interfacce client-server.,
Apex aiuta gli sviluppatori ad aggiungere logica di business agli eventi di sistema come i clic dei pulsanti, gli aggiornamenti dei record correlati e le pagine di Visualforce. Apex ha una sintassi simile a Java.
In questo tutorial per principianti Salesforce Apex, imparerai le basi di Apex come –
- Che cos’è Apex?,ge
- Quando Dovrebbe Sviluppatore di Scegliere Apice
- Struttura Di Lavoro Apex
- Apex Sintassi
- Apex Ambiente di Sviluppo
- Tipo di Dati in Apice
- Apex Identificatore di Accesso
- parole chiave in Apice
- Apex String
- Apex Governatore Limiti
- Apex Getter e Setter
- Apex Classe
- Apex Trigger
- Classe Batch in Apice
Caratteristiche di Apex Linguaggio di Programmazione
Ecco le caratteristiche più importanti di Salesforce Apice:
- Apex è un caso senza distinzione di lingua.,
- È possibile eseguire operazioni DML come INSERT, UPDATE, UPSERT, DELETE su record sObject utilizzando apex.
- È possibile interrogare i record sObject utilizzando SOQL(salesforce object query language) e SOSL(salesforce object search language) in apex.
- Consente di creare un unit test ed eseguirli per verificare la copertura del codice e l’efficienza del codice in apex.
- Apex viene eseguito in un ambiente multi-tenant e Salesforce ha definito alcuni limiti governatore che impediscono a un utente di controllare le risorse condivise., Qualsiasi codice che attraversa il limite del governatore salesforce non riesce, viene visualizzato un errore.
- Oggetto Salesforce può essere utilizzato come un tipo di dati in apex. Ad esempio –
Account acc = new Account();
,qui Account è un oggetto salesforce standard.
- Apex aggiorna automaticamente con ogni release di Salesforce.
Quando lo sviluppatore deve scegliere Apex
Il codice Apex deve essere scritto solo se uno scenario aziendale è troppo complesso e non può essere implementato utilizzando la funzionalità pre-costruita fornita da Salesforce.,
Di seguito sono riportati i pochi scenari in cui è necessario scrivere codice apex:
- Per creare servizi web che integrino Salesforce con altre applicazioni.
- Per implementare la convalida personalizzata su sobjects.
- Per eseguire la logica apex personalizzata quando viene eseguita un’operazione DML.
- Per implementare funzionalità che non possono essere implementate utilizzando flussi di lavoro esistenti e funzionalità di process builder.
- Per configurare i servizi di posta elettronica, è necessario includere l’elaborazione dei contenuti, delle intestazioni e degli allegati delle e-mail utilizzando il codice apex.,
Struttura Di Lavoro Apex
Ora, in questo Apice tutorial, impareremo a lavorare struttura di Vertice:
di Seguito sono il flusso di azioni per un apice di codice:
- Azione dello Sviluppatore: Tutti apice del codice scritto da uno sviluppatore è compilato in un insieme di istruzioni che può essere compreso da apex runtime interprete quando lo sviluppatore salva il codice per la piattaforma e queste istruzioni salva metadati per la piattaforma.,
- Azione utente finale: quando l’evento utente esegue un codice apex, il server della piattaforma riceve le istruzioni compilate dai metadati e le esegue attraverso l’interprete apex prima di restituire il risultato.
Apex Sintassi
Dichiarazione di variabile:
Come apex è un linguaggio fortemente tipizzato, è obbligatorio dichiarare una variabile con il tipo di dati in apice.,
Ad esempio
contact con = new contact();
qui la variabile con viene dichiarata con contact come tipo di dati.
SOQL Query:
SOQL sta per salesforce object query language. SOQL viene utilizzato per recuperare i record sObject dal database Salesforce. Ad esempio –
Account acc = ;
La query precedente recupera il record dell’account dal database salesforce.
Istruzione Loop:
Istruzione Loop viene utilizzato per iterare i record in un elenco. Il numero di iterazione è uguale al numero di record nell’elenco., Ad esempio:
Nel frammento di codice sopra, listOfAccounts è una variabile del tipo di dati list.
Dichiarazione di controllo di flusso:
Dichiarazione di controllo di flusso è utile quando si desidera eseguire alcune righe del codice in base ad alcune condizioni.
Ad esempio:
Lo snippet di codice sopra riportato sta interrogando i record dell’account dal database e controllando la dimensione dell’elenco.
Dichiarazione DML:
DML sta per data manipulation language. Le istruzioni DML vengono utilizzate per manipolare i dati nel database Salesforce., Ad esempio –
Account acc = new Account(Name = ‘ Test Account’);Insert acc; //DML statement to create account record.
Apex Development Environment
Ora in questo tutorial di programmazione Apex, impareremo a conoscere Apex Development Environment:
Il codice Apex può essere sviluppato sia in sandbox che in developer edition di Salesforce.
È consigliabile sviluppare il codice nell’ambiente sandbox e quindi distribuirlo nell’ambiente di produzione.
Strumenti di sviluppo del codice Apex: di seguito sono riportati i tre strumenti disponibili per sviluppare il codice apex in tutte le edizioni di Salesforce.,
- Force.com Console per gli Sviluppatori di
- Force.com IDE
- Editor di Codice l’Utente Salesforce InterfaceYou
Tipo di Dati in Apice
di Seguito sono i tipi di dati supportati da apex:
Primitive:
Integer, Double, Long, Data, Data e Ora, Stringa, ID, e Booleani sono considerati come tipi di dati primitivi.Tutti i tipi di dati primitivi vengono passati per valore, non per riferimento.,
Collezioni:
Sono disponibili tre tipi di collezione nell’elenco Apex
- : è una raccolta ordinata di primitive, sObjects, collezioni o oggetti Apex basati su indici.
- Set: Una collezione non ordinata di primitive uniche.
- Mappa: è una raccolta di chiavi uniche e primitive che si associano a singoli valori che possono essere primitivi, sObjects, collezioni o oggetti Apex.
sObject:
Questo è un tipo di dati speciale in Salesforce. È simile a una tabella in SQL e contiene campi simili alle colonne in SQL.,
Enums
Enum è un tipo di dati astratto che memorizza un valore di un insieme finito di identificatori specificati
Classi
Oggetti:
Si riferisce a qualsiasi tipo di dati supportato in Apex.
Interfacce
Apex Access Specifier
Di seguito sono riportati gli specifier di accesso supportati da apex:
Public:
Questo specifier di accesso dà accesso a una classe, metodo, variabile da utilizzare da un apex all’interno di uno spazio dei nomi.,
Private:
Questo specificatore di accesso dà accesso a una classe, metodo, variabile da utilizzare localmente o all’interno della sezione di codice, è definito. Tutta la tecnica, le variabili che non hanno alcun identificatore di accesso definito hanno l’identificatore di accesso predefinito di private.
Protetto:
Questo specificatore di accesso dà accesso a un metodo, variabile da utilizzare da qualsiasi classe interna all’interno della definizione della classe Apex.,
Globale:
Questo specificatore di accesso dà accesso a una classe, metodo, variabile da utilizzare da un apex all’interno di uno spazio dei nomi e al di fuori dello spazio dei nomi. È una buona pratica non utilizzare la parola chiave globale fino a quando non è necessario.
Parole chiave in Apex
Con condivisione:
Se una classe è definita con questa parola chiave, tutte le regole di condivisione si applicano all’utente corrente e se questa parola chiave è assente, il codice viene eseguito in contesto di sistema.,
Ad esempio:
public with sharing class MyApexClass{// sharing rules enforced when code in this class execute}
Senza condivisione:
Se una classe viene definita con questa parola chiave, tutte le regole di condivisione applicate all’utente corrente non vengono applicate.
Ad esempio:
public without sharing class MyApexClass{// sharing rules is not enforced when code in this class execute}
Static:
Una variabile, il metodo è definito con la parola chiave static viene inizializzato una volta e associato alla classe. Variabili statiche, i metodi possono essere chiamati direttamente dal nome della classe senza creare l’istanza di una classe.
Finale:
Una costante, il metodo è definito con la parola chiave finale non può essere sovrascritto., Ad esempio:
public class myCls {static final Integer INT_CONST = 10;}
Se si tenta di sovrascrivere il valore di questa variabile INT_CONST, si otterrà un sistema di eccezioni.FinalException: la variabile finale è già stata inizializzata.
Return:
Questa parola chiave restituisce un valore da un metodo. Ad esempio:
public String getName() {return 'Test' ;}
Null:
Definisce una costante null e può essere assegnata a una variabile. Ad esempio
Boolean b = null;
Virtual:
Se una classe è definita con una parola chiave virtuale, può essere estesa e sovrascritta.,
Abstract:
Se una classe è definita con la parola chiave abstract, deve contenere almeno un metodo con la parola chiave abstract e tale metodo deve avere solo una firma.
Ad esempio:
public abstract class MyAbstrtactClass {abstract Integer myAbstractMethod1();}
Apex String
Una stringa è un insieme di caratteri senza limiti di caratteri. Ad esempio:
String name = 'Test';
Esistono diversi metodi integrati forniti dalla classe String in salesforce., Di seguito sono riportate le poche funzioni frequentemente utilizzate:
abbreviate(maxWidth):
Questo metodo tronca una stringa alla lunghezza specificata e la restituisce se la lunghezza della stringa data è più lunga della lunghezza specificata; altrimenti, restituisce la stringa originale. Se il valore della variabile maxWidth è inferiore a 4, questo metodo restituisce un sistema di eccezioni di runtime.StringException: La larghezza minima dell’abbreviazione è 4
Ad esempio:
String s = 'Hello World';String s2 = s.abbreviate(8);System.debug('s2'+s2); //Hello...
capitalize ():
Questo metodo converte la prima lettera di una stringa in caso di titolo e la restituisce.,
Ad esempio:
String s = 'hello;String s2 = s.capitalize();System.assertEquals('Hello', s2);
contains(substring):
Questo metodo restituisce true se la stringa che chiama il metodo contiene la sottostringa specificata.
String name1 = 'test1';String name2 = 'test2';Boolean flag = name.contains(name2);System.debug('flag::',+flag); //true
equals(stringOrId):
Questo metodo restituisce true se il parametro passato non è null e indica la stessa sequenza binaria di caratteri della stringa che sta chiamando il metodo.
Mentre si confrontano i valori Id, la lunghezza degli ID potrebbe non essere uguale., Ad esempio: se una stringa che rappresenta 15 caratteri id viene confrontato con un oggetto che rappresenta 18 caratteri ID questo metodo restituisce true. Ad esempio:
Nell’esempio precedente il metodo equals sta confrontando 15 caratteri Id oggetto con 18 caratteri Id oggetto e se entrambi questi id rappresentano la stessa sequenza binaria restituirà true.
Utilizzare questo metodo per effettuare confronti case-sensitive.
escapeSingleQuotes(stringToEscape):
Questo metodo aggiunge un carattere di escape (\) prima di ogni singola citazione in una stringa e lo restituisce., Questo metodo impedisce l’iniezione di SOQL durante la creazione di una query SOQL dinamica. Questo metodo garantisce che tutte le virgolette singole siano considerate come stringhe che racchiudono, invece dei comandi del database.
Ad esempio:
String s = 'Hello Tom';system.debug(s); // Outputs 'Hello Tom'String escapedStr = String.escapeSingleQuotes(s);// Outputs \'Hello Tom\'
remove(substring):
Questo metodo rimuove tutte le occorrenze della sottostringa menzionata dalla stringa che chiama il metodo e restituisce la stringa risultante.,
Ad esempio:
String s1 = 'Salesforce and force.com';String s2 = s1.remove('force');System.debug( 's2'+ s2);// 'Sales and .com'
sottostringa(startIndex):
Questo metodo restituisce una sottostringa inizia dal carattere startIndex si estende fino all’ultimo della stringa.
Ad esempio:
String s1 = 'hamburger';String s2 = s1.substring(3);System.debug('s2'+s2); //burger
reverse ():
Questo metodo inverte tutti i caratteri di una stringa e la restituisce. Ad esempio:
String s = 'Hello';String s2 = s.reverse();System.debug('s2::::'+s2);// olleH // Hello
trim (): Questo metodo rimuove tutti gli spazi bianchi iniziali da una stringa e lo restituisce.
valueOf(toConvert):
Questo metodo restituisce la rappresentazione stringa di passato in oggetto.,
Apex Governor Limits
Apex governor limits sono i limiti applicati da apex runtime engine per garantire che qualsiasi codice e processo di runway apex non controlli le risorse condivise e non violi l’elaborazione per altri utenti nell’ambiente multitenant. Questi limiti vengono verificati per ogni transazione apex., Di seguito sono il governatore limiti definiti dalla salesforce su ogni vertice di transazione:
Descrizione | Limite |
query SOQL che può essere fatto in una transazione sincrona | 100 |
query SOQL che può essere fatto in un’operazione Asincrona | 200 |
Record che possono essere recuperati da una query SOQL | 50000 |
Record che possono essere recuperati dal Database.,getQueryLocator | 10000 |
SOSL query che può essere fatto in un apice di transazione | 20 |
Record che possono essere recuperate da un SOSL query | 2000 |
DML che può essere fatto in un apice di transazione | 150 |
Record che possono essere trattati come un risultato di una istruzione DML, di Approvazione.processo o database.emptyRecycleBin | 10000 |
Callout che possono essere eseguiti in una transazione apex., | 100 |
Limite di timeout cumulativo su tutti i callout che vengono eseguiti in una transazione apex | 120 secondi |
Limite sui lavori apex che possono essere aggiunti alla coda con System.,enqueueJob | 50 |
Execution time limit for each Apex transaction | 10 minutes |
Limit on characters that can be used in an apex class and trigger | 1 million |
CPU time limit for synchronous transaction | 10,000 milliseconds |
CPU time limit for asynchronous transaction | 60,000 milliseconds |
Apex Getter and Setter
Apex property is similar to apex variable. Getter and setter are necessary to an apex property., Getter e setter possono essere utilizzati per eseguire il codice prima di accedere o modificare il valore della proprietà. Il codice nell’accesso get viene eseguito quando viene letto un valore di proprietà. Il codice nell’accessor set viene eseguito quando viene modificato un valore di proprietà. Qualsiasi proprietà con accesso get è considerata di sola lettura, qualsiasi proprietà con accesso set è considerata di scrittura solo qualsiasi proprietà con accesso get e set è considerata di lettura-scrittura. Sintassi di una proprietà apex:
public class myApexClass {// Property declarationaccess_modifierreturn_typeproperty_name {get {//code }set{//code}}
Qui, access_modifier è il modificatore di accesso della proprietà. return_type è il tipo di dati della proprietà., property_name è il nome della proprietà.
Di seguito è riportato un esempio di una proprietà apex con accesso get e set.
public class myApex{public String name{get{ return name;}set{ name = 'Test';}}}
Qui, il nome della proprietà è name, ed è proprietà pubblica, e restituisce un tipo di dati stringa.
Non è obbligatorio avere del codice nel blocco get e set. Questi blocchi possono essere lasciati vuoti per definire una proprietà automatica. Ad esempio:
public double MyReadWriteProp{ get; set; }
Get e set accessor possono anche essere definiti con il loro modificatore di accesso., Se un accessor è definito con un modificatore, quindi sovrascrive il modificatore di accesso per la proprietà. Ad esempio:
public String name{private get; set;}// name is private for read and public to write.
Classe Apex
Una classe apex è un modello o un modello da cui vengono creati gli oggetti. Un oggetto è l’istanza di una classe.
Esistono tre modi per creare classi apex in Salesforce:
Developer Console
Force.com IDE
Pagina dettagli classe Apex.
In apex, puoi definire una classe esterna chiamata anche classe di primo livello e puoi anche definire classi all’interno di una classe esterna chiamata classi interne.,
È obbligatorio utilizzare il modificatore di accesso come global o public nella dichiarazione della classe outer.
Non è necessario utilizzare il modificatore di accesso nella dichiarazione delle classi interne.
Una classe apex viene definita utilizzando la parola chiave class seguita dal nome della classe.
Extends parola chiave viene utilizzato per estendere una classe esistente da una classe apex, e implementa parola chiave viene utilizzato per implementare un’interfaccia da una classe apex.
Salesforce Apex non supporta più ereditarietà, una classe apex può estendere solo una classe apex esistente ma può implementare più interfacce.,
Una classe apex può contenere un costruttore definito dall’utente e, se non è disponibile un costruttore definito dall’utente, viene utilizzato un costruttore predefinito. Il codice in un costruttore viene eseguito quando viene creata un’istanza di una classe.
Sintassi della classe Apex esempio:
public class myApexClass{// variable declaration//constructorpublic myApexClass{}//methods declaration}
La nuova parola chiave viene utilizzata per creare un’istanza di una classe apex. Di seguito è riportata la sintassi per la creazione di un’istanza di una classe apex.
myApexClass obj = new myApexClass();
Apex Trigger
I trigger Apex consentono di eseguire apex personalizzato prima e dopo l’esecuzione di un’operazione DML.,
Supporto Apex seguenti due tipi di trigger:
Prima dei trigger: Questi trigger vengono utilizzati per convalidare e aggiornare il valore del campo prima che il record venga salvato nel database.
Dopo i trigger: questi trigger vengono utilizzati per accedere ai campi (ID record, campo LastModifiedDate) impostati dal sistema dopo un record eseguito il commit nel database. Questi campi valore può essere utilizzato per modificare altri record. I record che si attivano dopo i trigger sono di sola lettura.
È una buona pratica scrivere trigger ingombranti. Un trigger ingombrante può elaborare un singolo record e più record alla volta.,
Sintassi di un trigger apex:
trigger TriggerName on ObjectName (trigger_events) {//Code_block }
Qui, TriggerName è il nome del trigger, ObjectName è il nome dell’oggetto su cui il trigger deve essere scritto, trigger_events è l’elenco separato da virgole di eventi.
Di seguito sono riportati gli eventi supportati dai trigger apex: prima di insert, prima dell’aggiornamento, prima di delete, dopo insert, dopo un aggiornamento, dopo delete, dopo undelete.
Le parole chiave statiche non possono essere utilizzate in un trigger Apex. Tutte le parole chiave applicabili alle classi interne possono essere utilizzate in un trigger Apex.,
Ci sono variabili implicite definite da ogni trigger che restituisce il contesto di runtime. Queste variabili sono definite nel sistema. Classe Trigger. Queste variabili sono chiamate variabili di contesto. L’immagine seguente mostra la variabile di contesto supportata da apex trigger.
di Seguito sono la considerazione della variabile di contesto, all’apice di trigger:
- non usare il grilletto.nuovo e trigger.vecchio nelle operazioni DML.
- Trigger.nuovo non può essere eliminato.,
- Trigger.nuovo è di sola lettura.
- Trigger.new può essere utilizzato per modificare i valori dei campi sullo stesso oggetto solo prima del trigger.
Di seguito le schermate elencano le considerazioni su azioni specifiche in diversi eventi di trigger.
La classe batch in Apex
la classe batch in salesforce viene utilizzata per elaborare numero elevato di record che supererebbero i limiti del governatore apex se elaborati normalmente. Classe batch esegue il codice in modo asincrono.,
Di seguito sono riportati i vantaggi della classe batch:
- La classe batch elabora i dati in blocchi e se un blocco non riesce a elaborare correttamente, tutti i blocchi elaborati correttamente non vengono ripristinati.
- Ogni blocco di dati in una classe batch elaborato con un nuovo set di limiti governatore che assicurano che il codice viene eseguito entro i limiti di esecuzione governatore.
- Database. L’interfaccia batchable deve essere implementata da una classe apex per essere utilizzata come classe batch. Fornisce tre metodi che devono essere implementati dalla classe batch.,
Di seguito sono riportati i tre metodi forniti dal Database. Interfaccia batchable:
1.start ():
Questo metodo genera l’ambito di record o oggetti da elaborare con il metodo di interfaccia execute. Durante l’esecuzione del batch, viene chiamato una sola volta. Questo metodo restituisce un database.Oggetto QueryLocator o un Iterabile. Il numero di record recuperati dalla query SQL utilizzando il database.Oggetto QueryLocator è di 50 milioni di record, ma utilizzando un iterabile, il numero totale di record che possono essere recuperati dalla query SQL è solo 50000., Iterable viene utilizzato per generare un ambito complesso per la classe batch.
Sintassi del metodo di avvio:
global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContextbc) {}
2.execute ():
Questo metodo viene utilizzato per l’elaborazione di ogni blocco di dati. Per ogni blocco di record viene chiamato il metodo execute. La dimensione predefinita del batch per l’esecuzione è di 200 record. Il metodo Execute accetta due argomenti:
Un riferimento al database.Oggetto BatchableContext,
Un elenco di sObjects, come List<sObject>, o un elenco di tipi parametrizzati., Sintassi del metodo execute:
global void execute(Database.BatchableContext BC, list<P>){}
3.finish ():
Il metodo finish viene chiamato una volta durante l’esecuzione della classe batch. Le operazioni di post-elaborazione possono essere eseguite nel metodo finish. Ad esempio: invio dell’e-mail di conferma. Questo metodo viene chiamato quando tutti i batch vengono elaborati. Sintassi del metodo Finish:
global void finish(Database.BatchableContext BC){}
Database.Oggetto BatchableContext:
Ogni metodo del database. Interfaccia batchable ha un riferimento al database.Oggetto BatchableContext.
Questo oggetto viene utilizzato per monitorare l’avanzamento del processo batch.,
Di seguito sono riportati i metodi di istanza forniti da BatchableContext:
- getChildJobId(): Questo metodo restituisce l’ID di un processo batch attualmente elaborato.
- getJobId (): Questo metodo restituisce l’ID del processo batch.
Di seguito è riportata la sintassi di una classe batch:
Database.Metodo executeBatch:
Database.Metodo executeBatch viene utilizzato per l’esecuzione di una classe batch.
Questo metodo prende due parametri: Istanza della classe batch da elaborare, Opzioni parametro per specificare la dimensione del batch se non specificato prende la dimensione predefinita di 200.,
Sintassi del database.executeBatch:
Database.executeBatch(myBatchObject,scope)
Esecuzione di un nome di classe batch MyBatchClass:
MyBatchClassmyBatchObject = new MyBatchClass(); Id batchId = Database.executeBatch(myBatchObject,100);
Database.stateful:
La classe batch è stateless per impostazione predefinita. Ogni volta che viene chiamato il metodo execute viene ricevuta una nuova copia di un oggetto, tutte le variabili della classe vengono inizializzate.
Database.stateful è implementato per rendere stateful una classe batch.
Se la classe batch ha implementato il database, l’interfaccia stateful tutte le variabili di istanza mantengono i loro valori, ma le variabili statiche vengono reimpostate tra la transazione.,
Sommario:
- Apex è fortemente tipizzato, linguaggio di programmazione object oriented in cui viene compilato ed eseguito su force.com la piattaforma
- Apex linguaggio di programmazione è una distinzione tra maiuscole e minuscole lingua
- Due tipi di flusso di azioni in Apice sono 1) Sviluppatore azione 2) utente
- Apex consente di creare servizi web che l’integrazione di Salesforce con altre applicazioni.
- I tipi di dati supportati da apex sono: 1).,pubblico, Privato, Protetto e Globale di supporto indicate da Apex
- parole chiave utilizzando in Apice sono : 1) la Condivisione, la 2) Senza la condivisione, Static 3), 4) Finale 5)Restituire, 6)Null, 7) Virtuale, 8) Abstract
- Una stringa è un insieme di caratteri senza limiti di caratteri
- Apex governatore limiti sono i limiti imposti da apex motore di runtime per garantire che qualsiasi pista apex code e processi
- i metodi Getter e setter può essere usato per eseguire codice prima il valore della proprietà è accessibile o modificate
- Ci sono tre modi per la creazione di classi apex in Salesforce: 1)Console per gli Sviluppatori di 2)Forza.,com IDE e, 3) Pagina di dettaglio della classe Apex.
- I trigger Apex consentono di eseguire apex personalizzato prima e dopo l’esecuzione di un’operazione DML.
- La classe batch in salesforce viene utilizzata per elaborare un numero elevato di record che supererebbero i limiti apex governor se elaborati normalmente.