Erste Schritte mit Apex
Lernziele
- Beschreiben der wichtigsten Merkmale der Programmiersprache Apex
- Speichern einer Apex-Klasse und Aufrufen von Methoden mit anonymem Apex-Code
- Prüfen von Debug-Protokollen mithilfe der Entwicklerkonsole
Bevor Sie loslegen
Wir freuen uns darauf, Sie bei der Einführung in Apex zu begleiten. In diesem Modul werden zwar grundlegende Informationen zur Programmiersprache vermittelt, dennoch geht es auch schnell in die Tiefe. Wenn Sie in diesem Modul zum ersten Mal mit Apex in Berührung kommen, empfehlen wir Ihnen dringend, zunächst das Projekt Schnelleinstieg: Apex durchzuarbeiten. Kehren Sie anschließend zurück, wir warten auf Sie!
Was ist Apex?
Als Sprache zeichnet sich Apex durch folgende Eigenschaften aus:
- Gehostet: Apex wird auf dem Server, der Lightning Platform, gespeichert, kompiliert und ausgeführt.
- Objektorientiert: Apex unterstützt Klassen, Schnittstellen und Vererbung.
- Streng typisiert: Apex prüft Verweise auf Objekte zur Kompilierzeit.
- Mandantenbewusst: Da Apex auf einer mandantenfähigen Plattform ausgeführt wird, schützt es sich strikt vor unkontrolliertem Code, indem es Obergrenzen erzwingt, die verhindern, dass Code gemeinsam genutzte Ressourcen in Beschlag nimmt.
- In der Datenbank integriert: Zugriff und Bearbeitung von Datensätzen ist ein Kinderspiel. Apex bietet direkten Zugriff auf Datensätze und deren Felder und stellt Anweisungen und Abfragesprachen zur Bearbeitung dieser Datensätze bereit.
- Datenorientiert: Apex bietet transaktionalen Zugriff auf die Datenbank, sodass Sie Vorgänge per Rollback zurücksetzen können.
- Benutzerfreundlich: Apex basiert auf Java-Idiomen.
- Einfach zu testen: Apex bietet integrierte Unterstützung für die Erstellung, Durchführung und Codeabdeckung von Einheitentests. Salesforce stellt sicher, dass der gesamte benutzerdefinierte Apex-Code erwartungsgemäß funktioniert, indem es alle Einheitentests vor allen Plattform-Upgrades durchführt.
- Mit Versionsangabe: Benutzerdefinierter Apex-Code kann jetzt für verschiedene Versionen der API gespeichert werden.
Besondere Merkmale der Sprache Apex
Wie andere objektorientierte Programmiersprachen unterstützt Apex unter anderem folgende Sprachkonstrukte:
- Klassen, Schnittstellen, Eigenschaften und Sammlungen (einschließlich Arrays)
- Objekt- und Arraynotation
- Ausdrücke, Variablen und Konstanten
- Bedingte Anweisungen (if-then-else) und Steuerflussanweisungen (For-Schleifen und While-Schleifen)
Im Gegensatz zu anderen objektorientierten Programmiersprachen unterstützt Apex Folgendes:
- Cloud-Entwicklung, da Apex in der Cloud gespeichert, kompiliert und ausgeführt wird
- Auslöser, die Auslösern in Datenbanksystemen ähneln
- Datenbankanweisungen, mit denen Sie direkte Datenbankaufrufe vornehmen können, und Abfragesprachen zum Abfragen und Suchen von Daten
- Transaktionen und Rollbacks
- Den Zugriffsmodifikator "
global
", der großzügiger ist als der Modifikator "public
" und Zugriff auf alle Namespaces und Anwendungen gewährt - Versionsverwaltung von benutzerdefiniertem Code
Darüber hinaus ist Apex eine Sprache, bei der nicht zwischen Groß- und Kleinschreibung unterschieden wird.
Entwicklungstools
Mithilfe von Salesforce Extensions for Visual Studio Code können Sie Apex auf Ihrem Client-Computer schreiben und debuggen. Siehe Salesforce Extensions for Visual Studio Code.
Sie können auch direkt im Browser auf der Salesforce-Benutzeroberfläche Apex schreiben und auf Debugging-Informationen zugreifen. Öffnen Sie die Entwicklerkonsole unter Ihr Name oder im Schnellzugriffsmenü ().
Datentypen – Übersicht
Apex unterstützt die folgenden Datentypen:
- Primitive Objekte, wie "Integer", "Double", "Long", "Date", "Datetime", "String", "ID", "Boolean" usw.
- Ein sObject, entweder als generisches sObject oder als spezifisches sObject, wie "Account", "Contact" oder "MyCustomObject__c" (sObjects werden in einem anderen Abschnitt näher behandelt).
- Eine Sammlung, wie etwa:
- Eine Liste (oder ein Array) von primitiven Objekten, sObjects, benutzerdefinierten Objekten, aus Apex-Klassen erstellten Objekten oder Sammlungen
- Eine Menge von Primitiven, sObjects, benutzerdefinierten Objekten, aus Apex-Klassen erstellten Objekten oder Sammlungen
- Eine Zuordnung von einem primitiven zu einem primitiven Objekt, einem sObject oder einer Sammlung
- Eine eingegebene Liste von Werten, auch als Enumeration bezeichnet
- Benutzerdefinierte Apex-Klassen
- Vom System bereitgestellte Apex-Klassen
Apex-Sammlungen: Liste
Listen enthalten eine geordnete Sammlung von Objekten. Listen in Apex sind gleichbedeutend mit Arrays und die beiden sind gegenseitig austauschbar.
Die folgenden beiden Deklarationen sind synonym. Die Variable "colors
" wird mithilfe der Listensyntax deklariert.
List<String> colors = new List<String>();
Alternativ kann die Variable "colors
" als Array deklariert, jedoch einer Liste statt einem Array zugeordnet werden.
String[] colors = new List<String>();
Erweitern Sie Sammlungen nach Bedarf, indem Sie mithilfe der Methode List.add()
neue Elemente hinzufügen. Verwenden Sie die Array-Notation in eckigen Klammern, um nach Index auf vorhandene Elemente in der Sammlung zu verweisen. Sie können allerdings mithilfe der Array-Notation mit eckigen Klammern keine weiteren Elemente hinzufügen.
Dieses Beispiel zeigt, wie Sie einer Liste Elemente hinzufügen, wenn Sie sie erstellen, und dann mithilfe der Methode add()
weitere Elemente hinzufügen können.
// Create a list and add elements to it in one step List<String> colors = new List<String> { 'red', 'green', 'blue' }; // Add elements to a list after it has been created List<String> moreColors = new List<String>(); moreColors.add('orange'); moreColors.add('purple');
Listenelemente können durch Angabe eines Index in eckigen Klammern ausgelesen werden, ganz so wie Arrayelemente. Sie können zum Auslesen eines Listenelements auch die Methode "get()
" verwenden. Dieses Beispiel basiert auf den im vorherigen Beispiel erstellten Listen und zeigt, wie Listenelemente mit den beiden Methoden ausgelesen werden. Das Beispiel zeigt außerdem, wie Arrayelemente mithilfe einer Schleife durchlaufen werden.
// Get elements from a list String color1 = moreColors.get(0); String color2 = moreColors[0]; System.assertEquals(color1, color2); // Iterate over a list to read elements for(Integer i=0;i<colors.size();i++) { // Write value to the debug log System.debug(colors[i]); }
Apex-Klassen
Speichern Sie die Klasse "EmailManager
" in Ihrer Organisation:
- Öffnen Sie die Developer Console unter "Your Name (Ihr Name)" oder im Schnellzugriffsmenü ().
- Klicken Sie in der Entwicklerkonsole auf File (Datei) | New (Neu) | Apex Class (Apex-Klasse) und geben Sie als Klassennamen EmailManager ein. Klicken Sie dann auf OK.
- Ersetzen Sie den Standardtext der Klasse durch das Beispiel für die "
EmailManager
"-Klasse.
Die "EmailManager
"-Klasse verfügt über eine öffentliche Methode (sendMail()
), die E-Mails sendet und integrierte Benachrichtigungsmethoden der Apex-Klassenbibliothek verwendet. Außerdem verfügt diese Klasse über eine private Hilfsmethode (inspectResults()
), die, da sie privat ist, nicht extern aufgerufen werden kann, sondern nur innerhalb der Klasse verwendet wird. Diese Hilfsmethode prüft die Ergebnisse des Aufrufs "E-Mail senden" und wird durch "sendMail()
" aufgerufen.public class EmailManager { // Public method public void sendMail(String address, String subject, String body) { // Create an email message object Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); String[] toAddresses = new String[] {address}; mail.setToAddresses(toAddresses); mail.setSubject(subject); mail.setPlainTextBody(body); // Pass this email message to the built-in sendEmail method // of the Messaging class Messaging.SendEmailResult[] results = Messaging.sendEmail( new Messaging.SingleEmailMessage[] { mail }); // Call a helper method to inspect the returned results inspectResults(results); } // Helper method private static Boolean inspectResults(Messaging.SendEmailResult[] results) { Boolean sendResult = true; // sendEmail returns an array of result objects. // Iterate through the list to inspect results. // In this class, the methods send only one email, // so we should have only one result. for (Messaging.SendEmailResult res : results) { if (res.isSuccess()) { System.debug('Email sent successfully'); } else { sendResult = false; System.debug('The following errors occurred: ' + res.getErrors()); } } return sendResult; } }
- Klicken Sie zum Speichern Ihrer Klasse auf Datei | Speichern.
HINWEIS: Sollte Ihr Code Syntaxfehler aufweisen, wird in der Registerkarte "Problems (Problem)" ein Fehler aufgeführt. Sie können die Fehlerdetails zur Korrektur Ihres Codes verwenden.
Aufrufen einer Methode zum Senden einer E-Mail
Rufen Sie die öffentliche Methode auf. Wir verwenden dazu die Ausführung von anonymem Apex-Code. Mit anonymem Apex-Code können Sie Codezeilen sofort ausführen. Dies ist eine praktische Möglichkeit zum Aufrufen von Apex, insbesondere zum Testen von Funktionen. Wie bei jeder anderen Apex-Ausführung wird auch hier ein Debug-Protokoll mit den Ergebnissen generiert.
- Klicken Sie in der Developer Console auf Debug | Open Execute Anonymous Window.
- Geben Sie in dem sich öffnenden Fenster Folgendes ein. Ersetzen Sie "Your email address" durch Ihre E-Mail-Adresse.
EmailManager em = new EmailManager(); em.sendMail('Your email address', 'Trailhead Tutorial', '123 body');
- Klicken Sie auf Execute (Ausführen).
In Ihrem Posteingang sollte jetzt eine E-Mail eingegangen sein. Rufen Sie Ihre E-Mails ab.
Prüfen von Debug-Protokollen
Debug-Protokolle sind nützlich zum Debuggen Ihres Codes. Wenn Apex-Methoden ausgeführt werden, werden die Aufrufe im Debug-Protokoll eingetragen. Sie können auch Ihre eigenen Debug-Meldungen ins Protokoll schreiben, was beim Debuggen Ihres Codes hilft, sollten Fehler auftreten. Die Hilfsmethode "inspectResults()
", die von "sendMail()
" aufgerufen wird, schreibt mithilfe der Methode "System.debug()
" Meldungen ins Protokoll, um anzugeben, ob der Vorgang zum Senden der E-Mail erfolgreich war oder Fehler auftraten. Sie können diese Meldungen im Debug-Protokoll einsehen, das generiert wurde, nach Sie die Methode ausgeführt haben.
- Klicken Sie in der Entwicklerkonsole auf die Registerkarte Logs (Protokolle) und doppelklicken Sie auf das jüngste Protokoll in der Liste.
- Wählen Sie Debug Only (Nur debuggen) aus, um das Protokoll so zu filtern, dass nur Protokollzeilen für
System.debug()
-Anweisungen angezeigt werden.
In der gefilterten Protokollansicht wird die folgende Meldung angezeigt, vorausgesetzt, die E-Mail wurde ohne Fehler gesendet.
DEBUG|Email sent successfully
Aufrufen einer statischen Methode
Da die Methode "sendMail()
" in unserer Klasse auf keine Klassenmitgliedsvariablen zugreift, muss es sich nicht um eine Instanzmethode handeln. Ändern Sie sie in eine statische Methode, indem Sie das Schlüsselwort "static
" zu ihrer Deklaration hinzufügen. Statische Methoden können leichter aufgerufen werden als Instanzmethoden, da sie nicht für eine Instanz der Klasse aufgerufen werden müssen, sondern direkt für den Klassennamen aufgerufen werden.
- Wechseln Sie in der Developer Console zur geöffneten Registerkarte für die
EmailManager
-Klasse und ändern Sie die erste Zeile der Definition der MethodesendMail()
wie folgt (die einzige Änderung ist das hinzugefügte Schlüsselwortstatic
).public static void sendMail(String address, String subject, String body) {
- Klicken Sie zum Speichern Ihrer Klasse auf Datei | Speichern.
- Ändern Sie die Anweisungen im Fenster für die anonyme Ausführung, um die statische Methode für den Klassennamen aufzurufen.
EmailManager.sendMail('Your email address', 'Trailhead Tutorial', '123 body');
- Klicken Sie auf Execute (Ausführen). Nachdem diese Methode ausgeführt wurde, können Sie jetzt Ihre E-Mails und wahlweise das Debug-Protokoll abrufen, wie in den vorherigen Schritten.