Erfassen Sie Ihre Fortschritte
Trailhead-Startseite
Trailhead-Startseite

Verwenden von sObjects und DML

Lernziele

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

  • Definieren von sObjects
  • Erläutern des Unterschieds zwischen sObjects und andere Apex-Datentypen
  • Einfügen von Datensätzen in die Datenbank mithilfe von DML
Wussten Sie, dass Sie von einem Experten lernen können? Sehen Sie sich dieses Video an, um mehr über die Themen in diesem Modul zu erfahren:

Was ist ein sObject?

Ein sObject ist ein Apex-Datentyp, der einem Salesforce-Objekt (sObject) in einer Organisation entspricht. sObjects sind komplexe Datentypen, die in einer einzelnen Variablen mehrere Werte enthalten. Sie enthalten einen einzigen Datensatz mit Daten aus einem Salesforce-Objekt, wie beispielsweise einem Account, einem Kontakt oder einer Opportunity. Wie Sie in "Apex – Grundlagen für Administratoren" gelernt haben, sind Variablen vergleichbar mit Containern. Die meisten Variablen enthalten eine Information. sObjects sind Container, die andere Container enthalten. Die Container innerhalb des sObject-Containers können verschiedene Datentypen haben, wie z. B. "string", "date", "integer" oder "Boolean". 

sObject-Viereck mit den vier Feldern 'Id', 'Name', 'Type' und 'Custom_Field__c'

Neue Accounts

Name
Account Number
Phone
The Tea Factory
356281
555.-0158
Tina’s Teas
623956
555-0129

Sehen Sie sich die Informationen in dieser Tabelle an. Wenn Sie Data Loader verwendet haben, sind Sie mit diesem Accountformat vertraut. Die Accountfelder sind Name, Account Number, und Phone. Die Daten entsprechen denen, die Sie sehen, wenn Sie die Informationen aus einer Berichts- oder Listenansicht abrufen.

Die Felder eines Objekts in einer Organisation werden im Apex-Code als sObjekt-Eigenschaften bezeichnet. So wie jedes Feld im Objekt einer Organisation einen Datentyp hat, so hat jede sObject-Eigenschaft einen Datentyp. Beispiel: Da das Feld "Name" eines Account-Objekts den Datentyp "string" hat, hat die Name-Eigenschaft des sObjects myAcct den Datentyp "string": myAcct.Name = 'The Tea Factory'.

Unabhängig davon, ob Sie einen Account manuell (auf der Salesforce-Benutzeroberfläche) oder programmgesteuert (mit Apex-Code) erstellen, legen Sie die gleichen Werte mit den gleichen Datentypen fest. So können Sie beispielsweise auf der Benutzeroberfläche von Salesforce einen Account mit den Feldwerten in der ersten Zeile der Tabelle "New Accounts" oben erstellen. Um den gleichen Account programmgesteuert zu erstellen, verwenden Sie ein sObject des Typs "Account" im Apex-Code (siehe unten):

Account myAcct = new Account();
myAcct.Name = 'The Tea Factory';
myAcct.Phone= '555-0129';
myAcct.AccountNumber = '356281';

Verwenden Sie den sObject-Namen, die Punktnotation und die gleichen Standardfelder (Name, Phone und AccountNumber), mit denen Sie in Ihrer Organisation bereits vertraut sind.

Account myAcct = new Account(); myAcct.Name = 'The Tea Factory'; myAcct.AccountNumber = '356281'; Der sObject-Name ist myAcct und die sObject-Eigenschaften sind Id, Name, Phone und AccountNumber

In diesem Beispiel haben die myAcct-Eigenschaften (Name, Phone und AccountNumber) Datentypen, mit denen Sie vertraut sind: string und integer.

Festlegen des Feldwerts

Verwenden Sie die Punktnotation, um einem sObject einen Wert zuzuweisen. Sehen Sie sich in den vorhigen Codebeispielen die Zeilen 2-4 an. Wenn wir uns das sObject als Container für Container vorstellen, dann öffnen diese Zeilen den größten Container, myAcct, suchen die Container Name, Phone und AccountNumber und fügen ihnen Werte hinzu.

Abrufen des Feldwerts

Verwenden Sie auch hier die Punktnotation, um den Wert eines sObject abzurufen.

Beispiel: String accountName = myAcct.Name;

Dieses Codebeispiel öffnet den Container myAcct, sucht und findet den Container Name und ruft dessen Wert ab. Der Rückgabewert in diesem Beispiel ist "The Tea Factory".

Das Deklarieren eines sObjects entspricht dem Hinzufügen einer Zeile zu einer Kalkulationstabelle. Wenn Sie bereit sind, einen weiteren Account zu erstellen, geben Sie dem "Account"-Objekt einen neuen Namen. Beispiel:

Account myAcct2 = new Account();
myAcct2.Name = 'Tina’s Teas';
myAcct2.AccountNumber = '623956';
myAcct2.Phone = '555-0129';

Hinzufügen von Daten zu einer Salesforce-Organisation

Sind Sie bereit, Apex-Code zu schreiben, um Ihrer Salesforce-Organisation Daten hinzuzufügen? Sie wissen, wie Klassen und Methoden erstellt werden und ein sObject deklariert wird. Aber wie können Sie Ihrer Salesforce-Datenbank ein Objekt hinzufügen? Um Ihrer Salesforce-Organisation neue Datensätze hinzuzufügen, verwenden Sie die sog. Data Manipulation Language (DML). 

Als Administrator sind Sie bereits mit DML vertraut. Sie kennen sie in Form der Anweisungen Insert (Datensatz erstellen), Update (Datensatz bearbeiten) und Delete (Datensatz löschen), die Sie mit Datenbearbeitungsprogrammen wie Data Loader verwenden. Anstatt CSV-Dateien und Data Loader zum Hinzufügen von Zeilen oder Einfügen oder Aktualisieren von Datensätzen zu verwenden, können Sie Apex-Code schreiben, um diese Aufgaben zu erledigen. Sie verwenden also Apex-Code und die DML-Anweisungen Insert, Update und Delete. Echt cool, oder? In diesem Einheit liegt der Schwerpunkt auf der Insert-Anweisung.

Definieren der Klasse

  1. Klicken Sie in der Developer Console auf File | New | Apex Class.
  2. Geben Sie als Klassennamen NewAccounts ein.
  3. Klicken Sie auf OK.
  4. Ersetzen Sie den Standardcode durch diesen Code:
    public class NewAccounts {
        public static void sObjectsInsert(){
            Account store = new Account();
            store.Name = 'The Tea Factory';
            store.AccountNumber = '356281';
            store.Phone = '555-0158';
            insert store;
        }
    }
  5. Klicken Sie auf File | Save.

Nun haben Sie eine NewAccounts-Klasse, die zum Erstellen eines neuen Datensatzes und zum Festlegen seiner Eigenschaften dient. Die Klasse verwendet auch die insert-Anweisung, um den neuen Accountdatensatz in die Datenbank aufzunehmen. Zeit, Ihren Code auszuführen!

Ausführen des Codes

  1. Klicken Sie auf Debug | Open Execute Anonymous Window.
  2. Fügen Sie in das Fenster "Enter Apex Code" diesen Code ein:
    NewAccounts.sObjectsInsert();
  3. Klicken Sie auf Sie das Kontrollkästchen Open Log und dann auf Execute.
  4. Suchen und öffnen Sie im App Launcher Accounts. Tea Factory wird in der Liste" Accounts" angezeigt. (Falls "The Tea Factory" nicht angezeigt werden, aktualisieren Sie die Seite.)
    Auf der Seite "Accounts" wird "The Tea Factory" unter "Zuletzt angezeigte Accounts" angezeigt.
  5. Klicken Sie auf The Tea Factory.
  6. Klicken Sie auf Details. Die Felder "Account Name", "Phone" und "Account Number" zeigen die Werte an, die Sie als sObject-Eigenschaften in der NewAccounts-Klasse festgelegt haben.

Erstellen mehrerer Datensätze mithilfe einer Schleife

Das Hinzufügen eines Accounts nach dem anderen ist nicht sehr praktisch. Normalerweise müssen Sie viele Accounts auf einmal erstellen, indem Sie Datensätze entweder importieren oder aktualisieren.

Sie könnten mehrere Datensätze auf die gleiche Weise hinzufügen, in der wir im vorherigen Beispiel einen Datensatz hinzugefügt haben, aber Sie müssten den Code für jeden Datensatz wiederholen, wie hier:

Account store1 = new Account();
Account store2 = new Account();
store1.Name = 'The Tea Factory 1';
store1.AccountNumber = '356281';
store1.Phone = '555-0158';
store2.Name = 'The Tea Factory 2';
store2.AccountNumber = '356282';
store2.Phone = '555-4012';
insert store1;
insert store2;

In "Apex – Grundlagen für Administratoren" haben Sie sich mit Schleifen und Listen vertraut gemacht. Hier ist eine Gelegenheit, diese Konzepte zu umzusetzen. Mit einer while-Schleife und einer Liste können Sie mehrere Datensätze auf einmal erstellen und alle Ihrer Datenbank hinzufügen. Dies ist vergleichbar mit dem Verwenden von Data Loader zum Hochladen einer CSV-Datei mit drei Datensätzen, die in die Datenbank eingefügt werden.

