Data Skew Detector: aplicación para detectar Data Skew en tu ORG

En la entrada anterior describí que era la anomalía en los datos llamada Data Skew en Salesforce. Y aunque ese es el primer paso, lo realmente útil, en nuestro día a día, es poderlo detectar con antelación.

No conozco qué Salesforce ofrezca, ninguna utilidad para la localización de Data Skew, aunque anticiparnos a qué suceda en nuestra ORG, puede suponer ahorrarnos muchos dolores de cabeza.

Por ello, he desarrollado una utilidad en APEX que permite analizar tu ORG, y encontrar todos los campos con Data Skew. Disponibilizar esta información a tus compañeros, a tus usuarios, a tus administradores, o a tu cliente, puede suponer ahorrar problemas futuros, y ahorrar costes al proyecto.

Continue reading “Data Skew Detector: aplicación para detectar Data Skew en tu ORG”

Data Skew: bloqueos y pérdida de rendimiento – cuáles son y cómo evitarlos

…y llega un día en que nuestras cargas de datos masivas, cambios en la jerarquía de roles que hasta ahora habían ido bien, se ralentizan y aparecen mensajes de bloqueo de registros.

Tanto los administradores como los desarrolladores decimos que no hemos tocado nada, y siendo cierto, vemos que algo está pasando.

Resulta que nuestra ORG sufre de ciertos patrones de uso en sus datos, que disfrazado de buenas ideas, irán perjudicando el rendimiento e incorporando incidencias.

La fuente de estos problemas pueden ser:

  1. Ownership Skew
  2. Parent-Child Data Skew
  3. Implicit Sharing Data Skew
  4. Lookup Skew
  5. Indisponibilidad de bloqueo en cambios deJerarquías o Grupos

En esta primera entrada, explicaré qué son, por qué suceden,  cómo podemos evitarlos.

Si no los conoces, te recomiendo esta lectura, sirve para cualquier administrador, desarrollador, y consultor de negocio.

Continue reading “Data Skew: bloqueos y pérdida de rendimiento – cuáles son y cómo evitarlos”

Análisis de código Estático con PMD

Desde hace ya mucho, para los lenguajes de programación más comunes, disponemos de analizadores de código estático.

Existen varias herramientas en el mercado, para el análisis de código Apex (Checkmarx utilizada por Salesforce, Sonarqube, Cosechan, Codacy, etc.) pero desde abril de 2016, Robert Sösemann portó Apex a PMD, una de las herramientas más conocidas de análisis de código y con licencia Open Source (Hiper-Kudos para Robert), con años de experiencia como una de las soluciones líderes en Java.

PMD para Apex y Visualforce (aún incipiente) no requiere de ninguna infraestructura adicional, solo descargar los binarios y ejecutarlos, en nuestro ordenador, en el servidor, con la JDK instalada etc.

Las capacidades de PMD, su licenciamiento, versatilidad, extensibilidad, integración con los IDEs y con  herramientas de CI habituales (Maven, Ant, Gradle, etc.), y comunidad facilita enormemente su adopción.

Por ello, si no lo conoces, creo que puede ser muy útil, y es una herramienta muy a tener en cuenta para utilizar en nuestros proyectos. Te animo a leer el artículo por si te puede ayudar.

Continue reading “Análisis de código Estático con PMD”

Contexto de Ejecución en Salesforce

Estás creando un nuevo trigger con la funcionalidad deseada. Lo has probado en tus scratch orgs, funciona correctamente, tus tests devuelven los resultados esperados.

Realizas el pase a la Sandbox de Integración, y PUF!! tu trigger finaliza con una Excepción de Límites superados. ¿Cómo puede ser?

Uno de tus compañeros, te pregunta: ¿Qué se está ejecutando dentro del Contexto de Ejecución al invocar el Trigger?

Si esta pregunta te suena a chino o no estás seguro de los que es el Contexto de Ejecución, quizás este artículo pueda ayudarte… y que sepas que no es culpa de nadie 😉

Continue reading “Contexto de Ejecución en Salesforce”

El framework de Hari Krishnan: lo bueno hecho mejor (Parte 4)

Como tercera entrada de la serie de Frameworks para la gestión de Triggers, no podía faltar la propuesta de Hari Krishnan. Este framework no es revolucionario, sinó que cómo explica el mismo autor, fue la culminación de evolucionar las ideas de Tony Scott, Dan Appleman, y mejorarlos.

