Tutorial de APEX: clases de programación de Apex y ejemplos de codificación

¿Qué es Apex en Salesforce?

Apex Apex es un lenguaje de programación orientado a objetos y fuertemente tipado desarrollado por Salesforce para crear software como servicio (SaaS) y gestión de relaciones con clientes (CRM). Apex ayuda a los desarrolladores a crear aplicaciones SaaS de terceros y a agregar lógica empresarial a los eventos del sistema al brindar soporte de base de datos de back-end e interfaces cliente-servidor.

Apex ayuda a los desarrolladores a agregar lógica empresarial a los eventos del sistema, como clics en botones, actualizaciones de registros relacionados y páginas de Visualforce. Apex tiene una sintaxis similar a Java. Regístrese en Salesforce para aprender cómo funciona el CRM

Características del lenguaje de programación Apex

Estas son las características importantes de Salesforce Apex:

  • Apex es un lenguaje que no distingue entre mayúsculas y minúsculas.
  • Puede realizar operaciones DML como INSERTAR, ACTUALIZAR, UPSERT, ELIMINAR en registros de sObject utilizando apex.
  • Puede consultar registros de sObject utilizando SOQL (lenguaje de consulta de objetos de Salesforce) y SOSL (lenguaje de búsqueda de objetos de Salesforce) en Apex.
  • Le permite crear un prueba de unidad y ejecutarlos para verificar la cobertura de código y eficiencia del código en apex.
  • Apex se ejecuta en un entorno multiinquilino y Salesforce ha definido algunos límites de gobernador que impiden que un usuario controle los recursos compartidos. Cualquier código que supere el límite del gobernador de Salesforce falla y aparece un error.
  • El objeto de Salesforce se puede utilizar como tipo de datos en Apex. Por ejemplo -
    Account acc = new Account();

    ,aquí Cuenta es un objeto estándar de Salesforce.

  • Apex se actualiza automáticamente con cada versión de Salesforce.

¿Cuándo debería el desarrollador elegir Apex?

El código Apex solo debe escribirse si un escenario comercial es demasiado complejo y no se puede implementar utilizando la funcionalidad prediseñada proporcionada por Salesforce.

A continuación se muestran algunos escenarios en los que necesitamos escribir código Apex:

  • Crear servicios web que integren Salesforce con otras aplicaciones.
  • Implementar validación personalizada en objetos.
  • Para ejecutar lógica de ápice personalizada cuando se realiza una operación DML.
  • Implementar funciones que no se pueden implementar utilizando flujos de trabajo existentes y funciones de creadores de procesos.
  • Para configurar servicios de correo electrónico, debe incluir el procesamiento del contenido, encabezados y archivos adjuntos del correo electrónico mediante el código Apex.

Estructura de trabajo de Apex

Ahora, en este tutorial de Apex, aprenderemos sobre la estructura de trabajo de Apex:

A continuación se muestra el flujo de acciones para un código Apex:

  • Acción del desarrollador: todo el código de Apex escrito por un desarrollador se compila en un conjunto de instrucciones que el intérprete de tiempo de ejecución de Apex puede entender cuando el desarrollador guarda el código en la plataforma y estas instrucciones luego se guardan como metadatos en la plataforma.
  • Acción del usuario final: cuando el evento de usuario ejecuta un código apex, el servidor de la plataforma obtiene las instrucciones compiladas de los metadatos y las ejecuta a través del intérprete apex antes de devolver el resultado.
Estructura de trabajo de Apex
Estructura de trabajo de Apex

Sintaxis de ápice

Declaración de variable

Como Apex es un lenguaje fuertemente tipado, es obligatorio declarar una variable con tipo de datos en Apex.

Por ejemplo:

contact con = new contact(); 

aquí la variable con se declara con contacto como tipo de datos.

Consulta SOQL

SOQL significa lenguaje de consulta de objetos de Salesforce. SOQL se utiliza para recuperar registros sObject de la base de datos de Salesforce. Por ejemplo-

Account acc = [select id, name from Account Limit 1]; 

La consulta anterior recupera el registro de la cuenta de la base de datos de Salesforce.

Declaración de bucle

La declaración de bucle se utiliza para iterar sobre los registros de una lista. El número de iteraciones es igual al número de registros de la lista. Por ejemplo:

list<Account>listOfAccounts = [select id, name from account limit 100];
// iteration over the list of accounts
for(Account acc : listOfAccounts){
	//your logic
}

En el fragmento de código anterior, listOfAccounts es una variable del tipo de datos de lista.

Declaración de control de flujo

La declaración de control de flujo es beneficiosa cuando desea ejecutar algunas líneas del código en función de algunas condiciones.

Por ejemplo:

list<Account>listOfAccounts = [select id, name from account limit 100];
// execute the logic if the size of the account list is greater than zero
if(listOfAccounts.size() >0){
	//your logic
}

El fragmento de código anterior consulta registros de cuentas de la base de datos y verifica el tamaño de la lista.

Declaración DML

DML significa lenguaje de manipulación de datos. Las declaraciones DML se utilizan para manipular datos en la base de datos de Salesforce. Por ejemplo -

Account acc = new Account(Name = ‘ Test Account’);
Insert acc; //DML statement to create account record.

Entorno de desarrollo de Apex

Ahora, en este tutorial de programación de Apex, aprenderemos sobre el entorno de desarrollo de Apex:

El código Apex se puede desarrollar tanto en la edición sandbox como en la edición para desarrolladores de Salesforce.

Se recomienda desarrollar el código en el entorno sandbox y luego implementarlo en el entorno de producción.

Entorno de desarrollo de Apex

Herramientas de desarrollo de código Apex: a continuación se muestran las tres herramientas disponibles para desarrollar código Apex en todas las ediciones de Salesforce.

  • Consola de desarrollador Force.com
  • IDE de Force.com
  • Editor de código en la interfaz de usuario de SalesforceUsted

Tipo de datos en Apex

Los siguientes son los tipos de datos admitidos por Apex:

Primitivo

Entero, Double, Long, Date, Date Time, String, ID y Boolean se consideran tipos de datos primitivos. Todos los tipos de datos primitivos se pasan por valor, no por referencia.

Colecciones

Tres tipos de recogida están disponibles en Apex

  • Lista: Es una colección ordenada de primitivas, sObjects, colecciones u objetos Apex basados ​​en índices.
  • Conjunto: una colección desordenada de primitivos únicos.
  • Mapa: es una colección de claves primitivas únicas que se asignan a valores únicos que pueden ser primitivos, sObjects, colecciones u objetos Apex.

sObjeto

Este es un tipo de datos especial en Salesforce. Es similar a una mesa en SQL y contiene campos que son similares a las columnas de SQL.

Enumeraciones

Enum es un tipo de datos abstracto que almacena un valor de un conjunto finito de identificadores específicos.

Clases

Objetos

Se refiere a cualquier tipo de datos compatible con Apex.

Interfaces

Especificador de acceso de Apex

A continuación se muestran los especificadores de acceso admitidos por Apex:

Público:

Este especificador de acceso brinda acceso a una clase, método o variable que utilizará un vértice dentro de un espacio de nombres.

Personalizado

Este especificador de acceso brinda acceso a una clase, método o variable para usar localmente o dentro de la sección de código definida. En toda la técnica, las variables que no tienen ningún especificador de acceso definido tienen el especificador de acceso predeterminado privado.

Robusto

Este especificador de acceso brinda acceso a un método, variable que será utilizada por cualquier clase interna dentro de la definición de la clase Apex.

Escalabilidad

Este especificador de acceso brinda acceso a una clase, método o variable que utilizará un vértice dentro y fuera de un espacio de nombres. Se recomienda no utilizar palabras clave globales hasta que sea necesario.

Palabras clave en Apex

Con compartir

Si una clase se define con esta palabra clave, entonces se aplican todas las reglas de uso compartido para el usuario actual y, si esta palabra clave está ausente, el código se ejecuta en el contexto del sistema.

Por Ejemplo:

public with sharing class MyApexClass{
// sharing rules enforced when code in this class execute
}

sin compartir

Si una clase se define con esta palabra clave, entonces no se aplican todas las reglas de uso compartido que se aplican al usuario actual.

Por Ejemplo:

public without sharing class MyApexClass{
// sharing rules is not enforced when code in this class execute
}

Estático

Una variable, el método, se define con la palabra clave estática, se inicializa una vez y se asocia con la clase. Variables estáticas, los métodos se pueden llamar directamente por el nombre de la clase sin crear la instancia de una clase.

Final

Una constante, el método se define con la palabra clave final y no se puede anular. Por ejemplo:

public class myCls {
static final Integer INT_CONST = 10;
}

Si intenta anular el valor de esta variable INT_CONST, obtendrá una excepción: System.FinalException: la variable final ya se ha inicializado.

Ida y vuelta

Esta palabra clave devuelve un valor de un método. Por ejemplo:

public String getName() {
return  'Test' ;
}

Nulo

Define una constante nula y se puede asignar a una variable. Por ejemplo

 Boolean b = null;

Virtual

Si una clase se define con una palabra clave virtual, se puede ampliar y anular.

Resumen

Si una clase se define con una palabra clave abstracta, debe contener al menos un método con una palabra clave abstracta, y ese método solo debe tener una firma.

Por ejemplo:

public abstract class MyAbstrtactClass {
abstract Integer myAbstractMethod1();
}

Cadena de ápice

Una cadena es un conjunto de caracteres sin límite de caracteres. Por ejemplo:

String name = 'Test';

La clase String proporciona varios métodos integrados en Salesforce. A continuación, se muestran algunas de las funciones más utilizadas y frecuentes:

abreviar (ancho máximo)

Este método trunca una cadena a la longitud especificada y la devuelve si la longitud de la cadena dada es mayor que la longitud especificada; de lo contrario, devuelve la cadena original. Si el valor de la variable maxWidth es menor que 4, este método devuelve una excepción en tiempo de ejecución: System.StringException: el ancho mínimo de la abreviatura es 4

Por ejemplo:

String s = 'Hello World';
String s2 = s.abbreviate(8);
System.debug('s2'+s2); //Hello...

capitalizar()

Este método convierte la primera letra de una cadena a mayúsculas y minúsculas y la devuelve.

Por ejemplo:

String s = 'hello;
String s2 = s.capitalize();
System.assertEquals('Hello', s2);

contiene (subcadena)

Este método devuelve verdadero si la cadena que llama al método contiene la subcadena especificada.

String name1 = 'test1';
String name2 = 'test2';
Boolean flag = name.contains(name2);
System.debug('flag::',+flag); //true

es igual a (cadenaOrId)

Este método devuelve verdadero si el parámetro pasado no es nulo e indica la misma secuencia binaria de caracteres que la cadena que llama al método.

Al comparar los valores de ID, es posible que la longitud de los ID no sea igual. Por ejemplo: si una cadena que representa 15 caracteres de identificación se compara con un objeto que representa 18 caracteres de identificación, este método devuelve verdadero. Por ejemplo:

Id idValue15 = '001D000000Ju1zH';
Id idValue18 = '001D000000Ju1zHIAR';
Boolean result4 = stringValue15.equals(IdValue18);
System.debug('result4', +result4); //true

En el ejemplo anterior, el método igual compara el ID de objeto de 15 caracteres con el ID de objeto de 18 caracteres y si ambos ID representan la misma secuencia binaria, devolverá verdadero.

Utilice este método para realizar comparaciones que distingan entre mayúsculas y minúsculas.

escapeSingleQuotes(stringToEscape)

Este método agrega un carácter de escape (\) antes de cualquier comilla simple en una cadena y lo devuelve. Este método evita la inyección SOQL mientras crea una consulta SOQL dinámica. Este método garantiza que todas las comillas simples se consideren cadenas encerradas, en lugar de comandos de la base de datos.

Por ejemplo:

String s = 'Hello Tom';
system.debug(s); // Outputs 'Hello Tom'
String escapedStr = String.escapeSingleQuotes(s);
// Outputs \'Hello Tom\'

eliminar (subcadena)

Este método elimina todas las apariciones de la subcadena mencionada de la Cadena que llama al método y devuelve la cadena resultante.

Por ejemplo:

String s1 = 'Salesforce and force.com';
String s2 = s1.remove('force');
System.debug( 's2'+ s2);// 'Sales and .com'

subcadena (índice de inicio)

Este método devuelve una subcadena que comienza desde el carácter en startIndex y se extiende hasta el último de la cadena.

Por Ejemplo:

String s1 = 'hamburger';
String s2 = s1.substring(3);
System.debug('s2'+s2); //burger

contrarrestar ()

Este método invierte todos los caracteres de una cadena y la devuelve. Por ejemplo:

String s = 'Hello';
String s2 = s.reverse();
System.debug('s2::::'+s2);// olleH  // Hello

trim(): este método elimina todos los espacios en blanco iniciales de una cadena y la devuelve.

valor de (para convertir)

Este método devuelve la representación de cadena del objeto pasado.

Límites del gobernador de Apex

Los límites de regulación de Apex son los límites que aplica el motor de tiempo de ejecución de Apex para garantizar que ningún código ni proceso de Apex de la pista controle los recursos compartidos ni viole el procesamiento de otros usuarios en el entorno multiusuario. Estos límites se verifican en cada transacción de Apex. A continuación, se muestran los límites de regulación definidos por Salesforce en cada transacción de Apex:

Descripciones Limitar
Consultas SOQL que se pueden realizar en una transacción sincrónica 100
Consultas SOQL que se pueden realizar en una transacción asincrónica 200
Registros que se pueden recuperar mediante una consulta SOQL 50000
Registros que puede recuperar Database.getQueryLocator 10000
Consultas SOSL que se pueden realizar en una transacción principal 20
Registros que se pueden recuperar mediante una consulta SOSL 2000
Declaraciones DML que se pueden realizar en una transacción principal 150
Registros que se pueden procesar como resultado de una declaración DML, Approval.process o base de datos.emptyRecycleBin 10000
Anotaciones que se pueden realizar en una transacción principal. 100
Límite de tiempo de espera acumulativo en todas las llamadas que se realizan en una transacción principal 120 segundos
Límite de trabajos principales que se pueden agregar a la cola con System.enqueueJob 50
Límite de tiempo de ejecución para cada transacción de Apex 10 minutos
Límite de personajes que se pueden usar en una clase superior y disparador 1 millones de
Límite de tiempo de CPU para transacciones sincrónicas Milisegundos 10,000
Límite de tiempo de CPU para transacciones asincrónicas Milisegundos 60,000

Captador y definidor de Apex

La propiedad de Apex es similar a la variable de Apex. El getter y el setter son necesarios para una propiedad de vértice. Getter y setter se pueden utilizar para ejecutar código antes de acceder o cambiar el valor de la propiedad. El código del descriptor de acceso get se ejecuta cuando se lee el valor de una propiedad. El código del descriptor de acceso establecido se ejecuta cuando se cambia el valor de una propiedad. Cualquier propiedad que tenga un acceso get se considera de solo lectura, cualquier propiedad que tenga un acceso set se considera que escribe solo; cualquier propiedad que tenga un acceso get y set se considera lectura-escritura. Sintaxis de una propiedad de vértice:

public class myApexClass {
// Property declaration
	access_modifierreturn_typeproperty_name {
	get {
			//code  
		}
		set{
			//code
		}
	}

Aquí, access_modifier es el modificador de acceso de la propiedad. return_type es el tipo de datos de la propiedad. nombre_propiedad es el nombre de la propiedad.

A continuación se muestra un ejemplo de una propiedad de ápice que tiene acceso tanto para obtener como para establecer.

public class myApex{
	public String name{
		get{ return name;}
		set{ name = 'Test';}
	}
}

Aquí, el nombre de la propiedad es nombre, es propiedad pública y devuelve un tipo de datos de cadena.

No es obligatorio tener algún código en el bloque get y set. Estos bloques se pueden dejar vacíos para definir una propiedad automática. Por ejemplo:

public double MyReadWriteProp{ get; set; } 

Obtener y configurar el descriptor de acceso también se puede definir con su modificador de acceso. Si un descriptor de acceso se define con un modificador, anula el modificador de acceso de la propiedad. Por ejemplo:

public String name{private get; set;}// name is private for read and public to write.

Clase Apex

Una clase ápice es un modelo o plantilla a partir del cual se crean objetos. Un objeto es la instancia de una clase.

Hay tres formas de crear clases apex en Salesforce:

Consola de desarrollador

IDE de Force.com

Página de detalles de la clase Apex.

En Apex, puede definir una clase externa también llamada clase de nivel superior, y también puede definir clases dentro de una clase externa llamada clases internas.

Es obligatorio utilizar modificadores de acceso como global o public en la declaración de la clase externa.

No es necesario utilizar modificador de acceso en la declaración de clases internas.

Una clase ápice se define utilizando la palabra clave class seguida del nombre de la clase.

La palabra clave Extends se usa para extender una clase existente mediante una clase apex, y la palabra clave implements se usa para implementar una interfaz mediante una clase apex.

Salesforce Apex no admite herencias múltiples; una clase apex solo puede extender una clase apex existente pero puede implementar múltiples interfaces.

Una clase apex puede contener un constructor definido por el usuario y, si un constructor definido por el usuario no está disponible, se utiliza un constructor predeterminado. El código de un constructor se ejecuta cuando se crea una instancia de una clase.

Sintaxis del ejemplo de clase Apex:

public class myApexClass{
// variable declaration
//constructor
	public myApexClass{
	}
//methods declaration
}

La nueva palabra clave se utiliza para crear una instancia de una clase apex. A continuación se muestra la sintaxis para crear una instancia de una clase apex.

myApexClass obj = new myApexClass();

Activador de vértice

Los activadores de Apex le permiten ejecutar Apex personalizado antes y después de que se realice una operación DML.

Apex admite los siguientes dos tipos de activadores:

Antes de los activadores: estos activadores se utilizan para validar y actualizar el valor del campo antes de que el registro se guarde en la base de datos.

Después de los activadores: estos activadores se utilizan para acceder a los campos (ID de registro, campo LastModifiedDate) establecidos por el sistema después de un registro confirmado en la base de datos. El valor de estos campos se puede utilizar para modificar otros registros. Los registros que se activan después de los activadores son de solo lectura.

Es una buena práctica escribir activadores voluminosos. Un disparador voluminoso puede procesar un solo registro, así como varios registros a la vez.

Sintaxis de un disparador de ápice:

trigger TriggerName on ObjectName (trigger_events) {
	//Code_block
 }

Aquí, TriggerName es el nombre del disparador, ObjectName es el nombre del objeto en el que se escribirá el disparador, trigger_events es la lista de eventos separados por comas.

Los siguientes son los eventos admitidos por los activadores de Apex: antes de la inserción, antes de la actualización, antes de la eliminación, después de la inserción, después de una actualización, después de la eliminación, después de la recuperación de la eliminación.

Las palabras clave estáticas no se pueden utilizar en un desencadenador de Apex. Todas las palabras clave aplicables a las clases internas se pueden utilizar en un desencadenador de Apex.

Hay variables implícitas definidas por cada activador que devuelve el contexto de tiempo de ejecución. Estas variables están definidas en el sistema. Clase de activación. Estas variables se denominan variables de contexto. La siguiente captura de pantalla muestra la variable de contexto admitida por el disparador de ápice.

Activador de vértice

Activador de vértice

A continuación se presenta la consideración de la variable de contexto en el disparador de ápice:

  • No utilice trigger.new y trigger.old en operaciones DML.
  • Trigger.new no se puede eliminar.
  • Trigger.new es de solo lectura.
  • Trigger.new se puede utilizar para cambiar los valores de los campos en el mismo objeto antes del activador únicamente.

Las siguientes capturas de pantalla enumeran las consideraciones sobre acciones específicas en diferentes eventos desencadenantes.

Activador de vértice

Activador de vértice

Clase por lotes en Apex

La clase Batch de Salesforce se utiliza para procesar una gran cantidad de registros que superarían los límites del regulador Apex si se procesaran normalmente. La clase Batch ejecuta el código de forma asincrónica.

Las siguientes son las ventajas de la clase por lotes:

  • La clase por lotes procesa los datos en fragmentos y, si un fragmento no se procesa correctamente, todos los fragmentos procesados ​​correctamente no se revierten.
  • Cada fragmento de datos en una clase por lotes se procesa con un nuevo conjunto de límites de gobernador que garantizan que el código se ejecute dentro de los límites de ejecución del gobernador.
  • Base de datos. La interfaz por lotes debe ser implementada por una clase apex para usarse como una clase por lotes. Proporciona tres métodos que debe implementar la clase por lotes.

A continuación se muestran los tres métodos que ofrece la interfaz Database.Batchable:

1.inicio()

Este método genera el alcance de los registros u objetos que se procesarán mediante el método de interfaz de ejecución. Durante la ejecución de un lote, se lo llama solo una vez. Este método devuelve un objeto Database.QueryLocator o un iterable. La cantidad de registros recuperados por una consulta SQL mediante el objeto Database.QueryLocator es de 50 millones de registros, pero si se utiliza un iterable, la cantidad total de registros que se pueden recuperar mediante la consulta SQL es de solo 50000 XNUMX. Iterable se utiliza para generar un alcance complejo para la clase de lote.

Sintaxis del método de inicio:

global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContextbc) {}

2.ejecutar()

Este método se utiliza para el procesamiento de cada fragmento de datos. Para cada fragmento de registros se llama al método de ejecución. El tamaño de lote predeterminado para la ejecución es 200 registros. El método de ejecución toma dos argumentos:

Una referencia al objeto Database.BatchableContext,

Una lista de sObjects, como List, o una lista de tipos parametrizados. Sintaxis del método de ejecución:

global void execute(Database.BatchableContext BC, list<P>){}

3.finalizar()

El método finish se llama una vez durante la ejecución de la clase batch. Se pueden realizar operaciones de posprocesamiento en el método finish. Por ejemplo: enviar el correo electrónico de confirmación. Este método se llama cuando se procesa todo el lote. Sintaxis del método Finish:

global void finish(Database.BatchableContext BC){}

Objeto Base de datos.BatchableContext

Cada método de la Base de Datos. La interfaz por lotes tiene una referencia al objeto Database.BatchableContext.

Este objeto se utiliza para realizar un seguimiento del progreso del trabajo por lotes.

A continuación se muestran los métodos de instancia proporcionados por BatchableContext:

  • getChildJobId(): este método devuelve el ID de un trabajo por lotes que se está procesando actualmente.
  • getJobId(): este método devuelve el ID del trabajo por lotes.

A continuación se muestra la sintaxis de una clase por lotes:

global class MyBatchClass implements Database.Batchable<sObject> {
	global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContextbc) {
// collect the batches of records or objects to be passed to execute
}
global void execute(Database.BatchableContextbc, List<P> records){
// process each batch of records
}
global void finish(Database.BatchableContextbc){
// execute any post-processing operations
}
}

Método Database.executeBatch

El método Database.executeBatch se utiliza para ejecutar una clase por lotes.

Este método toma dos parámetros: instancia de la clase de lote que se procesará, parámetro de opciones para especificar el tamaño del lote; si no se especifica, toma el tamaño predeterminado de 200.

Sintaxis de Database.executeBatch:

Database.executeBatch(myBatchObject,scope)

Ejecutando un nombre de clase por lotes MyBatchClass:

MyBatchClassmyBatchObject = new MyBatchClass(); 
Id batchId = Database.executeBatch(myBatchObject,100);

Base de datos.con estado

La clase por lotes no tiene estado de forma predeterminada. Cada vez que se llama al método de ejecución se recibe una nueva copia de un objeto, se inicializan todas las variables de la clase.

Database.stateful se implementa para hacer que una clase por lotes tenga estado.

Si su clase por lotes implementó el Database En la interfaz con estado, todas las variables de instancia conservan sus valores, pero las variables estáticas se restablecen entre transacciones.

Resumen

  • Apex es un sistema orientado a objetos y fuertemente tipado. lenguaje de programación que se compila y ejecuta en la plataforma force.com
  • El lenguaje de programación Apex no distingue entre mayúsculas y minúsculas
  • Dos tipos de flujo de acciones en Apex son 1) Acción del desarrollador 2) Acción del usuario final
  • Apex le ayuda a crear servicios web que integran Salesforce con otras aplicaciones.
  • Los tipos de datos admitidos por apex son: 1) Primitivo 2) Colecciones 3) sObject, Enums, 4) Clases, 5) Objetos e interfaces
  • Público, Privado, Protegido y Global son soportes especificados por Apex
  • Las palabras clave que se utilizan en Apex son: 1) Con uso compartido, 2) Sin uso compartido, 3) Estático, 4) Final 5) Retorno, 6) Nulo, 7) Virtual, 8) Resumen
  • Una cadena es un conjunto de caracteres sin límite de caracteres.
  • Los límites del gobernador de Apex son los límites impuestos por el motor de tiempo de ejecución de Apex para garantizar que cualquier código y proceso de Apex de la pista.
  • Getter y setter se pueden utilizar para ejecutar código antes de acceder o cambiar el valor de la propiedad.
  • Hay tres formas de crear clases Apex en Salesforce: 1) Consola de desarrollador, 2) IDE de Force.com y 3) página de detalles de la clase Apex.
  • Los activadores de Apex le permiten ejecutar Apex personalizado antes y después de que se realice una operación DML.
  • La clase por lotes en Salesforce se utiliza para procesar una gran cantidad de registros que excederían los límites del gobernador superior si se procesaran normalmente.