Erfassen Sie Ihre Fortschritte
Trailhead-Startseite
Trailhead-Startseite

Erstellen einer Benutzeroberfläche zum Bearbeiten eines Datensatzes

Lernziele

Nachdem Sie diese Lektion abgeschlossen haben, sind Sie in der Lage, die folgenden Aufgaben auszuführen:
  • Stellen Sie einer Anforderung an die User Interface API, um einen Datensatz zu aktualisieren
  • Beschreiben der Besonderheiten zusammengesetzter Felder
  • Stellen Sie einer Anforderung an die User Interface API, um ein zusammengesetztes Feld zu aktualisieren

Verwenden von Workbench zum Aufrufen der User Interface API

Wir werden Workbench für einen API-Aufruf verwenden, mit dem der Datensatz "Universal Containers" aktualisiert wird.

Workbench ist eine Suite aus Tools, welche die Interaktion mit Ihrer Salesforce-Organisation über die API ermöglichen. Die Sie REST-Anforderungen von jedem HTTP-Sender aus senden können, stehen Ihnen auch zahlreiche andere Tools zur Verfügung (z. B. cURL oder Postman). Da Workbench jedoch ein benutzerfreundliches Framework speziell für Salesforce-APIs bereitstellt, ist dies ein guter Einstieg, bis Sie in der Lage sind, eine ausgewachsene Integrationslösung zu schreiben.

Der erste Schritt besteht in der Anmeldung bei Workbench.
  1. Melden Sie sich bei Ihrem Trailhead Playground an. Navigieren Sie in einem anderen Browserfenster zu Workbench.
  2. Wählen Sie als Umgebung Production aus.
  3. Wählen Sie als API-Version die höchste verfügbare Versionsnummer aus.
  4. Aktivieren Sie unbedingt das Kontrollkästchen I agree to the terms of service.
  5. Klicken Sie auf Login with Salesforce.

Daraufhin wird die Workbench-Startseite angezeigt. Bei diesem Modul verwenden wir nur eines der vielen Tools von Workbench, den REST Explorer.

Wählen Sie im oberen Menü utilities | REST Explorer aus.

Sie können User Interface API-Aufrufe vom REST Explorer aus durchführen, wie von jeder beliebigen anderen HTTP-Schnittstelle aus.

Workbench-Aufruf der Ressource '/ui-api/object-info'

Für einen API-Aufruf geben Sie den Ressourcen-URI ein, wählen eine HTTP-Methode aus, fügen nach Bedarf Anforderungstext hinzu und klicken auf Execute.

Nutzen Sie Workbench, um diese Anforderung jetzt zu stellen! Geben Sie diesen URI ein, wählen Sie GET und klicken Sie auf Execute.
/services/data/v48.0/ui-api/object-info

Die Antwort ist eine Liste aller Objekte, die die User Interface API und Ihr Trailhead Playground unterstützen.

Hinweis

Hinweis

Wenn Sie eine Fehlermeldung erhalten, stellen Sie sicher, dass Ihr URI die API-Version v48.0 enthält.

Bearbeiten eines Datensatzes

Wenn in der Record Viewer-Anwendung ein Benutzer auf die Schaltfläche zum Erstellen eines Datensatzes klickt, werden in der Anforderung an /ui-api/record-ui/{recordIds} sowohl der View- als auch der Edit-Modus angefordert. Die JSON-Antwort enthält Layouts für jeden Modus, so dass die Anwendung über genügend Informationen verfügt, um ein Formular zu erstellen, mit dem Benutzer den Datensatz bearbeiten können, wenn sie sich dafür entscheiden.

let recordViewUrl = action.creds.instanceUrl + '/services/data/v48.0/ui-api/record-ui/' 
  + action.recordId + '?formFactor=' + action.context.formFactor + '&layoutTypes=Full&modes=View,Edit';

