¿Qué es el Apex Salesforce?
Apex es un lenguaje de programación orientado a objetos y fuertemente escrito desarrollado por Salesforce para la construcción de Software como servicio (SaaS) y Gestión de Relaciones con el cliente (CRM). Apex ayuda a los desarrolladores a crear aplicaciones SaaS de terceros y agregar lógica de negocio a los eventos del sistema al proporcionar soporte de base de datos de back-end e interfaces cliente-servidor.,
Apex ayuda a los desarrolladores a agregar lógica de negocio a los eventos del sistema, como clics en botones, actualizaciones de Registros relacionadas y páginas de Visualforce. Apex tiene una sintaxis similar a Java.
en este tutorial para principiantes de Salesforce Apex, aprenderá conceptos básicos de Apex como-
- ¿Qué es Apex?,ge
- cuándo debe elegir el desarrollador Apex
- Estructura de trabajo de Apex
- sintaxis de Apex
- entorno de desarrollo de Apex
- Tipo de datos en Apex
- especificador de acceso de Apex
- palabras clave en Apex
- cadena de Apex
- límites del Gobernador de Apex
- /li>
- clase por lotes en Apex
características del lenguaje de programación Apex
Aquí están las características importantes de Salesforce Apex:
- Apex es un lenguaje insensible a mayúsculas y minúsculas.,
- Puede realizar operaciones DML como insertar, actualizar, UPSERT, eliminar en registros sObject utilizando apex.
- Puede consultar registros 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 una prueba unitaria y ejecutarlas para verificar la cobertura de código y la eficiencia del código en apex.
- Apex se ejecuta en un entorno multi-tenant, y Salesforce ha definido algunos límites de gobernador que impiden que un usuario controle los recursos compartidos., Cualquier código que cruce el límite del gobernador de salesforce falla, aparece un error.
- El objeto Salesforce se puede usar como tipo de datos en apex. Por ejemplo –
Account acc = new Account();
,here Account es un objeto estándar de salesforce.
- Apex se actualiza automáticamente con cada versión de Salesforce.
cuándo debe elegir el desarrollador Apex
el código de Apex Solo se debe escribir si un escenario de negocio es demasiado complejo y no se puede implementar utilizando la funcionalidad preconfigurada proporcionada por Salesforce.,
los siguientes son los pocos escenarios en los que necesitamos escribir código apex:
- para crear servicios web que integren Salesforce con otras aplicaciones.
- Para implementar validación personalizada en sobjects.
- Para ejecutar lógica Apex personalizada cuando se realiza una operación DML.
- Para implementar funcionalidades que no se pueden implementar utilizando flujos de trabajo existentes y funcionalidades de creadores de procesos.
- Para configurar los servicios de correo electrónico, debe incluir el procesamiento de los contenidos, encabezados y archivos adjuntos del correo electrónico utilizando 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 de apex:
- Acción del desarrollador: Todo el código de apex escrito por un desarrollador se compila en un conjunto de instrucciones que puede comprender el intérprete de tiempo de ejecución de apex 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 de apex, el servidor de la plataforma obtiene las instrucciones compiladas de los metadatos y las ejecuta a través del intérprete de apex antes de devolver el resultado.
Apex Sintaxis
Declaración de una Variable:
Como apex está fuertemente lenguaje escrito, es obligatorio declarar una variable con el tipo de datos en el ápice.,
Por ejemplo
contact con = new contact();
Aquí la variable con se declara con contact como un tipo de datos.
consulta SOQL:
SOQL significa salesforce object query language. SOQL se utiliza para obtener registros sObject de la base de datos de Salesforce. Por ejemplo –
Account acc = ;
la consulta anterior obtiene el registro de la cuenta de la base de datos de salesforce.
instrucción de bucle:
la instrucción de bucle se utiliza para iterar sobre los registros de una lista. El número de iteración es igual al número de registros de la lista., Por ejemplo:
en el fragmento de código anterior, listOfAccounts es una variable de tipo de datos list.
instrucción de control de flujo:
la instrucción de control de flujo es beneficiosa cuando desea ejecutar algunas líneas del código basadas en algunas condiciones.
por ejemplo:
el fragmento de código anterior consulta los registros de la cuenta de la base de datos y comprueba el tamaño de la lista.
declaración DML:
DML significa lenguaje de manipulación de datos. Las instrucciones 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.
Apex Development Environment
ahora en este tutorial de programación de Apex, aprenderemos sobre el entorno de desarrollo de Apex:
el código de Apex se puede desarrollar en sandbox y en la edición para desarrolladores de Salesforce.
es una buena práctica desarrollar el código en el entorno sandbox y luego desplegarlo en el entorno de producción.
herramientas de desarrollo de código Apex: las siguientes son las tres herramientas disponibles para desarrollar código apex en todas las ediciones de Salesforce.,
- Force.com consola de desarrollador
- Force.com IDE
- editor de código en la interfaz de usuario de Salesforce usted
tipo de datos en Apex
a continuación se muestran los tipos de datos compatibles con apex:
Primitive:
Integer, 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:
hay tres tipos de colecciones disponibles en Apex
- lista: es una colección ordenada de primitivas, sObjects, colecciones u objetos Apex basados en índices.
- Set: una colección desordenada de primitivas únicas.
- Map: es una colección de claves únicas y primitivas que se asignan a valores individuales que pueden ser primitivas, sObjects, colecciones u objetos Apex.
sObject:
Este es un tipo de datos especial en Salesforce. Es similar a una tabla en SQL y contiene campos que son similares a las columnas en SQL.,
Enums
Enum es un tipo de datos abstracto que almacena un valor de un conjunto finito de identificadores especificados
clases
objetos :
se refiere a cualquier tipo de datos que sea compatible con Apex.
Interfaces
especificador de acceso de Apex
a continuación se muestra el especificador de acceso soportado por apex:
Public:
Este especificador de acceso da acceso a una clase, método, variable para ser utilizada por un apex dentro de un espacio de nombres.,
Private:
Este especificador de acceso da acceso a una clase, método, variable que se utilizará localmente o dentro de la sección de código, se define. Toda la técnica, las variables que no tienen ningún especificador de acceso definido tienen el especificador de acceso predeterminado de privado.
protegido:
Este especificador de acceso da acceso a un método, variable para ser utilizado por cualquier clase interna dentro de la definición de la clase Apex.,
Global:
Este especificador de acceso da acceso a una clase, método, variable para ser utilizada por un ápice dentro de un espacio de nombres, así como fuera del espacio de nombres. Es una buena práctica no utilizar la palabra clave global hasta que sea necesario.
palabras clave en Apex
con uso compartido:
si se define una clase con esta palabra clave, se aplican todas las reglas de uso compartido al usuario actual y si esta palabra clave está ausente, el código se ejecuta bajo el contexto del sistema.,
por ejemplo:
public with sharing class MyApexClass{// sharing rules enforced when code in this class execute}
sin compartir:
si se define una clase con esta palabra clave, no se aplican todas las reglas de uso compartido al usuario actual.
por ejemplo:
public without sharing class MyApexClass{// sharing rules is not enforced when code in this class execute}
Static:
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 por nombre de clase directamente sin crear la instancia de una clase.
Final:
una constante, el método se define con la palabra clave final no se puede sobrescribir., Por ejemplo:
public class myCls {static final Integer INT_CONST = 10;}
si intenta anular el valor de esta variable INT_CONST, obtendrá un sistema de excepción.FinalException: la variable Final ya ha sido inicializada.
Return:
Esta palabra clave devuelve un valor de un método. Por ejemplo:
public String getName() {return 'Test' ;}
Null:
define una constante null y se puede asignar a una variable. Por ejemplo,
Boolean b = null;
Virtual:
Si una clase se define con una palabra clave virtual, puede ser extendido y reemplazado.,
Abstract:
Si una clase se define con palabra clave abstract, debe contener al menos un método con palabra clave abstract, y ese método solo debe tener una firma.
Por ejemplo:
public abstract class MyAbstrtactClass {abstract Integer myAbstractMethod1();}
Apex String
Una cadena es un conjunto de caracteres sin límite de caracteres. Por ejemplo:
String name = 'Test';
hay varios métodos incorporados proporcionados por la clase String en salesforce.,
abbreviate(maxWidth):
este método trunca una cadena a la longitud especificada y la devuelve si la longitud de la cadena dada es más larga que la longitud especificada; de lo contrario, devuelve la cadena original. Si el valor de la variable maxWidth es inferior a 4, este método devuelve un sistema de excepción en tiempo de ejecución.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...
capitalize ():
Este método convierte la primera letra de una cadena en mayúsculas y la devuelve.,
Por ejemplo:
String s = 'hello;String s2 = s.capitalize();System.assertEquals('Hello', s2);
contiene(subcadena):
Este método devuelve true si la Cadena de llamar al método contiene la subcadena especificada.
String name1 = 'test1';String name2 = 'test2';Boolean flag = name.contains(name2);System.debug('flag::',+flag); //true
equals(stringOrId):
Este método devuelve true 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, la longitud de los ID puede no ser igual., Por ejemplo: si se compara una cadena que representa 15 caracteres id con un objeto que representa 18 caracteres ID, este método devuelve true. Por ejemplo:
en el ejemplo anterior, el método equals compara 15 caracteres ID de objeto con 18 caracteres ID de objeto y si ambos id representan la misma secuencia binaria devolverá true.
utilice este método para hacer comparaciones sensibles a mayúsculas y minúsculas.
escapeSingleQuotes (stringToEscape):
Este método añade un carácter de escape ( \ ) antes de cualquier cita simple en una cadena y lo devuelve., Este método evita la inyección SOQL al crear una consulta SOQL dinámica. Este método garantiza que todas las comillas simples se consideren cadenas de texto, en lugar de comandos de base de datos.
Por ejemplo:
String s = 'Hello Tom';system.debug(s); // Outputs 'Hello Tom'String escapedStr = String.escapeSingleQuotes(s);// Outputs \'Hello Tom\'
remove(substring):
Este método elimina toda la ocurrencia 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'
substring (startIndex):
Este método devuelve una subcadena que comienza desde el carácter en startIndex se extiende hasta la última cadena.
Por Ejemplo:
String s1 = 'hamburger';String s2 = s1.substring(3);System.debug('s2'+s2); //burger
reverse():
Este Método se invierte todos los caracteres de una cadena y 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 de una cadena y devuelve.
valueOf (toConvert):
Este método devuelve la representación de cadena del objeto pasado.,
límites del Gobernador de Apex
los límites del gobernador de Apex son los límites impuestos por apex runtime engine para garantizar que ningún código y proceso de runway apex controle los recursos compartidos y no infrinja el procesamiento para otros usuarios en el entorno multitenant. Estos límites se verifican con cada transacción apex., Los siguientes son los límites de gobernador definidos por salesforce en cada transacción de apex:
Descripción | límite |
consultas SOQL que se pueden hacer en una transacción síncrona | 100 |
consultas SOQL que se pueden realizar en una transacción asíncrona | 200 |
registros que se pueden recuperar mediante una consulta SOQL | 50000 |
registros que se pueden recuperar mediante base de datos.,getQueryLocator | 10000 |
SOSL las consultas que se pueden hacer en un ápice de la transacción | 20 |
Registros que pueden ser recuperados por un SOSL consulta | 2000 |
instrucciones DML que se puede hacer en un ápice de la transacción | 150 |
Registros que pueden ser procesados como resultado de una instrucción DML, Aprobación.proceso, o base de datos.emptyRecycleBin | 10000 |
llamadas que se pueden realizar en una transacción apex., | 100 |
límite de tiempo de espera acumulativo en todas las llamadas que se realizan en una transacción de apex | 120 segundos |
límite en los trabajos de apex que se pueden agregar a la cola con System.,enqueueJob | 50 |
Execution time limit for each Apex transaction | 10 minutes |
Limit on characters that can be used in an apex class and trigger | 1 million |
CPU time limit for synchronous transaction | 10,000 milliseconds |
CPU time limit for asynchronous transaction | 60,000 milliseconds |
Apex Getter and Setter
Apex property is similar to apex variable. Getter and setter are necessary to an apex property., Getter y setter se pueden usar para ejecutar código antes de que se Acceda o cambie el valor de la propiedad. El código en el get accessor se ejecuta cuando se lee un valor de propiedad. El código del accessor de conjunto se ejecuta cuando se cambia el valor de una propiedad. Cualquier propiedad que tenga get accessor se considera de solo lectura, cualquier propiedad que tenga set accessor se considera de solo escritura cualquier propiedad que tenga get y set accessor se considera de lectura-escritura. Sintaxis de una propiedad apex:
public class myApexClass {// Property declarationaccess_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., property_name es el nombre de la propiedad.
a continuación se muestra un ejemplo de una propiedad apex que tiene tanto get como set accessor.
public class myApex{public String name{get{ return name;}set{ name = 'Test';}}}
Aquí, el nombre de la propiedad es name, y es propiedad pública, y devuelve un tipo de datos string.
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; }
Get y set accessor también se pueden definir con su modificador de acceso., Si un accessor 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.
Apex Class
una clase apex es un blueprint o plantilla a partir de la cual se crean objetos. Un objeto es la instancia de una clase.
Hay tres formas de crear clases apex en Salesforce:
Developer Console
Force.com IDE
página de detalles de 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 modificador de acceso como global o public en la declaración de la clase externa.
no es necesario utilizar el modificador de acceso en la declaración de clases internas.
una clase apex se define usando la palabra clave class seguida del nombre de la clase.
Extends keyword se usa para extender una clase existente por una clase apex, y implements keyword se usa para implementar una interfaz por una clase apex.
Salesforce Apex no admite varias herencias, una clase apex Solo puede extender una clase apex existente pero puede implementar varias interfaces.,
una clase apex puede contener constructor definido por el Usuario, y si un constructor definido por el Usuario no está disponible, se utiliza un constructor predeterminado. El código en un constructor se ejecuta cuando se crea una instancia de una clase.
sintaxis de la clase Apex ejemplo:
public class myApexClass{// variable declaration//constructorpublic 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();
Apex Trigger
Los disparadores de Apex le permiten ejecutar apex personalizado antes y después de realizar una operación DML.,
Apex admite dos tipos de desencadenadores:
antes de desencadenadores: estos desencadenadores se utilizan para validar y actualizar el valor del campo antes de guardar el registro en la base de datos.
After triggers: estos triggers se utilizan para acceder a los campos(record ID, LastModifiedDate field) establecidos por el sistema después de un registro confirmado en la base de datos. El valor de estos campos se puede usar para modificar otros registros. Los registros que se activan después de los desencadenadores son de solo lectura.
es una buena práctica escribir disparadores voluminosos. Un disparador voluminoso puede procesar un solo registro, así como varios registros a la vez.,
sintaxis de un disparador de apex:
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 soportados por los disparadores de apex: antes de insertar, antes de la actualización, antes de eliminar, después de insertar, después de una actualización, después de eliminar, después de recuperar.
Las palabras clave estáticas no se pueden usar en un disparador Apex. Todas las palabras clave aplicables a las clases internas se pueden utilizar en un disparador Apex.,
Hay variables implícitas definidas por cada disparador que devuelve el contexto en tiempo de ejecución. Estas variables se definen en el sistema. Clase de gatillo. Estas variables se denominan variables de contexto. La siguiente captura de pantalla muestra la variable de contexto compatible con Apex trigger.
los Siguientes son la consideración de la variable contexto en el ápice trigger:
- no utilizar el gatillo.nuevo y disparador.viejo en operaciones DML.
- Trigger.nuevo no se puede eliminar.,
- Trigger.nuevo es de solo lectura.
- Trigger.new se puede usar para cambiar los valores de los campos del mismo objeto en before trigger only.
las siguientes capturas de pantalla muestran las consideraciones sobre acciones específicas en diferentes eventos de activación.
La Clase de lote en Apex
un gran número de registros que excederían los límites del gobernador APEX si se procesaran normalmente. La clase Batch ejecuta el código de forma asíncrona.,
Las siguientes son las ventajas de la clase batch:
- La Clase Batch procesa los datos en trozos y si un trozo no se procesa correctamente, todos los trozos procesados correctamente no se revertirán.
- cada fragmento de datos en una clase batch se procesa con un nuevo conjunto de límites de gobernador que aseguran 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 ser utilizada como una clase por lotes. Proporciona tres métodos que deben ser implementados por la clase batch.,
los siguientes son los tres métodos proporcionados por Database. Interfaz Batchable:
1.start ():
Este método genera el alcance de los registros u objetos a procesar por el método de interfaz execute. Durante la ejecución de batch, se llama una sola vez. Este método devuelve una base de datos.Objeto QueryLocator o un Iterable. El número de registros recuperados por consulta SQL usando la base de datos.El objeto QueryLocator es de 50 millones de registros, pero usando un iterable, el número total de registros que pueden ser recuperados por la consulta SQL es de solo 50000., Iterable se utiliza para generar un ámbito complejo para la clase batch.
sintaxis del método de inicio:
global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContextbc) {}
2.execute ():
Este método se utiliza para el procesamiento de cada fragmento de datos. Para cada fragmento de registros se llama al método execute. El tamaño de lote predeterminado para la ejecución es de 200 registros. El método Execute toma dos argumentos:
una referencia a la base de datos.BatchableContext object,
una lista de sObjects, como List<sObject>, o una lista de tipos parametrizados., Sintaxis del método execute:
global void execute(Database.BatchableContext BC, list<P>){}
3.finish ():
el método finish se llama una vez durante la ejecución de la clase batch. Las operaciones de postprocesamiento se pueden realizar en el método de acabado. 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){}
base de datos.BatchableContext object:
cada método de la base de datos. La interfaz por lotes tiene una referencia a la base de datos.Objeto BatchableContext.
Este objeto se utiliza para realizar un seguimiento del progreso del trabajo por lotes.,
los siguientes son 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 batch:
Database.método executeBatch:
base de datos.el método executeBatch se utiliza para ejecutar una clase batch.
este método toma dos parámetros: instancia de la clase de lote a 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 la base de datos.executeBatch:
Database.executeBatch(myBatchObject,scope)
ejecutar un nombre de clase por lotes MyBatchClass :
MyBatchClassmyBatchObject = new MyBatchClass(); Id batchId = Database.executeBatch(myBatchObject,100);
Database.stateful:
La Clase Batch es sin estado de forma predeterminada. Cada vez que se llama al método execute se recibe una nueva copia de un objeto, se inicializan todas las variables de la clase.
base de datos.stateful se implementa para hacer una clase batch stateful.
si su clase batch implementó la base de datos, la interfaz con estado Todas las variables de instancia conservan sus valores, pero las variables estáticas se restablecen entre la transacción.,
resumen:
- Apex es un lenguaje de programación orientado a objetos fuertemente escrito que compila y se ejecuta en force.com plataforma
- El lenguaje de programación Apex es un lenguaje que no distingue mayúsculas de 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 soportados por apex son: 1).,las palabras clave que se usan en Apex son : 1) con uso compartido, 2) sin uso compartido, 3) estático, 4) Final 5)retorno, 6)nulo, 7) Virtual, 8) Abstracto
- Una cadena es un conjunto de caracteres sin límites de caracteres
- Los límites del gobernador de Apex son los límites impuestos por apex runtime engine para garantizar que cualquier código y proceso de Apex de pista
- El valor se accede o se cambia
- Hay tres formas de crear clases Apex en Salesforce: 1)Developer Console 2)Force.,com IDE y, 3) Página de detalles de la clase Apex.
- Los disparadores de Apex le permiten ejecutar apex personalizado antes y después de realizar una operación DML.
- La Clase Batch en salesforce se utiliza para procesar una gran cantidad de registros que excederían los límites del gobernador apex si se procesan normalmente.