Definieren benutzerdefinierter großer Objekte
Lernziele
Nachdem Sie diese Lektion abgeschlossen haben, sind Sie in der Lage, die folgenden Aufgaben auszuführen:
- Erstellen eines benutzerdefinierten großen Objekts
- Erstellen eines benutzerdefinierten Index
- Bereitstellen eines benutzerdefinierten großen Objekts
- Füllen eines großen Objekts
Definieren benutzerdefinierter großer Objekte
Sie haben sich jetzt die Anwendungsfälle für benutzerdefinierte große Objekte angesehen oder sich einen eigenen Anwendungsfall überlegt. Nun ist es an der Zeit, eines zu erstellen.
Sie können ein benutzerdefiniertes großes Objekt in Setup definieren. Sie können ein benutzerdefiniertes großes Objekt auch mithilfe der Metadaten-API definieren, aber in Setup geht das wesentlich einfacher. Melden Sie sich zunächst bei Ihrem Trailhead Playground an und navigieren Sie zu Setup. So werden große Objekte im Allgemeinen definiert.
- Klicken Sie auf und wählen Sie Setup aus.
- Geben Sie in Feld "Schnellsuche" den Text "Große Objekte" ein und wählen Sie dann Große Objekte aus.
- Erstellen Sie ein großes Objekt und fügen Sie einige grundlegende Details hinzu.
- Fügen Sie benutzerdefinierte Felder hinzu. In ihnen werden die Daten für Ihr großes Objekt gespeichert.
- Fügen Sie einen Index hinzu. Der Index definiert den zusammengesetzten Primärschlüssel eines großen Objekts und wird für Abfrage und Filterung der Daten des großen Objekts verwendet.
- Speichern Sie das große Objekt und ändern Sie den Status in "Bereitgestellt".
Diese Schritte wollen wir uns nun etwas genauer ansehen.
Benutzerdefinierte große Objekte sind Standard- und benutzerdefinierten Objekten ähnlich, doch einige Parameter sind für große Objekte spezifisch, während andere Parameter keine Anwendung finden. Objektnamen müssen für alle standardmäßigen, benutzerdefinierten, externen und großen Objekte in Ihrer Organisation eindeutig sein.
Details für die Definition großer Objekte
Wenn Sie ein großes Objekt definieren, geben Sie zunächst einige grundlegende Details dazu ein.
Feldname |
Beschreibung |
---|---|
Bezeichnung |
Dieser Name wird zur Identifizierung des Objekts auf der Benutzeroberfläche verwendet. |
Bezeichnung - Plural |
Der Name des Objekts im Plural. |
Beginnt mit Vokal |
Sofern dies für die Standardsprache Ihres Unternehmens erforderlich ist, geben Sie das Geschlecht der Bezeichnung an. |
Objektname |
Eindeutiger API-Name des großen Objekts. In verwalteten Paketen verhindert dieser Name Namenskonflikte bei der Paketinstallation. Verwenden Sie nur alphanumerische Zeichen und Unterstriche. Der Name muss mit einem Unterstrich beginnen und darf keine Leerzeichen aufweisen. Er darf nicht mit einem Unterstrich enden und keine zwei aufeinanderfolgenden Unterstriche enthalten. Nach dem Speichern wird der API-Name eines großen Objekts mit dem Suffix "__b" (für "big") angegeben, während dieses Suffix bei benutzerdefinierten Objekten "__c" (für "custom") lautet. |
Beschreibung |
Eine aussagekräftige Beschreibung gibt Hinweise zu den Unterschieden zwischen Objekten, wenn Sie sie in einer Liste anzeigen. |
Einstellungen für die kontextabhängige Hilfe |
Definiert den URL, der angezeigt wird, wenn ein Benutzer auf den Link Hilfe zu dieser Seite klickt, der auf der Startseite (Übersicht), den Bearbeitungs- und Detailseiten des benutzerdefinierten Objektdatensatzes, in Listenansichten und Themenlisten zu finden ist. Diese Einstellung wirkt sich nicht auf den Link "Hilfe" oben auf einer Seite aus. Über diesen Link wird immer das Fenster "Hilfe" geöffnet. |
Bereitstellungsstatus |
Wenn Sie ein großes Objekt erstellen, wird der Status auf "In Entwicklung" festgelegt. Sie können ein großes Objekt erst dann bereitstellen, wenn es einen Index aufweist, der mindestens ein benutzerdefiniertes Feld enthält. In einem Index sind nur erforderliche benutzerdefinierte Felder zulässig. Nachdem Sie einen Index erstellt haben, wird als zweiter Status "Bereitgestellt" angezeigt. Wenn Sie bereit sind, Benutzern Zugriff zu gewähren, ändern Sie den Status in "Bereitgestellt". |
Benutzerdefinierte Felder großer Objekte
Sobald Sie Ihr großes Objekt definiert haben, fügen Sie benutzerdefinierte Felder hinzu. In ihnen werden die eindeutigen Daten für Ihr großes Objekt gespeichert. Sie können zudem benutzerdefinierte Beziehungsfelder erstellen, um Ihr großes Objekt mit einem anderen Objekt in Salesforce zu verknüpfen. Sie können einem großen Objekt benutzerdefinierte Felder auf die gleiche Weise wie jedem Objekt in Salesforce hinzufügen. Große Objekte unterstützen diese Feldtypen:
- Nachschlagebeziehung
- Datum/Uhrzeit
- E-Mail
- Zahl
- Phone
- Text
- Textfeld (Lang)
- URL
Um einen Index für Ihr großes Objekt zu erstellen, muss mindestens ein benutzerdefiniertes Feld als Pflichtfeld markiert sein.
Definieren des Indexes eines benutzerdefinierten großen Objekts
Dies ist wichtig! Wie bereits erwähnt, definiert der Index den zusammengesetzten Primärschlüssel für ein großes Objekt. Die im Index eines großen Objekts definierten Felder bestimmen die Identität und Abfragemöglichkeit des Objekts. Die Felder, die in Ihrem Index definiert sind, sollten die Felder sein, die für Ihre Abfragen am relevantesten sind. Sie sollten hier also vorausschauend planen. Auch die Reihenfolge, in der Sie die Felder definieren, ist von großer Bedeutung. Wenn Sie SOQL verwenden, um Ihr großes Objekt abzufragen, können Sie nur die den Index bildenden Felder abfragen, und zwar in der Reihenfolge, in der Sie sie definiert haben. Weisen Sie das Feld, das Sie am häufigsten in einem Abfragefilter verwenden werden, der ersten Position in Ihrem Index zu. Sie können auch nur bestimmte Vergleichsoperatoren verwenden, die von der Position des Felds in Ihrer Abfrage abhängen.
Beachten Sie bei der Definition des Index diese Aspekte.
- Ein Index muss mindestens ein benutzerdefiniertes Feld enthalten, und die maximale Gesamtzahl benutzerdefinierter Felder beträgt fünf.
- Alle benutzerdefinierten Felder im Index müssen als Pflichtfelder gekennzeichnet werden.
- Felder des Typs "Langer Textbereich" können nicht in den Index einbezogen werden.
- Die Gesamtanzahl der Zeichen in allen Textfeldern eines Index darf 100 nicht überschreiten.
- Nach der Erstellung eines Index lässt sich dieser nicht mehr bearbeiten oder löschen. Um den Index zu ändern, erstellen Sie ein weiteres großes Objekt mit einem neuen Index.
Details zum Index großer Objekte
Definieren die Felder, die den Index Ihres benutzerdefinierten großen Objekts bilden, und bestimmen die Felder und Sortierreihenfolge.
Feldname |
Beschreibung |
---|---|
Bezeichnung |
Die Bezeichnung wird zum Verweisen auf den Index auf der Benutzeroberfläche verwendet. |
Name |
Der API-Name des Index. |
Indexfelder |
Legen Sie die Indexposition und die Indexrichtung für jedes benutzerdefinierte Feld fest, das im Index enthalten ist. Die Reihenfolge der Felder hier bestimmt ihre Reihenfolge im Index. Legen Sie für den am häufigsten verwendeten Filterparameter die Indexposition auf 1 fest. Gültige Werte für die Indexrichtung sind "Aufsteigend" und "Absteigend". |
Beispiel für ein benutzerdefiniertes großes Objekt
Jetzt, da Sie wissen, was erforderlich ist, um ein benutzerdefiniertes großes Objekt zu erstellen, versuchen Sie, eines zu erstellen. Tun wir so, als hätten Sie dieses fantastische neue Spiel namens SFORCE-COM: U.F.B.O. Defense entwickelt, in dem Spieler die Erde gegen die Bedrohung durch das "Unidentified Flying Big Object" (UFBO) verteidigen. Sie möchten alle Interaktionen Ihrer Spieler in einer einzelnen Spielsitzung speichern können. In jeder Spielsitzung erfassen Sie diese Informationen in Ihrem benutzerdefinierten großen Objekt, Customer_Interaction__b:
- Die Anzahl der Dinge, die der Spieler gekauft hat, in In_Game_Purchase__c
- Den höchsten Level, den sie erreicht haben, in Level_Achieved__c
- Die Anzahl ihrer Leben in Lives_This_Game__c
- Ihre Plattform in Game_Platform__c
- Ihren Punktestand in Score_This_Game__c
- Ihren Accountnamen in Account__c
- Das Datum ihrer Spielsitzung in Play_Date__c
- Ihre Spieldauer in Play_Duration__c
Ihr Spiel ist sehr beliebt, sodass Sie für jeden Benutzer jeden Tag mehrere Interaktionen erhalten, was, multipliziert mit der massiven Anzahl Ihrer Spieler, eine gigantische Anzahl von Datensätzen ergibt. Tja, Erfolg hat seinen Preis!
Sie definieren alle diese Felder für das benutzerdefinierte große Objekt. Nach der Definition der Felder definieren Sie auch die Felder, aus denen sich der Index zusammensetzt. Da der Accountname jedes Spielers eindeutig ist, haben Sie Account__c als erstes Feld für unseren Index gewählt. Die nächsten Felder in Ihrem Index sind die Spielplattform des Spielers, Game_Platform__c, und dann das Datum der jeweiligen Spielsitzung, Play_Date__c. Diese spezifische Reihenfolge ermöglicht Ihnen Abfragen nur auf der Grundlage von Accounts oder Accounts und Spielplattformen oder Accounts, Spielplattformen und Spieldatum.
Verwenden Sie die genauen Werte in diesen Beispielen, um ein benutzerdefiniertes großes Objekt mit acht benutzerdefinierten Feldern und einem Index zu erstellen. Wenn ein Feld und ein Wert nicht in der Tabelle aufgeführt sind, ignorieren Sie dies oder übernehmen Sie die Standardeinstellung.
Details für die Definition großer Objekte
Feldname |
Value (Wert) |
---|---|
Bezeichnung |
Interaktion des Kunden |
Bezeichnung - Plural |
Interaktionen der Kunden |
Objektname |
Customer_Interaction |
Beschreibung |
Leer lassen |
Bereitstellungsstatus |
In Entwicklung |
Benutzerdefinierte Felder großer Objekte
- In-Game-Kauf
- Datentyp: Text
- Feldbezeichnung: In-Game-Kauf
- Länge: 16
- Feldname: In_Game_Purchase
- Erforderlich: Nein
- Erreichter Level
- Datentyp: Text
- Feldbezeichnung: Erreichter Level
- Länge: 16
- Feldname: Level_Achieved
- Erforderlich: Nein
- Verwendete Leben in diesen Spiel
- Datentyp: Zahl
- Feldbezeichnung: Verwendete Leben in diesen Spiel
- Länge: 18
- Dezimalstellen: 0
- Feldname: Lives_This_Game
- Erforderlich: Nein
- Plattform
- Datentyp: Text
- Feldbezeichnung: Plattform
- Länge: 16
- Feldname: Game_Platform
- Erforderlich: Ja
- Punktestand im Spiel
- Datentyp: Text
- Feldbezeichnung: Punktestand im Spiel
- Länge: 16
- Feldname: Score_This_Game
- Erforderlich: Nein
- Account
- Datentyp: Nachschlagen
- Bezug zu: Account
- Feldbezeichnung: Account
- Feldname: Account
- Erforderlich: Ja
- Datum des Spiels
- Datentyp: Datum/Uhrzeit
- Feldbezeichnung: Datum des Spiels
- Feldname: Play_Date
- Erforderlich: Ja
- Dauer des Spiels
- Datentyp: Zahl
- Feldbezeichnung: Dauer des Spiels
- Länge: 16
- Dezimalstellen: 2
- Feldname: Play_Duration
- Erforderlich: Nein
Jetzt haben Sie acht Felder, um alle Interaktionen Ihrer Spieler zu verfolgen. Gut gemacht!
Details zum Index großer Objekte
Feldname |
Values (Werte) |
---|---|
Bezeichnung |
Index der Interaktionen der Kunden |
Name |
CustomerInteractionsIndex |
Indexfelder |
Indexposition 1: Account__c, Absteigend Indexposition 2: Game_Platform__c, Aufsteigend Indexposition 3: Play_Date__c, Absteigend |
Bereitstellen großer Objekte
Nachdem Sie Ihr benutzerdefiniertes großes Objekt definiert haben, können Sie es bereitstellen. Klicken Sie für das große Objekt auf Bearbeiten und ändern Sie den Bereitstellungsstatus in "Bereitgestellt".
Jetzt steht der Verwendung Ihres neuen großen Objekts nichts mehr im Weg.
In diesem Fenster können Sie die Beschriftungen und Namen für Ihr benutzerdefiniertes großes Objekt und seine Felder bearbeiten. Den Index können Sie allerdings weder bearbeiten noch löschen. Zum Ändern des Index beginnen Sie mit einem neuen großen Objekt neu. Sie können ein benutzerdefiniertes großes Objekt auch aus Setup löschen. Gelöschte große Objekte werden 15 Tage lang gespeichert. Während dieses Zeitraums haben Sie die Wahl, das Objekt wiederherzustellen oder permanent zu löschen, doch nach Ablauf dieser 15 Tage wird es dauerhaft gelöscht.
Füllen großer Objekte
Es gibt zwei Möglichkeiten, große Objekte zu füllen. Sie können entweder mit Data Loader oder der API eine CSV-Datei verwenden oder diesen Vorgang komplett über Apex ausführen.
Wenn Sie eine CSV-Datei nutzen, muss die erste Zeile in Ihrer Datei die Feldbeschriftungen enthalten, die für die Zuordnung der CSV-Daten zu Ihrem benutzerdefinierten großen Objekt verwendet werden. Laden Sie die Daten in das große Objekt in Data Loader hoch oder führen Sie den Upload über die Bulk-API oder die SOAP-API durch. Nachstehend sehen Sie die CSV-Datei, die wir zum Hochladen von Daten in unser großes Objekt Customer_Interaction__b verwenden. Ein großes Objekt kann wesentlich mehr Daten unterstützen als hier im Beispiel angegeben.
Date of Play,In-Game Purchase,Level Achieved,Lives Used This Game,Platform,Play Duration,Score This Game,Account 2015-01-01T23:01:01Z,A12569,57,7,PC,25,55736,001R000000302D3 2015-01-03T13:22:01Z,B78945,58,7,PC,35,61209,001R000000302D3 2015-01-04T15:16:01Z,D12156,43,5,iOS,45,36148,001R000000302D3
Wenn Sie Apex zum Füllen von Customer_Interaction__b einsetzen möchten, verwenden Sie die Methode insertImmediate.
// Define the record Customer_Interaction__b bo = new Customer_Interaction__b(); bo.Account__c = '001R000000302D3'; bo.Game_Platform__c = 'PC'; bo.Play_Date__c = DateTime.newInstance(2018, 2, 5); bo.In_Game_Purchase__c = 'A12569'; bo.Level_Achieved__c = '45'; bo.Lives_This_Game__c = 3; bo.Score_This_Game__c = '5500'; bo.Play_Duration__c = 25; // Insert the record, which creates a new record database.insertImmediate(bo); // Define the record Customer_Interaction__b bo2 = new Customer_Interaction__b(); bo2.Account__c = '001R000000302D3'; bo2.Game_Platform__c = 'PC'; bo2.Play_Date__c = DateTime.newInstance(2018, 2, 5); bo2.In_Game_Purchase__c = 'A12569'; bo2.Level_Achieved__c = '45'; bo2.Lives_This_Game__c = 3; bo2.Score_This_Game__c = '5500'; bo2.Play_Duration__c = 25; // Modify a field in the index bo2.Game_Platform__c = 'Mac'; // Insert the record, creating a new record because the primary key has changed database.insertImmediate(bo2); // Define the record Customer_Interaction__b bo3 = new Customer_Interaction__b(); bo3.Account__c = '001R000000302D3'; bo3.Game_Platform__c = 'PC'; bo3.Play_Date__c = DateTime.newInstance(2018, 2, 5); bo3.In_Game_Purchase__c = 'A12569'; bo3.Level_Achieved__c = '45'; bo3.Lives_This_Game__c = 3; bo3.Score_This_Game__c = '5500'; bo3.Play_Duration__c = 25; // Modify a field not included in the index bo3.Level_Achieved__c = '1'; // Insert the record, which updates the second record because the index is the same database.insertImmediate(bo3);
Warnung
Apex-Tests, die gemischte DML-Aufrufe verwenden, sind nicht zulässig und schlagen fehl. Wenn Sie nur in das große Objekt schreiben, fügt der Test fehlerhafte Daten in das große Zielobjekt ein, die Sie manuell löschen müssen. Wenn das große Zielobjekt DML-Testaufrufe enthalten soll, verwenden Sie ein simuliertes Framework mit der Apex-Stub-API.
Wenn Sie einen Datensatz mit dem gleichen Index, aber mit unterschiedlichen Daten erneut einfügen, führt dies zu einem ähnlichen Verhalten wie ein Upsert-Vorgang. Existiert ein Satz mit dem Index, überschreibt der Einfügevorgang die Indexwerte mit den neuen Daten. Die Einfügung ist idempotent, was heißt, dass das Einfügen vorhandener Daten nicht zu Duplikaten führt. Das erneute Einfügen ist beim Hochladen von Millionen von Datensätzen sehr nützlich. Tritt ein Fehler auf, werden die fehlgeschlagenen Uploads einfach erneut hochgeladen, ohne dass Daten dupliziert werden. Ist beim erneuten Einfügen kein Datensatz für den angegebenen Index vorhanden, wird ein neuer Datensatz eingefügt.
Ressourcen
-
Salesforce-Hilfe: Verwalten großer Objekte
-
Big Object Implementation Guide: Definieren und Bereitstellen benutzerdefinierter großer Objekte mit der Metadaten-API
-
Salesforce-Hilfe: Erstellen benutzerdefinierter Felder
-
Big Object Implementation Guide: Populate a Custom Big Object
-
Salesforce-Hilfe: Data Loader
-
TrailheaDX 2017-Session: Big Objects—Bring Big Data to Lightning Platform