Abonnieren eines Ereigniskanals
Lernziele
Nachdem Sie diese Lektion abgeschlossen haben, sind Sie in der Lage, die folgenden Aufgaben auszuführen:
- Aktivieren von Objekten für Änderungsereignisbenachrichtigungen auf der Seite "Datenänderungserfassung"
- Verwenden der Pub/Sub-API zum Abonnieren eines Änderungsereigniskanals
- Erzeugen von Änderungsereignisbenachrichtigungen durch Vornehmen von Änderungen in Salesforce
Nachdem Sie die Grundlagen von "Datenänderungserfassung" kennengelernt haben, sehen wir uns die Funktion in der Praxis an, indem wir einige Änderungen in Salesforce vornehmen und Änderungsereignisse empfangen. Für diesen Abschnitt erstellen und ändern wir einen Mitarbeiterdatensatz.
Erstellen des benutzerdefinierten Objekts "Employee"
Bevor wir mit dieser Übung beginnen können, müssen wir das benutzerdefinierte Objekt "Employee" definieren. Der erste Schritt besteht darin, das benutzerdefinierte Objekt zu erstellen. Sie können die Aufgaben in dieser Lektion in Ihrem eigenen Trailhead Playground durchführen. Für den Zugriff auf den Trailhead Playground klicken Sie auf Ihr Profilbild rechts oben, klicken dann auf "Übungs-Organisationen" und dann auf den Benutzernamen der Organisation, die Sie starten möchten.
- Klicken Sie in Setup auf die Registerkarte Objekt-Manager und wählen Sie dann Erstellen > Benutzerdefiniertes Objekt aus.
- Geben Sie die folgenden Werte ein.
- Bezeichnung:
Employee
(Mitarbeiter) - Plural-Bezeichnung:
Employees
(Mitarbeiter) - (Aktivieren Sie die Option Beginnt mit Vokal, sofern verfügbar.)
- Objektname:
Employee
(Mitarbeiter) - Datensatzname:
Employee Name
(Mitarbeitername)
- Bezeichnung:
- Aktivieren Sie das Kontrollkästchen Nach dem Speichern dieses benutzerdefinierten Objekts den Assistenten für neue benutzerdefinierte Registerkarte starten.
- Klicken Sie auf Save (Speichern).
- Wählen Sie auf der Seite "Registerkarte für neues benutzerdefiniertes Objekt" Gebäude als Registerkartenstil aus.
- Klicken Sie auf Weiter | Weiter | Speichern.
- Klicken Sie auf Felder & Bezeihungen und dann auf Neu.
- Folgen Sie den Schritte im Feldassistenten, um diese drei Felder anzulegen:
- Datentyp: Text, Feldbezeichnung:
Last Name
, Feldname:Last_Name
, Länge:50
, Erforderlich: Ja
- Datentyp: Text, Feldbezeichnung:
First Name
, Feldname:First_Name
, Länge:50
- Datentyp: Zahl, Feldbezeichnung:
Tenure
, Länge:18
, Dezimalstellen:0
, Feldname:Tenure
- Datentyp: Text, Feldbezeichnung:
Aktivieren des Objekts "Employee" für Änderungsbenachrichtigungen
Bevor Sie Änderungsbenachrichtigungen empfangen können, müssen Sie die Objekte auswählen, die Sie interessieren. Andernfalls erhalten Sie keine Benachrichtigungen, selbst wenn Sie den richtigen Kanal abonnieren. In diesem Abschnitt wählen wir das benutzerdefinierte Objekt "Employee" aus, um Änderungen an "Employee"-Datensätzen zu erfassen.
- Geben Sie in Setup im Feld "Schnellsuche" den Text
Datenänderungserfassung
ein und klicken Sie dann auf Datenänderungserfassung.
- Wählen Sie unter "Verfügbare Einheiten" den Eintrag Employee (Employee__c) aus und klicken Sie auf den Pfeil >.
- Klicken Sie auf Speichern.
Abonnieren über die Pub/Sub-API
Als Nächstes zeigen wir Ihnen, wie Sie mit einem Java-Client der Pub/Sub-API Änderungsereignisse für Datensätze des Typs "Employee" generieren und abonnieren können. In diesem Abschnitt stellen wir die Schritte zum Generieren und Empfangen von Änderungsereignissen vor, damit Sie Beispiele für Änderungsereignisse kennenlernen. Sie müssen die Schritte zum Erwerben dieses Badges nicht zu befolgen. Sie können auf die Schritte verweisen, wenn Sie die Pub/Sub-API später zum Abonnieren von Änderungsereignissen verwenden.
Voraussetzungen
- Wenn Sie keinen Bereich vertrauenswürdiger IP-Adressen für Ihre Organisation eingerichtet haben, benötigen Sie ein Sicherheitstoken, das Sie an Ihr Kennwort anfügen. Weitere Informationen finden Sie unter Zurücksetzen Ihres Sicherheitstokens und Festlegen vertrauenswürdiger IP-Bereiche für Ihre Organisation.
Schritte
- Zum Einrichten des Java-Client der Pub/Sub-API führen Sie die unter Step 2: Clone and Build the Client von Java Quick Start for Pub/Sub API im "Pub/Sub API Developer Guide" beschriebenen Schritte aus.
- In Step 3: Configure Client Parameters geben Sie die Konfigurationsparameter in
arguments.yaml
an.
- Behalten Sie die Standardwerte für
PUBSUB_HOST
undPUBSUB_PORT
bei.
- Für
LOGIN_URL
geben Siehttps://login.salesforce.com
oder den Anmelde-URL für Ihre "My Domain" (Meine Domäne) wie etwahttps://mycompany.my.salesforce.com
ein. - Ermitteln Sie den Benutzernamen und das Kennwort für Ihre Trailhead Playground-Organisation in der Playground Starter-Anwendung. Weitere Informationen finden Sie in der Lektion Ermitteln von Benutzername und Kennwort für Ihren Trailhead Playground des Moduls Trailhead Playground-Management.
- Für
USERNAME
geben Sie Ihren Trailhead Playground-Benutzernamen ein.
- Für
PASSWORD
geben Sie das Trailhead Playground-Kennwort an und hängen das Sicherheitstoken an Ihr Kennwort an. Informationen zum Erhalt eines Sicherheitstokens finden Sie unter Zurücksetzen Ihres Sicherheitstokens in der Salesforce-Hilfe.
- Für
TOPIC
geben Sie/data/Employee__ChangeEvent
an. - Legen Sie
PROCESS_CHANGE_EVENT_HEADER_FIELDS
auftrue
fest. Dieser Wert stellt sicher, dass Felder wie etwachangedFields
in ChangeEventHeader eingeblendet werden. Weitere Informationen finden Sie in den Überlegungen zur Ereignisdeserialisierung im Pub/Sub-API Developer Guide.
- Speichern Sie Ihre Änderungen.
- Navigieren Sie in einem Terminalfenster zum obersten
java
-Ordner.
- Zum Abonnieren von Änderungsereignissen geben Sie Folgendes ein:
./run.sh genericpubsub.Subscribe
Sobald Sie den Kanal für Employee__c abonniert haben, werden bei Änderungen von Employee-Datensätzen oder der Erstellung neuer Datensätze Benachrichtigungen generiert, die der Client in der Konsole ausgibt.
Erstellen eines Employee-Datensatzes
Wir nehmen jetzt ein paar Datensatzänderungen vor, damit wir einige Benachrichtigungen über Änderungsereignisse erhalten. Zuerst erstellen wir einen Employee-Datensatz.
- Suchen und wählen Sie im App Launcher () Employees aus.
- Klicken Sie auf Neu.
- Füllen Sie die folgenden Felder aus.
- Employee Name (Mitarbeitername):
e-100
- Last Name:
Smith
- First Name:
Patricia
- Klicken Sie auf Save (Speichern).
Wenn Sie den Employee-Datensatz speichern, wird in der Konsole wie folgt eine Änderungsmeldung angezeigt.
{ "ChangeEventHeader": { "entityName": "Employee__c", "recordIds": [ "a00ak00000FqAsJAAV" ], "changeType": "CREATE", "changeOrigin": "com/salesforce/api/soap/61.0;client=SfdcInternalAPI/", "transactionKey": "0001b7b1-5ff1-499e-0b32-4b2aff2f6922", "sequenceNumber": 1, "commitTimestamp": 1722538034000, "commitNumber": 1722538034362728400, "commitUser": "005ak000004FkWTAA0", "nulledFields": [], "diffFields": [], "changedFields": [] }, "OwnerId": "005ak000004FkWTAA0", "Name": "e-100", "CreatedDate": 1722538034000, "CreatedById": "005ak000004FkWTAA0", "LastModifiedDate": 1722538034000, "LastModifiedById": "005ak000004FkWTAA0", "Last_Name__c": "Smith", "First_Name__c": "Patricia", "Tenure__c": null }
Aktualisieren eines Employee-Datensatzes
Als Nächstes aktualisieren wir den eben erstellten Datensatz, indem wir einen Wert für das Feld "Tenure" hinzufügen und den Vornamen ändern.
- Klicken Sie auf der Detailseite des Employee-Datensatzes auf Bearbeiten.
- Ändern Sie das Feld "First Name" in
Trish
.
- Geben Sie für "Tenure"
3
ein.
- Klicken Sie auf Save (Speichern).
Durch die Aktualisierung des Employee-Datensatzes wird die folgende Änderungsereignisnachricht generiert. Beachten Sie, dass im Änderungsereignis neben den Header-Feldern nur die neuen und geänderten Datensatz- und Systemfelder ausgefüllt sind. Die nicht geänderten Felder sind zwar in der Ereignisnachricht enthalten, sind aber leer.
{ "ChangeEventHeader": { "entityName": "Employee__c", "recordIds": [ "a00ak00000FqAsJAAV" ], "changeType": "UPDATE", "changeOrigin": "com/salesforce/api/soap/61.0;client=SfdcInternalAPI/", "transactionKey": "0001b7b6-4696-a4a3-c6a5-8b65014da623", "sequenceNumber": 1, "commitTimestamp": 1722538057000, "commitNumber": 1722538057223217200, "commitUser": "005ak000004FkWTAA0", "nulledFields": [], "diffFields": [], "changedFields": [ "0x0320" ] }, "OwnerId": null, "Name": null, "CreatedDate": null, "CreatedById": null, "LastModifiedDate": 1722538057000, "LastModifiedById": null, "Last_Name__c": null, "First_Name__c": "Trish", "Tenure__c": 3 }
Das Feld changedFields
enthält die Felder, die geändert wurden. Das Feld changedFields
ist ein nicht lesbares Bitmap-Feld. Es muss zuerst vom Client decodiert werden. Der Client des Abonnenten decodiert dieses Feld und zeigt seinen Inhalt nach der Änderungsereignisnachricht an. In diesem Beispiel enthält das Feld changedFields
die zwei Felder, die geändert wurden: First_Name__c
und Tenure__c
. Außerdem enthält es das Systemfeld LastModifiedDate
, das den Zeitstempel der Änderung enthält.
2024-08-01 11:47:37,738 [grpc-default-executor-1] java.lang.Class - ============================ 2024-08-01 11:47:37,739 [grpc-default-executor-1] java.lang.Class - ChangedFields 2024-08-01 11:47:37,739 [grpc-default-executor-1] java.lang.Class - ============================ 2024-08-01 11:47:37,739 [grpc-default-executor-1] java.lang.Class - LastModifiedDate 2024-08-01 11:47:37,739 [grpc-default-executor-1] java.lang.Class - First_Name__c 2024-08-01 11:47:37,739 [grpc-default-executor-1] java.lang.Class - Tenure__c 2024-08-01 11:47:37,739 [grpc-default-executor-1] java.lang.Class - ============================
Löschen eines Employee-Datensatzes
Sehen wir uns nun an, was passiert, wenn wir den Employee-Datensatz löschen.
- Wählen Sie in Trishs Detailseite die Option Löschen aus dem Dropdown-Menü aus.
- Klicken Sie im Bestätigungsfenster auf Löschen.
Der Löschvorgang führt zu folgender Ereignisnachricht. Änderungsereignisse für Löschungen enthalten keine Werte für Datensatz- oder Systemfelder. Alle Datensatz- und Systemfelder sind enthalten, aber leer.
{ "ChangeEventHeader": { "entityName": "Employee__c", "recordIds": [ "a00ak00000FqAsJAAV" ], "changeType": "DELETE", "changeOrigin": "com/salesforce/api/soap/61.0;client=SfdcInternalAPI/", "transactionKey": "0001045a-a442-5723-cd1f-07e8e39c5c1d", "sequenceNumber": 1, "commitTimestamp": 1722538082000, "commitNumber": 1722538082479947800, "commitUser": "005ak000004FkWTAA0", "nulledFields": [], "diffFields": [], "changedFields": [] }, "OwnerId": null, "Name": null, "CreatedDate": null, "CreatedById": null, "LastModifiedDate": null, "LastModifiedById": null, "Last_Name__c": null, "First_Name__c": null, "Tenure__c": null }
Wiederherstellen eines gelöschten Employee-Datensatzes
Wenn Sie einen Datensatz löschen, wird dies nur vorläufig gelöscht und kann innerhalb eines bestimmten Zeitlimits wiederhergestellt werden. Lassen Sie uns den Datensatz über Apex wiederherstellen.
- Klicken Sie auf das Schnellzugriffsmenü () und wählen Sie Developer Console aus.
- Klicken Sie in der Developer Console auf Debug und wählen Sie Open Execute Anonymous Window aus.
- Geben Sie den folgenden Befehl in das neue Fenster ein und ersetzen Sie dabei den ID-Platzhalter durch den im Header-Feld "recordIds" zurückgegebenen ID-Wert. Sie finden das Feld
recordIds
in der Änderungsereignisnachricht, die Sie erhielten, nachdem Sie den Datensatz im vorherigen Schritt gelöscht hatten.
Employee__c record = [SELECT Id,Name FROM Employee__c WHERE Id='ID_Placeholder' ALL ROWS]; undelete record;
- Klicken Sie auf Execute (Ausführen).
Der Wiederherstellungsvorgang führt zu folgender Ereignisnachricht. Das Änderungsereignis für einen wiederhergestellten Datensatz enthält Felder aus dem ursprünglichen gelöschten Datensatz.
{ "ChangeEventHeader": { "entityName": "Employee__c", "recordIds": [ "a00ak00000FqAsJAAV" ], "changeType": "UNDELETE", "changeOrigin": "com/salesforce/api/soap/61.0;client=devconsole", "transactionKey": "0001b7d4-927c-6028-fe72-7f28dc5cba83", "sequenceNumber": 1, "commitTimestamp": 1722538187000, "commitNumber": 1722538187363508200, "commitUser": "005ak000004FkWTAA0", "nulledFields": [], "diffFields": [], "changedFields": [] }, "OwnerId": "005ak000004FkWTAA0", "Name": "e-100", "CreatedDate": 1722538034000, "CreatedById": "005ak000004FkWTAA0", "LastModifiedDate": 1722538187000, "LastModifiedById": "005ak000004FkWTAA0", "Last_Name__c": "Smith", "First_Name__c": "Trish", "Tenure__c": 3 }
Ressourcen
-
Salesforce Developers: Java-Schnelleinstieg für Pub/Sub API (in englischer Sprache)
-
Salesforce Developers: Change Data Capture Developer Guide
-
Externe Website: Pub/Sub API GitHub Repo