Salesforce Apex -opetusohjelma aloittelijoille

โšก ร„lykรคs yhteenveto

Apex-ohjelmointi tarjoaa Salesforce-kehittรคjille oliopohjaisen, vahvasti tyypitetyn kielen mukautetun liiketoimintalogiikan lisรครคmiseen CRM:รครคn. Se tukee luokkia, triggereitรค ja erรคtรถitรค, ja hallintarajoitukset pitรคvรคt jaetun usean kรคyttรคjรคn alustan vakaana.

  • ๐Ÿงฑ Foundation: Apex on kirjainkokoa ei erotella kieli, jossa on Java-tyyppinen syntaksi, joka toimii natiivisti Salesforce Lightning Platformissa.
  • ๐Ÿ—ƒ๏ธ Tietojen kรคyttรถ: SOQL-kyselyt ja DML-lausekkeet antavat koodisi lukea ja kirjoittaa sObject-tietueita suoraan Salesforce-tietokantaan.
  • ๐Ÿ› ๏ธ toteutus: Luokat, ominaisuudet ja kรคynnistimet liittรคvรคt mukautettua logiikkaa tietueiden lisรคyksiin, pรคivityksiin, poistoihin ja muihin jรคrjestelmรคtapahtumiin.
  • ๐Ÿ“ฆ asteikko: Erรคajo Apex ja muut asynkroniset vaihtoehdot kรคsittelevรคt miljoonia tietueita paloina rikkomatta alustan rajoituksia.
  • ๐Ÿšฆ Kuvernรถรถrin rajat: Transaktiokohtaiset rajoitukset, kuten 100 synkronista SOQL-kyselyรค ja 150 DML-lauseketta, suojaavat jaettuja resursseja.
  • โœ… Laatu: Yksikkรถtestien on katettava vรคhintรครคn 75 prosenttia Apex-koodista ennen tuotantokรคyttรถรถnottoa.

APEX Salesforce -ohjelmoinnin yleiskatsaus

Mikรค on Apex Salesforcessa?

kรคrki on Salesforcen kehittรคmรค oliopohjainen ja vahvasti tyypitetty ohjelmointikieli SaaS- (Software as a Service) ja asiakkuudenhallintasovellusten (CRM) rakentamiseen. Apex auttaa kehittรคjiรค luomaan kolmannen osapuolen SaaS-sovelluksia ja lisรครคmรครคn liiketoimintalogiikkaa jรคrjestelmรคtapahtumiin tarjoamalla taustatietokantatukea ja asiakas-palvelin-rajapintoja.

Apex auttaa kehittรคjiรค lisรครคmรครคn liiketoimintalogiikkaa jรคrjestelmรคtapahtumiin, kuten painikkeiden napsautuksiin, niihin liittyviin tietueiden pรคivityksiin ja Visualforce-sivuihin. Apexin syntaksi on samankaltainen kuin Java. Rekisterรถidy Salesforceen oppia, miten CRM toimii.

Apex-ohjelmointikielen ominaisuudet

Tรคssรค ovat Salesforce Apexin tรคrkeรคt ominaisuudet:

  • Apex on kirjainkokoa ei erotella.
  • Voit suorittaa sObject-tietueille DML-toimintoja, kuten INSERT, UPDATE, UPSERT ja DELETE, Apexin avulla.
  • Voit tehdรค sObject-tietueiden kyselyitรค Apexissa kรคyttรคmรคllรค SOQL:รครค (Salesforce Object Query Language) ja SOSL:รครค (Salesforce Object Search Language).
  • Voit luoda a yksikkรถtesti ja suorita se varmistaaksesi koodin kattavuus ja Apex-koodin tehokkuutta.
  • Apex suorittaa usean vuokralaisen ympรคristรถssรค ja Salesforce on mรครคritellyt hallintarajoitukset, jotka estรคvรคt kรคyttรคjรครค monopolisoimasta jaettuja resursseja. Mikรค tahansa Salesforcen hallintarajoituksen ylittรคvรค koodi epรคonnistuu ja nรคkyviin tulee virhe.
  • Salesforce-objektia voidaan kรคyttรครค tietotyyppinรค Apexissa. Esimerkiksi:
    Account acc = new Account();

    Tรคssรค Account on Salesforcen vakio-objekti.

  • Apex pรคivittรครค automaattisesti jokaisen Salesforce-julkaisun yhteydessรค.

Milloin kehittรคjรคn tulisi valita Apex?

Apex-koodia tulisi kirjoittaa vain, jos liiketoimintaskenaario on liian monimutkainen toteutettavaksi Salesforcen tarjoamalla valmiilla osoita ja napsauta -toiminnolla.

Seuraavassa on muutamia tilanteita, joissa sinun on kirjoitettava Apex-koodia:

  • Luoda verkkopalveluita, jotka integroivat Salesforcen muihin sovelluksiin.
  • Mukautetun validoinnin toteuttaminen sObjects-objekteille.
  • Suorittaa mukautettua Apex-logiikkaa, kun DML-toiminto suoritetaan.
  • Toteuttaa toimintoja, joita ei voida rakentaa olemassa olevilla deklaratiivisilla automaatiotyรถkaluilla, kuten Flow'lla.
  • Jรคrjestรครค sรคhkรถpostipalvelut jotka kรคsittelevรคt saapuvien sรคhkรถpostien sisรคllรถn, otsikot ja liitteet.

