APEX-zelfstudie: Apex-programmeerklasse en coderingsvoorbeelden
Wat is Apex in Salesforce?
Top is een objectgeoriënteerde en sterk getypeerde programmeertaal die is ontwikkeld door Salesforce voor het bouwen van Software as a Service (SaaS) en Customer Relationship Management (CRM). Apex helpt ontwikkelaars om SaaS-applicaties van derden te maken en bedrijfslogica toe te voegen aan systeemgebeurtenissen door back-end databaseondersteuning en client-serverinterfaces te bieden.
Apex helpt ontwikkelaars bedrijfslogica toe te voegen aan de systeemgebeurtenissen, zoals klikken op knoppen, gerelateerde recordupdates en Visualforce-pagina's. Apex heeft een soortgelijke syntaxis als Java. Registreer voor Salesforce om te leren hoe het CRM werkt
Kenmerken van Apex-programmeertaal
Dit zijn de belangrijke kenmerken van Salesforce Apex:
- Apex is een hoofdletterongevoelige taal.
- U kunt DML-bewerkingen zoals INSERT, UPDATE, UPSERT en DELETE uitvoeren op sObject-records met behulp van Apex.
- U kunt sObject-records opvragen met behulp van SOQL (Salesforce Object Query Language) en SOSL (Salesforce Object Search Language) in Apex.
- Hiermee kunt u een hoofdstuk toets en voer ze uit om de code dekking en efficiëntie van de code in apex.
- Apex wordt uitgevoerd in een omgeving met meerdere tenants, en Salesforce heeft een aantal gouverneurslimieten gedefinieerd die voorkomen dat een gebruiker de gedeelde bronnen beheert. Elke code die de limiet van de Salesforce-gouverneur overschrijdt, mislukt en er verschijnt een fout.
- Salesforce-object kan worden gebruikt als gegevenstype in apex. Bijvoorbeeld -
Account acc = new Account();
Hier is Account een standaard Salesforce-object.
- Apex wordt automatisch geüpgraded bij elke Salesforce-release.
Wanneer moet een ontwikkelaar voor Apex kiezen?
Apex-code moet alleen worden geschreven als een bedrijfsscenario te complex is en niet kan worden geïmplementeerd met de vooraf gebouwde functionaliteit van Salesforce.
Hieronder staan een paar scenario's waarin we Apex-code moeten schrijven:
- Om webservices te creëren die Salesforce integreren met andere applicaties.
- Om aangepaste validatie op sobjects te implementeren.
- Om aangepaste apexlogica uit te voeren wanneer een DML-bewerking wordt uitgevoerd.
- Om functionaliteit te implementeren die niet kan worden geïmplementeerd met behulp van bestaande workflowstromen en functionaliteit van procesbouwers.
- Opzetten e-maildienstenmoet u de inhoud, headers en bijlagen van e-mails verwerken met behulp van Apex-code.
Werkstructuur van Apex
In deze Apex-tutorial leren we nu over de werkstructuur van Apex:
Hieronder vindt u de stroom van acties voor een Apex-code:
- Actie van ontwikkelaar: Alle door een ontwikkelaar geschreven Apex-code wordt gecompileerd in een reeks instructies die kunnen worden begrepen door de Apex Runtime-interpreter wanneer de ontwikkelaar de code op het platform opslaat en deze instructies vervolgens als metagegevens op het platform opslaan.
- Actie van de eindgebruiker: Wanneer de gebruikersgebeurtenis een apex-code uitvoert, haalt de platformserver de gecompileerde instructies uit metagegevens en voert deze door de apex-interpreter voordat het resultaat wordt geretourneerd.
Apex-syntaxis
Variabele declaratie
Omdat Apex een sterk getypeerde taal is, is het verplicht om een variabele met datatype in Apex te declareren.
Bijvoorbeeld:
contact con = new contact();
hier wordt de variabele con gedeclareerd met contact als datatype.
SOQL-query
SOQL staat voor Salesforce Object Query Language. SOQL wordt gebruikt om sObject-records op te halen uit de Salesforce-database. Bijvoorbeeld-
Account acc = [select id, name from Account Limit 1];
Met de bovenstaande query wordt de accountrecord opgehaald uit de Salesforce-database.
Loop-verklaring
Loop-instructie wordt gebruikt om de records in een lijst te doorlopen. Het aantal iteraties is gelijk aan het aantal records in de lijst. Bijvoorbeeld:
list<Account>listOfAccounts = [select id, name from account limit 100]; // iteration over the list of accounts for(Account acc : listOfAccounts){ //your logic }
In het bovenstaande codefragment is listOfAccounts een variabele van het datatype list.
Verklaring inzake stroombeheersing
De stroomcontrole-instructie is handig als u bepaalde regels van de code wilt uitvoeren op basis van bepaalde voorwaarden.
Bijvoorbeeld:
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 }
Met het bovenstaande codefragment worden accountrecords uit de database opgevraagd en de lijstgrootte gecontroleerd.
DML-verklaring
DML staat voor datamanipulatietaal. DML-instructies worden gebruikt om gegevens in de Salesforce-database te manipuleren. Bijvoorbeeld -
Account acc = new Account(Name = ‘ Test Account’); Insert acc; //DML statement to create account record.
Apex-ontwikkelomgeving
In deze Apex-programmeertutorial leren we over de Apex-ontwikkelomgeving:
Apex-code kan worden ontwikkeld in de sandbox en de ontwikkelaarsversie van Salesforce.
Het is een aanbevolen procedure om de code in de sandbox-omgeving te ontwikkelen en deze vervolgens te implementeren in de productieomgeving.
Apex-codeontwikkelingstools: Hieronder staan de drie tools die beschikbaar zijn voor het ontwikkelen van Apex-code in alle edities van Salesforce.
- Force.com-ontwikkelaarsconsole
- Force.com IDE
- Code-editor in de Salesforce-gebruikersinterfaceYou
Gegevenstype in Apex
Hieronder staan de gegevenstypen die door Apex worden ondersteund:
Primitief
Geheel getal, Double, Long, Date, Date Time, String, ID en Boolean worden beschouwd als primitieve gegevenstypen. Alle primitieve gegevenstypen worden doorgegeven op basis van waarde, niet op basis van referentie.
Collecties
Er zijn drie soorten collecties beschikbaar in Apex
- Lijst: het is een geordende verzameling primitieven, sObjects, verzamelingen of Apex-objecten op basis van indices.
- Set: een ongeordende verzameling unieke primitieven.
- Kaart: Het is een verzameling unieke, primitieve sleutels die worden toegewezen aan afzonderlijke waarden die primitieven, sObjects, verzamelingen of Apex-objecten kunnen zijn.
sObject
Dit is een speciaal gegevenstype in Salesforce. Het is vergelijkbaar met een tabel in SQL en bevat velden die vergelijkbaar zijn met kolommen in SQL.
enums
Enum is een abstract gegevenstype dat één waarde van een eindige reeks gespecificeerde identificatiegegevens opslaat
Klassen
Objecten
Het verwijst naar elk gegevenstype dat in Apex wordt ondersteund.
interfaces
Apex-toegangsspecificatie
Hieronder staan de toegangsspecificaties die door Apex worden ondersteund:
Publieke
Deze toegangsspecificatie geeft toegang tot een klasse, methode en variabele die door een apex binnen een naamruimte moet worden gebruikt.
Privé
Deze toegangsspecificatie geeft toegang tot een klasse, methode of variabele die lokaal moet worden gebruikt of binnen de codesectie die is gedefinieerd. Bij alle technieken hebben variabelen waarvoor geen enkele toegangsspecificatie is gedefinieerd, de standaardtoegangsspecificatie privé.
Beschermd
Deze toegangsspecificatie geeft toegang tot een variabele methode die kan worden gebruikt door alle interne klassen binnen de definiërende Apex-klasse.
Globaal
Deze toegangsspecificatie geeft toegang tot een klasse, methode en variabele die door een apex zowel binnen een naamruimte als buiten de naamruimte moet worden gebruikt. Het is een goede gewoonte om geen globaal zoekwoord te gebruiken totdat het nodig is.
Trefwoorden in Apex
Met delen
Als een klasse met dit sleutelwoord is gedefinieerd, worden alle regels voor delen van toepassing op de huidige gebruiker. Als dit sleutelwoord ontbreekt, wordt de code uitgevoerd onder de systeemcontext.
Bijvoorbeeld:
public with sharing class MyApexClass{ // sharing rules enforced when code in this class execute }
Zonder te delen
Als een klasse met dit trefwoord wordt gedefinieerd, zijn niet alle regels voor delen van toepassing op de huidige gebruiker.
Bijvoorbeeld:
public without sharing class MyApexClass{ // sharing rules is not enforced when code in this class execute }
Statisch
Een variabele, Method, wordt gedefinieerd met het statische trefwoord, wordt één keer geïnitialiseerd en aan de klasse gekoppeld. Statische variabelen, methoden kunnen rechtstreeks op klassenaam worden aangeroepen zonder de instantie van een klasse te creëren.
uiteinde
Een constante, Methode is gedefinieerd met het laatste trefwoord en kan niet worden overschreven. Bijvoorbeeld:
public class myCls { static final Integer INT_CONST = 10; }
Als u de waarde voor deze INT_CONST variabele probeert te overschrijven, krijgt u een uitzondering – System.FinalException: De laatste variabele is al geïnitialiseerd.
Retourneren
Dit trefwoord retourneert een waarde uit een methode. Bijvoorbeeld:
public String getName() { return 'Test' ; }
Null
Het definieert een nulconstante en kan aan een variabele worden toegewezen. Bijvoorbeeld
Boolean b = null;
Virtueel
Als een klasse is gedefinieerd met een virtueel trefwoord, kan deze worden uitgebreid en overschreven.
Abstract
Als een klasse is gedefinieerd met abstract trefwoord, moet deze ten minste één methode met trefwoord abstract bevatten, en die methode mag alleen een handtekening hebben.
Bij voorbeeld
public abstract class MyAbstrtactClass { abstract Integer myAbstractMethod1(); }
Apex-reeks
Een string is een reeks tekens zonder tekenlimieten. Bijvoorbeeld:
String name = 'Test';
Er zijn verschillende ingebouwde methoden die worden geleverd door de String-klasse in Salesforce. Hieronder volgen de weinige frequent en meest gebruikte functies:
afkorten(max.breedte)
Deze methode kort een string af tot de opgegeven lengte en retourneert deze als de lengte van de gegeven string langer is dan de opgegeven lengte; anders retourneert deze de oorspronkelijke string. Als de waarde voor de variabele maxWidth kleiner is dan 4, retourneert deze methode een runtime-uitzondering – System.StringException: minimale afkortingsbreedte is 4
Bijvoorbeeld:
String s = 'Hello World'; String s2 = s.abbreviate(8); System.debug('s2'+s2); //Hello...
hoofdletter ()
Deze methode converteert de eerste letter van een string naar hoofdletters en retourneert deze.
Bijvoorbeeld:
String s = 'hello; String s2 = s.capitalize(); System.assertEquals('Hello', s2);
bevat(subtekenreeks)
Deze methode retourneert true als de String die de methode aanroept de opgegeven subtekenreeks bevat.
String name1 = 'test1'; String name2 = 'test2'; Boolean flag = name.contains(name2); System.debug('flag::',+flag); //true
is gelijk aan(stringOrId)
Deze methode retourneert true als de doorgegeven parameter niet nul is en dezelfde binaire reeks tekens aangeeft als de tekenreeks die de methode aanroept.
Bij het vergelijken van ID-waarden is het mogelijk dat de lengte van de ID's niet gelijk is. Bijvoorbeeld: als een string die 15 karakters id vertegenwoordigt wordt vergeleken met een object dat 18 karakters ID vertegenwoordigt, retourneert deze methode true. Bijvoorbeeld:
Id idValue15 = '001D000000Ju1zH'; Id idValue18 = '001D000000Ju1zHIAR'; Boolean result4 = stringValue15.equals(IdValue18); System.debug('result4', +result4); //true
In het bovenstaande voorbeeld is de gelijkheidsmethode het vergelijken van object-ID van 15 tekens met object-ID van 18 tekens. Als beide ID's dezelfde binaire reeks vertegenwoordigen, wordt 'true' geretourneerd.
Gebruik deze methode om hoofdlettergevoelige vergelijkingen te maken.
escapeSingleQuotes(stringToEscape)
Deze methode voegt een escape-teken (\) toe vóór een enkel aanhalingsteken in een tekenreeks en retourneert dit teken. Deze methode voorkomt SOQL-injectie tijdens het maken van een dynamische SOQL-query. Deze methode zorgt ervoor dat alle enkele aanhalingstekens worden beschouwd als omsluitende tekenreeksen, in plaats van als databaseopdrachten.
Bijvoorbeeld:
String s = 'Hello Tom'; system.debug(s); // Outputs 'Hello Tom' String escapedStr = String.escapeSingleQuotes(s); // Outputs \'Hello Tom\'
verwijder(subtekenreeks)
Deze methode verwijdert al het voorkomen van de genoemde subtekenreeks uit de String die de methode aanroept en retourneert de resulterende tekenreeks.
Bij voorbeeld
String s1 = 'Salesforce and force.com'; String s2 = s1.remove('force'); System.debug( 's2'+ s2);// 'Sales and .com'
subtekenreeks(startIndex)
Deze methode retourneert een subtekenreeks die begint bij het teken bij startIndex en zich uitstrekt tot de laatste van de tekenreeks.
Bijvoorbeeld:
String s1 = 'hamburger'; String s2 = s1.substring(3); System.debug('s2'+s2); //burger
omgekeerde()
Deze methode keert alle tekens van een string om en retourneert deze. Bijvoorbeeld:
String s = 'Hello'; String s2 = s.reverse(); System.debug('s2::::'+s2);// olleH // Hello
trim(): Deze methode verwijdert alle voorafgaande witruimten uit een string en retourneert deze.
waardeVan(naarConverteren)
Deze methode retourneert de tekenreeksrepresentatie van het doorgegeven object.
Limieten voor Apex-gouverneur
Apex Governor-limieten zijn de limieten die door de Apex Runtime Engine worden afgedwongen om ervoor te zorgen dat alle Runway Apex-code en -processen de gedeelde resources niet controleren en de verwerking voor andere gebruikers in de multitenant-omgeving niet schenden. Deze limieten worden geverifieerd tegen elke Apex-transactie. Hieronder volgen de Governor-limieten die door Salesforce zijn gedefinieerd voor elke Apex-transactie:
Beschrijving | Begrenzing |
---|---|
SOQL-query's die in een synchrone transactie kunnen worden uitgevoerd | 100 |
SOQL-query's die kunnen worden uitgevoerd in een asynchrone transactie | 200 |
Records die kunnen worden opgehaald door een SOQL-query | 50000 |
Records die kunnen worden opgehaald door Database.getQueryLocator | 10000 |
SOSL-query's die kunnen worden uitgevoerd in een Apex-transactie | 20 |
Records die kunnen worden opgehaald met een SOSL-query | 2000 |
DML-instructies die kunnen worden uitgevoerd in een Apex-transactie | 150 |
Records die kunnen worden verwerkt als resultaat van een DML-instructie, Approval.process of database.emptyRecycleBin | 10000 |
Callouts die kunnen worden uitgevoerd in een toptransactie. | 100 |
Cumulatieve time-outlimiet voor alle oproepen die worden uitgevoerd in een Apex-transactie | 120 seconden |
Beperk het aantal Apex-taken dat met System.enqueueJob aan de wachtrij kan worden toegevoegd | 50 |
Uitvoeringstermijn voor elke Apex-transactie | 10 minuten |
Beperking van het aantal tekens dat in een Apex-klasse en trigger kan worden gebruikt | 1 miljoen |
CPU-tijdslimiet voor synchrone transactie | 10,000 milliseconden |
CPU-tijdslimiet voor asynchrone transactie | 60,000 milliseconden |
Apex-getter en setter
De Apex-eigenschap is vergelijkbaar met de Apex-variabele. Getter en setter zijn nodig voor een topeigenschap. Getter en setter kunnen worden gebruikt om code uit te voeren voordat de eigenschapswaarde wordt geopend of gewijzigd. De code in de get-accessor wordt uitgevoerd wanneer een eigenschapswaarde wordt gelezen. De code in de set-accessor wordt uitgevoerd wanneer een eigenschapswaarde wordt gewijzigd. Elke eigenschap met get accessor wordt beschouwd als alleen-lezen, elke eigenschap met set accessor wordt geacht alleen te schrijven, elke eigenschap met zowel get als set accessor wordt beschouwd als lezen-schrijven. Syntaxis van een apex-eigenschap:
public class myApexClass { // Property declaration access_modifierreturn_typeproperty_name { get { //code } set{ //code } }
Hier is access_modifier de toegangsmodifier van de eigenschap. return_type is het dataType van de eigenschap. property_name is de naam van de eigenschap.
Hieronder ziet u een voorbeeld van een Apex-eigenschap met zowel get- als set-accessor.
public class myApex{ public String name{ get{ return name;} set{ name = 'Test';} } }
Hier is de eigenschapsnaam naam, en het is een openbare eigenschap, en het retourneert een tekenreeks dataType.
Het is niet verplicht om code in het get- en set-blok te hebben. Deze blokken kunnen leeg worden gelaten om een automatische eigenschap te definiëren. Bijvoorbeeld:
public double MyReadWriteProp{ get; set; }
Accessor ophalen en instellen kan ook worden gedefinieerd met hun toegangsmodifier. Als een accessor is gedefinieerd met een modifier, overschrijft deze de toegangsmodifier voor de eigenschap. Bijvoorbeeld:
public String name{private get; set;}// name is private for read and public to write.
Apex-klasse
Een Apex-klasse is een blauwdruk of sjabloon waaruit objecten worden gemaakt. Een object is de instantie van een klasse.
Er zijn drie manieren om apex-klassen te maken in Salesforce:
Developer Console
Force.com IDE
Detailpagina van Apex-klasse.
In apex kun je een buitenste klasse definiëren, ook wel topniveauklasse genoemd, en je kunt ook klassen definiëren binnen een buitenste klasse, genaamd binnenste klassen.
Het is verplicht om toegangsmodifiers zoals global of public te gebruiken in de declaratie van de buitenste klasse.
Het is niet nodig om de toegangsmodifier te gebruiken bij de declaratie van innerlijke klassen.
Een topklasse wordt gedefinieerd met behulp van het class-trefwoord gevolgd door de klassenaam.
Het trefwoord Extends wordt gebruikt om een bestaande klasse uit te breiden met een Apex-klasse, en het trefwoord Implements wordt gebruikt om een interface te implementeren met een Apex-klasse.
Salesforce Apex ondersteunt geen meerdere overnames; een apex-klasse kan slechts één bestaande apex-klasse uitbreiden, maar kan wel meerdere interfaces implementeren.
Een apex-klasse kan een door de gebruiker gedefinieerde constructor bevatten, en als een door de gebruiker gedefinieerde constructor niet beschikbaar is, wordt een standaardconstructor gebruikt. De code in een constructor wordt uitgevoerd wanneer een instantie van een klasse wordt gemaakt.
Syntaxis van het voorbeeld van de Apex-klasse:
public class myApexClass{ // variable declaration //constructor public myApexClass{ } //methods declaration }
Het nieuwe sleutelwoord wordt gebruikt om een exemplaar van een apex-klasse te maken. Hieronder vindt u de syntaxis voor het maken van een exemplaar van een Apex-klasse.
myApexClass obj = new myApexClass();
Apex-trigger
Met Apex-triggers kunt u aangepaste Apex uitvoeren vóór en ná het uitvoeren van een DML-bewerking.
Apex ondersteunt de volgende twee typen triggers:
Vóór triggers: deze triggers worden gebruikt om de veldwaarde te valideren en bij te werken voordat de record in de database wordt opgeslagen.
Na triggers: deze triggers worden gebruikt om toegang te krijgen tot de velden (record-ID, LastModifiedDate-veld) die door het systeem zijn ingesteld na een record dat is vastgelegd in de database. Deze veldwaarde kan worden gebruikt om andere records te wijzigen. Records die na triggers worden geactiveerd, zijn alleen-lezen.
Het is een best practice om omvangrijke triggers te schrijven. Een omvangrijke trigger kan zowel één record als meerdere records tegelijk verwerken.
Syntaxis van een apex-trigger:
trigger TriggerName on ObjectName (trigger_events) { //Code_block }
Hier is TriggerName de naam van de trigger, ObjectName is de naam van het object waarop de trigger moet worden geschreven, trigger_events is de door komma's gescheiden lijst met gebeurtenissen.
De volgende gebeurtenissen worden ondersteund door de Apex-triggers: vóór invoegen, vóór bijwerken, vóór verwijderen, na invoegen, na bijwerken, na verwijderen en na ongedaan maken van verwijderen.
Statische trefwoorden kunnen niet worden gebruikt in een Apex-trigger. Alle trefwoorden die van toepassing zijn op binnenklassen kunnen in een Apex-trigger worden gebruikt.
Er zijn impliciete variabelen gedefinieerd door elke trigger die de runtimecontext retourneert. Deze variabelen worden in het systeem gedefinieerd. Trigger-klasse. Deze variabelen worden contextvariabelen genoemd. Onderstaande schermafbeelding toont de contextvariabele die wordt ondersteund door de Apex-trigger.
Hieronder vindt u de overwegingen met betrekking tot de contextvariabele in de apex-trigger:
- Gebruik trigger.new en trigger.old niet in DML-bewerkingen.
- Trigger.new kan niet worden verwijderd.
- Trigger.new is alleen-lezen.
- Trigger.new kan alleen worden gebruikt om de waarden van de velden op hetzelfde object vóór de trigger te wijzigen.
Onderstaande schermafbeeldingen geven een overzicht van de overwegingen over specifieke acties bij verschillende triggergebeurtenissen.
Batchklasse in Apex
Batchklasse in Salesforce wordt gebruikt om een groot aantal records te verwerken die de apex-gouverneurlimieten zouden overschrijden als ze normaal zouden worden verwerkt. Batchklasse voert de code asynchroon uit.
Dit zijn de voordelen van batchklassen:
- Batchklasse verwerkt de gegevens in blokken en als een blok niet succesvol kan worden verwerkt, worden alle succesvol verwerkte blokken niet teruggedraaid.
- Elk stuk gegevens in een batchklasse wordt verwerkt met een nieuwe set gouverneurslimieten die ervoor zorgen dat de code binnen de uitvoeringslimieten van de gouverneur wordt uitgevoerd.
- Database. Een batch-interface moet worden geïmplementeerd door een Apex-klasse om als batch-klasse te kunnen worden gebruikt. Het biedt drie methoden die door de batchklasse moeten worden geïmplementeerd.
Hieronder staan de drie methoden die Database biedt. Batchable interface:
1.start()
Deze methode genereert de scope van records of objecten die verwerkt moeten worden door de interfacemethode execute. Tijdens de uitvoering van batch wordt het slechts één keer aangeroepen. Deze methode retourneert een Database.QueryLocator-object of een Iterable. Het aantal records dat opgehaald wordt door een SQL-query met behulp van het Database.QueryLocator-object is 50 miljoen records, maar met behulp van een iterable is het totale aantal records dat opgehaald kan worden door de SQL-query slechts 50000. Iterable wordt gebruikt om een complexe scope te genereren voor een batchklasse.
Syntaxis van startmethode:
global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContextbc) {}
2. uitvoeren()
Deze methode wordt gebruikt voor de verwerking van elk gegevensfragment. Voor elk deel van de records wordt de execute-methode aangeroepen. De standaard batchgrootte voor uitvoering is 200 records. De methode Execute heeft twee argumenten nodig:
Een verwijzing naar het Database.BatchableContext-object,
Een lijst met sObjecten, zoals Lijst of een lijst met geparametriseerde typen. Syntaxis van de uitvoeringsmethode:
global void execute(Database.BatchableContext BC, list<P>){}
3.finish()
De finish-methode wordt één keer aangeroepen tijdens de uitvoering van de batchklasse. Nabewerkingen kunnen worden uitgevoerd in de finish-methode. Bijvoorbeeld: het verzenden van de bevestigingsmail. Deze methode wordt aangeroepen wanneer alle batches zijn verwerkt. Syntaxis van de Finish-methode:
global void finish(Database.BatchableContext BC){}
Database.BatchableContext-object
Elke methode van de database. Batchbare interface heeft een verwijzing naar het Database.BatchableContext-object.
Dit object wordt gebruikt om de voortgang van de batchtaak bij te houden.
Hieronder staan de instantiemethoden die door BatchableContext worden geleverd:
- getChildJobId(): Deze methode retourneert de ID van een batchtaak die momenteel wordt verwerkt.
- getJobId(): Deze methode retourneert de ID van de batchtaak.
Hieronder vindt u de syntaxis van een 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-methode
De Database.executeBatch-methode wordt gebruikt voor het uitvoeren van een batchklasse.
Deze methode heeft twee parameters nodig: instantie van de batchklasse die moet worden verwerkt, optieparameter om de batchgrootte op te geven, als deze niet is opgegeven, wordt de standaardgrootte van 200 gebruikt.
Syntaxis van Database.executeBatch:
Database.executeBatch(myBatchObject,scope)
Een batchklassenaam MyBatchClass uitvoeren:
MyBatchClassmyBatchObject = new MyBatchClass(); Id batchId = Database.executeBatch(myBatchObject,100);
Database.stateful
Batchklasse is standaard staatloos. Elke keer dat de execute-methode wordt aangeroepen, wordt er een nieuwe kopie van een object ontvangen en worden alle variabelen van de klasse geïnitialiseerd.
Database.stateful is geïmplementeerd om een batchklasse stateful te maken.
Als uw batchklasse de Database , stateful interface behouden alle instantievariabelen hun waarden, maar de statische variabelen worden tussen de transacties opnieuw ingesteld.
Samenvatting
- Apex is een sterk getypeerde, objectgeoriënteerde programmeertaal dat compileert en draait op het force.com-platform
- Apex-programmeertaal is een hoofdletterongevoelige taal
- Er zijn twee soorten acties in Apex: 1) Actie van de ontwikkelaar en 2) Actie van de eindgebruiker
- Apex helpt u bij het creëren van webservices die Salesforce integreren met andere applicaties.
- Gegevenstypen die door apex worden ondersteund zijn: 1).Primitief 2) Verzamelingen 3) sObject, Enums, 4) Klassen, 5) Objecten en interfaces
- Publiek, Privé, Beschermd en Globaal worden door Apex gespecificeerd
- Trefwoorden die in Apex worden gebruikt zijn: 1) Met delen, 2) Zonder delen, 3) Statisch, 4) Final 5)Return, 6)Null, 7) Virtueel, 8) Abstract
- Een string is een reeks tekens zonder tekenlimieten
- Apex-gouverneurslimieten zijn de limieten die door de Apex-runtime-engine worden afgedwongen om ervoor te zorgen dat alle Apex-code en -processen van de startbaan
- Getter en setter kunnen worden gebruikt om code uit te voeren voordat de eigenschapswaarde wordt geopend of gewijzigd
- Er zijn drie manieren om apex-klassen te maken in Salesforce: 1) Developer Console 2) Force.com IDE en 3) Apex-klassedetailpagina.
- Met Apex-triggers kunt u aangepaste Apex uitvoeren vóór en ná het uitvoeren van een DML-bewerking.
- Batchklasse in Salesforce wordt gebruikt voor het verwerken van een groot aantal records die bij normale verwerking de Apex Governor-limieten zouden overschrijden.