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

Erste Schritte mit 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 (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

Sie können direkt im Browser unter Verwendung der Salesforce-Benutzeroberfläche Apex schreiben und Debugging-Informationen abrufen. Öffnen Sie die Entwicklerkonsole unter Ihr Name oder im Schnellzugriffsmenü (Setup-Zahnradsymbol).

Sie können Apex auch mit den Salesforce Extensions für Visual Studio Code auf einem Client schreiben. Siehe Salesforce Extensions für Visual Studio Code.

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 (oder ein Array) von primitiven Objekten, sObjects, benutzerdefinierten Objekten, aus Apex-Klassen erstellten Objekten oder Sammlungen
    • Ein Satz von primitiven Objekten
    • 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>();

Im Allgemeinen ist es einfacher, eine Liste anstelle eines Arrays zu erstellen, da bei Listen nicht im Voraus festgelegt werden muss, wie viele Elemente zugeordnet werden müssen.

Sie können Elemente durch Aufrufen der Methode "add()" zu einer Liste hinzufügen, entweder während Sie die Liste erstellen oder nachdem Sie die Liste erstellt haben. Das erste Beispiel zeigt beide Wege zum Hinzufügen von Elementen zu einer Liste.

// 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]);
}

Ü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) des 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 Entwicklerkonsole unter 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 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;
        }
    
    }
  4. Drücken Sie Strg+S, um die Klasse zu speichern.

    Ü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' mit Ihrer E-Mail-Adresse.
    EmailManager em = new EmailManager();
    em.sendMail('Your email address', 'Trailhead Tutorial', '123 body');
    
  3. Klicken Sie auf Execute (Ausführen).

    Nachdem diese Methode ausgeführt wurde, sollten Sie in Ihrem Posteingang eine E-Mail erhalten. 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 Debug) 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
    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).

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

    DEBUG|Email sent successfully (DEBUG|E-Mail erfolgreich gesendet)

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 Entwicklerkonsole 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. Speichern Sie die Klasse durch Drücken von Strg+S.
  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.

Lernen Sie weiter kostenlos!
Registrieren Sie sich für einen Account, um fortzufahren.
Was ist für Sie drin?
  • Holen Sie sich personalisierte Empfehlungen für Ihre Karriereplanung
  • Erproben Sie Ihre Fähigkeiten mithilfe praktischer Aufgaben und Quizze
  • Verfolgen Sie Ihre Fortschritte nach und teilen Sie sie mit Arbeitgebern
  • Nutzen Sie Mentoren und Karrierechancen