Empiece a realizar un seguimiento de su progreso
Inicio de Trailhead
Inicio de Trailhead

Construir una interfaz de usuario para modificar un registro

Objetivos de aprendizaje

Después de completar esta unidad, podrá:
  • Realizar una solicitud a la API de la interfaz de usuario para actualizar un registro.
  • Describir lo que hace especial los campos compuestos.
  • Realizar una solicitud a la API de la interfaz de usuario para actualizar un campo compuesto.

Utilizar Workbench para llamar a la API de la interfaz de usuario

Vamos a utilizar Workbench para realizar una llamada de API para actualizar el registro Contenedores universales.

Workbench es un conjunto de herramientas que le permite interactuar con su organización de Salesforce mediante la API. Dado que puede generar solicitudes REST desde cualquier remitente HTTP, hay muchas otras herramientas disponibles para su uso (por ejemplo, consulte la información sobre cURL o Postman). Sin embargo, Workbench proporciona un marco sencillo y específico para las API de Salesforce y, por consiguiente, es la herramienta perfecta para investigar con el fin de prepararse para desarrollar una integración óptima.

El primer paso consiste en iniciar sesión en Workbench.
  1. Inicie sesión en su Trailhead Playground. En otra ficha de navegador, navegue a Workbench.
  2. Para Environment (Entorno), seleccione Production (Producción).
  3. En el caso de la API, seleccione la última versión.
  4. Asegúrese de seleccionar I agree to the terms of service (Acepto las condiciones del servicio).
  5. Haga clic en Login with Salesforce (Iniciar sesión con Salesforce).

Ya está en la página de inicio de Workbench. Para este módulo, vamos a usar tan solo una de las muchas herramientas de Workbench, que este caso es REST Explorer.

En el menú superior, seleccione utilities (utilidades) | REST Explorer.

Puede realizar llamadas de API de la interfaz de usuario desde REST Explorer del mismo modo que lo haría en cualquier otra interfaz HTTP.

Llamada de Workbench al recurso /ui-api/object-info.

Para realizar una llamada de API, ingrese el URI del recurso, seleccione el método HTTP, agregue un cuerpo de solicitud si es necesario y haga clic en Execute (Ejecutar).

¡No lo dude y utilice Workbench para realizar esa solicitud ahora! Ingrese este URI, seleccione GET y haga clic en Execute (Ejecutar).
/services/data/v48.0/ui-api/object-info

La respuesta es una lista de todos los objetos que la API de la interfaz de usuario y su Trailhead Playground admiten.

Nota

Nota

Si recibe un error, asegúrese de que su URI incluye v48.0, que es la versión de la API.

Modificar un registro

En la aplicación Record Viewer, cuando un usuario hace clic para crear un registro, la solicitud a /ui-api/record-ui/{recordIds} pide ambos modos de visualización y modificación. La respuesta JSON incluye formatos para cada modo, de modo que la aplicación tiene suficiente información para construir un formulario que permita a los usuarios modificar el registro cuando así lo decidan.

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

Para permitir a un usuario modificar un registro, la aplicación muestra un formulario con campos modificables. Cuando un usuario hace clic en Guardar, la saga de recordUpdater.js realiza una solicitud PATCH al recurso /ui-api/records/{recordId} para realizar la actualización.

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

Utilicemos Workbench para actualizar un registro y luego ver el cambio en la aplicación Record Viewer y en Salesforce. Primero necesitamos el Id. del registro que hay que actualizar.