Kun tiedรคt, milloin Apex on oikea valinta, seuraava vaihe on ymmรคrtรครค, mitรค koodillesi tapahtuu tallentamisen jรคlkeen.

Apexin toimintarakenne

Seuraavassa on Apex-koodin toimintojen kulku:

  • Kehittรคjรคn toiminto: Kun kehittรคjรค tallentaa koodia alustalle, kaikki Apex-koodi kรครคnnetรครคn joukoksi ohjeita, jotka Apex-ajonaikainen tulkki ymmรคrtรครค, ja nรคmรค ohjeet tallennetaan sitten metatietoina alustalle.
  • Loppukรคyttรคjรคn toimenpiteet: Kun kรคyttรคjรคtapahtuma suorittaa Apex-koodia, alustapalvelin hakee kรครคnnetyt ohjeet metatiedoista ja suorittaa ne Apex-tulkin lรคpi ennen tuloksen palauttamista.

Alla oleva kaavio nรคyttรครค, miten kehittรคjรคn ja loppukรคyttรคjรคn toiminnot ovat vuorovaikutuksessa Lightning Platform -sovelluspalvelimen kanssa:

Apexin tyรถrakenne

Apex-kehitysympรคristรถ

Apex-koodia voidaan kehittรครค joko Salesforcen hiekkalaatikossa tai Developer Edition -organisaatiossa.

Koodia kannattaa kehittรครค ensin hiekkalaatikkoympรคristรถssรค ja sitten ottaa se kรคyttรถรถn tuotantoympรคristรถssรค alla olevan esimerkin mukaisesti:

Apex-kehitysympรคristรถ

Apex-koodin kehitystyรถkalut: Seuraavat kolme tyรถkalua ovat kรคytettรคvissรค Apex-koodin kehittรคmiseen kaikissa Salesforce-versioissa:

  • Kehittรคjรคkonsoli
  • Visual Studio Code Salesforce Extension Packilla (tรคmรค korvaa kรคytรถstรค poistetun Force.com IDE:n)
  • Code editori Salesforce-mรครคritysten kรคyttรถliittymรคssรค

Kun ympรคristรถsi on valmis, tarkastellaanpa itse kielen rakennuspalikoita, aloittaen tietotyypeistรค.

Apexin tietotyypit

Apex tukee seuraavia tietotyyppejรค:

primitiivinen

Kokonaisluku, Double, Long, Date, Datetime, Decimal, Time, Blob, String, ID ja Boolean katsotaan alkeellisiksi tietotyypeiksi. Kaikki alkeelliset tietotyypit vรคlitetรครคn arvon, ei viitteen perusteella.

Kaikki tuotteet

Apexissa on saatavilla kolmenlaisia โ€‹โ€‹kokoelmia:

  • Lista: Se on jรคrjestetty kokoelma primitiivien, sObjektien, kokoelmien tai indekseihin perustuvien Apex-objektien joukkoa.
  • Sarja: Jรคrjestรคmรคtรถn kokoelma ainutlaatuisia elementtejรค, jotka eivรคt sisรคllรค kaksoiskappaleita.
  • Kartta: Se on kokoelma yksilรถllisiรค avaimia, jotka on yhdistetty yksittรคisiin arvoihin. Nรคmรค arvot voivat olla primitiivi-objekteja, sObject-objekteja, kokoelmia tai Apex-objekteja.

sObjekti

Tรคmรค on erityinen tietotyyppi Salesforcessa. Se on samanlainen kuin pรถytรค SQL ja sisรคltรครค kenttiรค, jotka ovat samanlaisia โ€‹โ€‹kuin SQL:n sarakkeet.

Enums

Enum on vatsalihastract-tietotyyppi, joka tallentaa yhden arvon รครคrellisestรค joukosta mรครคritettyjรค tunnisteita.

Luokat, objektit ja rajapinnat

Kรคyttรคjรคn mรครคrittรคmiรค Apex-luokkia ja -rajapintoja voidaan myรถs kรคyttรครค tietotyyppeinรค. Objekti viittaa minkรค tahansa Apexissa tuetun tietotyypin instanssiin.

Apexin syntaksi

Muuttuva ilmoitus

Koska Apex on vahvasti tyypitetty kieli, Apexissa on pakollista deklaroida muuttuja, jolla on tietotyyppi.

Esimerkiksi:

Contact con = new Contact();

Tรคssรค muuttuja con deklaroidaan ja sen tietotyyppi on Contact.

SOQL-kysely

SOQL on lyhenne sanoista Salesforce Object Query Language. SOQL:รครค kรคytetรครคn sObject-tietueiden hakemiseen Salesforce-tietokannasta. Esimerkiksi:

Account acc = [SELECT Id, Name FROM Account LIMIT 1];

Yllรค oleva kysely hakee tilitietueen Salesforce-tietokannasta.

Loop lausunto

Silmukkalauseketta kรคytetรครคn listan tietueiden lรคpikรคymiseen. Iteraatioiden mรครคrรค on yhtรค suuri kuin listan tietueiden mรครคrรค. Esimerkiksi:

List<Account> listOfAccounts = [SELECT Id, Name FROM Account LIMIT 100];
// iteration over the list of accounts
for(Account acc : listOfAccounts){
	//your logic
}

Yllรค olevassa koodinpรคtkรคssรค listOfAccounts on List-tietotyypin muuttuja.

Virtauksen ohjauslausunto

Virtauksenohjauslauseke on hyรถdyllinen, kun haluat suorittaa joitakin koodirivejรค tiettyjen ehtojen perusteella.

