Skip to content

Etiqueta: Trabajos programados

Dominar el arte de programar clases por lotes en Apex

Dominar el arte de programar clases por lotes en Apex

脷ltima actualizaci贸n el 15 de junio de 2023 por Rakesh Gupta

Gran idea o pregunta duradera:

  • 驴C贸mo se puede utilizar el m茅todo System.schedule() para programar un trabajo de Apex Batch?

Objetivos:

Despu茅s de leer este blog, podr谩:

  • Configurar trabajo programado a trav茅s de la configuraci贸n de Salesforce
  • Comprender la funci贸n y el significado del m茅todo System.schedule().
  • Aprenda paso a paso c贸mo programar un trabajo de Apex Batch utilizando el m茅todo System.schedule().
  • Explore ejemplos pr谩cticos y casos de uso donde se puede implementar el m茅todo System.schedule().
  • y mucho m谩s

馃憠 En el pasado escrib铆 algunos art铆culos sobre Apex . 驴Por qu茅 no echarles un vistazo mientras est谩s en ello?

  1. Calcular la cobertura general del c贸digo en Salesforce
  2. Comprobar si una cadena es nula, vac铆a o en blanco en Apex
  3. Establecer fecha de creaci贸n para sObject de clase de prueba en Apex

Isabella Stewart trabaja como administradora de Salesforce en Gurukul On Cloud (GoC). Aunque es relativamente nueva en la programaci贸n de Apex, est谩 ansiosa por explorar diferentes m茅todos para programar clases por lotes en Salesforce y ampliar su conocimiento en esta 谩rea.

驴Qu茅 es un trabajo programado?

En Salesforce, un trabajo programado se refiere a una funci贸n que permite a los administradores y desarrolladores programar la ejecuci贸n autom谩tica de clases de Batch en momentos o intervalos espec铆ficos.

Los trabajos programados en Salesforce generalmente se usan para realizar varias acciones, como actualizaciones de datos, procesamiento de registros, env铆o de notificaciones por correo electr贸nico, generaci贸n de archivos PDF e integraci贸n con sistemas externos. Pueden ser particularmente 煤tiles para tareas que deben realizarse a intervalos regulares, como por hora, d铆a, semana o mes.

馃憠 Para programar una clase de Apex para que se ejecute a intervalos regulares, primero escriba una clase de Apex que implemente la interfaz Schedulable proporcionada por Salesforce.


la clase global ScheduleAccountSync implementa Programable { ejecuci贸n de vac铆o global (Contexto programable SC) { AccounSync ASync = new AccounSync(); }
}

Enfoque de Campe贸n de Automatizaci贸n (I-do):

Para crear un trabajo programado en Salesforce, puede usar Apex Scheduler a trav茅s de la configuraci贸n de Salesforce o el m茅todo System.schedule desde Developer Console (Ejecutar an贸nimo).

Programar trabajos con el programador de Apex

Salesforce Apex Scheduler es una funci贸n de la plataforma de Salesforce que le permite programar la ejecuci贸n de clases de Apex que implementa la interfaz programable en momentos espec铆ficos, como diario, semanal o mensual.
Para programar una clase con Apex Scheduler, siga los pasos que se describen a continuaci贸n:
  1. Haga clic en Configuraci贸n .
  2. En el cuadro B煤squeda r谩pida, escriba Clases de Apex .
  3. Seleccione Clases de Apex y luego haga clic en Programar Apex .
  4. Ingrese la siguiente informacion:
    1. Nombre : Sincronizar cuenta con SAP
    2. Clase de Apex : ScheduleAccountSync
    3. Frecuencia : Para configurar como un trabajo diario, elija la opci贸n Semanal y luego seleccione todos los d铆as de la semana.
    4. Inicio : la fecha y la hora en que comenz贸 la iteraci贸n m谩s reciente del trabajo programado.
    5. Fin : la fecha y la hora en que el trabajo termin贸 o terminar谩.
    6. Hora de inicio preferida : la fecha y la hora en que est谩 programada la ejecuci贸n del trabajo
  5. Haga clic en Guardar .

馃憠 Puede monitorear el progreso del trabajo en la p谩gina Todos los trabajos programados .

Una limitaci贸n clave de Apex Scheduler radica en su incapacidad para ejecutar una tarea cada pocos minutos, cada seis horas o en d铆as espec铆ficos, como el primer lunes o el 煤ltimo d铆a h谩bil del mes. Para abordar esto, podemos utilizar el m茅todo System.schedule a trav茅s de la consola del desarrollador, que permite escenarios de programaci贸n m谩s complejos.