De los 3 analizados, este framework, ofrece una orientación a objetos y uso de los nuevos recursos del lenguaje Apex muy interesantes, y amplia las ideas de los 2 frameworks anteriores para la implementación de las buenas prácticas.

Si participas o prevés estar en proyectos de cierto tamaño, conocer este framework es vital, y sobretodo entender su implementación (si tienes poca experiencia como programador, no desistas, dedicando algo de tiempo, no tendrás problema).

Mi intención nuevamente es explicarlo de forma sencilla, a ver si lo consigo.
Continue reading “El framework de Hari Krishnan: lo bueno hecho mejor (Parte 4)”

El framework de Appleman que los inició a todos (Parte 3)

Las ideas propuestas por Dan Appleman en su libro Advanced Apex para la gestión eficiente de triggers, son de las más usadas y se usan como base para otros frameworks aparecidos posteriormente.

De hecho, el título que el autor dio al capítulo de su libro, “One trigger to rule them all” es conocido y mencionado en muchos artículos y sitios web.

Mi objetivo en esta entrada, es explicar de manera llana, los conceptos e ideas de este framework, esencial para cualquier proyecto mediano-grande. Al finalizar el artíuclo, podrás usar el framework directamente mejorar tu actual gestión de triggers.

Continue reading “El framework de Appleman que los inició a todos (Parte 3)”

Un patrón de triggers simple y potente (Parte 2)

Uno de los primeros patrones/frameworks que aparecieron fue en un Force.com Cookbook, y después mejorado en su propio blog, por Tony Scott.

Los principios de este patrón de gestión de triggers son:

  • El trigger no contine código, solo invoca a una clase Handler que implementa la lógica en cada evento
  • Una clase Factory, construye los Handlers de forma dinámica y enruta las acciones en función del evento del trigger (before, insert…)
  • Este funcionamiento requiere de la creación de una Interface que todos los triggers deberán implementar
  • Se incorporan funciones de BULK para eficientar el código

Algunas de las decisiones de este esquema planteado, se repite en varios de los frameworks que iremos viendo, por lo que es muy útil entenderlas.

Continue reading “Un patrón de triggers simple y potente (Parte 2)”

Trigger Frameworks – Triggers súper vitaminados (Parte 1)

Los triggers, son una funcionalidad ampliamente utilizada, pero que a medida que avanza el proyecto y se afianza, su uso desordenado provoca situaciones inadvertidas o efectos laterales indeseados, con frustración por parte del desarrollador y del usuario.

En este artículo quiero explicar, cuales son los problemas habituales, cuando surgen, y como se han desarrollado best practices y frameworks completos, que aportan soluciones, que con poco  esfuerzo permiten evitar estos situaciones complejas de diagnosticar.

Veamos pues, como crear Triggers vitaminados y super-mineralizados.

Continue reading “Trigger Frameworks – Triggers súper vitaminados (Parte 1)”

Dynamic Planning for Async Processing

As explained in the last 2 entries, asynchronous processing and execution planning capabilities on Salesforce are very useful and powerful.

But nonetheless, in some complex scenarios, you will find some limitations that can be overcome easily.

Let me explain how, with some Apex Developing and using standard capabilities, you can get a quite powerful Dynamic Planner to sort out those limitations.

My goal on this entry is to describe the current limitations on the platform, explain how they can be solved, and hope they are useful and make some contribution to improve your knowledge in this key area.

Continue reading “Dynamic Planning for Async Processing”

Planificador Dinámico para Procesos Asíncronos

Como hemos visto en las 2 entradas anteriores, las capacidades asíncronas de Salesforce y su planificación son de gran ayuda.

Aún así, vimos que podemos encontrar una carencia: si nuestros procesos asíncronos tiene ncondiciones funcionales o técnicas de las que depende lanzar su ejecución.

Mi objetivo es explicar la idea, ofreciendo una prueba de concepto funcional, para que puedas darle la vuelta, mejorarlo y ampliarlo para tus necesidades.
Continue reading “Planificador Dinámico para Procesos Asíncronos”

Casos de uso para Apex asíncrono

Partiendo del artículo anterior donde vimos como Salesforce gestiona la ejecución de los procesos asíncronos  veamos como seleccionar el/los método/s  más adecuado/s en casos de uso reales.

Recordemos las posibilidades que tenemos:

  1. Utilización de la anotación @Future
  2. Implementación de la interfaz Schedulable
  3. Implementación de la interfaz Queueable
  4. Implementación de la interfaz Batchable

Continue reading “Casos de uso para Apex asíncrono”