Esimerkiksi:

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
}

Yllรค oleva koodinpรคtkรค kyselee tilitietueita tietokannasta ja tarkistaa listan koon.

DML-lausunto

DML on lyhenne sanoista Data Manipulation Language. DML-lauseita kรคytetรครคn Salesforce-tietokannan tietojen kรคsittelyyn. Esimerkiksi:

Account acc = new Account(Name = 'Test Account');
insert acc; //DML statement to create account record.

Apex-kรคyttรถoikeusmรครคrittelijรคt

Apexin tukemat kรคyttรถoikeusmรครคrittelijรคt ovat seuraavat:

julkinen

Tรคmรค kรคyttรถoikeusmรครคrite antaa pรครคsyn luokkaan, metodiin tai muuttujaan, jota Apex kรคyttรครค nimiavaruudessa.

yksityinen

Tรคmรค kรคyttรถoikeusmรครคrite antaa pรครคsyn luokkaan, metodiin tai muuttujaan kรคytettรคvรคksi paikallisesti tai koodin siinรค osassa, jossa se on mรครคritelty. Kaikki metodit ja muuttujat, joille ei ole mรครคritelty kรคyttรถoikeusmรครคritettรค, kรคyttรคvรคt oletusarvoista private-kรคyttรถoikeusmรครคritettรค.

Suojattu

Tรคmรค kรคyttรถoikeusmรครคrite antaa pรครคsyn metodiin tai muuttujaan, jota mรครคrittรคvรคn Apex-luokan sisรคiset luokat voivat kรคyttรครค.

Global

Tรคmรค kรคyttรถoikeusmรครคrite antaa Apexille pรครคsyn luokkaan, metodiin tai muuttujaan, jota se voi kรคyttรครค sekรค nimiavaruuden sisรคllรค ettรค sen ulkopuolella. On suositeltavaa olla kรคyttรคmรคttรค global-avainsanaa, ellei se ole vรคlttรคmรคtรถntรค.

Avainsanat Apexissa

Jakamisen kanssa

Jos luokka mรครคritellรครคn tรคllรค avainsanalla, kaikkia nykyiseen kรคyttรคjรครคn sovellettavia jakamissรครคntรถjรค noudatetaan. Jos tรคtรค avainsanaa ei ole, koodi suoritetaan jรคrjestelmรคkontekstissa.

Esimerkiksi:

public with sharing class MyApexClass{
// sharing rules enforced when code in this class executes
}

Ilman jakamista

Jos luokka on mรครคritelty tรคllรค avainsanalla, nykyiseen kรคyttรคjรครคn sovellettavia jakamissรครคntรถjรค ei noudateta.

Esimerkiksi:

public without sharing class MyApexClass{
// sharing rules are not enforced when code in this class executes
}

Staattinen

static-avainsanalla mรครคritelty muuttuja tai metodi alustetaan kerran ja liitetรครคn luokkaan. Staattisia muuttujia ja metodeja voidaan kutsua suoraan luokan nimellรค ilman, ettรค luokasta luodaan instanssia.

pรครค

Avainsanalla final mรครคriteltyรค vakiota tai metodia ei voida korvata. Esimerkiksi:

public class myCls {
static final Integer INT_CONST = 10;
}

Jos yritรคt ohittaa tรคmรคn INT_CONST-muuttujan arvon, saat poikkeuksen โ€“ System.FinalException: Final variable has already been initialized.

Palata

Tรคmรค avainsana palauttaa arvon menetelmรคstรค. Esimerkiksi:

public String getName() {
return 'Test';
}

Null

Se mรครคrittelee null-vakion ja se voidaan liittรครค muuttujaan. Esimerkiksi:

Boolean b = null;

Virtual

Jos luokka mรครคritellรครคn virtual-avainsanalla, sitรค voidaan laajentaa ja korvata.

Abstract

Jos luokka mรครคritellรครคn abs-arvollatracavainsanalla t, sen on sisรคllettรคvรค vรคhintรครคn yksi metodi, jossa on avainsana abstract, ja kyseisellรค metodilla tulisi olla vain allekirjoitus.

Esimerkiksi:

public abstract class MyAbstractClass {
abstract Integer myAbstractMethod1();
}

Apex String

Merkkijono on joukko merkkejรค, joilla ei ole merkkirajoitusta. Esimerkiksi:

String name = 'Test';

Salesforcen String-luokka tarjoaa useita sisรครคnrakennettuja metodeja. Seuraavassa on muutamia usein kรคytettyjรค metodeja:

lyhentรครค (maxWidth)

Tรคmรค metodi katkaisee merkkijonon mรครคritettyyn pituuteen ja palauttaa sen, jos annetun merkkijonon pituus on pidempi kuin mรครคritetty pituus; muussa tapauksessa se palauttaa alkuperรคisen merkkijonon. Jos maxWidth-muuttujan arvo on pienempi kuin 4, metodi heittรครค ajonaikaisen poikkeuksen โ€“ System.StringException: Lyhenteen vรคhimmรคisleveys on 4.

Esimerkiksi:

String s = 'Hello World';
String s2 = s.abbreviate(8);
System.debug('s2: ' + s2); //Hello...

isoilla kirjaimilla ()

Tรคmรค menetelmรค muuntaa merkkijonon ensimmรคisen kirjaimen otsikon kirjainkoon ja palauttaa sen.

Esimerkiksi:

String s = 'hello';
String s2 = s.capitalize();
System.assertEquals('Hello', s2);

sisรคltรครค (alimerkkijono)

Tรคmรค metodi palauttaa arvon true, jos metodia kutsuva merkkijono sisรคltรครค mรครคritetyn alimerkkijonon.

String name1 = 'test1';
String name2 = 'test';
Boolean flag = name1.contains(name2);
System.debug('flag:: ' + flag); //true

yhtรค kuin(merkkijonoId)

Tรคmรค metodi palauttaa arvon true, jos vรคlitetty parametri ei ole null ja edustaa samaa binรครคristรค merkkijonoa kuin metodia kutsuva merkkijono.

Kun Id-arvoja verrataan, ID-tunnusten pituudet eivรคt vรคlttรคmรคttรค ole yhtรค suuret. Esimerkiksi jos 15-merkkistรค ID:tรค edustavaa merkkijonoa verrataan 18-merkkistรค ID:tรค edustavaan objektiin, tรคmรค metodi palauttaa silti arvon true. Esimerkiksi:

String stringValue15 = '001D000000Ju1zH';
Id idValue18 = '001D000000Ju1zHIAR';
Boolean result = stringValue15.equals(idValue18);
System.debug('result: ' + result); //true

Yllรค olevassa esimerkissรค equals-metodi vertaa 15-merkkistรค objekti-ID:tรค 18-merkkiseen objekti-ID:hen, ja jos molemmat ID:t edustavat samaa binรครคrisekvenssiรค, se palauttaa arvon true.

Kรคytรค tรคtรค menetelmรครค kirjainkoon erottelun vertailuun.

escapeSingleQuotes (merkkijonoEscape)

Tรคmรค metodi lisรครค koodinvaihtomerkin (\) ennen mitรค tahansa merkkijonossa olevaa yksittรคistรค lainausmerkkiรค ja palauttaa tuloksen. Tรคmรค metodi estรครค SOQL-injektion dynaamista SOQL-kyselyรค luotaessa. Se varmistaa, ettรค kaikkia yksittรคisiรค lainausmerkkejรค kรคsitellรครคn sulkeutuvina merkkijonoina tietokantakomentojen sijaan.

Esimerkiksi:

String s = 'Hello \'Tom\'';
String escapedStr = String.escapeSingleQuotes(s);
System.debug(escapedStr); // Outputs Hello \'Tom\'

poista (alimerkkijono)

Tรคmรค metodi poistaa kaikki mainitun alimerkkijonon esiintymรคt metodia kutsuvasta merkkijonosta ja palauttaa tuloksena olevan merkkijonon.

Esimerkiksi:

String s1 = 'Salesforce and force.com';
String s2 = s1.remove('force');
System.debug('s2: ' + s2); // 'Sales and .com'

osamerkkijono (aloitusindeksi)

Tรคmรค metodi palauttaa alimerkkijonon, joka alkaa startIndex-kohdasta merkityllรค merkillรค ja jatkuu merkkijonon loppuun.

Esimerkiksi:

String s1 = 'hamburger';
String s2 = s1.substring(3);
System.debug('s2: ' + s2); //burger

kรครคnteinen()

Tรคmรค metodi kรครคntรครค merkkijonon kaikki merkit pรคinvastaisiksi ja palauttaa sen. Esimerkiksi:

String s = 'Hello';
String s2 = s.reverse();
System.debug('s2:::: ' + s2); // olleH

trimmata()

Tรคmรค metodi poistaa merkkijonosta kaikki alusta ja takaa tulevat vรคlilyรถnnit ja palauttaa sen.

valueOf(muunnettava)

Tรคmรค metodi palauttaa syรถtetyn objektin merkkijonoesityksen.

Merkkijonot, luokat ja avainsanat yhdistyvรคt, kun alat pakata logiikkaa uudelleenkรคytettรคviin yksikรถihin, ja juuri tรคhรคn Apex-luokat ovat olemassa.

Apex-luokka

Apex-luokka on suunnitelma tai malline, josta objektit luodaan. Objekti on luokan instanssi.

Apex-luokkia voi luoda Salesforcessa kolmella tavalla:

  • Kehittรคjรคkonsoli
  • Visual Studio Code Salesforce-laajennuspaketin avulla
  • Apex-luokan tietosivu Mรครคritykset-valikossa

Apexissa voit mรครคritellรค ulkoluokan, jota kutsutaan myรถs ylimmรคn tason luokaksi, ja voit myรถs mรครคrittรครค ulkoluokan sisรคllรค olevia luokkia, joita kutsutaan sisรคluokiksi.

Ulkoluokan mรครคrittelyssรค on pakollista kรคyttรครค kรคyttรถoikeusmรครคrettรค, kuten global tai public.

Sisรคluokkien mรครคrittelyssรค ei ole vรคlttรคmรคtรถntรค kรคyttรครค kรคyttรถoikeusmรครคrettรค.

Apex-luokka mรครคritellรครคn avainsanalla class, jota seuraa luokan nimi.

Avainsanaa extends kรคytetรครคn Apex-luokan olemassa olevan luokan laajentamiseen ja avainsanaa implements kรคytetรครคn rajapinnan toteuttamiseen Apex-luokassa.

Salesforce Apex ei tue moniperintรครค; Apex-luokka voi laajentaa vain yhtรค olemassa olevaa Apex-luokkaa, mutta se voi toteuttaa useita rajapintoja.