Programar trabajos usando el m茅todo System.Schedule

Cuando una clase se implementa con la interfaz Schedulable , se puede usar el m茅todo System.schedule para ejecutarla. En particular, el programador opera a nivel del sistema, lo que garantiza que todas las clases se ejecuten independientemente de los permisos de los usuarios individuales.

El m茅todo System.schedule toma tres par谩metros: el nombre del trabajo, una expresi贸n que indica la hora y la fecha programadas para la ejecuci贸n del trabajo y el nombre de la clase. La estructura de la expresi贸n cron es la siguiente:


Segundos Minutos Horas D铆a_de_mes Mes D铆a_de_semana Opcional_a帽o

Los siguientes son los valores de la expresi贸n:

Nombre Valores Caracteres especiales
Segundos 0鈥59 Ninguno
Minutos 0鈥59 Ninguno
Horas 0鈥23 , 鈥 * /
Dia del mes 1鈥31 , 鈥 * ? / LW
Mes 1鈥12 o lo siguiente:

  • ENE
  • FEB
  • MAR
  • ABR
  • PUEDE
  • JUN
  • JUL
  • AGO
  • SEP
  • OCT
  • NOV
  • DIC
, 鈥 * /
D铆a de la semana 1鈥7 o lo siguiente:

  • SOL
  • LUN
  • MAR
  • CASARSE
  • JUE
  • VIE
  • SE SENT脫
, 鈥 * ? / L #
a帽o_opcional nulo o 1970鈥2099 , 鈥 * /

Lea esta gu铆a para desarrolladores de Salesforce para obtener m谩s informaci贸n sobre el m茅todo System.Schedule. No es posible actualizar los trabajos programados. Debe eliminar el trabajo existente y luego programarlo nuevamente.

Por ejemplo, si desea ejecutar la clase de Apex ScheduledAccountSync cada hora, espec铆ficamente cinco minutos despu茅s de cada hora, ejecute la siguiente declaraci贸n a trav茅s de Ejecutar de forma an贸nima en Developer Console.


System.schedule('AccountSyncJob', '0 5 * * * ?', new ScheduleAccountSync());
//AccountSyncJob = Nombre del trabajo
//0 5 * * * ? = Expresi贸n cron
//ScheduleAccountSync = Clase de Apex con interfaz programable

Tambi茅n puede usar CronMaker , una aplicaci贸n simple que lo ayuda a crear expresiones cron para su escenario.

Aqu铆 hay varios ejemplos que ilustran c贸mo utilizar la expresi贸n cron.

Programe un trabajo para ejecutar cada seis horas de lunes a viernes

Para programar un trabajo para que se ejecute cada seis horas de lunes a viernes, ejecute la siguiente expresi贸n cron:


System.schedule('AccountSyncJobWeekDayPerSixHour', '0 0 0,6,12,18 ? * MON-FRI', new ScheduleAccountSync());

Programar un trabajo para que se ejecute cada cuatro horas diariamente

Para programar un trabajo para que se ejecute cada cuatro horas diariamente, ejecute la siguiente expresi贸n cron:


System.schedule('AccountSyncJobEveryFourHour', '0 0 0/4 * * ? *', new ScheduleAccountSync());

Programe un trabajo que se ejecute cada hora diariamente

Para programar un trabajo que se ejecuta cada hora a lo largo de cada d铆a, utilice la siguiente expresi贸n cron:


System.schedule('AccountSyncJobEveryHour', '0 0 0/1 * * ? *', new ScheduleAccountSync());

Programe un trabajo para que se ejecute cada 30 minutos diariamente

Para programar un trabajo que se ejecuta cada media hora todos los d铆as, utilice la siguiente expresi贸n cron:


System.schedule('AccountSyncJob0', '0 0 * * * ? *', new ScheduleAccountSync());
System.schedule('AccountSyncJob30', '0 30 * * * ? *', new ScheduleAccountSync());

Programe un trabajo para que se ejecute una vez al d铆a a las 10:00 p. m.

Para programar un trabajo que se ejecute una vez al d铆a a las 22:00, utilice la siguiente expresi贸n cron:


System.schedule('AccountSyncJobOnceInADay', '0 0 22 * * ?', new ScheduleAccountSync());