Damit ein Benutzer einen Datensatz bearbeiten kann, zeigt die Anwendung ein Formular mit bearbeitbaren Feldern an. Wenn ein Benutzer auf Save klickt, stellt die Saga recordUpdater.js eine PATCH-Anforderung an die Ressource /ui-api/records/{recordId}, um die Aktualisierung durchzuführen.

let recordDataUrl = action.creds.instanceUrl + '/services/data/v48.0/ui-api/records/' + action.recordId;

Wir verwenden jetzt Workbench, um einen Datensatz zu aktualisieren und die Änderung anschließend in der Record Viewer-Anwendung und in Salesforce anzuzeigen. Zuerst benötigen wir die ID des Datensatzes, der aktualisiert werden soll.

Klicken Sie in der Record Viewer-Anwendung unter "Zuletzt verwendete Elemente" auf Universal Containers. Kopieren Sie die zu verwendende Datensatz-ID in die PATCH-Anforderung. Sie können die ID entweder aus dem Feld oben in der Anwendung kopieren oder auf Show JSON und dann auf records klicken, um die Datensatz-ID anzuzeigen. Hier ist ein Beispiel für JSON-Code ähnlich dem, der bei Ihnen angezeigt wird.
"records": {
    "0010V00002JoU6hQAF": {
      "apiName": "Account",
      "childRelationships": {},
      "eTag": "412642214dd7ef34eb3e2bae5e645dcc",
  1. Klicken Sie in Workbench auf Utilities | REST Explorer.
  2. Geben Sie folgende Einstellungen ein:
    • HTTP-Methode: PATCH
    • Ressourcen-URI: /services/data/v48.0/ui-api/records/{recordId}

      Ersetzen Sie {recordId} durch die Datensatz-ID von Universal Containers.

    • Anforderungstext (Request Body):
      {
          "fields" : {
              "Website": "www.example.com",
              "Rating" : "Hot"
          }
      }
  3. Klicken Sie auf Execute.
  4. Kehren Sie zur Record Viewer-Anwendung zurück und klicken Sie auf View Record, um den Universal Containers-Datensatz neu zu laden.

    Die Felder "Website" und "Rating" wurden geändert. Sie können die Änderung auch in Ihrer Salesforce-Organisation anzeigen.

Bearbeiten eines zusammengesetzten Felds

Das Aktualisieren zusammengesetzter Felder kann sich etwas schwieriger gestalten. Ein zusammengesetztes Feld gruppiert mehrere Felder mit einfachen Datentypen, wie beispielsweise Zahlen oder Zeichenfolgen, um komplexe Datentypen, wie beispielsweise Standorte oder Adressen, wiederzugeben. Ein zusammengesetztes Feld besteht aus Komponentenfeldern.

BillingAddress ist ein Beispiel für ein zusammengesetztes Feld. Seine Komponentenfelder sind BillingStreet, BillingCity, BillingState und BillingCountry. Die Werte im zusammengesetzten Feld und die Werte in den Komponentenfeldern sind beide denselben in Salesforce gespeicherten zugrunde liegenden Daten zugewiesen. Ihre Werte sind immer identisch.

Zusammengesetzte Felder sind schreibgeschützt. Um ein zusammengesetztes Feld zu bearbeiten, müssen Sie dessen Komponentenfelder aktualisieren.

Handelt es sich bei einem Feld um ein zusammengesetztes Feld, hat seine Eigenschaft objectInfo.fields[Feldname].compound den Wert true.
"BillingAddress" : {
  "apiName" : "BillingAddress",
  "calculated" : false,
  "compound" : true,
  "compoundComponentName" : null,
  "compoundFieldName" : null,
  ...
Ist ein Feld eine Komponente eines zusammengesetzten Felds, enthält seine Eigenschaft objectInfo.fields[Feldname].compoundComponentName seinen Komponentennamen und seine Eigenschaft objectInfo.fields[Feldname].compoundFieldName enthält den Namen seines zusammengesetzten Felds.
"BillingCity": {
  "apiName": "BillingCity",
  "calculated": false,
  "compound": false,
  "compoundComponentName": "City",
  "compoundFieldName": "BillingAddress",
  ...
Wenn Sie eine Adresse aktualisieren möchten, stellen Sie die Komponentenfelder als separate Eingaben zur Verfügung. BillingAddress ist beispielsweise ein zusammengesetztes Feld und damit schreibgeschützt. Wenn Sie dieses Feld aktualisieren möchten, müssen Sie seine Teile aktualisieren.
  1. Klicken Sie in Workbench auf Utilities | REST Explorer.
  2. Geben Sie folgende Einstellungen ein:
    • HTTP-Methode: PATCH
    • Ressourcen-URI: /services/data/v48.0/ui-api/records/{recordId}

      Ersetzen Sie {recordId} durch die Datensatz-ID von Universal Containers.

    • Anforderungstext (Request Body):
      {
        "fields" : {
          "BillingPostalCode": "98112",
            "BillingState": "WA",
            "BillingCity": "Seattle",
            "BillingStreet" : "123 Main Street",
            "BillingCountry" : "USA"
        }
      }
  3. Klicken Sie auf Execute.
  4. Kehren Sie zur Record Viewer-Anwendung zurück und klicken Sie auf View Record, um den Universal Containers-Datensatz neu zu laden.

Sehen Sie sich den geänderten Datensatz in der Record Viewer-Anwendung an.

Im View-Modus lässt sich ein zusammengesetztes Feld gut als einzelnes Feld rendern. Zusammengesetztes Feld im View-Modus

Im Edit-Modus rendern Sie die Komponentenfelder, damit sie vom Benutzer geändert werden können. Um den Datensatz im Edit-Modus anzuzeigen, klicken Sie auf Edit.Komponentenfeld im Edit-Modus zeigt jedes Komponentenfeld

ETags

Ein ETag ist eine HTTP-Kopfzeile, die eine Antwort eindeutig bezeichnet. Ihre Anwendung kann ein ETag mithilfe der HTTP-Anforderungskopfzeile If-None-Match an Salesforce zurückgeben.

Wenn der JSON-Code, den Salesforce zurücksenden wird, mit dem Ihnen vorliegenden Code übereinstimmt, erhalten Sie die Rückmeldung "HTTP 304", was bedeutet, dass sich nichts geändert hat und Ihre Anwendung keine weitere Nutzlast deserialisieren muss.

Der Einsatz von ETags reduziert Netzwerkverkehr und Datennutzung und verbessert die Performance Ihrer Anwendung. Er ist bei Nutzlasten mit Objekt- und Layout-Metadaten sinnvoll, da diese sich nicht oft ändern.

Jede Antwort der User Interface API verfügt über die Eigenschaft eTag, die eine ETag-HTTP-Kopfzeile enthält, bei der es sich um einen undurchsichtigen Identifier handelt, der der Ressource entspricht. Sie können die Eigenschaft eTag und den Identifier in einer ausgeblendeten Antwort von /ui-api/record-ui/{recordIds} sehen.
root:{} 5 items
eTag:19d49d8dfba088456235a7cacc38138a
layoutUserStates:{} 1 item
layouts:{} 1 item
objectInfos:{} 1 item
records:{} 1 item

Wenn wir layouts, objectInfos und records in der JSON-Antwort einblenden, sehen wir, dass jede dieser verschachtelten Antworten ebenfalls eine eTag-Eigenschaft enthält. Das liegt daran, dass die UI API über Ressourcen verfügt, die jede dieser verschachtelten Antworten als Antworten der obersten Ebene zurückgeben. In einer aggregierten Nutzlast wie /ui-api/record-ui/{recordIds} verfügt jeder Block der Nutzlast über ein ETag.

Diese Ressourcen geben die verschachtelten Antworten als Antworten oberster Ebene zurück.
  • /ui-api/layout/{objectApiName}
  • /ui-api/object-info/{objectApiName}
  • /ui-api/records/{recordId}