Schreiben der Methode

  1. Kehren Sie in der Developer Console zurück zur NewAccounts-Klasse.
  2. Ersetzen Sie den vorhandenen Code durch diesen Code:
      public class NewAccounts {
        public static void sObjectsInsert(Integer value){
            Integer counter = 1;
            //create a list to add our accounts
            List<Account> teaFactoryAccounts = new List<Account>();
            while(counter <= value){
                //display the current counter value
                System.debug('Counter Value before Incrementing ' + counter);
                //create a new account
                Account store = new Account();
                store.Name = 'The Tea Factory ' + counter;
                store.AccountNumber = '35629' + counter;
                teaFactoryAccounts.add(store);
                System.debug(teaFactoryAccounts);
                //increment the counter
                counter = counter + 1;
                System.debug('Counter Value after incrementing ' + counter);
            }
            System.debug('Size of Account List: ' + teaFactoryAccounts.size() );
            System.debug('Elements in Account List: ' + teaFactoryAccounts);
            //insert all of the accounts in the list
            insert teaFactoryAccounts;
        }
    }
  3. Klicken Sie auf File | Save.

Führen Sie die Methode aus.

  1. Klicken Sie auf Debug | Open Execute Anonymous Window.
  2. Fügen Sie in das Fenster "Enter Apex Code" diesen Code ein:
    NewAccounts.sObjectsInsert(3);
  3. Wählen Sie Open Log aus und klicken Sie auf Execute. Das Protokollfenster wird geöffnet.
  4. Wählen Sie Debug Only aus.

Der letzte Eintrag im Protokoll zeigt, dass der Code drei Benutzerkonten mit einem Namen und einer Nummer für jeden Account erstellt hat: 

The Tea Factory 1, 356291

The Tea Factory 2, 356292

The Tea Factory 3, 356293

Die in Zeile 5 erstellte Liste teaFactoryAccounts sieht wie folgt aus:

Ein Bereich, der in drei Abschnitte mit je einem Account in jedem Abschnitt unterteilt ist. Abschnitt 1: Name = The Tea Factory 1, AccountNumber = 356291. Abschnitt 2: Name = The Tea Factory 2, AccountNumber = 356292. Abschnitt 3: Name = The Tea Factory 3, AccountNumber = 356293.

Jedes Mal, wenn sich der Wert der Zählervariablen erhöht, wird ein sObject im nächsten offenen Index (Positionsabgabe) in der Liste angelegt.

Kehren Sie in Ihrer Trailhead Playground-Organisation zur Liste "Accounts" zurück und klicken Sie auf Accounts. Die drei von Ihnen eingefügten Restaurants sind in der Liste "Accounts" enthalten.

Überprüfen des Schleifencodes

Untersuchen Sie den Code der while-Schleife (Zeilen 6-18). In Zeile 10 wird ein neues sObject des Typs "Account" namens store instanziiert. Zeile 11 legt den Namen ︲The Tea Factory︲fest. Um die Accountdatensätze zu unterscheiden, fügt diese Zeile bei jeder Iteration der Schleife den aktuellen Zählerwert an das Ende der Zeichenfolge store.name an.

Nach dem Festlegen der Eigenschaften fügt Zeile 13 bei jeder Iteration der while-Schleife ein sObject des Typs store zur Liste teaFactoryAccounts hinzu, bis die Schleifenbedingung in Zeile 6 erfüllt ist.

Hinweis

Hinweis

Vergessen Sie nicht, den Zähler in der while-Schleife zu erhöhen. Wenn in unserem Beispielcode nicht kontinuierlich eins zum Zähler hinzugefügt würde (in Zeile 16), dann würde die Bedingung in Zeile 6 nie erfüllt werden. In der while-Schleife würden weiterhin Datensätze hinzugefügt, bis das von Salesforce festgelegte Zeitlimit erreicht ist.

Wenn die Bedingung in Zeile 6 erfüllt ist, endet die while-Schleife und Zeile 22 fügt die Liste teaFactoryAccounts auf einmal in die Datenbank ein.

Warum auf einmal? Da Ressourcen begrenzt sind, können Sie die "insert"-Anweisung in Ihrem Code nur 150 Mal verwenden. Wenn Sie einen Datensatz nach dem anderen einfügen, können Sie insgesamt 150 Datensätze einfügen. Aber wenn bei jeder "insert"-Anweisung 10 Datensätze eingefügt werden, erhöht sich diese Summe auf 1.500 Datensätze. Das gleichzeitige Einfügen mehrerer Objekte trägt zur Verdichtung (Kombinieren sich wiederholender Aufgaben durch Schreiben von effizientem Code) bei. Anfangs fügen Sie möglicherweise nur 10 Datensätze auf einmal ein. Aber wenn Ihre Anwendung wächst, können Sie damit beginnen, 200 Datensätze auf einmal einzufügen. Wenn Sie die Verdichtung von Anfang an nutzen, bereiten Sie Ihre Anwendung auf Wachstum vor.

Ressourcen