Programe un trabajo para ejecutar el viernes y el s谩bado a las 11:00 p. m.

Para programar un trabajo que se ejecute los viernes y s谩bados a las 11:00 p. m., utilice la siguiente expresi贸n cron:


System.schedule('AccountSyncJobVie-Sat', '0 0 23 ? * FRI,SAT *', new ScheduleAccountSync());

Programe un trabajo para ejecutar el viernes a las 11:00 p. m.

Para programar un trabajo que se ejecute el viernes a las 11:00 a. m., utilice la siguiente expresi贸n cron:


System.schedule('AccountSyncJobFriOnly', '0 0 23 ? * VIE *', new ScheduleAccountSync());

Programe un trabajo para ejecutar el primer d铆a de cada a帽o a la 01:00 a. m.

Para programar un trabajo que se ejecuta el primer d铆a de cada a帽o, utilice la siguiente expresi贸n cron:


System.schedule('AccountSyncJob-1er d铆a del a帽o', '0 0 1 1 1 ? *', new ScheduleAccountSync());

Programe un trabajo para ejecutar el 煤ltimo d铆a de cada mes a la 01:00 a. m.

Para programar un trabajo que se ejecute el 煤ltimo d铆a de cada mes, utilice la siguiente expresi贸n cron:


System.schedule('AccountSyncJob-脷ltimo d铆a del mes', '0 0 1 L * ? *', new ScheduleAccountSync());

Programe un trabajo para ejecutar el 煤ltimo viernes de cada mes a la 01:00 a. m.

Para programar un trabajo que se ejecute el 煤ltimo viernes de cada mes, utilice la siguiente expresi贸n cron:


System.schedule('AccountSyncJob-Last Friday', '0 0 1 ? * 6L *', new ScheduleAccountSync());

Programe un trabajo para que se ejecute cada d铆a 15 del mes a las 12:01 a. m.

Para programar un trabajo que se ejecute cada d铆a 15 del mes, utilice la siguiente expresi贸n cron:


System.schedule('AccountSyncJob-Every 15th', '0 1 0 15 * ? *', new ScheduleAccountSync());

Programe un trabajo para ejecutar el primer y tercer domingo de cada mes a las 2:00 a. m.

Para programar un trabajo que se ejecute el primer y tercer domingo de cada mes, utilice la siguiente expresi贸n cron:


System.schedule('AccountSyncJob-1st Sunday', '0 0 2 ? 1/1 SUN#1 *', new ScheduleAccountSync());
System.schedule('AccountSyncJob-3rd Sunday', '0 0 2 ? 1/1 SUN#3 *', new ScheduleAccountSync());

Prueba de concepto

Evaluaci贸n formativa:

隆Quiero saber de ti!

驴Qu茅 es una cosa que aprendiste de esta publicaci贸n? 驴C贸mo imagina aplicar este nuevo conocimiento en el mundo real? Si茅ntase libre de compartir en los comentarios a continuaci贸n.

Seguir leyendo

Escriba Apex simplificado y seguro con las actualizaciones de Spring '23 鈽侊笍

Escriba Apex simplificado y seguro con las actualizaciones de Spring '23 鈽侊笍

Esta es una traducci贸n que desde EGA Futura ofrecemos como cortes铆a a toda la Ohana y comunidad de programadores , consultores , administradores y arquitectos de Salesforce para toda Iberoam茅rica .

El enlace a la publicaci贸n original, lo encontrar谩s al final de este art铆culo.

Escriba Apex simplificado y seguro con las actualizaciones de Spring '23 | Blog de desarrolladores de Salesforce

La versi贸n Spring '23 de Salesforce Platform, disponible en general a partir del 13 de febrero, agreg贸 algunas actualizaciones fant谩sticas al lenguaje de Apex. Hemos implementado algunas de las actualizaciones de Spring '23 en la aplicaci贸n de ejemplo Apex-Recipes , lo que ha simplificado significativamente la base de c贸digo existente.

En esta publicaci贸n de blog, revisaremos las actualizaciones en Spring '23 para Apex con ejemplos de c贸digo. Estas actualizaciones ayudan a los desarrolladores a crear aplicaciones m谩s seguras para sus organizaciones.

1. Operaciones de base de datos en modo usuario

Apex, de forma predeterminada, se ejecuta en modo Sistema con permisos elevados, lo que significa que los desarrolladores pueden pasar por alto los controles de seguridad sin darse cuenta al escribir c贸digo.

