Skip to main content

Erste Schritte mit Apex

Lernziele

Nachdem Sie diese Lektion abgeschlossen haben, sind Sie in der Lage, die folgenden Aufgaben auszuführen:

  • 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
Hinweis

Hinweis

Lernen Sie auf Deutsch? Beginnen Sie die Aufgabe in einem Trailhead Playground in der Sprache Deutsch und verwenden Sie für die Navigation die in Klammern angegebenen Übersetzungen. Kopieren und fügen Sie nur die Angaben in Englisch ein, da zur Überprüfung der Aufgabe Daten in Englisch benötigt werden. Wenn Sie die Aufgabe in Ihrer deutschen Organisation nicht bestehen, empfehlen wir Ihnen folgende Vorgehensweise: (1) Stellen Sie das Gebietsschema auf USA um, (2) legen Sie Englisch als Sprache fest (Anweisungen dazu finden Sie hier) und (3) klicken Sie erneut auf die Schaltfläche "Check Challenge" (Aufgabe überprüfen).

Weitere Details dazu, wie Sie die übersetzte Trailhead-Umgebung optimal nutzen können, finden Sie unter dem Badge "Trailhead in Ihrer Sprache".

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?

Apex ist eine Programmiersprache, die Java-ähnliche Syntax verwendet und wie in einer Datenbank gespeicherte Verfahren arbeitet. Apex ermöglicht es Entwicklern, Geschäftslogik in Systemereignisse zu integrieren. Dazu gehören Klicks auf Schaltflächen, die Aktualisierung verknüpfter Datensätze und Visualforce-Seiten.

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.

Apex ist eine Cloud-basierte Programmiersprache.

Besondere Merkmale der Sprache Apex

Wie andere objektorientierte Programmiersprachen unterstützt Apex unter anderem folgende Sprachkonstrukte:

  • Klassen, Schnittstellen, Eigenschaften und Sammlungen (Listen, Maps und Sets).
  • 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 Developer Console unter "Your Name (Ihr Name)" oder im Schnellzugriffsmenü (Setup-Zahnradsymbol).

Datentypen – Übersicht

Apex unterstützt verschiedene Datentypen, einschließlich eines Salesforce-spezifischen Datentyps – des Datentyps "sObject".

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 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 Daten desselben Typs.

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 mit der Array-Notation deklariert werden.

String[] colors = new List<String>();

Erweitern Sie Sammlungen nach Bedarf, indem Sie mithilfe der Methode List.add() neue Elemente hinzufügen. Sie können die Array-Notation mit eckigen Klammern verwenden, um nach Index auf vorhandene Elemente in der Sammlung zu verweisen. Mithilfe der Array-Notation mit eckigen Klammern können Sie jedoch 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, die sogenannte Array-Notation, ausgelesen werden. 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 Listenelemente 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
System.debug('Print out the colors in moreColors:');
for(String color : moreColors) {
    // Write value to the debug log
    System.debug(color);
}







Hinweis

Über die Grundlagen hinaus

Apex unterstützt zwei weitere Sammlungstypen: "Set" und "Map". Nähere Informationen zu diesen Typen finden Sie im Abschnitt Collections (Sammlungen) im Apex Developer’s Guide.

Apex-Klassen

Einer der Vorteile von Apex-Klassen ist die Wiederverwendung von Code. Klassenmethoden können durch Auslöser und andere Klassen aufgerufen werden. Das folgende Lernprogramm erläutert Schritt für Schritt, wie Sie eine Beispielklasse in Ihrer Organisation speichern, diese Klasse zum Senden von E-Mails verwenden und Debug-Protokolle prüfen.

Speichern einer Apex-Klasse

Speichern Sie die Klasse "EmailManager" in Ihrer Organisation:

  1. Öffnen Sie die Developer Console unter "Your Name (Ihr Name)" oder im Schnellzugriffsmenü (Setup-Zahnradsymbol).
  2. 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.
  3. 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 a list 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;
        }
    }
  4. 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.
Hinweis

Über die Grundlagen hinaus 

Die eben gespeicherte Klasse verwendet objektorientierte Programmierung (OOP). Die Klasse umfasst die Methoden, die sich auf die Verwaltung von E-Mails beziehen. Um als Musterbeispiel für OOP zu gelten, würde die Klasse zudem Mitgliedsvariablen (Attribute) und Zugriffsmethoden für den Zugriff auf diese Attribute enthalten, der Einfachheit halber weist unsere Klasse diese jedoch nicht auf.

Salesforce kompiliert Ihre Klasse, wenn Sie sie speichern.

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.

Hinweis

Hinweis

Es gibt andere Wege, Apex aufzurufen, beispielsweise über Auslöser. Auslöser werden in einem anderen Modul behandelt.

  1. Klicken Sie in der Developer Console auf Debug | Open Execute Anonymous Window.
  2. 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');
  3. 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.

  1. Klicken Sie in der Entwicklerkonsole auf die Registerkarte Logs (Protokolle) und doppelklicken Sie auf das jüngste Protokoll in der Liste.
  2. Wählen Sie Debug Only (Nur debuggen) aus, um das Protokoll so zu filtern, dass nur Protokollzeilen für System.debug()-Anweisungen angezeigt werden. Filtern des Debug-Protokolls in der Entwicklerkonsole zum Anzeigen von Debug-Meldungen

In der gefilterten Protokollansicht wird die folgende Meldung angezeigt, vorausgesetzt, die E-Mail wurde ohne Fehler gesendet.

DEBUG|Email sent successfully
Hinweis

Hinweis

Sie können das Debug-Protokoll auch filtern, indem Sie im Feld Filter nach Stichwörtern suchen oder eine der anderen Optionen auswählen. Weitere Informationen finden Sie unter Log Inspector help (Hilfe für Protokollinspektor).

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.

  1. Wechseln Sie in der Developer Console zur geöffneten Registerkarte für die EmailManager-Klasse und ändern Sie die erste Zeile der Definition der Methode sendMail() wie folgt (die einzige Änderung ist das hinzugefügte Schlüsselwort static).
    public static void sendMail(String address, String subject, String body) {
  2. Klicken Sie zum Speichern Ihrer Klasse auf Datei | Speichern.
  3. Ä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');
  4. 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.

Ressourcen

Teilen Sie Ihr Trailhead-Feedback über die Salesforce-Hilfe.

Wir würden uns sehr freuen, von Ihren Erfahrungen mit Trailhead zu hören: Sie können jetzt jederzeit über die Salesforce-Hilfe auf das neue Feedback-Formular zugreifen.

Weitere Infos Weiter zu "Feedback teilen"