Apex-luokka voi sisรคltรครค kรคyttรคjรคn mรครคrittรคmรคn konstruktorin, ja jos kรคyttรคjรคn mรครคrittรคmรครค konstruktoria ei ole saatavilla, kรคytetรครคn oletuskonstruktoria. Konstruktorin koodi suoritetaan, kun luokan instanssi luodaan.

Apex-luokan syntaksi:

public class myApexClass{
// variable declaration
//constructor
	public myApexClass(){
	}
//methods declaration
}

Avainsanaa new kรคytetรครคn Apex-luokan instanssin luomiseen. Alla on syntaksi Apex-luokan instanssin luomiseksi:

myApexClass obj = new myApexClass();

Apex Getter ja setteri

Apex-ominaisuus on samankaltainen kuin Apex-muuttuja. Apex-ominaisuudelle tarvitaan getter ja setter. Niitรค voidaan kรคyttรครค koodin suorittamiseen ennen ominaisuuden arvoon pรครคsemistรค tai sen muuttamista. get-akcessorin koodi suoritetaan, kun ominaisuuden arvo luetaan. set-akcessorin koodi suoritetaan, kun ominaisuuden arvoa muutetaan. Kaikkia ominaisuuksia, joilla on vain get-akcessor, pidetรครคn vain luku -oikeuksina, kaikkia ominaisuuksia, joilla on vain set-akcessor, pidetรครคn vain kirjoitusoikeuksina, ja kaikkia ominaisuuksia, joilla on sekรค get- ettรค set-akcessorit, pidetรครคn luku- ja kirjoitusoikeuksina. Apex-ominaisuuden syntaksi:

public class myApexClass {
// Property declaration
	access_modifier return_type property_name {
	get {
			//code
		}
		set{
			//code
		}
	}
}

Tรคssรค access_modifier on ominaisuuden kรคyttรถoikeusmรครคre, return_type on ominaisuuden tietotyyppi ja property_name on ominaisuuden nimi.

Alla on esimerkki Apex-ominaisuudesta, jolla on sekรค get- ettรค set-akussorit:

public class myApex{
	public String name{
		get{ return name; }
		set{ name = value; }
	}
}

Tรคssรค ominaisuuden nimi on name, se on julkinen ominaisuus ja palauttaa merkkijono-tietotyypin.

get- ja set-lohkoissa ei ole pakollista olla koodia. Nรคmรค lohkot voidaan jรคttรครค tyhjiksi automaattisen ominaisuuden mรครคrittรคmiseksi. Esimerkiksi:

public double MyReadWriteProp{ get; set; }

Get- ja set-kรคyttรถoikeudet voidaan mรครคrittรครค myรถs omilla kรคyttรถoikeusmรครคritteillรครคn. Jos kรคyttรถoikeusmรครคrite on mรครคritelty mรครคritteen kanssa, se ohittaa ominaisuuden kรคyttรถoikeusmรครคritteen. Esimerkiksi:

public String name{private get; set;}// name is private for read and public for write.

Luokat mรครคrittelevรคt uudelleenkรคytettรคvรคn logiikan, jota kutsutaan eksplisiittisesti. Seuraavaksi kรคsiteltรคvรคt liipaisimet (triggerit) suoritetaan automaattisesti aina, kun tietueet muuttuvat.

Apex Trigger

Apex-kรคynnistimet mahdollistavat mukautetun Apexin suorittamisen ennen DML-toiminnon suorittamista ja sen jรคlkeen.

Apex tukee seuraavia kahden tyyppisiรค liipaisimia:

Ennen liipaisimia: Nรคitรค kรคynnistimiรค kรคytetรครคn kentรคn arvon validointiin ja pรคivittรคmiseen ennen tietueen tallentamista tietokantaan.

Liipaisimien jรคlkeen: Nรคitรค kรคynnistimiรค kรคytetรครคn kenttien arvojen (kuten tietue-ID:n ja LastModifiedDate-kentรคn) kรคyttรคmiseen, jotka jรคrjestelmรค asettaa sen jรคlkeen, kun tietue on vahvistettu tietokantaan. Nรคitรค kenttien arvoja voidaan kรคyttรครค muiden tietueiden muokkaamiseen. Kรคynnistimien jรคlkeen kรคynnistyvรคt tietueet ovat vain luku -tilassa.

Bulk-triggerien kirjoittaminen on paras kรคytรคntรถ. Bulk-triggeri voi kรคsitellรค sekรค yhden ettรค useita tietueita kerrallaan.

Apex-liipaisimen syntaksi:

trigger TriggerName on ObjectName (trigger_events) {
	//Code_block
 }

Tรคssรค TriggerName on liipaisimen nimi, ObjectName on sen objektin nimi, johon liipaisu on kirjoitettu, ja trigger_events on pilkuilla erotettu tapahtumien luettelo.

Apex-kรคynnistimet tukevat seuraavia tapahtumia: ennen lisรคystรค, ennen pรคivitystรค, ennen poistoa, lisรคyksen jรคlkeen, pรคivityksen jรคlkeen, poiston jรคlkeen ja poiston palautuksen jรคlkeen.

Staattisia avainsanoja ei voi kรคyttรครค Apex-liipaisimessa. Kaikkia sisรคluokkiin sovellettavia avainsanoja voidaan kรคyttรครค Apex-liipaisimessa.