Antes de continuar, revisemos r谩pidamente los controles de seguridad que los administradores de Salesforce pueden colocar para garantizar que los usuarios solo puedan acceder y manipular los datos para los que est谩n autorizados a ver o editar. Las vi帽etas a continuaci贸n resumen diferentes mecanismos para aplicar un modelo de seguridad detallado para sus datos de Salesforce.

  • CRUD significa "Crear, Leer, Actualizar y Eliminar", las cuatro operaciones b谩sicas que un usuario puede realizar en un registro en Salesforce
  • FLS significa "Seguridad de nivel de campo", que determina qu茅 campos dentro de un registro que un usuario puede ver o editar
  • El uso compartido de registros permite al administrador configurar reglas sobre qui茅n puede ver o editar un registro en funci贸n de varios criterios.

Con las operaciones de base de datos en modo usuario , los desarrolladores pueden optar por ejecutar Apex en el contexto del usuario, lo que garantiza que se apliquen las reglas CRUD/FLS y de uso compartido del usuario configuradas. Veamos esto en acci贸n con ejemplos de c贸digo detallados.

Aplicar CRUD/FLS y reglas de uso compartido para SOQL est谩tico

Puede indicar el modo de operaci贸n usando la palabra clave WITH USER_MODE para el modo de usuario y WITH SYSTEM_MODE para el modo de sistema en su consulta SOQL. Vea el ejemplo a continuaci贸n.

<dx-code-block title language code-block="List accounts = [SELECT Name, ShippingCity, ShippingStreet FROM Account WITH USER_MODE];禄>

En el ejemplo anterior, al usar la palabra clave WITH USER_MODE , la consulta respeta estas restricciones de seguridad:

  • Permisos de lectura en el objeto Cuenta (configurado para Perfil/Conjunto de permisos) para el usuario
  • Permisos de campo (FLS) para Nombre, Calle de env铆o y Ciudad de env铆o para el usuario
  • Configuraci贸n de nivel de registro (como valores predeterminados de toda la organizaci贸n y reglas de colaboraci贸n) para el objeto Cuenta para el usuario

El WITH USER_MODE la palabra clave tambi茅n es compatible con agregar SOQL para hacer cumplir CRUD/FLS y reglas de uso compartido de registros.

<dx-code-block title language code-block="List groupedResults = [SELECT SUM(AMOUNT) total FROM Opportunity WHERE AccountId = :accountId WITH USER_MODE];禄>

En el ejemplo anterior, al usar la palabra clave WITH USER_MODE , la consulta respeta estas restricciones de seguridad:

  • Permisos de lectura en el objeto Oportunidad para el usuario
  • Permisos de campo (FLS) para Amount y AccountId (s铆, incluso los campos utilizados en la cl谩usula SOQL WHERE se verifican para FLS) para el usuario
  • Acceso a nivel de registro (como valores predeterminados de toda la organizaci贸n y reglas de colaboraci贸n) en el objeto Oportunidad para el usuario

Para obtener m谩s ejemplos, consulte la clase SOQLRecipes de la aplicaci贸n apex-recipes.

Aplicar CRUD/FLS y reglas de uso compartido para SOQL din谩mico

Los nuevos m茅todos Database (ver documentos ) ahora admiten un par谩metro AccessLevel que le permite ejecutar operaciones de base de datos en modo de usuario en lugar de en el modo de sistema predeterminado. Veamos un c贸digo de ejemplo para ejecutar un SOQL din谩mico en el modo de usuario.

<dx-code-block title language code-block="String query = 'SELECT ID, Name FROM Account LIMIT 1';
List lstAccounts = Database.query(query, AccessLevel.USER_MODE);禄>

En el ejemplo anterior, el modo de usuario se aplicar谩 de manera similar al ejemplo de SOQL est谩tico que vimos en la secci贸n anterior.

Para obtener m谩s ejemplos, consulte la clase DynamicSOQLRecipes de apex-recipes. Hemos actualizado todos los m茅todos de la clase para usar el par谩metro AccessLevel .

Hacer cumplir CRUD/FLS y reglas de uso compartido para SOSL

WITH USER_MODE o WITH SYSTEM_MODE tambi茅n son compatibles con declaraciones SOSL (Lenguaje de b煤squeda de objetos de Salesforce).

Veamos un ejemplo de una instrucci贸n SOSL est谩tica.

