Información general sobre Apex
Objetivos de aprendizaje
Después de completar esta unidad, podrá hacer lo siguiente:
- Describir las funciones clave del lenguaje de programación Apex.
- Guardar una clase de Apex y llamar a métodos mediante Apex anónimo.
- Usar la consola de desarrollador para inspeccionar los registros de depuración.
Antes de comenzar
Nos complace acompañarlo en su recorrido por Apex. Este módulo contiene información básica sobre el lenguaje de programación para que aprenda los conceptos esenciales de forma rápida. Si este módulo es su primer acercamiento a Apex, le recomendamos realizar antes el proyecto Inicio rápido: Apex. Una vez que lo haya terminado, continúe con este módulo.
¿Qué es Apex?
Apex es un lenguaje de programación que usa una sintaxis similar a Java y funciona como los procedimientos almacenados de base de datos. Apex permite a los desarrolladores agregar lógica de negocio a los eventos de sistema, como clics en botones, actualizaciones de registros relacionados y páginas de Visualforce.
Como lenguaje, Apex se caracteriza por lo siguiente:
- Alojamiento: Apex se guarda, compila y ejecuta en el servidor (Plataforma Lightning).
- Orientación a objetos: Apex admite clases, interfaces y elementos heredados.
- Tipificación consistente: Apex valida las referencias a objetos en tiempo de compilación.
- Múltiples arrendatarios: dado que Apex se ejecuta en una plataforma de múltiples arrendatarios, protege muy bien el código no controlado mediante la aplicación de límites, lo que impide que el código monopolice los recursos compartidos.
- Integración con la base de datos: el acceso y la manipulación de registros son sencillos. Apex permite el acceso directo a los registros y sus campos, y proporciona declaraciones y lenguajes de consulta para manipular estos registros.
- Datos como objetivo: Apex proporciona un acceso transaccional a la base de datos, lo que permite operaciones de reversión.
- Facilidad de uso: Apex se basa en el conocido lenguaje Java.
- Pruebas sencillas: Apex ofrece compatibilidad integrada para la creación de pruebas de unidades, la ejecución y la cobertura de código. Salesforce garantiza que todo el código Apex personalizado funcione según lo esperado mediante la ejecución de pruebas de todas las unidades antes de cualquier actualización de la plataforma.
- Compatibilidad con versiones: el código Apex personalizado se puede guardar en distintas versiones de la API.
Aspectos destacados del lenguaje Apex
Como ocurre con otros lenguajes de programación orientados a objetos, estos son algunos de los elementos de lenguaje que admite Apex:
- Clases, interfaces, propiedades y colecciones (listas, mapas y conjuntos).
- Notación de objetos y conjuntos.
- Expresiones, variables y constantes.
- Declaraciones condicionales (si..., entonces...) y declaraciones de flujo de control (bucles for y bucles while).
A diferencia de otros lenguajes de programación orientados a objetos, Apex admite lo siguiente:
- Desarrollo en la nube a medida que Apex se almacena, compila y ejecuta en la nube.
- Desencadenadores, los cuales son similares a los desencadenadores de sistemas de base de datos.
- Declaraciones de base de datos que permiten hacer llamadas directas a la base de datos y lenguajes de consulta para consultar y buscar datos.
- Transacciones y reversiones.
- El modificador de acceso
global
, que es más permisivo que el modificadorpublic
y permite el acceso a espacios de nombres y aplicaciones.
- Control de versiones de código personalizado.
Además, no se aplica la distinción entre mayúsculas y minúsculas al lenguaje Apex.
Herramientas de desarrollo
Puede escribir y depurar Apex en la computadora cliente mediante las extensiones de Salesforce para Visual Studio Code. Consulte Extensiones de Salesforce Visual Studio Code.
También puede escribir Apex y acceder a la información de depuración directamente en el navegador mediante la interfaz de usuario de Salesforce. Abra Developer Console bajo Su nombre o el menú de acceso rápido ().
Descripción general de tipos de datos
Apex admite varios tipos de datos, incluido un tipo de datos específico para Salesforce (tipo de datos sObject).
Apex admite los siguientes tipos de datos:
- Primitivo (por ejemplo, Integer, Double, Long, Date, Datetime, String, ID y Boolean entre otros).
- sObject, ya sea un sObject genérico o un sObject específico, como una cuenta, un contacto o MyCustomObject__c (obtendrá más información sobre los sObjects en una unidad posterior).
- Colección, lo que incluye lo siguiente:
- Una lista de primitivos, sObjects, objetos definidos por el usuario, objetos creados a partir de clases de Apex o recopilaciones.
- Un conjunto de primitivos, sObjects, objetos definidos por el usuario, objetos creados a partir de clases de Apex o recopilaciones.
- Asignación de un primitivo a un primitivo, sObject o colección.
- Lista tipificada de valores, llamada también enumeración.
- Clases de Apex definidas por el usuario.
- Clases de Apex suministradas por el sistema.
Colecciones de Apex: Lista
Las listas incluyen una colección ordenada de datos del mismo tipo.
Las dos declaraciones siguientes son equivalentes. La variable colors
se declara mediante la sintaxis de lista.
List<String> colors = new List<String>();
Como alternativa, la variable colors
puede declararse mediante una anotación de matrices.
String[] colors = new List<String>();
Si desea ampliar las colecciones, utilice el método List.add()
para agregar nuevos elementos. La anotación de matrices entre corchetes se puede usar para hacer referencia a elementos existentes en la colección según el índice. Sin embargo, no se puede emplear para agregar más elementos.
Este ejemplo muestra cómo se agregan elementos a una lista una vez que se haya creado y, luego, se utiliza el método add()
para agregar otros.
// Create a list and add elements to it in one step List<String> colors = new List<String> { 'red', 'green', 'blue' }; // Add elements to a list after it has been created List<String> moreColors = new List<String>(); moreColors.add('orange'); moreColors.add('purple');
Los elementos de la lista se pueden leer mediante la especificación de un índice entre corchetes, lo que se conoce como “anotación de matrices”. Además, puede usar el método get()
para leer un elemento de la lista. Este ejemplo se basa en las listas creadas en el ejemplo anterior y en él se muestra cómo leer los elementos de la lista mediante cualquier método. En el ejemplo también se muestra cómo iterar los elementos de la lista.
// Get elements from a list String color1 = moreColors.get(0); String color2 = moreColors[0]; System.assertEquals(color1, color2); // Iterate over a list to read elements System.debug('Print out the colors in moreColors:'); for(String color : moreColors) { // Write value to the debug log System.debug(color); }
Clases de Apex
Una de las ventajas de las clases de Apex es la reutilización del código. Se puede llamar a métodos de clase mediante desencadenadores y otras clases. El siguiente tutorial es una guía para el almacenamiento de una clase de ejemplo en la organización, el uso de esta clase para el envío de emails y la inspección de registros de depuración.
Guardar una clase de Apex
Guarde la clase EmailManager
en la organización:
- Abra Developer Console bajo Su nombre o el menú de acceso rápido ().
- En Developer Console, haga clic en File (Archivo) | New (Nuevo) | Apex Class (Clase de Apex), ingrese EmailManager para el nombre de la clase y haga clic en OK (Aceptar).
- Sustituya el cuerpo predeterminado de la clase por el ejemplo de clase
EmailManager
.
La claseEmailManager
tiene un método público (sendMail()
) que envía emails y usa métodos de mensajería integrados de la biblioteca de clases de Apex. Además, esta clase tiene un método auxiliar privado (inspectResults()
), al cual no se puede llamar externamente debido a que es privado, pero se usa solo en la clase. Este método auxiliar inspecciona los resultados del envío de email y se lo puede llamar mediantesendMail()
.public class EmailManager { // Public method public void sendMail(String address, String subject, String body) { // Create an email message object Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); String[] toAddresses = new String[] {address}; mail.setToAddresses(toAddresses); mail.setSubject(subject); mail.setPlainTextBody(body); // Pass this email message to the built-in sendEmail method // of the Messaging class Messaging.SendEmailResult[] results = Messaging.sendEmail( new Messaging.SingleEmailMessage[] { mail }); // Call a helper method to inspect the returned results inspectResults(results); } // Helper method private static Boolean inspectResults(Messaging.SendEmailResult[] results) { Boolean sendResult = true; // sendEmail returns a list of result objects. // Iterate through the list to inspect results. // In this class, the methods send only one email, // so we should have only one result. for (Messaging.SendEmailResult res : results) { if (res.isSuccess()) { System.debug('Email sent successfully'); } else { sendResult = false; System.debug('The following errors occurred: ' + res.getErrors()); } } return sendResult; } }
- Haga clic en File (Archivo) | Save (Guardar) para guardar la clase.
NOTA: Si la sintaxis del código no es correcta, se muestra un error en la ficha Problems (Problemas). Puede usar los detalles del error para corregir el código.
Llamar a un método para el envío de email
Vamos a invocar el método público. Usaremos la ejecución de Apex anónimo para esto. El código Apex anónimo permite ejecutar líneas de código sobre la marcha y es un método útil para invocar Apex y sobre todo para probar la funcionalidad. Se generan resultados del registro de depuración, como en el caso de cualquier otra ejecución de Apex.
- En Developer Console, haga clic en Debug (Depuración) | Open Execute Anonymous Window (Abrir ventana de ejecución anónima).
- En la ventana que se abre, ingrese lo siguiente. Sustituya 'Your email address' por su dirección de email.
EmailManager em = new EmailManager(); em.sendMail('Your email address', 'Trailhead Tutorial', '123 body');
- Haga clic en Execute (Ejecutar).
Ya debería recibir un email en su inbox. Compruebe su email.
Inspeccionar registros de depuración
Los registros de depuración son útiles para depurar el código. Al ejecutar métodos de Apex, las llamadas se incluyen en el registro de depuración. Además, puede escribir sus propios mensajes de depuración en el registro, lo que facilita la depuración del código en caso de errores. El método auxiliar inspectResults()
, al que se llama mediante sendMail()
, escribe mensajes en el registro mediante el método System.debug()
para indicar si la operación de envío de email es correcta o ha generado errores. Puede buscar estos mensajes en el registro de depuración generado al ejecutar el método.
- En Developer Console, haga clic en la ficha Logs (Registros) y haga doble clic en el registro más reciente de la lista.
- Seleccione Debug Only (Solo depurar) para filtrar el registro de modo que solo se muestren las líneas de registro para las declaraciones
System.debug()
.
Verá el siguiente mensaje en la vista de registro filtrada suponiendo que el email se ha enviado sin errores.
DEBUG|Email sent successfully
Llamar a un método estático
Dado que el método sendMail()
de nuestra clase no tiene acceso a las variables de miembro de clase, no es necesario que sea un método de instancia. Vamos a cambiarlo a un método estático mediante la adición de la palabra clave static
a su declaración. Es más fácil llamar a los métodos estáticos que a los métodos de instancia, ya que no necesitan ser llamados en una instancia de la clase, sino que se llama directamente en el nombre de la clase.
- En Developer Console, busque la ficha abierta para la clase
EmailManager
y modifique la primera línea de la definición del métodosendMail()
del modo siguiente (el único cambio es la adición de la palabra clavestatic
).public static void sendMail(String address, String subject, String body) {
- Haga clic en File (Archivo) | Save (Guardar) para guardar la clase.
- Modifique las declaraciones de la ventana de ejecución anónima para llamar al método estático en el nombre de clase.
EmailManager.sendMail('Your email address', 'Trailhead Tutorial', '123 body');
- Haga clic en Execute (Ejecutar). Una vez ejecutado este método, puede comprobar su email y, de forma opcional, el registro de depuración como en los pasos anteriores.
Recursos
-
Introduction to Apex Code (Recorded Webinar)
-
Guía del desarrollador de Apex: Presentación de Apex
-
Trailhead: Fundamentos de la Consola del desarrollador