Jokainen triggeri mรครคrittelee implisiittisiรค muuttujia, jotka palauttavat ajonaikaisen kontekstin. Nรคmรค muuttujat on mรครคritelty System.Trigger-luokassa ja niitรค kutsutaan kontekstimuuttujiksi. Alla olevat kaksi kuvakaappausta listaavat Apex-triggerien tukemat kontekstimuuttujat:

Apex-liipaisimen kontekstimuuttujat

Apex-liipaisimen kontekstimuuttujat (jatkuu)

Seuraavassa on huomioitavia asioita Apex-kรคynnistimien kontekstimuuttujista:

  • ร„lรค kรคytรค trigger.new- ja trigger.old-muuttujaa DML-toiminnoissa.
  • Trigger.new-tiedostoa ei voi poistaa.
  • Trigger.new on vain luku -tilassa triggerien jรคlkeen.
  • Trigger.new-funktiota voidaan kรคyttรครค saman objektin kenttien arvojen muuttamiseen vain ennen kรคynnistystรค.

Alla olevat kaksi kuvakaappausta listaavat huomioitavia asioita tietyistรค toimista eri laukaisutapahtumissa:

Apex-liipaisintatapahtumien huomioitavaa

Apex-liipaisintatapahtumien huomioitavaa (jatkuu)

Triggerit kรคsittelevรคt reaaliaikaista logiikkaa, mutta jotkin tyรถt ovat yksinkertaisesti liian suuria yhdeksi transaktioksi. Tรคssรค kohtaa Apex-erรคlaskenta tulee mukaan kuvaan.

Erรคluokka Apexissa

Salesforcessa erรคajoluokkaa kรคytetรครคn kรคsittelemรครคn suuri mรครคrรค tietueita, jotka normaalisti kรคsiteltรคessรค ylittรคisivรคt Apex-hallintarajoitukset. Erรคluokka suorittaa koodin asynkronisesti.

Erรคluokan edut ovat seuraavat:

  • Erรคluokka kรคsittelee tiedot lohkoissa, ja jos yhden lohkon kรคsittely epรคonnistuu, onnistuneesti kรคsiteltyjรค lohkoja ei peruta.
  • Jokainen erรคluokan tietokokonaisuus kรคsitellรครคn uusilla hallintaohjelman rajoituksilla, mikรค varmistaa, ettรค koodi suoritetaan hallintaohjelman suoritusrajojen puitteissa.

Database.Batchable-rajapinnan on oltava toteutettu Apex-luokalla, jotta sitรค voidaan kรคyttรครค erรคajoluokkana. Se tarjoaa kolme metodia, jotka erรคajoluokan on toteutettava:

1. aloita()

Tรคmรค metodi luo rajapinnan execute-metodin kรคsittelemien tietueiden tai objektien laajuuden. Sitรค kutsutaan vain kerran erรคajon suorituksen aikana. Tรคmรค metodi palauttaa joko Database.QueryLocator-objektin tai iteroitavan tietueen. Database.QueryLocator-objektia kรคyttรคmรคllรค SOQL-kyselyllรค voidaan noutaa 50 miljoonaa tietuetta, mutta iteroitavaa tietuetta kรคytettรคessรค SOQL-kyselyllรค voidaan noutaa vain 50 000 tietuetta. Iteroitavaa tietuetta kรคytetรครคn monimutkaisen laajuuden luomiseen erรคajoluokalle.

start-metodin syntaksi:

global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContext bc) {}

2. suorita()

Tรคtรค metodia kรคytetรครคn jokaisen tietolohkon kรคsittelyyn. Suoritusmetodia kutsutaan jokaiselle tietuelohkolle. Suorituserรคn oletuskoko on 200 tietuetta. Suoritusmetodi ottaa vastaan โ€‹โ€‹kaksi argumenttia:

Viittaus Database.BatchableContext-objektiin,

sObject-luettelo, kuten List , tai luettelo parametrisoiduista tyypeistรค. Suoritusmetodin syntaksi:

global void execute(Database.BatchableContext bc, List<P> records){}

3. viimeistely()

finish-metodia kutsutaan kerran erรคkรคsittelyluokan suorituksen aikana. finish-metodissa voidaan suorittaa jรคlkikรคsittelyoperaatioita. Esimerkiksi: vahvistussรคhkรถpostin lรคhettรคminen. Tรคtรค metodia kutsutaan, kun kaikki erรคt on kรคsitelty. finish-metodin syntaksi:

global void finish(Database.BatchableContext bc){}

Database.BatchableContext-objekti

Jokaisella Database.Batchable-rajapinnan metodilla on viittaus Database.BatchableContext-objektiin.

Tรคtรค objektia kรคytetรครคn track erรคajon edistyminen.

Seuraavat ovat BatchableContextin tarjoamat instanssimetodit:

  • getChildJobId(): Tรคmรค metodi palauttaa parhaillaan kรคsiteltรคvรคnรค olevan erรคajon tunnuksen.
  • getJobId(): Tรคmรค menetelmรค palauttaa erรคtyรถn tunnuksen.

Alla on erรคluokan syntaksi:

global class MyBatchClass implements Database.Batchable<sObject> {
	global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContext bc) {
// collect the batches of records or objects to be passed to execute
}
global void execute(Database.BatchableContext bc, List<P> records){
// process each batch of records
}
global void finish(Database.BatchableContext bc){
// execute any post-processing operations
}
}

Database.executeBatch-menetelmรค

Database.executeBatch-metodia kรคytetรครคn erรคajoluokan suorittamiseen.

