Skip to main content
Join the Agentforce Hackathon on Nov. 18-19 to compete for a $20,000 Grand Prize. Sign up now. Terms apply.

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.

  1. Klicken Sie in Setup auf die Registerkarte Objekt-Manager und wählen Sie dann Erstellen > Benutzerdefiniertes Objekt aus.
  2. Geben Sie die folgenden Werte ein.
    1. Bezeichnung: Employee (Mitarbeiter)
    2. Plural-Bezeichnung: Employees (Mitarbeiter)
    3. (Aktivieren Sie die Option Beginnt mit Vokal, sofern verfügbar.)
    4. Objektname: Employee (Mitarbeiter)
    5. Datensatzname: Employee Name (Mitarbeitername)
  3. Aktivieren Sie das Kontrollkästchen Nach dem Speichern dieses benutzerdefinierten Objekts den Assistenten für neue benutzerdefinierte Registerkarte starten.
  4. Klicken Sie auf Save (Speichern).
  5. Wählen Sie auf der Seite "Registerkarte für neues benutzerdefiniertes Objekt" Gebäude als Registerkartenstil aus.
  6. Klicken Sie auf Weiter | Weiter | Speichern.
  7. Klicken Sie auf Felder & Bezeihungen und dann auf Neu.
  8. Folgen Sie den Schritte im Feldassistenten, um diese drei Felder anzulegen:
    1. Datentyp: Text, Feldbezeichnung: Last Name, Feldname: Last_Name, Länge: 50, Erforderlich: Ja
    2. Datentyp: Text, Feldbezeichnung: First Name, Feldname: First_Name, Länge: 50
    3. Datentyp: Zahl, Feldbezeichnung: Tenure, Länge: 18, Dezimalstellen: 0, Feldname: Tenure

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.

  1. Geben Sie in Setup im Feld "Schnellsuche" den Text Datenänderungserfassung ein und klicken Sie dann auf Datenänderungserfassung.
  2. Wählen Sie unter "Verfügbare Einheiten" den Eintrag Employee (Employee__c) aus und klicken Sie auf den Pfeil >.
  3. Klicken Sie auf Speichern.

Die Seite 'Datenänderungserfassung'

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

Schritte

  1. 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.
  2. In Step 3: Configure Client Parameters geben Sie die Konfigurationsparameter in arguments.yaml an.
    1. Behalten Sie die Standardwerte für PUBSUB_HOST und PUBSUB_PORT bei.
    2. Für LOGIN_URL geben Sie https://login.salesforce.comoder den Anmelde-URL für Ihre "My Domain" (Meine Domäne) wie etwa https://mycompany.my.salesforce.com ein.
    3. 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.
    4. Für USERNAME geben Sie Ihren Trailhead Playground-Benutzernamen ein.
    5. 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.
    6. Für TOPIC geben Sie /data/Employee__ChangeEvent an.
    7. Legen Sie PROCESS_CHANGE_EVENT_HEADER_FIELDS auf true fest. Dieser Wert stellt sicher, dass Felder wie etwa changedFields in ChangeEventHeader eingeblendet werden. Weitere Informationen finden Sie in den Überlegungen zur Ereignisdeserialisierung im Pub/Sub-API Developer Guide.
  1. Speichern Sie Ihre Änderungen.
  2. Navigieren Sie in einem Terminalfenster zum obersten java-Ordner.
  3. 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. 

  1. Suchen und wählen Sie im App Launcher (App Launcher) Employees aus.
  2. Klicken Sie auf Neu.
  3. Füllen Sie die folgenden Felder aus.
    • Employee Name (Mitarbeitername): e-100
    • Last Name: Smith
    • First Name: Patricia
  1. 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. 

  1. Klicken Sie auf der Detailseite des Employee-Datensatzes auf Bearbeiten.
  2. Ändern Sie das Feld "First Name" in Trish.
  3. Geben Sie für "Tenure" 3 ein.
  4. 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. 

  1. Wählen Sie in Trishs Detailseite die Option Löschen aus dem Dropdown-Menü aus.
  2. 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.

  1. Klicken Sie auf das Schnellzugriffsmenü (Setup-Zahnradsymbol) und wählen Sie Developer Console aus.
  2. Klicken Sie in der Developer Console auf Debug und wählen Sie Open Execute Anonymous Window aus.
  3. 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;
  1. 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

Teilen Sie Ihr Trailhead-Feedback über die Salesforce-Hilfe.

Wir würden uns sehr freuen, von Ihren Erfahrungen mit Trailhead zu hören: Sie können jetzt jederzeit über die Salesforce-Hilfe auf das neue Feedback-Formular zugreifen.

Weitere Infos Weiter zu "Feedback teilen"