Utilizar Apex asÃncrono
Objetivos de aprendizaje
Después de completar esta unidad, podrá:
- Saber cuándo utilizar Apex asÃncrono
- Utilizar métodos futuros para gestionar una llamada web
- Trabajar con la interfaz por lotes para procesar un gran número de registros
- Comprender las ventajas del uso de la interfaz con capacidad de colocación en cola cuando necesite encontrarse a medio camino
Siga el proceso con Trail Together
¿Desea seguir el proceso con un experto a medida que realiza este paso? Mire este video que forma parte de la serie Trail Together.
(Este video comienza en el minuto 32:07, en caso de que desee rebobinar y mirar el comienzo del paso nuevamente).
Cuándo ser asÃncrono
Como un desarrollador de .NET, probablemente ya estuvo expuesto al mundo de programación asÃncrona. Daremos por supuesto que sabe lo que es y comprende las ventajas del uso de este tipo de modelo de programación. Lo que quizás no sepa es cuándo utilizar la programación asÃncrona en la plataforma Lightning.
Las tres razones siguientes están habitualmente detrás de la selección de la programación asÃncrona.
- Procesamiento de un gran número de registros. Este motivo es exclusivo al mundo de la plataforma multiusuario de la plataforma Lightning donde se aplican lÃmites. Los lÃmites asociados con procesos asÃncronos más benignos que aquellos con procesos sÃncronos. Por lo tanto, si necesita procesar miles o incluso millones de registros, el procesamiento asÃncrono es su mejor apuesta.
- Realización de llamadas a servicios web externos. El procesamiento de llamadas puede tardar mucho tiempo, pero en la plataforma Lightning, los desencadenadores no pueden realizar llamadas directamente.
- Creación de una experiencia de usuario mejor y más rápida reduciendo algo de la carga de procesamiento con llamadas asÃncronas. ¿Por qué hacer todo a la vez? Si puede esperar, hágalo.
Métodos futuros
En situaciones donde necesita realizar una llamada a un servicio web o desea descargar un procesamiento sencillo en una tarea asÃncrona, la creación de un método futuro podrÃa ser la mejor opción.
Cambiar un método del procesamiento sÃncrono a asÃncrono es increÃblemente sencillo. Fundamentalmente, solo hay que agregar la anotación @future
a su método. A parte de eso, solo asegúrese de que el método es estático y devuelve solo un tipo no válido. Por ejemplo, para crear un método para la realización de una llamada de servicio web, podemos hacer algo parecido a esto:
A continuación, podrÃamos llamarlo justo como lo harÃamos con cualquier otro método estático. ¡No puede ser más fácil!
Limitaciones futuras
Los métodos futuros ofrecen una magnÃfica opción para desarrolladores de Salesforce; sin embargo, no están exentos de desventajas. Estas son algunas limitaciones a tener en cuenta antes de utilizar un método futuro.
- No puede realizar un seguimiento de la ejecución porque no se devuelve ningún Id. de trabajo de Apex.
- Los parámetros deben ser tipos de datos primitivos o conjuntos de tipos de datos primitivos. Los métodos futuros no pueden tomar objetos sObject como argumentos, ya que podrÃan cambiar antes de que se ejecute el método @futuro.
- No puede concatenar métodos futuros y hacer que uno llame a otro. Use Apex colocable en cola si necesita que la ejecución se realice en cierto orden.
Aunque las llamadas asÃncronas se realizan en ocasiones para evitar lÃmites, aún tendrá que tener en cuenta los lÃmites. Consulte el vÃnculo Execution Governors and Limits en Recursos.
Apex programado o por lotes
Otra herramienta asÃncrona que siempre se ha utilizado es la interfaz por lotes. La razón número 1 para utilizarla es si necesita procesar un gran número de registros. Por ejemplo, si desea limpiar o archivar hasta 150 millones de registros, la interfaz por lotes es su respuesta. También puede usar la API masiva 2.0 en su código de Apex. Puede incluso programar sus lotes para ejecutarse en una hora concreta.
Para utilizarla, su clase implementa la interfaz Database.Batchable. También define los métodos start(), execute(), and finish(). A continuación puede invocar una clase por lotes utilizando el método Database.executeBatch. Por ejemplo, el siguiente código crea una clase por lotes que procesa todas las cuentas en una organización y luego envÃa un email una vez hecho.
A continuación podrÃa invocar la clase por lotes utilizando código anónimo como este:
Limitaciones por lotes
La interfaz por lotes es genial, pero como ocurre con todo, tenga en cuenta sus limitaciones.
- La solución de problemas puede ser molesta.
- Los trabajos se colocan en cola y están sujetos a la disponibilidad del servidor, que puede tardar en ocasiones más de lo que se espera.
- ¿Hicimos referencia ya a los lÃmites?
Y se hizo un Apex colocable en cola
Durante mucho tiempo, los métodos futuros y la interfaz por lotes eran las formas principales que tenÃan los desarrolladores para llevar a cabo procesamientos asÃncronos. Pero, ¿recuerda todas estas limitaciones de las que hablamos? Bien, estaban causando problemas a algunos desarrolladores, asà que habÃa un clamor general solicitando una solución mejor.
En Winter ’15, Salesforce respondió con Apex colocable en cola. Representa lo mejor de los métodos futuros y la interfaz colocable en cola, todo englobado en una única herramienta asÃncrona fantástica. Los desarrolladores forzados a utilizar la interfaz por lotes más lenta para sortear limitaciones de métodos futuros pueden ahora acudir a una herramienta con más sentido. Apex colocable en cola proporciona las siguientes ventajas para los métodos futuros.
- Tipos no primitivos: Las clases pueden aceptar variables de parámetro de tipos de datos no primitivos, como los sObject o los tipos de Apex personalizados.
- Monitoreo: Cuando envÃa su trabajo, se devuelve un Id. de trabajo que puede utilizar para identificar el trabajo y monitorear su progreso.
- Concatenación de trabajos: Puede concatenar un trabajo con otro trabajo iniciando un segundo trabajo desde un trabajo en ejecución. La concatenación de trabajos es útil para procesamientos secuenciales.
¿Cómo funciona entonces? ¡Nos complace que preguntara!
Como la Apex colocable en cola incluye lo mejor de los métodos futuros, es mucho más sencilla de implementar que la Apex por lotes. Simplemente no tiene esas fastidiosas limitaciones de las que hablamos. Para demostrar cómo funciona, utilicemos el código de muestra que utiliza un método futuro para realizar una llamada web e implementémoslo utilizando la Apex colocable en cola.
Para invocar la Apex colocable en cola, necesita algo como lo siguiente:
Más información
Junto con las interfaces colocables en cola, Salesforce también presentó Apex Flex Queue en Spring ’15, que eliminó la limitación de cinco lotes simultáneos. También permite a los desarrolladores monitorear y gestionar el orden de los trabajos en cola. Consulte los vÃnculos en Recursos para obtener más información.
Este módulo presentó a los desarrolladores de .NET las opciones asÃncronas disponibles en la plataforma Lightning. Para obtener información más detallada acerca de este tema, incluyendo pruebas, trabajos de monitoreo y mejores prácticas, consulte el módulo Apex asÃncrono.
Recursos
- El módulo Apex asÃncrono de Trailhead trata Apex futuro, colocable en cola, por lotes y programado de forma detallada
- LÃmites de ejecución y reguladores en la GuÃa del desarrollador de código de Apex