Tรคmรค metodi ottaa kaksi parametria: kรคsiteltรคvรคn erรคluokan instanssin ja valinnaisen scope-parametrin, joka mรครคrittรครค erรคn koon. Jos sitรค ei ole mรครคritetty, kรคytetรครคn oletusarvoista kokoa 200.

Database.executeBatch-funktion syntaksi:

Database.executeBatch(myBatchObject, scope)

Suoritetaan erรคluokkaa nimeltรค MyBatchClass:

MyBatchClass myBatchObject = new MyBatchClass();
Id batchId = Database.executeBatch(myBatchObject, 100);

Tietokanta.Tilallinen

Erรคluokka on oletusarvoisesti tilaton. Joka kerta, kun suoritusmetodia kutsutaan, objektista vastaanotetaan uusi kopio ja kaikki luokan muuttujat alustetaan.

Database.Stateful on toteutettu tekemรครคn erรคluokasta tilallisen.

Jos erรคajoluokkasi toteuttaa tietokantaTilatietoinen rajapinta, kaikki instanssimuuttujat sรคilyttรคvรคt arvonsa, mutta staattiset muuttujat nollataan tapahtumien vรคlillรค.

Asynkroninen Apex Beyond Batch

Batch Apex on vain yksi monista tavoista suorittaa koodia asynkronisesti. Salesforce tarjoaa neljรค asynkronista vaihtoehtoa, ja oikean valinta riippuu siitรค, kuinka paljon dataa kรคsittelet ja onko tyรถt ketjutettava vai ajoitettava.

  • Tulevaisuuden menetelmรคt: @future-merkinnรคllรค varustetut nรคmรค sopivat parhaiten yksinkertaisiin, kรคynnistys- ja unohdustoimintoihin, kuten ulkoisiin verkkopalveluihin tehtรคviin kutsuihin.
  • Jonotettava Apex: Toteuttaa Queueable-rajapinnan, hyvรคksyy monimutkaisia โ€‹โ€‹objektityyppejรค, palauttaa tyรถtunnuksen ja tukee tyรถtehtรคvien ketjuttamista toiseen.
  • Erรค Apex: Kรคsittelee erittรคin suuria tietomรครคriรค paloina, kuten edellรค on kuvattu.
  • Ajoitettu Apex: Toteuttaa Schedulable-rajapinnan, jotta luokka suoritetaan tiettyyn aikaan, kuten yรถllinen siivoustyรถ.
Tyyppi Best For Avainominaisuus
Tuleva menetelmรค Yksinkertaiset huomiotekstit Tulen ja unohda
Jonotettava Apex Jaksottainen kรคsittely Tyรถketjutus ja seuranta
Erรค Apex Miljoonia tietueita Paloiteltu kรคsittely
Ajoitettu Apex Toistuvat tyรถt Cron-pohjainen ajoitus

Valitsemastasi toteutusmallista riippumatta jokaista tapahtumaa mitataan edelleen alla lueteltuja alustakohtaisia โ€‹โ€‹โ€‹โ€‹hallitsijarajoituksia vasten.

Apex Governor Limits

Apex-hallintarajoitukset ovat Apex-suoritusmoottorin valvomia rajoituksia sen varmistamiseksi, ettรค karkaava Apex-koodi ja -prosessit eivรคt monopolisoi jaettuja resursseja eivรคtkรค hรคiritse muiden kรคyttรคjien kรคsittelyรค monivuokraajaympรคristรถssรค. Nรคmรค rajoitukset tarkistetaan jokaista Apex-tapahtumaa kohden. Seuraavat hallintarajoitukset on mรครคritelty Salesforcen toimesta jokaiselle Apex-tapahtumalle:

Tuotetiedot Raja
SOQL-kyselyt, jotka voidaan tehdรค synkronisessa tapahtumassa 100
SOQL-kyselyt, jotka voidaan tehdรค asynkronisessa tapahtumassa 200
Tietueet, jotka voidaan noutaa SOQL-kyselyllรค 50,000
Tietueet, jotka Database.getQueryLocator voi noutaa 10,000
Apex-tapahtumassa suoritettavat SOSL-kyselyt 20
Tietueet, jotka voidaan noutaa SOSL-kyselyllรค 2,000
Apex-tapahtumassa suoritettavat DML-lausekkeet 150
Tietueet, jotka voidaan kรคsitellรค DML-kรคskyn, Approval.processin tai database.emptyRecycleBinin tuloksena 10,000
Apex-tapahtumassa tehtรคvรคt callout-kutsut 100
Apex-tapahtumassa suoritettavien kaikkien kutsujen kumulatiivinen aikakatkaisuraja 120 sekuntia
System.enqueueJob-jonoon lisรคttรคvien Apex-tรถiden raja 50
Toteutusaikaraja jokaiselle Apex-tapahtumalle 10 minuuttia
Apex-luokassa ja -liipaisimessa kรคytettรคvien merkkien rajoitus 1 euroa
Synkronisen tapahtuman suorittimen aikaraja 10,000 millisekuntia
Asynkronisen tapahtuman suorittimen aikaraja 60,000 millisekuntia
Keon kokonaiskoko 6 Mt (synkroninen) / 12 Mt (asynkroninen)

Kuinka kirjoittaa testiluokka Apexissa

Salesforce vaatii, ettรค vรคhintรครคn 75 prosenttia Apex-koodistasi on katettu yksikkรถtesteillรค, ennen kuin voit ottaa sen kรคyttรถรถn tuotantoympรคristรถssรค, ja jokaisen triggerin on oltava jollain tavalla katettu. Testiluokkien kirjoittaminen on siksi Apex-ydintaito, ei valinnainen lisรค.

