APEX-veiledning: Apex-programmeringskurs og eksempler på koding
Hva er Apex i Salesforce?
Apex er et objektorientert og sterkt skrevet programmeringsspråk utviklet av Salesforce for å bygge Software as a Service (SaaS) og Customer Relationship Management (CRM). Apex hjelper utviklere med å lage tredjeparts SaaS-applikasjoner og legge til forretningslogikk til systemhendelser ved å tilby back-end databasestøtte og klient-server-grensesnitt.
Apex hjelper utviklere med å legge til forretningslogikk til systemhendelsene som knappeklikk, relaterte postoppdateringer og Visualforce-sider. Apex har en lignende syntaks som Java. Registrer deg for Salesforce for å lære hvordan CRM fungerer
Funksjoner i Apex programmeringsspråk
Her er de viktige funksjonene til Salesforce Apex:
- Apex er et språk som ikke skiller mellom store og små bokstaver.
- Du kan utføre DML-operasjoner som INSERT, UPDATE, UPSERT, DELETE på sObject-poster ved å bruke apex.
- Du kan spørre etter sObject-poster ved å bruke SOQL(salesforce object query language) og SOSL(salesforce objektsøkespråk) i apex.
- Lar deg lage en enhetstest og utfør dem for å bekrefte kodedekning og effektiviteten til koden i apex.
- Apex kjøres i et miljø med flere leietakere, og Salesforce har definert noen guvernørgrenser som hindrer en bruker i å kontrollere de delte ressursene. Enhver kode som krysser salgsstyrkens guvernørgrense mislykkes, en feil vises.
- Salesforce-objekt kan brukes som en datatype i apex. For eksempel –
Account acc = new Account();
,her Account er et standard salesforce-objekt.
- Apex oppgraderer automatisk med hver Salesforce-utgivelse.
Når bør utvikler velge Apex
Apex-kode skal bare skrives hvis et forretningsscenario er for komplekst og ikke kan implementeres ved å bruke den forhåndsbygde funksjonaliteten levert av Salesforce.
Følgende er de få scenariene der vi må skrive apex-kode:
- For å lage webtjenester som integrerer Salesforce med andre applikasjoner.
- For å implementere tilpasset validering på sobjects.
- For å utføre tilpasset apex-logikk når en DML-operasjon utføres.
- For å implementere funksjonalitet som ikke kan implementeres ved hjelp av eksisterende arbeidsflyter og prosessbyggerfunksjonalitet.
- Å sette opp e -posttjenester, må du inkludere behandling av innhold, overskrifter og vedlegg i e-post ved hjelp av apex-kode.
Arbeidsstruktur for Apex
Nå i denne Apex-opplæringen vil vi lære om arbeidsstrukturen til Apex:
Følgende er flyten av handlinger for en apex-kode:
- Utviklerhandling: All apex-koden skrevet av en utvikler er kompilert til et sett med instruksjoner som kan forstås av apex runtime-tolk når utvikleren lagrer koden til plattformen og disse instruksjonene lagres som metadata til plattformen.
- Sluttbrukerhandling: Når brukerhendelsen kjører en apex-kode, får plattformserveren de kompilerte instruksjonene fra metadata og kjører dem gjennom apex-tolken før resultatet returneres.
Apex-syntaks
Variabel erklæring
Siden apex er et sterkt skrevet språk, er det obligatorisk å deklarere en variabel med datatype i apex.
For eksempel:
contact con = new contact();
her er variabelen con erklært med kontakt som en datatype.
SOQL-spørring
SOQL står for salesforce object query language. SOQL brukes til å hente sObject-poster fra Salesforce-databasen. For eksempel-
Account acc = [select id, name from Account Limit 1];
Spørringen ovenfor henter kontopost fra salesforce-databasen.
Loop Statement
Loop statement brukes til å iterere over postene i en liste. Antall iterasjoner er lik antall poster i listen. For eksempel:
list<Account>listOfAccounts = [select id, name from account limit 100]; // iteration over the list of accounts for(Account acc : listOfAccounts){ //your logic }
I kodebiten ovenfor er listOfAccounts en variabel av listedatatypen.
Flytkontrollerklæring
Flytkontrollsetning er fordelaktig når du ønsker å utføre noen linjer i koden basert på noen forhold.
For eksempel:
list<Account>listOfAccounts = [select id, name from account limit 100]; // execute the logic if the size of the account list is greater than zero if(listOfAccounts.size() >0){ //your logic }
Kodebiten ovenfor spør etter kontoposter fra databasen og sjekker listestørrelsen.
DML-uttalelse
DML står for datamanipulasjonsspråk. DML-setninger brukes til å manipulere data i Salesforce-databasen. For eksempel –
Account acc = new Account(Name = ‘ Test Account’); Insert acc; //DML statement to create account record.
Apex utviklingsmiljø
Nå i denne Apex-programmeringsveiledningen vil vi lære om Apex Development Environment:
Apex-kode kan utvikles enten i sandbox og utviklerutgave av Salesforce.
Det er en beste praksis å utvikle koden i sandkassemiljøet og deretter distribuere den til produksjonsmiljøet.
Apex-kodeutviklingsverktøy: Følgende er de tre verktøyene som er tilgjengelige for å utvikle apex-kode i alle utgaver av Salesforce.
- Force.com utviklerkonsoll
- Force.com IDE
- Koderedigerer i Salesforce-brukergrensesnittetYou
Datatype i Apex
Følgende er datatypene som støttes av apex:
Primitive
Heltall, Double, Long, Date, Date Time, String, ID og Boolean anses som primitive datatyper. Alle primitive datatyper sendes etter verdi, ikke ved referanse.
Kategorier
Tre typer samlinger er tilgjengelige i Apex
- Liste: Det er en ordnet samling av primitiver, sObjects, samlinger eller Apex-objekter basert på indekser.
- Sett: En uordnet samling av unike primitiver.
- Kart: Det er en samling unike, primitive nøkler som kartlegger til enkeltverdier som kan være primitiver, sObjects, samlinger eller Apex-objekter.
sObjekt
Dette er en spesiell datatype i Salesforce. Det ligner på et bord i SQL og inneholder felt som ligner på kolonner i SQL.
Opptegnelser
Enum er en abstrakt datatype som lagrer én verdi av et begrenset sett med spesifiserte identifikatorer
Klasser
Objekter
Det refererer til enhver datatype som støttes i Apex.
Grensesnitt
Apex Access Specifier
Følgende er tilgangsspesifikasjonen som støttes av apex:
offentlig
Denne tilgangsspesifikasjonen gir tilgang til en klasse, metode, variabel som skal brukes av en apex i et navneområde.
Privat
Denne tilgangsspesifikasjonen gir tilgang til en klasse, metode, variabel som skal brukes lokalt eller innenfor kodedelen, den er definert. All teknikken, variabler som ikke har noen tilgangsspesifikasjoner definert, har standardtilgangsspesifikasjonen privat.
beskyttet
Denne tilgangsspesifikatoren gir tilgang til en metode, variabel som skal brukes av alle indre klasser innenfor definerende Apex-klasse.
Global
Denne tilgangsspesifikasjonen gir tilgang til en klasse, metode, variabel som skal brukes av en apex innenfor et navneområde så vel som utenfor navneområdet. Det er en god praksis å ikke bruke globale søkeord før det er nødvendig.
Nøkkelord i Apex
Med deling
Hvis en klasse er definert med dette nøkkelordet, håndheves alle delingsreglene for gjeldende bruker, og hvis dette nøkkelordet er fraværende, kjøres koden under systemkontekst.
For eksempel:
public with sharing class MyApexClass{ // sharing rules enforced when code in this class execute }
Uten å dele
Hvis en klasse er definert med dette nøkkelordet, håndheves ikke alle delingsreglene for gjeldende bruker.
For eksempel:
public without sharing class MyApexClass{ // sharing rules is not enforced when code in this class execute }
Statisk
En variabel, Metode er definert med det statiske nøkkelordet initialisert en gang og assosiert med klassen. Statiske variabler, metoder kan kalles ved klassenavn direkte uten å opprette forekomsten av en klasse.
Slutten
En konstant, Metode er definert med det endelige nøkkelordet kan ikke overstyres. For eksempel:
public class myCls { static final Integer INT_CONST = 10; }
Hvis du prøver å overstyre verdien for denne INT_CONST-variabelen, vil du få et unntak – System.FinalException: Endelig variabel er allerede initialisert.
Tilbake
Dette nøkkelordet returnerer en verdi fra en metode. For eksempel:
public String getName() { return 'Test' ; }
Null
Den definerer en nullkonstant og kan tilordnes til en variabel. For eksempel
Boolean b = null;
virtuelle
Hvis en klasse er definert med et virtuelt nøkkelord, kan den utvides og overstyres.
Abstrakt
Hvis en klasse er definert med abstrakt nøkkelord, må den inneholde minst én metode med nøkkelord abstrakt, og den metoden skal bare ha en signatur.
For eksempel
public abstract class MyAbstrtactClass { abstract Integer myAbstractMethod1(); }
Apex-streng
En streng er et sett med tegn uten tegnbegrensninger. For eksempel:
String name = 'Test';
Det er flere innebygde metoder som tilbys av String-klassen i salesforce. Følgende er de få ofte og mest brukte funksjonene:
forkorte (maxWidth)
Denne metoden trunkerer en streng til den angitte lengden og returnerer den hvis lengden på den gitte strengen er lengre enn den angitte lengden; ellers returnerer den den opprinnelige strengen. Hvis verdien for maxWidth-variabelen er mindre enn 4, returnerer denne metoden et kjøretidsunntak – System.StringException: Minimum forkortelsesbredde er 4
For eksempel:
String s = 'Hello World'; String s2 = s.abbreviate(8); System.debug('s2'+s2); //Hello...
kapitaliser ()
Denne metoden konverterer den første bokstaven i en streng til store og små bokstaver og returnerer den.
For eksempel:
String s = 'hello; String s2 = s.capitalize(); System.assertEquals('Hello', s2);
inneholder (understreng)
Denne metoden returnerer true hvis strengen som kaller metoden inneholder den spesifiserte understrengen.
String name1 = 'test1'; String name2 = 'test2'; Boolean flag = name.contains(name2); System.debug('flag::',+flag); //true
lik(stringOrId)
Denne metoden returnerer true hvis parameteren som sendes ikke er null og indikerer den samme binære sekvensen av tegn som strengen som kaller metoden.
Når du sammenligner Id-verdier, kan det hende at lengden på ID-ene ikke er lik. For eksempel: hvis en streng som representerer 15 tegn id sammenlignes med et objekt som representerer 18 tegn ID, returnerer denne metoden sann. For eksempel:
Id idValue15 = '001D000000Ju1zH'; Id idValue18 = '001D000000Ju1zHIAR'; Boolean result4 = stringValue15.equals(IdValue18); System.debug('result4', +result4); //true
I eksemplet ovenfor sammenligner metoden 15 tegn objekt Id med 18 tegn objekt Id, og hvis begge disse id representerer den samme binære sekvensen vil den returnere sann.
Bruk denne metoden for å gjøre sammenligninger som skiller mellom store og små bokstaver.
escapeSingle Quotes(stringToEscape)
Denne metoden legger til et escape-tegn (\) før et enkelt anførselstegn i en streng og returnerer det. Denne metoden forhindrer SOQL-injeksjon mens du oppretter en dynamisk SOQL-spørring. Denne metoden sikrer at alle enkle anførselstegn betraktes som omsluttende strenger, i stedet for databasekommandoer.
For eksempel:
String s = 'Hello Tom'; system.debug(s); // Outputs 'Hello Tom' String escapedStr = String.escapeSingleQuotes(s); // Outputs \'Hello Tom\'
fjern (understreng)
Denne metoden fjerner all forekomst av den nevnte delstrengen fra strengen som kaller metoden og returnerer den resulterende strengen.
For eksempel
String s1 = 'Salesforce and force.com'; String s2 = s1.remove('force'); System.debug( 's2'+ s2);// 'Sales and .com'
understreng(startindeks)
Denne metoden returnerer en delstreng starter fra tegnet ved startIndex strekker seg til den siste av strengen.
For eksempel:
String s1 = 'hamburger'; String s2 = s1.substring(3); System.debug('s2'+s2); //burger
omvendt()
Denne metoden reverserer alle tegnene i en streng og returnerer den. For eksempel:
String s = 'Hello'; String s2 = s.reverse(); System.debug('s2::::'+s2);// olleH // Hello
trim(): Denne metoden fjerner alle de ledende hvite mellomrommene fra en streng og returnerer den.
valueOf(toConvert)
Denne metoden returnerer strengrepresentasjonen av bestått i objekt.
Apex-guvernørgrenser
Apex-guvernørgrenser er grensene som håndheves av apex-runtime-motoren for å sikre at enhver rullebaneapex-kode og prosesser ikke kontrollerer de delte ressursene og ikke bryter behandlingen for andre brukere i multitenant-miljøet. Disse grensene verifiseres mot hver apex-transaksjon. Følgende er guvernørgrensene definert av salesforce for hver apex-transaksjon:
Tekniske beskrivelser | Grense |
---|---|
SOQL-spørringer som kan gjøres i en synkron transaksjon | 100 |
SOQL-spørringer som kan gjøres i en asynkron transaksjon | 200 |
Poster som kan hentes med en SOQL-spørring | 50000 |
Poster som kan hentes av Database.getQueryLocator | 10000 |
SOSL-spørringer som kan gjøres i en apex-transaksjon | 20 |
Poster som kan hentes ved en SOSL-spørring | 2000 |
DML-setninger som kan gjøres i en apex-transaksjon | 150 |
Poster som kan behandles som et resultat av en DML-setning, Approval.process eller database.emptyRecycleBin | 10000 |
Forklaringer som kan gjøres i en apex-transaksjon. | 100 |
Kumulativ tidsavbruddsgrense for alle meldingene som utføres i en apex-transaksjon | 120 sekunder |
Begrensning på apex-jobber som kan legges til i køen med System.enqueueJob | 50 |
Utførelsestidsgrense for hver Apex-transaksjon | 10 minutter |
Begrens på tegn som kan brukes i en apex-klasse og trigger | 1 millioner |
CPU-tidsbegrensning for synkron transaksjon | 10,000 millisekunder |
CPU-tidsbegrensning for asynkron transaksjon | 60,000 millisekunder |
Apex Getter og Setter
Apex-egenskapen ligner på apex-variabelen. Getter og setter er nødvendige for en apex-eiendom. Getter og setter kan brukes til å utføre kode før egenskapsverdien åpnes eller endres. Koden i get-aksessoren kjøres når en egenskapsverdi leses. Koden i sett-aksessoren kjører når en egenskapsverdi endres. Enhver eiendom som har get accessor regnes som skrivebeskyttet, enhver eiendom som har satt accessor anses å skrive bare enhver eiendom som har både get og set accessor anses å være read-write. Syntaks for en apex-egenskap:
public class myApexClass { // Property declaration access_modifierreturn_typeproperty_name { get { //code } set{ //code } }
Her er access_modifier tilgangsmodifikatoren til egenskapen. return_type er datatypen til egenskapen. eiendomsnavn er navnet på eiendommen.
Nedenfor er et eksempel på en apex-egenskap som har både get- og set-aksessor.
public class myApex{ public String name{ get{ return name;} set{ name = 'Test';} } }
Her er egenskapsnavnet navn, og det er offentlig eiendom, og det returnerer en streng dataType.
Det er ikke obligatorisk å ha noen kode i get and set-blokken. Disse blokkene kan stå tomme for å definere en automatisk egenskap. For eksempel:
public double MyReadWriteProp{ get; set; }
Hent og sett tilgang kan også defineres med deres tilgangsmodifikator. Hvis en accessor er definert med en modifikator, overstyrer den tilgangsmodifikatoren for egenskapen. For eksempel:
public String name{private get; set;}// name is private for read and public to write.
Apex klasse
En apex-klasse er en blåkopi eller mal som objekter lages fra. Et objekt er forekomsten av en klasse.
Det er tre måter å lage apex-klasser på i Salesforce:
Utviklerkonsoll
Force.com IDE
Apex klasse detaljside.
I apex kan du definere en ytre klasse også kalt toppnivåklasse, og du kan også definere klasser innenfor en ytre klasse kalt indre klasser.
Det er obligatorisk å bruke tilgangsmodifikator som global eller offentlig i erklæringen til den ytre klassen.
Det er ikke nødvendig å bruke tilgangsmodifikator i deklarasjonen av indre klasser.
En apex-klasse er definert ved å bruke klassenøkkelord etterfulgt av klassenavnet.
Extends-nøkkelordet brukes til å utvide en eksisterende klasse med en apex-klasse, og implements-nøkkelordet brukes til å implementere et grensesnitt med en apex-klasse.
Salesforce Apex støtter ikke flere arv, en apex-klasse kan bare utvide én eksisterende apex-klasse, men kan implementere flere grensesnitt.
En apex-klasse kan inneholde brukerdefinert konstruktør, og hvis en brukerdefinert konstruktør ikke er tilgjengelig, brukes en standard konstruktør. Koden i en konstruktør kjøres når en forekomst av en klasse opprettes.
Syntaks for eksempelet i Apex-klassen:
public class myApexClass{ // variable declaration //constructor public myApexClass{ } //methods declaration }
Det nye nøkkelordet brukes til å lage en forekomst av en apex-klasse. Nedenfor er syntaksen for å lage en forekomst av en apex-klasse.
myApexClass obj = new myApexClass();
Apex Trigger
Apex-utløsere lar deg utføre tilpasset apex før og etter at en DML-operasjon er utført.
Apex-støtte etter to typer triggere:
Før utløsere: Disse utløsere brukes til å validere og oppdatere feltets verdi før posten lagres i databasen.
Etter triggere: Disse triggerne brukes til å få tilgang til feltene (post-ID, LastModifiedDate-felt) satt av systemet etter en post som er forpliktet til databasen. Disse feltverdiene kan brukes til å endre andre poster. Poster som utløses etter utløsere er skrivebeskyttet.
Det er en god praksis å skrive store utløsere. En klumpete utløser kan behandle en enkelt post så vel som flere poster om gangen.
Syntaks for en apex-utløser:
trigger TriggerName on ObjectName (trigger_events) { //Code_block }
Her er TriggerName navnet på triggeren, ObjectName er navnet på objektet som triggeren skal skrives på, trigger_events er den kommadelte listen over hendelser.
Følgende er hendelsene som støttes av apex-utløserne: før innsetting, før oppdatering, før sletting, etter innsetting, etter en oppdatering, etter sletting, etter angre sletting.
Statiske søkeord kan ikke brukes i en Apex-utløser. Alle nøkkelordene som gjelder for indre klasser kan brukes i en Apex-utløser.
Det er implisitte variabler som defineres av hver trigger som returnerer kjøretidskonteksten. Disse variablene er definert i systemet. Utløserklasse. Disse variablene kalles kontekstvariabler. Skjermbildet nedenfor viser kontekstvariabelen som støttes av apex trigger.
Følgende er vurderingen av kontekstvariabelen i apex-utløseren:
- Ikke bruk trigger.new og trigger.old i DML-operasjoner.
- Trigger.new kan ikke slettes.
- Trigger.new er skrivebeskyttet.
- Trigger.new kan brukes til å endre verdiene til feltene på samme objekt kun i før trigger.
Nedenfor skjermbilder viser betraktningene om spesifikke handlinger i forskjellige utløserhendelser.
Batch-klasse i Apex
Batchklasse i salesforce brukes til å behandle et stort antall poster som vil overskride apex-guvernørgrensene hvis de behandles normalt. Batch-klassen kjører koden asynkront.
Følgende er fordelene med batchklasse:
- Batch-klasse behandler dataene i biter, og hvis en del ikke klarer å behandle vellykket, ruller ikke alle bitene som er behandlet tilbake.
- Hver del av data i en batch-klasse behandles med et nytt sett med regulatorgrenser som sikrer at koden kjøres innenfor regulatorens utførelsesgrenser.
- Database. Batchbart grensesnitt må implementeres av en apex-klasse for å kunne brukes som en batch-klasse. Den gir tre metoder som må implementeres av batchklassen.
Følgende er de tre metodene som tilbys av Database. Batchbart grensesnitt:
1.start()
Denne metoden genererer omfanget av poster eller objekter som skal behandles av grensesnittmetoden execute. Under utførelse av batch kalles det bare én gang. Denne metoden returnerer enten et Database.QueryLocator-objekt eller en Iterable. Antall poster hentet av SQL-spørring ved hjelp av Database.QueryLocator-objektet er 50 millioner poster, men ved bruk av en iterabel er det totale antallet poster som kan hentes av SQL-spørringen bare 50000 XNUMX. Iterable brukes til å generere komplekst omfang for batchklasse.
Syntaks for startmetode:
global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContextbc) {}
2.execute()
Denne metoden brukes til å behandle hver del av data. For hver del av poster kalles utførelsesmetoden. Standard batchstørrelse for utførelse er 200 poster. Utfør metoden tar to argumenter:
En referanse til Database.BatchableContext-objektet,
En liste over sObjects, for eksempel List , eller en liste over parameteriserte typer. Syntaks for utførelsesmetode:
global void execute(Database.BatchableContext BC, list<P>){}
3.finish()
Avslutningsmetoden kalles én gang under utførelsen av batchklassen. Etterbehandlingsoperasjoner kan utføres i finishmetoden. For eksempel: sende e-postbekreftelsen. Denne metoden kalles når hele batchen blir behandlet. Syntaks for Finish-metoden:
global void finish(Database.BatchableContext BC){}
Database.BatchableContext-objekt
Hver metode i databasen. Batchable grensesnitt har en referanse til Database.BatchableContext objekt.
Dette objektet brukes til å spore fremdriften til batchjobben.
Følgende er forekomstmetoder levert av BatchableContext:
- getChildJobId(): Denne metoden returnerer IDen til en batchjobb som for øyeblikket behandles.
- getJobId(): Denne metoden returnerer IDen til batchjobben.
Nedenfor er syntaksen til en batchklasse:
global class MyBatchClass implements Database.Batchable<sObject> { global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContextbc) { // collect the batches of records or objects to be passed to execute } global void execute(Database.BatchableContextbc, List<P> records){ // process each batch of records } global void finish(Database.BatchableContextbc){ // execute any post-processing operations } }
Database.executeBatch-metode
Database.executeBatch-metoden brukes for å utføre en batchklasse.
Denne metoden tar to parametere: Forekomst av batchklassen som skal behandles, Options-parameteren for å spesifisere batchstørrelsen hvis den ikke er spesifisert, den tar standardstørrelsen 200.
Syntaks for Database.executeBatch:
Database.executeBatch(myBatchObject,scope)
Utføre et batchklassenavn MyBatchClass:
MyBatchClassmyBatchObject = new MyBatchClass(); Id batchId = Database.executeBatch(myBatchObject,100);
Database.stateful
Batch-klassen er som standard statsløs. Hver gang execute-metoden kalles en ny kopi av et objekt mottas, initialiseres alle variablene i klassen.
Database.stateful er implementert for å gjøre en batchklasse stateful.
Hvis batchklassen din implementerte Database , statisk grensesnitt beholder alle forekomstvariablene sine verdier, men de statiske variablene tilbakestilles mellom transaksjonen.
Sammendrag
- Apex er en sterkt skrevet, objektorientert programmeringsspråk som kompilerer og kjører på force.com-plattformen
- Apex programmeringsspråk er et språk som ikke skiller mellom store og små bokstaver
- To typer flyt av handlinger i Apex er 1) Utviklerhandling 2) Sluttbrukerhandling
- Apex hjelper deg med å lage webtjenester som integrerer Salesforce med andre applikasjoner.
- Datatyper som støttes av apex er: 1). Primitiv 2) Samlinger 3) sObject, Enums, 4) Klasser, 5) Objekter og grensesnitt
- Offentlig, privat, beskyttet og global er spesifisert støtte av Apex
- Nøkkelord som brukes i Apex er: 1) Med deling, 2) Uten deling, 3) Statisk, 4) Endelig 5) Retur, 6) Null, 7) Virtuelt, 8) Abstrakt
- En streng er et sett med tegn uten tegnbegrensninger
- Apex-guvernørgrenser er grensene som håndheves av apex-runtime-motoren for å sikre at alle rullebaneapex-koder og prosesser
- Getter og setter kan brukes til å utføre kode før egenskapsverdien åpnes eller endres
- Det er tre måter å lage apex-klasser på i Salesforce: 1)Utviklerkonsoll 2)Force.com IDE og 3) Apex-klassedetaljside.
- Apex-utløsere lar deg utføre tilpasset apex før og etter at en DML-operasjon er utført.
- Batch-klasse i salesforce brukes til å behandle et stort antall poster som ville overskride apex-guvernørgrensene hvis de behandles normalt.