<dx-code-block title language code-block="String keyword = 'Alaska';
List<List> searchResults = [ FIND :keyword IN Name FIELDS RETURNING Account(Name), Contact(LastName, Account.Name) WITH USER_MODE ];禄>

En el ejemplo anterior, al usar la palabra clave WITH USER_MODE , la consulta respeta estas restricciones de seguridad:

  • Permisos de lectura en los objetos Cuenta y Contacto para el usuario
  • Permisos de campo (FLS) para el campo Nombre en Cuenta y campo Apellido en Contacto para el usuario
  • Acceso a nivel de registro (como valores predeterminados de toda la organizaci贸n y reglas de colaboraci贸n) en los objetos Cuenta y Contacto para el usuario

Para Dynamic SOSL, los nuevos m茅todos Search (ver documentos ) tambi茅n admiten el par谩metro AccessLevel similar a los nuevos m茅todos Database . A continuaci贸n se muestra un ejemplo de c贸mo usar el par谩metro AccessLevel para ejecutar SOSL en el contexto de los usuarios.

<dx-code-block title language code-block="String query = 'FIND 'Edge*' IN ALL FIELDS RETURNING Account(ID,Name), Contact, Lead'; List<List> searchResults = Search.query(query, AccessLevel.USER_MODE);禄>

Hacer cumplir CRUD/FLS y reglas de uso compartido para DML

Las operaciones de la base de datos pueden especificar el modo de usuario o sistema utilizando las palabras clave as user o as system .

El siguiente es un c贸digo de ejemplo que ejecuta DML en el modo de usuario aplicando CRUD/FLS y reglas de uso compartido.

Para Dynamic DML, los desarrolladores pueden utilizar el par谩metro AccessLevel para ejecutar operaciones de base de datos en el modo de usuario o en el modo de sistema.

Echemos un vistazo a un ejemplo de la aplicaci贸n apex-recipes para ver c贸mo puede dise帽ar m茅todos para que sean gen茅ricos, de modo que el consumidor del m茅todo pueda decidir ejecutar el c贸digo en el modo de usuario o de sistema.

El fragmento de c贸digo siguiente muestra c贸mo invocar este m茅todo en el modo de usuario.

El siguiente fragmento de c贸digo muestra c贸mo invocar este m茅todo en el modo de sistema.

Para obtener m谩s ejemplos, consulte la clase DMLRecipes de la aplicaci贸n apex-recipes.

Consideraciones importantes

  1. Las operaciones de la base de datos en modo usuario generan excepciones de seguridad si se encuentra una infracci贸n CRUD/FLS. Si tiene un requisito para evitar excepciones y a煤n aplicar la seguridad, use el m茅todo Security.stripInaccessible() (consulte los documentos ). Consulte la clase StripInaccessibleRecipes (ver documentos ) de la aplicaci贸n apex-recipes para ver ejemplos de c贸digo.
  2. Si usa la palabra clave WITH SECURITY_ENFORCED en sus declaraciones SOQL para hacer cumplir CRUD/FLS, ahora le recomendamos que use la palabra clave WITH USER_MODE en su lugar debido a las siguientes razones:
    1. La consulta SOQL que usa la palabra clave WITH USER_MODE admite muchas innovaciones nuevas, como reglas de restricci贸n, reglas de alcance y cualquier otra operaci贸n de seguridad para el acceso a datos y CRUD/FLS, que la plataforma puede agregar en el futuro, por lo que es una especie de prueba del futuro
    2. La consulta SOQL que usa la palabra clave WITH USER_MODE maneja casos de uso de seguridad complejos mucho mejor. Por ejemplo, WITH USER_MODE es compatible con SOSL y consultas polim贸rficas .
    3. Las declaraciones SOQL que usan la palabra clave WITH USER_MODE manejan CRUD/FLS para los campos usados en la cl谩usula where y order by o campos usados en la consulta de relaci贸n o b煤squeda polim贸rfica
    4. Las consultas SOQL que utilizan la palabra clave WITH USER_MODE funcionan mucho mejor en comparaci贸n con el uso WITH SECURITY_ENFORCED
  3. El modo de usuario anula la configuraci贸n de nivel de clase para la consulta SOQL o DML escrita en modo de usuario. Exploremos esto con el siguiente c贸digo de ejemplo.

<dx-code-block title language code-block="public without sharing ExampleCls { public static List getAccount() { String query = ‘SELECT Id FROM Account Limit 1’; return Database.query(query, AccessLevel.USER_MODE); } }禄>