Testiluokka annotoidaan @isTest-tunnisteella, ja jokainen testimetodi merkitรครคn myรถs @isTest-tunnisteella. Testimetodit eivรคt tallenna tietoja tietokantaan eivรคtkรค nรคe useimpia olemassa olevia organisaatiotietoja, joten jokainen testi luo omat tietueensa. Test.startTest()- ja Test.stopTest()-metodit antavat testattavalle koodille uudet hallintarajoitukset, ja vรคitteet varmistavat, ettรค logiikka toimi odotetulla tavalla.

Tรคssรค on yksinkertainen testiluokka tilin luomislogiikalle:

@isTest
private class AccountHandlerTest {
    @isTest
    static void testCreateAccount() {
        Account acc = new Account(Name = 'Test Account');
        Test.startTest();
        insert acc;
        Test.stopTest();
        Account result = [SELECT Id, Name FROM Account WHERE Id = :acc.Id];
        System.assertEquals('Test Account', result.Name);
    }
}

Noudata nรคitรค ohjeita kirjoittaessasi kokeita:

  • Kรคytรค @testSetup-metodia luodaksesi jaetun testidatan kerran kaikille luokan testimetodeille.
  • Testaa joukkotoimintoja lisรครคmรคllรค 200 tietuetta yhden sijaan.
  • Kรคsittele positiivisia, negatiivisia ja rajoitetun kรคyttรคjรคn skenaarioita.
  • Sisรคllytรค aina merkitykselliset System.assert-lauseet; kattavuus ilman vรคitteitรค ei todista mitรครคn.

Apexin parhaat kรคytรคnnรถt

Aloittelijat kirjoittavat usein Apex-koodia, joka toimii yhden tietueen kanssa, mutta epรคonnistuu todellisuudessa joukkooperaatioissa. Seuraavat kรคytรคnnรถt pitรคvรคt koodisi hallintarajojen sisรคllรค ja helpommin yllรคpidettรคvรคnรค:

  • Kookkaa kaikki: Kirjoita logiikka, joka kรคsittelee tietuekokoelmia, koska kรคynnistimet voivat vastaanottaa jopa 200 tietuetta yhdessรค erรคssรค.
  • Pidรค SOQL ja DML poissa silmukoista: Kysely ennen silmukkaa, kerรครค muutokset listaan โ€‹โ€‹ja suorita yksi DML-lauseke silmukan jรคlkeen.
  • Yksi liipaisin objektia kohden: Pidรค liipaisimet logiikkavapaina ja delegoi tyรถ kรคsittelijรคluokille, mikรค tekee suoritusjรคrjestyksestรค ennustettavan.
  • Kรคytรค jakamisen kanssa: Kรคytรค tietuetason suojausta, ellei ole dokumentoitua syytรค suorittaa sitรค jรคrjestelmรคkontekstissa.
  • Vรคltรค tunnisteiden kovakoodausta: Tietue-ID:t eroavat eri hiekkalaatikoiden ja tuotantoympรคristรถjen vรคlillรค, joten hae niitรค tai kรคytรค mukautettuja metatietoja.
  • Koodin rajoitusten valvonta: Limits-luokan metodit, kuten Limits.getQueries(), antavat sinun tarkistaa resurssien kulutuksen suorituksen aikana.

๐Ÿ’ก Vinkki: Suorita koodisi 200 tietueen verran hiekkalaatikossa ennen kรคyttรถรถnottoa. Useimmat hallintarajoitusten virheet ilmenevรคt vain suurissa mรครคrissรค, ja niiden havaitseminen varhain on paljon halvempaa kuin niiden virheenkorjaus tuotannossa.

UKK

Ei. Apex lainaa Java-tyyppinen syntaksi, mutta se ei ole kirjainkokoeroinen, toimii vain Salesforce Lightning Platformissa, integroi SOQL:n suoraan kieleen ja sitรค sรครคtelevรคt tapahtumakohtaiset rajoitukset, jotka Java ei ole.

Rekisterรถidy ilmaiseen Salesforce Developer Edition -organisaatioon, joka sisรคltรครค Developer Consolen, ja seuraa kรคytรคnnรถn harjoituksia trailhead, Salesforcen virallinen oppimisalusta.

Visualforce on merkintรคkieli kรคyttรถliittymรคsivujen rakentamiseen, kun taas Apex on palvelinpuolen kieli, joka tarjoaa niiden taustalla olevan logiikan. Visualforce-sivut kutsuvat usein Apex-ohjainluokkia datan kyselyyn ja pรคivittรคmiseen.

Kyllรค. Agentforce kehittรคjille, Salesforcen tekoรคlyavustaja Visual Studio Code, luo ja selittรครค Apex-koodit luonnollisen kielen kehotteista. Tarkista ja testaa tekoรคlyn luomaa koodia aina hallintarajoituksia vasten ennen kรคyttรถรถnottoa.

@InvocableMethod-annotaatiolla merkityt Apex-luokat voidaan nรคyttรครค mukautettuina toimintoina, jolloin Einstein-botit ja Agentforce-agentit voivat kutsua liiketoimintalogiikkaasi. Apex voi myรถs kutsua Einstein-kehotepohjia ja tekoรคlymalleja alustan API-rajapintojen kautta.

Tiivistรค tรคmรค viesti seuraavasti: