Skip to main content
Únase a nosotros en TDX, en San Francisco, o en Salesforce+ los días 5 y 6 de marzo en la conferencia para desarrolladores sobre la era de agentes de IA. Registrarse ahora.

Utilizar sObjects y DML

Objetivos de aprendizaje

Después de completar esta unidad, podrá:

  • Definir sObject.
  • Explicar la diferencia entre los sObjects y otros tipos de datos en Apex.
  • Usar DML para insertar registros en la base de datos.
Nota

Nota

¿Su idioma de aprendizaje es español? Comience el reto en un Trailhead Playground en español y utilice las traducciones proporcionadas entre paréntesis para navegar. Copie y pegue solo los valores en inglés, ya que las validaciones del reto se basan en los datos en inglés. Si no aprueba el reto en su organización en español, le recomendamos que (1) cambie la configuración regional a Estados Unidos, (2) cambie el idioma a inglés, siga las instrucciones descritas aquí y, a continuación, (3) vuelva a hacer clic en el botón Check Challenge (Comprobar el reto).

Consulte la insignia Trailhead en su idioma para obtener más información sobre cómo aprovechar la experiencia de Trailhead en otros idiomas.

Siga el proceso con Trail Together

¿Desea seguir el proceso con un experto a medida que realiza este paso? Eche un vistazo a este vídeo, parte de la serie Trail Together en Trailhead Live.

(Este vídeo comienza en el minuto 21:39, en caso de que desee retroceder y volver a ver el principio del paso).

¿Qué es un sObject?

Un sObject es un tipo de dato de Apex que corresponde a un objeto de Salesforce (sObject) en una organización. Los sObjects son tipos de datos complejos que contienen múltiples valores en una sola variable. Contienen un único registro de datos de un objeto de Salesforce, como Account (Cuenta), Contact (Contacto) u Opportunity (Oportunidad). Recuerde que, de los aspectos básicos de Apex para administradores, las variables son como contenedores. La mayoría de las variables albergan información. Los sObjects son contenedores que tienen otros contenedores. Los contenedores dentro del contenedor sObject pueden ser de diferentes tipos de datos, como cadena, fecha, entero o booleano.

Un sObject representado como un cuadrado con cuatro casillas dentro, etiquetadas como Id (Identificador), Name (Nombre), Type (Tipo) y Custom_Field__c (Campo personalizado).

Nueva cuenta

Nombre

Número de la cuenta

Teléfono

The Tea Factory

356281

555-0158

Tina's Teas

623956

555-0129

Eche un vistazo a la información en esta tabla. Si ha utilizado Data Loader (Cargador de datos), no le sonará a nuevo este formato de cuenta. Los campos de la cuenta son Name (Nombre), Account Number (Número de cuenta) y Phone (Teléfono). Los datos son los que vería si recuperara la información de un informe o una vista de lista.

Los campos de un objeto en una organización se llaman propiedades de un sObject en el código Apex. Así como cada campo en un objeto de una organización tiene un tipo de dato, cada propiedad de un sObject también tiene un tipo de dato. Por ejemplo, debido a que el campo Name (Nombre) de un objeto Account (Cuenta) tiene el tipo de dato cadena, la propiedad Name (Nombre) del sObject myAcct (Mi cuenta) también tiene el tipo de dato cadena: myAcct.Name = 'The Tea Factory'.

Ya sea que cree una cuenta manualmente (en la interfaz de usuario de Salesforce) o de manera programática (usando código Apex), establece los mismos valores con los mismos tipos de datos. Por ejemplo, en la interfaz de usuario de Salesforce, puede crear una cuenta con los valores de los campos que aparecen en la primera fila de la tabla de New Accounts (Nuevas cuentas) arriba. Para crear la misma cuenta de manera programática, use un sObject de cuenta en código Apex, de la siguiente manera:

Account myAcct = new Account();
myAcct.Name = 'The Tea Factory';
myAcct.Phone= '555-0129';
myAcct.AccountNumber = '356281';

Use el nombre del sObject, la notación de puntos y los mismos campos predeterminados (Name, Phone y AccountNumber) que ya conoce en su organización.

Account myAcct = new Account(); myAcct.Name = 'The Tea Factory'; myAcct.AccountNumber = '356281'; El nombre de sObject es myAcct y las propiedades del sObject son Id, Name, Phone y AccountNumber.

En este ejemplo, las propiedades de myAcct (Mi cuenta) (Name [Nombre], Phone [Teléfono] y AccountNumber [Número de cuenta]) tienen tipos de datos con los que ya está familiarizado: cadena y entero.

Establecer el valor del campo

Use la notación de puntos para asignar un valor a un sObject. Observe las líneas 2-4 en el ejemplo de código anterior. Si pensamos en el sObject como un contenedor de contenedores, esas líneas abren el contenedor más grande, myAcct (Mi cuenta); encuentran los contenedores Name (Nombre), Phone (Teléfono) y AccountNumber (Número de cuenta); y les asignan valores.

Obtener el valor del campo

De manera similar, use la notación de punto para obtener (recuperar) un valor de un sObject.

Ejemplo: String accountName = myAcct.Name;

Este ejemplo de código abre el contenedor myAcct (Mi cuenta), mira dentro del contenedor, encuentra el contenedor Name (Nombre) y obtiene su valor. En este ejemplo, el valor devuelto es The Tea Factory.

Declarar un sObject es como agregar una fila a una hoja de cálculo. Cuando esté listo para crear otra cuenta, asigne un nuevo nombre al objeto Account. Por ejemplo:

Account myAcct2 = new Account();
myAcct2.Name = 'Tina\'s Teas';
myAcct2.AccountNumber = '623956';
myAcct2.Phone = '555-0129';

Añadir datos a una organización de Salesforce

¿Todo listo para escribir código Apex y añadir datos a su organización de Salesforce? Sabe cómo crear clases, crear métodos y declarar un sObject. Pero ¿cómo agregar un sObject a su base de datos de Salesforce? Para enviar nuevos registros a su organización de Salesforce, utilice algo llamado lenguaje de manipulación de datos (DML, por sus siglas en inglés).

Como administrador, ya conoce el funcionamiento de DML. Lo conoce como las instrucciones Insert (Insertar) (crear un registro), Update (Actualizar) (editar un registro) y Delete (Eliminar) (eliminar un registro) que utiliza con herramientas de manipulación de datos, como Data Loader. En lugar de utilizar archivos .csv y Data Loader para agregar filas o insertar o actualizar registros, puede escribir código Apex para hacer el trabajo. Utilice código Apex y las instrucciones DML Insert (Insertar), Update (Actualizar) y Delete (Eliminar). ¡Magnífico! En esta unidad, nos centramos en la instrucción Insert (Insertar).

Definir la clase

  1. En Developer Console, haga clic en File | New | Apex Class (Archivo | Nuevo | Clase de Apex).
  2. Introduzca NewAccounts como el nombre de la clase.
  3. Haga clic en OK (Aceptar).
  4. Reemplace el código predeterminado con este código:
    public class NewAccounts {
        public static void sObjectsInsert(){
            Account store = new Account();
            store.Name = 'The Tea Factory';
            store.AccountNumber = '356281';
            store.Phone = '555-0158';
            insert store;
        }
    }
  5. Haga clic en File | Save (Archivo | Guardar).

Ahora tiene una clase NewAccounts que crea un nuevo registro y establece sus propiedades. La clase también utiliza la instrucción insert (insertar) para agregar el nuevo registro de cuenta a la base de datos. ¡Ha llegado el momento de ejecutar su código!

Ejecutar el código

  1. Haga clic en Debug | Open Execute Anonymous Window (Depurar | Abrir ventana de ejecución anónima).
  2. En la ventana Enter Apex Code (Introducir código Apex), pegue este código:
    NewAccounts.sObjectsInsert();
  3. Haga clic en la casilla de verificación Open Log (Abrir registro) y luego en Execute (Ejecutar).
  4. Desde App Launcher (Iniciador de aplicación), busque y abra Accounts (Cuentas). The Tea Factory aparece en la lista Accounts (Cuentas). (Si no ve The Tea Factory, actualice la página).
    En la página de Accounts (Cuentas), The Tea Factory se muestra bajo Recently Viewed Accounts (Cuentas vistas recientemente).
  5. Haga clic en The Tea Factory (La fábrica del té).
  6. Haga clic en Details (Detalles). Observe que los campos Account Name (Nombre de la cuenta), Phone (Teléfono) y Account Number (Número de la cuenta) muestran los valores que estableció como propiedades del sObject en la clase NewAccounts (Nuevas cuentas).

Usar un bucle para crear múltiples registros

Añadir una cuenta cada vez no es algo muy práctico. Por lo general, necesita crear muchas cuentas a la vez, ya sea importando o actualizando registros.

Podría añadir varios registros de la misma manera en que incorporamos un registro en el ejemplo anterior, pero tendría que repetir el código para cada registro, de esta manera:

Account store1 = new Account();
Account store2 = new Account();
store1.Name = 'The Tea Factory 1';
store1.AccountNumber = '356281';
store1.Phone = '555-0158';
store2.Name = 'The Tea Factory 2';
store2.AccountNumber = '356282';
store2.Phone = '555-4012';
insert store1;
insert store2;

En Aspectos básicos de Apex para administradores, ha aprendido acerca de bucles y listas. Aquí tiene la oportunidad para poner en práctica esos conceptos. Usando un bucle while y una lista, puede crear muchos registros a la vez y añadir todos los registros a su base de datos. Es como usar Data Loader para cargar un archivo .csv que incluye tres registros e insertarlos en la base de datos.

Escribir el método

  1. Vuelva a la clase NewAccounts (Nuevas cuentas) en Developer Console.
  2. Sustituya el código existente por este código:
      public class NewAccounts {
        public static void sObjectsInsert(Integer value){
            Integer counter = 1;
            //create a list to add our accounts
            List<Account> teaFactoryAccounts = new List<Account>();
            while(counter <= value){
                //display the current counter value
                System.debug('Counter Value before Incrementing ' + counter);
                //create a new account
                Account store = new Account();
                store.Name = 'The Tea Factory ' + counter;
                store.AccountNumber = '35629' + counter;
                teaFactoryAccounts.add(store);
                System.debug(teaFactoryAccounts);
                //increment the counter
                counter = counter + 1;
                System.debug('Counter Value after incrementing ' + counter);
            }
            System.debug('Size of Account List: ' + teaFactoryAccounts.size() );
            System.debug('Elements in Account List: ' + teaFactoryAccounts);
            //insert all of the accounts in the list
            insert teaFactoryAccounts;
        }
    }
  3. Haga clic en File | Save (Archivo | Guardar).

Ejecutar el método.

  1. Haga clic en Debug | Open Execute Anonymous Window (Depurar | Abrir ventana de ejecución anónima).
  2. En la ventana Enter Apex Code (Introducir código Apex), pegue este código:
    NewAccounts.sObjectsInsert(3);
  3. Seleccione Open log (Abrir registro) y luego haga clic en Execute (Ejecutar). Se abre la ventana de registros.
  4. Seleccione Debug Only (Solo depurar).

La última entrada en el registro muestra que el código creó tres cuentas, con un nombre y un número de cuenta para cada una:

The Tea Factory 1, 356291

The Tea Factory 2, 356292

The Tea Factory 3, 356293

La lista teaFactoryAccounts creada en la línea 5 se ve de la siguiente manera:

Un espacio subdividido en tres partes, con una cuenta en cada una. Parte 1: Name = The Tea Factory 1, AccountNumber = 356291. Parte 2: Name = The Tea Factory 2, AccountNumber = 356292. Parte 3: Name = The Tea Factory 3, AccountNumber = 356293.

Cada vez que el valor de la variable contador se incrementa, se crea un sObject en el siguiente índice (posición) disponible en la lista.

Vuelva a la lista de Accounts (Cuentas) en su organización de Trailhead Playground y haga clic en Accounts (Cuentas). Los tres restaurantes que ha insertado están incluidos en la lista de Accounts (Cuentas).

Revisar código del bucle

Examine el código de bucle while. Crea una nueva instancia de un sObject de tipo Account (Cuenta) llamado store (tienda). A continuación, el bucle establece el nombre "The Tea Factory". Para diferenciar los registros de cuenta, añade el valor actual del contador al final de la cadena store.Name en cada iteración del bucle.

Después de que se establecen las propiedades, teaFactoryAccounts.add añade un sObject store (tienda) a la lista teaFactoryAccounts en cada iteración del bucle while hasta que se cumple la condición del bucle cuando el valor es mayor o igual que el contador.

Nota

No olvide incrementar el contador en el bucle while. Si nuestro código de ejemplo no sumara uno al contador de manera continua, entonces la condición nunca se cumpliría. El bucle while seguiría añadiendo registros hasta que se alcanzara el límite de tiempo establecido por Salesforce.

Cuando se cumple la condición, el bucle while termina y la última línea inserta la lista teaFactoryAccounts en la base de datos a la vez.

¿Por qué a la vez? Debido a que los recursos son limitados, solo puede usar la instrucción insert (insertar) en su código un máximo de 150 veces. Uno por uno, puede insertar un total de 150 registros. Pero, si cada instrucción insert (insertar) añade 10 registros, ese total aumenta a 1500 registros. Insertar múltiples objetos a la vez ayuda con bulkification (combinar tareas repetitivas escribiendo código eficiente). Al principio, es posible que se inserten tan solo 10 registros a la vez. Pero, a medida que crezca su aplicación, podría llegar a insertar 200 registros a la vez. Usar bulkification desde el principio prepara su aplicación para el crecimiento.

Recursos

Reto práctico

+500 puntos

Prepararse

Completará esta/este unidad en su propia organización de prácticas. Haga clic en Iniciar para empezar a trabajar o haga clic en el nombre de su organización para seleccionar otro diferente.

Su reto

Use DML to Insert Multiple Records
Create a class and one method that creates a specified number of new accounts and adds them to the database.
  • Create a public Apex class named AccountHandler
  • Add a public static method to the class:
    • Name: insertAccount
    • Include a parameter for the number of new accounts:
      • Data type: Integer
    • Create a list of Account records:
      • List name: addAccounts
    • Use a while loop to add N new Accounts to the list, where N is a value that is incremented by 1 during each iteration of the loop:
      • Name: Acme Inc N
      • AccountNumber: A000N
      Hint: You did something like this when you created three new Tea Factory stores.
    • Write one DML statement that inserts all the records into the database at one time
  • Run your insertAccount method
Comparta sus comentarios sobre Trailhead en la Ayuda de Salesforce.

Nos encantaría conocer su experiencia con Trailhead. Ahora puede acceder al nuevo formulario de comentarios cuando quiera desde el sitio de la Ayuda de Salesforce.

Más información Continuar para compartir comentarios