En el ejemplo anterior, aunque la clase Apex est谩 configurada para ejecutarse en el contexto del sistema (sin la palabra clave compartida), la consulta SOQL se ejecuta en el modo de usuario, lo que refuerza la seguridad. El modo de usuario para la operaci贸n (SOQL/SOSL o DML) anula el uso compartido a nivel de clase.

2. Pasar din谩micamente variables de vinculaci贸n a consultas SOQL

Spring '23 agreg贸 nuevos m茅todos como Database.queryWithBinds , Database.getQueryLocatorWithBinds y Database.countQueryWithBinds .

Estos m茅todos proporcionan los siguientes beneficios:

  • Anteriormente, si los desarrolladores usaban variables de vinculaci贸n en SOQL din谩mico (usando el m茅todo Database.query ) que est谩n fuera de contexto, la consulta no pod铆a resolver las variables. Con queryWithBinds , las variables de vinculaci贸n de la consulta se resuelven directamente desde un par谩metro Map con una clave en lugar de variables de c贸digo de Apex.
  • Con Database.queryWithBinds , los ataques de inyecci贸n SOQL se evitan autom谩ticamente.

Echemos un vistazo a un ejemplo de c贸digo para comprender el segundo punto con m谩s profundidad.

<dx-code-block title language code-block="public static List simpleBindingSoqlQuery(Map bindParams) { String query = ‘SELECT Id, Name ‘ + ‘FROM Account ‘ + ‘WHERE name = :name’; return Database.queryWithBinds( query, bindParams, AccessLevel.USER_MODE );
}禄>

El c贸digo anterior ejecuta un SOQL din谩mico en el modo de usuario. El m茅todo acepta un par谩metro Map y se puede llamar usando el c贸digo a continuaci贸n.

<dx-code-block title language code-block="String accountName = 'Codey And Co';
Map nameBind = new Map{‘name’ => accountName};
List accounts = simpleBindingSoqlQuery(nameBind);
System.debug(accounts);禄>

Tenga en cuenta que no es necesario que nos aseguremos de que el nombre de la variable est茅 en el mismo 谩mbito de m茅todo que la consulta din谩mica. Adem谩s, no es necesario usar el m茅todo String.escapeSingleQuotes para el valor en la variable name cuando se usa queryWithBinds .

Para obtener m谩s ejemplos de c贸digo, consulte esta solicitud de incorporaci贸n de cambios en nuestro repositorio de GitHub apex-recipes.

3. Especifique un retraso en la programaci贸n de trabajos en cola

Otra caracter铆stica importante que lanzamos en Spring '23 es la capacidad de especificar demoras para trabajos programados que se pueden poner en cola.

Puede ser beneficioso ajustar el tiempo antes de que se ejecute el trabajo en cola en los siguientes casos de uso:

  • Si el sistema externo tiene una velocidad limitada y puede sobrecargarse con trabajos en cola encadenados que realizan llamadas r谩pidas
  • Al sondear los resultados, y ejecutar demasiado r谩pido puede provocar el uso desperdiciado de los l铆mites diarios de Apex as铆ncrono

Usa el m茅todo System.enqueue(queueable, delay) (ver docs ) para especificar retrasos. Los retrasos pueden variar de cero a 10 minutos. Veamos un ejemplo para comprender mejor esta funci贸n.

El ejemplo anterior agrega un trabajo para la ejecuci贸n asincr贸nica retrasada al pasar una instancia de la implementaci贸n de su clase de la interfaz Queueable para la ejecuci贸n. Hay un retraso m铆nimo de cinco minutos antes de que se ejecute el trabajo.

Especificar un retraso predeterminado en toda la organizaci贸n en la programaci贸n de trabajos en cola

Actualmente, si tiene un trabajo en cola de Apex, utiliza el tiempo est谩ndar en cola sin demoras adicionales. Los administradores pueden definir un retraso predeterminado en toda la organizaci贸n para todos los trabajos en cola que no especifican retraso usando
System.enqueue(queueable, delay) . Este es principalmente un mecanismo para manejar trabajos fuera de control que podr铆an estar ejecut谩ndose demasiado r谩pido.

Importante consideraci贸n