En la aplicación Record Viewer, en Elementos recientes, haga clic en Contenedores universales. Copie el Id. del registro que se va a utilizar en la solicitud PATCH. Puede copiar el Id. del campo en la parte superior de la aplicación, o puede hacer clic en Show JSON (Mostrar JSON) y haga clic en records para ver el Id. del registro. A continuación aparece JSON de muestra que tiene un aspecto similar a lo que ve.
"records": {
    "0010V00002JoU6hQAF": {
      "apiName": "Account",
      "childRelationships": {},
      "eTag": "412642214dd7ef34eb3e2bae5e645dcc",
  1. En Workbench, haga clic en Utilities | REST Explorer (Utilidades | Explorador de REST).
  2. Ingrese estos parámetros:
    • Método HTTP: PATCH
    • URI de recurso: /services/data/v48.0/ui-api/records/{recordId}

      Sustituya {recordId} por el Id. del registro Contenedores universales.

    • Cuerpo de la solicitud:
      {
          "fields" : {
              "Website": "www.example.com",
              "Rating" : "Hot"
          }
      }
  3. Haga clic en Execute (Ejecutar).
  4. Vuelva a la aplicación Record Viewer y haga clic en View Record (Ver registro) para volver a cargar el registro Contenedores universales.

    Los campos Website y Rating se actualizaron. También puede ver el cambio en su organización de Salesforce.

Modificar un campo compuesto

Los campos compuestos pueden ser un poco más difíciles de actualizar. Un campo compuesto agrupa múltiples campos con tipos de datos primitivos, como números o cadenas, para representar un tipo de datos complejo, como una ubicación o una dirección. Una campo compuesto consta de campos componentes.

Por ejemplo, BillingAddress es un campo compuesto. Sus campos componentes son BillingStreet, BillingCity, BillingState y BillingCountry. Los valores del campo compuesto y los valores en los campos componentes se asignan a los mismos datos subyacentes almacenados en Salesforce; siempre tienen valores idénticos.

Los campos compuestos son de solo lectura. Para modificar un campo compuesto tiene que actualizar sus campos componentes.

Si un campo es compuesto, su propiedad objectInfo.fields[nombreCampo].compound es true.
"BillingAddress" : {
  "apiName" : "BillingAddress",
  "calculated" : false,
  "compound" : true,
  "compoundComponentName" : null,
  "compoundFieldName" : null,
  ...
Si un campo es un componente de un campo de compuesto, su propiedad objectInfo.fields[nombreCampo].compoundComponentName contiene su nombre de componente y su propiedad objectInfo.fields[nombreCampo].compoundFieldName contiene el nombre de su campo compuesto.
"BillingCity": {
  "apiName": "BillingCity",
  "calculated": false,
  "compound": false,
  "compoundComponentName": "City",
  "compoundFieldName": "BillingAddress",
  ...
Para actualizar una dirección, proporcione los campos componentes como entradas separadas. Por ejemplo, BillingAddress es un campo compuesto, de modo que es de solo lectura. Para actualizarlo, tiene que actualizar sus partes.
  1. En Workbench, haga clic en Utilities | REST Explorer (Utilidades | Explorador de REST).
  2. Ingrese estos parámetros:
    • Método HTTP: PATCH
    • URI de recurso: /services/data/v48.0/ui-api/records/{recordId}

      Sustituya {recordId} por el Id. del registro Contenedores universales.

    • Cuerpo de la solicitud:
      {
        "fields" : {
          "BillingPostalCode": "98112",
            "BillingState": "WA",
            "BillingCity": "Seattle",
            "BillingStreet" : "123 Main Street",
            "BillingCountry" : "USA"
        }
      }
  3. Haga clic en Execute (Ejecutar).
  4. Vuelva a la aplicación Record Viewer y haga clic en View Record (Ver registro) para volver a cargar el registro Contenedores universales.

Mire el registro actualizado en la aplicación Record Viewer.

En modo de visualización, es mejor representar un campo compuesto como un único campo. Campo compuesto en modo de visualización.

En modo de modificación, represente los campos componentes de modo que un usuario pueda cambiarlos. Para ver el registro en modo de modificación, haga clic en Modificar.Campo componente en modo de modificación que muestra cada campo componente.

ETags

ETag es un encabezado HTTP que identifica en exclusiva una respuesta. Su aplicación puede pasar una ETag de vuelta a Salesforce empleando el encabezado de solicitud HTTP If-None-Match.

Si el JSON que Salesforce va a enviar de vuelta es el mismo que tiene, recibirá un mensaje HTTP 304, lo que significa que nada cambió y su aplicación no tiene que deserializar otra carga.

El uso de ETag reduce el tráfico de red y el uso de los datos, y mejora el desempeño de su aplicación. Resulta útil para cargas de trabajo de metadatos de objetos y formatos, porque no cambian a menudo.

Cada respuesta procedente de la API de la interfaz de usuario tiene una propiedad eTag que contiene un encabezado HTTP ETag, que es un identificador opaco que se corresponde con la fuente. Puede ver la propiedad eTag y el identificador en una respuesta contraída procedente de /ui-api/record-ui/{recordIds}.
root:{} 5 items
eTag:19d49d8dfba088456235a7cacc38138a
layoutUserStates:{} 1 item
layouts:{} 1 item
objectInfos:{} 1 item
records:{} 1 item

Si ampliamos layouts, objectInfos y records en la respuesta JSON, vemos que cada una de las respuestas anidadas también contiene una propiedad eTag. Eso se debe a que la API de la interfaz de usuario tiene recursos que devuelven cada una de las respuestas anidadas como respuestas de nivel superior. En una carga agregada como /ui-api/record-ui/{recordIds}, cada porción de la carga tiene una ETag.

Estos recursos devuelven respuestas anidadas como respuestas de nivel superior.
  • /ui-api/layout/{objectApiName}
  • /ui-api/object-info/{objectApiName}
  • /ui-api/records/{recordId}