Zuordnen von .NET-Konzepten zur Lightning-Plattform
Lernziele
Nachdem Sie diese Lektion abgeschlossen haben, sind Sie in der Lage, die folgenden Aufgaben auszuführen:
- Verstehen, durch welche Schlüsselfunktionen sich die Lightning-Plattform und die Apex-Programmiersprache auszeichnen
- Erkennen von Ähnlichkeiten und Unterschieden zwischen .NET und der Lightning-Plattform
- Verwenden der Entwicklerkonsole zur Erstellung Ihrer ersten Apex-Klasse
- Verwenden von anonymem Apex zum Aufrufen einer Methode aus einer Apex-Klasse
Mit Trail Together einem Dozenten folgen
Möchten Sie bei diesem Schritt einem Experten folgen? Schauen Sie sich dieses Video an, das Teil der Reihe "Trail Together" ist.
Wir stellen vor: die Lightning-Plattform
Mal im Ernst: Wenn Sie die Lightning-Plattform besser kennen gelernt haben, werden Sie sie wie wir zu schätzen wissen. In diesem Modul schauen wir uns an, wie Sie einen Zusammenhang zwischen den .NET-Konzepten, die Sie ja bereits kennen, und der Lightning-Plattform herstellen können.
Grundlagen der Plattform
Lassen Sie uns zunächst sehen, was genau die Lightning-Plattform ausmacht. Einer der Punkte, durch die sich die Plattform von anderen SaaS-(Software-as-a-Service-)Angeboten unterscheidet, ist, dass sie auf einer metadatengesteuerten Architektur basiert. Alles, auch der Code, die Konfiguration und die Anwendungen, wird in Form von Metadaten angegeben.
Als .NET-Entwickler kennen Sie sich wahrscheinlich bereits mit den Cloud-Anwendungen aus, die auf Microsoft Azure laufen. Nun ja, die Lightning-Plattform funktioniert anders. Die Lightning-Plattform ist eng in die Datenbank integriert. Alle möglichen anderen Dinge, wie die Benutzeroberfläche, die Sicherheit und das Berichtswesen, sind ebenfalls in die Plattform integriert. Diese Integration führt dazu, dass Sie Anwendungen superschnell erstellen können.
Aber! – Und hier kommt nun der Teil, der Ihnen möglicherweise zunächst komisch vorkommen wird – Sie als Entwickler müssen etwas von Ihrer Kontrolle abgeben, um diese Produktivität als Entwickler zu gewinnen. Auf der Lightning-Plattform müssen Sie sich keine Gedanken über das Einrichten von Knoten oder um Verwaltungsaufgaben machen. Sie brauchen sich nicht um Upgrades, Abstimmungs- oder Skaliertätigkeiten zu kümmern. Wahrscheinlich werden Sie all diese zusätzliche Komplexität und Verantwortung aber gar nicht vermissen, da Sie sich stattdessen darauf konzentrieren können, tolle Anwendungen schnell zu erstellen.
Jetzt haben wir gerade einmal an der Oberfläche gekratzt, wenn es darum geht, was die Plattform alles bietet. Wenn Sie etwas tiefer in die Architektur eintauchen möchten, schauen Sie sich das Modul Grundlagen der Plattform an.
Apex – Grundlagen
Da die Lightning-Plattform so eng integriert ist und auf einer Metadatenarchitektur basiert, können Sie durch den Einsatz der deklarativen Entwicklung bzw. das, was wir als "Point-and-Click"-Anwendungserstellung kennen, unglaublich viel erreichen. Wenn die Lightning-Plattform neu für Sie ist, empfehlen wir Ihnen dringend, den im Abschnitt "Ressourcen" genannten Artikel über Point-und-Click-Entwicklung zu lesen.
Wir wissen, dass Sie als .NET-Entwickler gerne kodieren, aber Sie werden feststellen, dass Code auf der Lightning-Plattform nicht immer gebraucht wird. Es ist jedoch wichtig, dass Sie verstehen, wann Code gebraucht wird und wann nicht. Erfahren Sie mehr über diesen Unterschied, indem Sie sich diesen Artikel anschauen, in dem es darum geht, wann Sie klicken und wann Sie Code schreiben sollten.
Aber genug davon. Uns ist klar, dass Sie lernen möchten, wie Sie auf der Plattform programmieren können, und jetzt kommt Apex ins Spiel.
Was ist ähnlich?
Die Programmiersprache Apex ist einer Sprache ähnlich, die Sie wahrscheinlich schon kennen und schätzen: C#. Apex wird direkt auf der Lightning-Plattform gespeichert, kompiliert und ausgeführt. Wie C# ist die Sprache objektorientiert. In diesem Kapitel werden wir sie uns einmal anschauen und sehen, worin sonst noch Ähnlichkeiten zu .NET-Sprachen bestehen.
Objektorientiertes Design
Wir nehmen an, dass Sie das Konzept des objektorientierten Designs bereits kennen, sodass wir Ihre Zeit nicht zusätzlich mit der Beschreibung von etwas in Anspruch nehmen, was Sie sowieso schon kennen. Was Sie wissen müssen, ist, dass Apex viele der objektorientierten Grundsätze unterstützt, an die Sie wahrscheinlich gewöhnt sind, wie z. B. Kapselung, Abstraktion, Übernahme und sogar Polymorphismus. Tatsächlich beinhaltet die Apex-Sprache viele Sprachkonstrukte, die Ihnen bereits vertraut sind, wie z. B. Klassen, Schnittstellen, Eigenschaften und Sammlungen.
Hier sehen Sie z. B., wie eine Apex-Klasse mit dem Namen HelloWorld aussehen würde.
public with sharing class HelloWorld { public void printMessage() { String msg = 'Hello World'; System.debug(msg); } }
Diese einfache HelloWorld-Klasse beinhaltet eine Methode mit dem Namen printMessage, die dazu dient, die Nachricht "Hello World" einfach im Debug-Protokoll des Systems auszugeben. Natürlich ist dieses Beispiel stark verkürzt, aber wir wollten einfach, dass Sie sehen, wie außerordentlich ähnlich Apex und C# sich sind.
Die grundlegende Syntax für das Definieren von Klassen lautet wie folgt:
private | public | global [virtual | abstract][with sharing | without sharing | inherited sharing] class ClassName [implements InterfaceNameList] [extends ClassName] { // The body of the class }
Wenn Sie Zeit haben, schauen Sie sich das Kapitel über Klassen an, um mehr darüber zu erfahren, wie Klassen, Objekte und Schnittstellen funktionieren.
Datentypen
Apex unterstützt die Datentypen, die Sie erwarten würden. Es gibt primitive Typen wie z. B. "Integer", "Double", "Long", "Date", "Datetime", "String" und "Boolean". Ferner gibt es einen ID-Datentyp, der für alle gültigen, aus 18 Zeichen bestehenden Lightning-Plattform-Datensatz-IDs verwendet wird, die vom System zugewiesen wurden.
Wert- und Referenztypen funktionieren ebenso, aber in Apex werden alle Variablen standardmäßig auf null initialisiert. Über eines muss man sich im Klaren sein, und zwar, dass .NET-Strings eigentlich Referenzen sind, auch wenn sie sich wie Werttypen verhalten, da sie unveränderbar sind. In Apex werden Strings jedoch immer wie ein primitiver Werttyp behandelt.
Neben den primitiven Datentypen werden noch sObjects-Datentypen unterstützt, und zwar entweder als generisches sObject oder als spezifisches, wie z. B. ein Account oder ein Kontakt. Denken Sie daran: ein sObject ist nur ein Salesforce-Objekt. Sie können es sich als Tabelle in einer Datenbank vorstellen. Das sObject kann entweder ein Standardobjekt sein oder eines, das in Salesforce integriert ist oder ein benutzerdefiniertes Objekt, das Sie selbst definieren.
Ferner kann ein Datentyp eine eingegebene Liste von Werten sein, die auch als Enumeration bezeichnet wird. Seien Sie jedoch vorsichtig, da es sich dabei nicht um dieselben Enumerationen handelt, die Sie aus .NET gewohnt sind. In Apex können Sie Enumerationen mit Zahlen verwenden, aber Sie können die Zahlenwerte nicht definieren. Außerdem beginnt die Zuweisung der Ordinalzahlen bei null. Nehmen wir beispielsweise an, Sie haben eine Enumeration wie die folgende:
public enum myEnums { Enum1, Enum2, Enum3 }
Wenn Sie versuchen, auf den Ordinalwert der dritten Enumeration zuzugreifen, lautet der Wert der Variablen enumOrd "2".
Integer enumOrd = myEnums.Enum3.ordinal();
Arbeiten mit Sammlungen
.NET unterstützt eine große Sammlungsbibliothek mit zahlreichen Typen und Erweiterungsmethoden. Und hier noch ein paar gute Neuigkeiten: Apex verfügt nur über die folgenden drei Sammlungen. Klingt einfach, oder?
Liste
Eine Liste ist eine geordnete Sammlung von Elementen, die in etwa so funktioniert wie ein herkömmliches Array. Apex unterstützt jedoch Arrays nicht als Sammlungen, sondern nur als Listen. Sie können jedoch die sogenannte "Array-Notation" verwenden, um bestimmte Elemente einer Liste mit eckigen Klammern [] zu referenzieren. Mithilfe der folgenden Methode kann eine Variable beispielsweise als Liste von Zeichenfolgen deklariert werden:
List<String> myStrings = new List<String>();
Alternativ dazu können Sie die Listenvariable "myStrings" auch wie folgt mit eckigen Klammern deklarieren:
String[] myStrings = new List<String>();
Ferner können Sie die Liste deklarieren und ihre Werte alle in einem Schritt, wie etwa dem Folgenden, initialisieren.
List<String> myStrings = new List<String> {'String1', 'String2', 'String3' };
Sie können der Liste auch noch Werte hinzufügen, nachdem sie erstellt wurde, wie z. B. in diesem Fall:
List<String> myStrings = new List<String>(); myStrings.add('String1'); myStrings.add('String2'); myStrings.add('String3');
Sie werden wahrscheinlich viele Listenvariablen im Rahmen Ihrer Apex-Entwicklung erstellen, da das Ergebnis einer jeden SOQL-Abfrage eine Liste ist. Beispielsweise könnten Sie mithilfe von Code wie dem folgenden eine Liste von Accounts erstellen:
List<Account> myAccounts = [SELECT Id, Name FROM Account];
Beachten Sie, dass der Listenindex immer bei Null beginnt. Der Zugriff auf den Namen des ersten Accounts in der Liste würde daher so aussehen:
String firstAccount = myAccounts.get(0).Name;
Alternativ dazu könnten Sie auch folgenden Code verwenden:
String firstAccount = myAccounts[0].Name; // Uses Array Notation []
Set
Ein Set ist eine unsortierte Sammlung von Elementen, die keine Duplikate enthält. Ein Set wird in der Regel dazu verwendet, ID-Werte zu speichern, da die Werte immer eindeutig sind. Anschließend könnten Sie das Set als Teil einer WHERE-Klausel in einer SOQL-Abfrage verwenden. Hier erstellen wir beispielsweise ein Set, das zwei eindeutige IDs für Accounts enthält. Dann verwenden wir das Set in der SOQL-Abfrage, um Accounts nur zu diesen IDs auszugeben.
Set<ID> accountIds = new Set<ID>{'001d000000BOaHSAA1','001d000000BOaHTAA1'}; List<Account> accounts = [SELECT Name FROM Account WHERE Id IN :accountIds];
Zuordnung
Eine Zuordnung ist eine Sammlung von Schlüssel/Wert-Paaren. Jeder Schlüssel wird einem einzelnen Wert zugeordnet. Eine Zuordnung ist hilfreich, wenn Sie schnell etwas anhand eines Schlüssels finden müssen. Die Schlüsselwerte müssen eindeutig sein, sodass Sie beispielsweise eine Zuordnung haben, die ID-Werte für den Schlüssel beinhaltete, die dann einem sObject zugeordnet wurden. Beispielsweise könnten Sie den folgenden Code verwenden, um eine Zuordnungsvariable mit dem Namen accountMap zu deklarieren, die alle Accounts enthält, die ihren IDs zugeordnet wurden.
Map<Id, Account> accountMap = new Map<Id, Account>([SELECT Id, Name FROM Account]);
Dann könnten Sie mithilfe der Get-Methode und Code wie dem folgenden auf einen bestimmten Account-Datensatz zugreifen.
Id accId = '001d000000BOaHSAA1'; Account acc = accountMap.get(accId);
Nähere Informationen über die in Apex unterstützten Datentypen finden Sie in den offiziellen Unterlagen.
ASP.NET zu Visualforce
Wenn Sie ASP.NET-Webformularentwickler sind, fühlen Sie sich bei Visualforce wahrscheinlich zu Hause. Es gibt viele Ähnlichkeiten zwischen den beiden, und zwar insbesondere die klare Trennung zwischen dem Markup und dem Code. Ferner verwenden Sie Formularfelder, um Code bestimmten im Controller definierten Eigenschaften zuzuordnen.
Leider ist der Seitenansichtsstatus bei Visualforce genauso mühsam umzusetzen wie bei ASP.NET, da HTTP zustandslos ist. Zum Glück gibt es Wege, die um die Einschränkungen des Seitenansichtsstatus herumführen. Erfahren Sie mehr, indem Sie auf den Link im Abschnitt "Ressourcen" klicken.
Visualforce ist ein Framework zum Rendern von HTML-Seiten mithilfe eines MVC-Paradigmas. Bevor Sie aber jetzt ganz aufgeregt werden und denken "Super, Visualforce ist ja wie ein ASP.NET-MVC. MVC ist toll", bedenken Sie, dass ein Vergleich der beiden in etwa so ist, als würden Sie Äpfel mit Birnen vergleichen. Sie können beide zum Rendern von Webseiten verwenden, und beide trennen die Anwendungslogik von dem Markup und dem Datenbankmodell, aber sie tun dies auf unterschiedliche Weise.
Genauere Informationen zu Visualforce erhalten Sie im Modul Visualforce – Grundlagen. Jetzt möchten wir Ihnen erst einmal eine grundlegende Vorstellung davon vermitteln, wie es funktioniert, indem wir Ihnen ein Beispiel zeigen. Sie können den folgenden Markup-Code verwenden, um eine einfache Seite zu rendern, die zum Eingeben von Kontaktdaten verwendet wird.
<apex:page standardController="Contact"> <apex:form> <apex:pageBlock title="Edit Contact" mode="Edit"> <apex:pageBlockButtons > <apex:commandButton action="{!edit}" id="editButton" value="Edit"/> <apex:commandButton action="{!save}" id="saveButton" value="Save"/> <apex:commandButton action="{!cancel}" id="cancelButton" value="Cancel"/> </apex:pageBlockButtons> <apex:pageBlockSection > <apex:inputField value="{!contact.lastname}" /> <apex:inputField value="{!contact.accountId}"/> <apex:inputField value="{!contact.phone}"/> </apex:pageBlockSection> </apex:pageBlock> </apex:form> </apex:page>
In dem Beispiel kommt etwas zum Einsatz, das als Standard-Controller bekannt ist und Teil der Lightning-Plattform ist. Dabei handelt es sich grundsätzlich um vom System generierten Code, mit dem Sie schnell die grundlegende CRUD-Funktionalität in Ihre Visualforce-Seiten integrieren können. Bevor Sie aber anfangen, sich Gedanken zu machen, müssen Sie wissen, dass Sie Ihre eigenen benutzerdefinierten Controller erstellen können, um komplexere Funktionalität hinzuzufügen. Alle Informationen darüber, wie Standard- und benutzerdefinierte Controller funktionieren, erfahren Sie im Modul "Visualforce – Grundlagen". Die gerenderte Version dieser Seite sieht wie folgt aus:
Was ist anders?
Jetzt, da Sie etwas darüber wissen, inwiefern sich Apex und .NET ähnlich sind, wenden wir uns einmal den Unterschieden zu. Anfängern sei gesagt, dass bei Apex, anders als bei C#, die Groß- und Kleinschreibung keine Rolle spielt.
Apex und Datenbank sind eng miteinander verbunden
Apex-Code und die Datenbank der Lightning-Plattform sind eng miteinander verbunden, sodass sie zeitweise sogar nicht zu unterscheiden sind. Jedes Standard- oder benutzerdefinierte Objekt in der Datenbank hat eine "mystische" Darstellung mittels einer Apex-Klasse, die alle Arten von Funktionalitäten bietet, um das Interagieren mit der Datenbank ganz einfach zu machen. Die Klasse und das ihr zugrunde liegende Objekt sind im Wesentlichen ein Spiegelbild des jeweils anderen, und sie befinden sich konstant im Synchronisationsmodus. Immer wenn Sie beispielsweise ein neues Feld in einem Objekt erstellen, kommt automatisch ein Klassenmitglied zum Vorschein, das die Werte in der Datenbank referenziert. Ferner ist es unmöglich, in Ihrem Apex-Code eine Referenz zu einem nicht vorhandenen Feld hinzuzufügen; der Compiler gibt eine Fehlermeldung aus und speichert Ihren Code einfach nicht. Die Plattform tut alles, um diese Abhängigkeiten sicherzustellen und lässt nicht zu, dass sich das Datenbankschema und Ihr Code nicht synchronisieren. Daher gibt die Plattform eine Fehlermeldung aus und untersagt die Aktion, wenn Sie versuchen, ein benutzerdefiniertes Objekt oder ein Feld zu löschen, das durch Apex-Code referenziert ist.
Verschiedene Designmuster
Als .NET-Entwickler kennen Sie sich wahrscheinlich bereits mit Designmustern aus. Die meisten dieser Muster funktionieren jedoch nicht auf der Lightning-Plattform. In den nächsten Lektionen, in denen wir uns mit dem Ausführungskontext und dem Design von Auslösern beschäftigen, erfahren Sie mehr darüber; lesen Sie jedoch auch in den im Abschnitt "Ressourcen" aufgeführten Links über Apex-Designmuster nach.
Sie müssen unbedingt verstehen, dass Sie beim Testen und Einsetzen Ihrer Lösungen wahrscheinlich auf Probleme stoßen werden, wenn Sie versuchen, in der Lightning-Plattform dieselben Designstrategien anzuwenden, die Sie in .NET anwenden. Am besten nehmen Sie sich etwas Zeit und finden heraus, welche Designmuster in der Welt der Lightning-Plattform am besten funktionieren, bevor Sie mit der Codeerstellung loslegen.
Einheitentests erforderlich
Natürlich sind Sie daran gewöhnt, Einheitentests für Ihre .NET-Anwendungen zu schreiben und kennen wahrscheinlich die Vorteile, die damit verbunden sind, sie zu nutzen. Der Unterschied zur Lightning-Plattform ist, dass Sie hier eine 75%ige Testdeckung benötigen, um Ihren Apex-Code in einer Produktionsorganisation bereitstellen zu können.
Die Möglichkeit, Einheitentests durchzuführen, fördert nicht nur die Entwicklung von robustem und fehlerfreiem Code, sondern ist gleichzeitig unerlässlich für die Stabilität der Plattform, da vor jeder Hauptversion alle Tests durchgeführt werden. Weitere Informationen zu Einheitentests erhalten Sie unter An Introduction to Apex Code Test Methods.
Keine Lösung, kein Projekt und keine Konfigurationsdateien
Auf der Lightning-Plattform gibt es so etwas wie Lösungen oder Projektdateien nicht. Sie können eine Anwendung erstellen, aber das ist nicht dasselbe wie wenn Sie eine .NET-Anwendung oder -Assembly erstellen.
Eine Anwendung ist auf der Lightning-Plattform lediglich eine lose Ansammlung von Komponenten wie Registerkarten, Berichte, Dashboards und Seiten. Mehrere Komponenten sind bereits in Ihre Salesforce-Organisation integriert und in wenigen Sekunden können Sie mithilfe eines Point-and-Click-Assistenten Ihre eigenen erstellen. Auf dem AppExchange können Sie sogar Anwendungen kaufen, die von Dritten erstellt wurden.
Ihr gesamter Code wird in der Cloud gespeichert und ausgeführt. In der Welt der Lightning-Plattform gibt es außerdem keine Konfigurationsdateien. Da die Datenbank eingebrannt ist, benötigen Sie keine verbindenden Zeichenfolgen. Und anders als beim ASP.NET-MVC müssen Sie keine Routen konfigurieren. Sie können in Salesforce benutzerdefinierte Einstellungen erstellen, die jedoch deklarativ hinzugefügt und verwaltet werden.
Eine viel kleinere Klassenbibliothek
Die Apex-Klassenbibliothek ist bedeutend kleiner als die .NET-Framework-Klassenbibliothek, sodass Sie mit Apex leichter und schneller Fahrt aufnehmen. Aber mal ehrlich, finden Sie es nicht etwas frustrierend, wenn Sie immer nach vergleichbaren Funktionen suchen, die es in Apex einfach nicht gibt?
Denken Sie immer daran, dass die Lightning-Plattform mit der Idee einer schnellen Anwendungsentwicklung gebaut wurde. Sie ist auch anders als die .NET-Plattform, sodass Sie sich möglicherweise dabei ertappen, dass Sie nach Funktionen suchen, an die Sie gewöhnt sind, die es aber bei der Lightning-Plattform einfach nicht gibt. Wenn Sie aber pixelperfekte, nach Maß kodierte Anwendungen erstellen möchten, bietet Ihnen unsere Heroku Enterprise-Plattform sämtliche Leistungen und Funktionen, die Sie brauchen.
Entwicklungstools
Höchstwahrscheinlich haben Sie sich bereits für eine kostenlose Developer Edition-(DE-)Organisation registriert. Vielleicht haben Sie auch die Online-Entwicklerkonsole geöffnet und verwendet.
Sie können die Entwicklerkonsole nutzen, um Quellcode zu bearbeiten und durch ihn zu navigieren, und sie ist darüber hinaus hilfreich beim Debuggen und beim Beheben von Fehlern. Damit werden wir uns in einer späteren Lektion befassen, also bleiben Sie dran! Wenn Sie bereits das erste Modul über die Datenbankgrundlagen durchgearbeitet haben, wissen Sie, dass Sie auch die Entwicklerkonsole verwenden können, um SOQL- und SOSL-Abfragen auszuführen und Abfragepläne anzuzeigen. Wenn Sie noch nicht mit der Entwicklerkonsole gearbeitet haben, macht das nichts, weil wir uns in Kürze damit beschäftigen werden, wenn wir eine Apex-Klasse erstellen.
Als .NET-Entwickler kennen Sie sich wahrscheinlich bereits mit Visual Studio Code aus. Da wird es Sie freuen zu hören, dass wir Salesforce Extensions for VS Code anbieten, die Ihnen die benutzerdefinierte Entwicklung auf Ihrem lokalen Rechner ermöglichen. Die Erweiterung ist eng mit Salesforce DX verknüpft, das eine moderne, quellenbezogene Entwicklungserfahrung bietet. Wenn Sie mehr über Salesforce DX erfahren möchten, absolvieren Sie den Trail Erste Schritte mit Salesforce DX.
Und schließlich dachten wir uns, dass Sie Interesse daran hätten, Informationen über eine leistungsfähige Befehlszeilenschnittstelle zur Lightning-Plattform zu erhalten. Wenn Sie zu den Entwicklern zählen, die Befehlszeilen lieben, ist die Salesforce CLI genau das Richtige für Sie.
Um auf dem Laufenden über die DevOps-Weiterentwicklung und -Unterstützung von Salesforce zu bleiben, sollten Sie sich unbedingt Code Builder und das DevOps Center ansehen.
Umgang mit der Sicherheit
Erfreulicherweise müssen Sie sich in der Lightning-Plattform keine Gedanken über Authentifizierung oder das Speichern von Passwörtern und Zeichenfolgen für Datenbankverbindungen machen. Um die Identität kümmert sich die Plattform. Sie können den Zugang zu Daten auf vielen verschiedenen Ebenen steuern, wie z. B. auf Objektebene, auf Datensatzebene und auf Feldebene. Mit der Sicherheit wird ebenfalls deklarativ umgegangen. In vielen Fällen wird die Sicherheit von einem Salesforce-Administrator definiert und eingerichtet. Als Entwickler müssen Sie unbedingt wissen, wie sie funktioniert. Erfahren Sie mehr darüber, indem Sie sich das Modul zur Datensicherheit anschauen.
Was ist mit der Integration?
Sie können Plattform-Integrationen auf zahlreiche Arten und Weisen durchführen, aber am meisten werden Sie wahrscheinlich SOAP und REST verwenden. Sie können Sie in jeder Richtung verwenden.
Mithilfe der Apex-Programmiersprache können Sie Webservices erstellen und offenlegen und externe Webservices aus Apex aufrufen. Außerdem können Sie auf eingehende E-Mail-Nachrichten reagieren und automatisierte ausgehende Nachrichten senden, wenn bestimmte Ereignisse eintreten.
Wenn Sie sich wirklich die Hände schmutzig machen wollen, bietet Salesforce sowohl SOAP- als auch REST-APIs, die direkten Zugang zu den Daten in Ihrer Organisation bieten. Es stehen Toolkits zur Verfügung, die sich um die APIs legen, sodass Sie jede beliebige Sprache verwenden können: .NET, Java, PHP, Objective C, Ruby und JavaScript.
Darüber hinaus stehen auf dem AppExchange zahlreiche Drittanbieter-Integrationsanwendungen zur Verfügung. Tatsächlich ist so gut wie alles möglich. Sie werden mehr über alle Integrationspunkte erfahren haben, wenn Sie das Modul Apex-Integration abgeschlossen haben.
Erstellen einer Apex-Klasse
Jetzt, da Sie mehr darüber erfahren haben, in welcher Beziehung die Lightning-Plattform zur .NET-Plattform steht, tauchen wir ins Geschehen ein und erstellen mithilfe der Entwicklerkonsole eine Apex-Klasse. Die Klasse, die wir erstellen, beinhaltet die öffentliche Methode "sendMail". Sie beinhaltet eine private Hilfsmethode, die "inspectResults" heißt und die zum Überprüfen der Ergebnisse des E-Mail-Sendeaufrufs dient.
- Wählen Sie in Ihrer Developer-Organisation unter "Setup" Ihr Name > Developer Console aus, um die Developer Console zu öffnen.
- Wählen Sie in der Developer Console File > New > Apex Class aus.
- Geben Sie "EmailManager" als Klassennamen an und klicken Sie auf OK.
- Löschen Sie den vorhandenen Code und fügen Sie den folgenden Ausschnitt ein:
public with sharing class EmailManager { // Public method public static 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; } }
- Drücken Sie Strg + S, um die Klasse zu speichern.
Aufrufen einer Methode
Da wir die öffentliche Methode "sendMail" für statisch erklärt haben, können wir darauf zugreifen, ohne eine Instanz der Klasse zu erstellen. Dies können wir problemlos mithilfe des anonymen Apex in der Developer Console tun.
- Wählen Sie unter "Setup" Ihr Name > Developer Console aus, um die Entwicklerkonsole zu öffnen.
- Klicken Sie auf Debug > Open Execute Anonymous Window.
- Löschen Sie den vorhandenen Code und fügen Sie den folgenden Codeabschnitt ein, wobei Sie den ersten Parameter durch Ihre eigene E-Mail-Adresse ersetzen:
EmailManager.sendMail('Ihre E-Mail-Adresse', 'Trailhead Tutorial', '123 body');
- Stellen Sie sicher, dass die Option "Open Log" ausgewählt ist, und klicken Sie auf Execute. Auf einer neuen Registerkarte wird das Ausführungsprotokoll angezeigt.
- Wählen Sie die Option Debug Only aus, damit Sie nur die in dem Protokoll angezeigten Debug-Anweisungen sehen. Es sollte eine Meldung angezeigt werden, aus der Sie entnehmen können, dass die E-Mail erfolgreich gesendet wurde. Ferner sollten Sie eine E-Mail erhalten, sofern Sie eine gültige E-Mail-Adresse eingegeben haben.
Stellen Sie sich vor, Sie hätten dieselbe Aufgabe in .NET ausgeführt. Wäre es so einfach gewesen, eine .NET-Anwendung zu erstellen, die E-Mails versendet? Seien Sie ruhig ehrlich.
Ressourcen
- Grundlegendes zur Salesforce-Architektur
- Visual Development - When to Click Instead of Write Code
- Introducing Apex im Apex Developer’s Guide
- An Introduction to View State
- Apex Design Patterns
- Integration Patterns and Practices