Cuando establece el retraso en 0 (cero), el trabajo en cola se ejecuta lo m谩s r谩pido posible. Con trabajos en cola encadenados, implemente un mecanismo para ralentizar o detener el trabajo si es necesario. Sin un mecanismo a prueba de fallas de este tipo, puede alcanzar r谩pidamente el l铆mite de Apex as铆ncrono diario.

Tambi茅n hay una pr贸xima funci贸n Beta en la versi贸n Summer '23 (planificada para estar disponible el 10 de junio de 2023 en todas las organizaciones) que permite a los desarrolladores controlar la profundidad de los trabajos en cola encadenados.

4. Obtenga el SObject de origen de una instancia DescribeFieldResult usando el nuevo m茅todo getSObjectType

El m茅todo getSObjectType (ver documentos ) en el objeto DescribeFieldResult (ver documentos ) es un m茅todo de mejora de la calidad de vida del desarrollador que se implement贸 en Spring '23.

Anteriormente, los desarrolladores ten铆an que hackear y escribir c贸digo adicional para obtener el objeto de origen de la informaci贸n del esquema de campos obtenida a trav茅s de la descripci贸n del campo. Puede consultar las soluciones anteriores a trav茅s de esta publicaci贸n de stackexchange .

A continuaci贸n se muestra un ejemplo de c贸digo de c贸mo usar el nuevo m茅todo getSObjectType .

Con el m茅todo getSObjectType , los desarrolladores ya no tienen que pasar el nombre del objeto como una cadena. Consulte un ejemplo m谩s completo en las notas de la versi贸n de Spring '23.

Actualizaciones de herramientas

Hemos actualizado el servidor de idioma de Apex para admitir las 煤ltimas adiciones de sintaxis, como insert as user, insert as system y mucho m谩s. Y ahora admitimos las 煤ltimas adiciones de sintaxis en el lanzamiento reciente de las Extensiones de Salesforce para VSCode .

Tambi茅n quiero agradecer a Dang Mai por actualizar el complemento m谩s bonito para Apex (usado para formatear el c贸digo Apex autom谩ticamente) para admitir todas las palabras clave introducidas para las operaciones de la base de datos en modo usuario.

Conclusi贸n

En conclusi贸n, la versi贸n Spring '23 de Salesforce incluye varias actualizaciones. Mediante el uso de estas nuevas funciones, los desarrolladores pueden crear aplicaciones m谩s eficaces y seguras para sus organizaciones.

Los equipos de productos de Apex no se detienen ah铆 y hay m谩s innovaciones en la hoja de ruta. Puede obtener una vista previa de lo que viene para Apex en Summer '23 (nuestro pr贸ximo lanzamiento) en la vista previa de las notas de la versi贸n . Tambi茅n recomiendo ver la grabaci贸n de la sesi贸n TrailblazerDX '23, Apex: What's New and What's Coming , para aprender m谩s sobre lo que se est谩 cocinando.

Referencias adicionales

Sobre el Autor

Mohith Shrivastava es promotor de desarrollo en Salesforce con una d茅cada de experiencia en la creaci贸n de productos a escala empresarial en la plataforma de Salesforce. Actualmente se est谩 enfocando en las herramientas para desarrolladores de Salesforce, Flow, Apex y Lightning Web Components en Salesforce. Mohith se encuentra actualmente entre los principales contribuyentes en Salesforce Stack Exchange, un foro de desarrolladores donde los desarrolladores de Salesforce pueden hacer preguntas y compartir conocimientos. Puedes seguirlo a trav茅s de su Twitter @msrivastav13 .

Obtenga las 煤ltimas publicaciones de blog de desarrolladores de Salesforce y episodios de podcast a trav茅s de Slack o RSS.

Agregar a Slack Suscr铆bete a RSS

Seguir leyendo

Exploraci贸n de un marco de Apex as铆ncrono combinado 鈽侊笍

驴Qu茅 marco de Apex as铆ncrono deber铆a usar? Este blog muestra una soluci贸n que elige autom谩ticamente Apex por lotes o en cola por usted.

La publicaci贸n Explorando un marco Apex as铆ncrono combinado apareci贸 primero en el blog de desarrolladores de Salesforce .

Seguir leyendo

Una introducci贸n a Apex para desarrolladores de Java 鈽侊笍

Si es un desarrollador de Java que explora el ecosistema de Salesforce y se pregunta qu茅 es Apex, 隆esta publicaci贸n es para usted! Apex es el lenguaje de programaci贸n backend de la plataforma Salesforce. Apex, junto con herramientas declarativas como Flows, le permite personalizar la l贸gica empresarial. Apex se basa en la sintaxis de Java optimizada espec铆ficamente para los requisitos de [鈥

La publicaci贸n Una introducci贸n a Apex para desarrolladores de Java apareci贸 primero en el blog de desarrolladores de Salesforce .

Seguir leyendo

Integraci贸n de Salesforce m谩s f谩cil y escalable con webhooks declarativos

脷ltima actualizaci贸n el 23 de agosto de 2022 por Rakesh Gupta 驴Qu茅 es un webhook? Cada vez que se conectan dos sistemas separados, pueden comunicarse entre s铆 a trav茅s de Internet mediante el env铆o y la recepci贸n de mensajes. Uno de los sistemas puede ser el sistema receptor y el otro el sistema emisor, pero a veces

La publicaci贸n Integraci贸n de Salesforce m谩s f谩cil y escalable con webhooks declarativos apareci贸 primero en Automation Champion .

Seguir leyendo

Generar autom谩ticamente tareas en contratos de renovaci贸n

脷ltima actualizaci贸n el 12 de abril de 2022 por Rakesh Gupta Gran idea o pregunta duradera: 驴C贸mo se generan tareas si los contratos se renuevan en 30 d铆as? Objetivos: despu茅s de leer este blog, podr谩: Crear un flujo optimizado activado por programaci贸n Usar f贸rmulas (fecha, concatenaci贸n) en el flujo de Salesforce Usar un flujo activado por programaci贸n

La publicaci贸n Generaci贸n autom谩tica de tareas en contratos de renovaci贸n apareci贸 primero en Automation Champion .

Seguir leyendo

驴Necesita agregar autom谩ticamente el rol de contacto de oportunidad a una oportunidad? 隆Sigue leyendo!

脷ltima actualizaci贸n el 15 de abril de 2022 por Rakesh GuptaGran idea o pregunta duradera: 驴C贸mo se agrega autom谩ticamente un rol de contacto de oportunidad a una oportunidad? Objetivos: despu茅s de leer este blog, podr谩: Comprender el rol de contacto de oportunidad Evitar el c贸digo duro de Id usando el elemento de obtenci贸n de registros Usar el elemento de decisi贸n

La publicaci贸n 驴Necesita agregar autom谩ticamente el rol de contacto de oportunidad a una oportunidad? 隆Sigue leyendo! apareci贸 por primera vez en Automation Champion .

Seguir leyendo

Cuenta de usuario de congelaci贸n autom谩tica

Congelaci贸n autom谩tica de cuentas de usuarios en Salesforce

La cuenta de usuario posterior a la congelaci贸n autom谩tica apareci贸 por primera vez en Automation Champion .

Seguir leyendo

Los 3 tipos principales de automatizaci贸n contable que su empresa necesita

脷ltima actualizaci贸n el 4 de enero de 2021 por Rakesh Gupta Automation es un cambio de juego para cada industria y tipo de organizaci贸n. Podr铆a decirse que la automatizaci贸n empresarial m谩s impactante ha sido en los procesos contables. Del cliente potencial al libro mayor, el aspecto financiero del鈥 Continuar leyendo

La publicaci贸n Los 3 tipos principales de automatizaci贸n contable que su negocio necesita apareci贸 primero en Automation Champion .

Seguir leyendo

Introducci贸n a Salesforce Flow – Parte 62 (Asignar autom谩ticamente o quitar conjunto de permisos a varios usuarios)

脷ltima actualizaci贸n el 27 de abril de 2021 por Rakesh Gupta Gran idea o pregunta duradera: los conjuntos de permisos son 煤tiles para proporcionar un conjunto particular de funcionalidades a un usuario adem谩s de los permisos proporcionados por su perfil. Por ejemplo, puede鈥 Continuar leyendo

La publicaci贸n Getting Started with Salesforce Flow – Part 62 (Auto Assign or Remove Permission Set to Multiple Users) apareci贸 primero en Automation Champion .

Seguir leyendo

Preguntas de la entrevista de nivel intermedio a avanzado sobre Apex programable

P. 驴Explica el c贸digo para programar Apex por lotes para que se ejecute a intervalos regulares? [crayon-6086cd86ac852804662034 /] P. 驴Qu茅 es System. Calendario ? Una vez que haya implementado la interfaz programable, utilice el m茅todo system.schedulable para ejecutar … Leer m谩s 禄

Seguir leyendo