Mi código fuente

Desarrollos principales

Todo el código fuente disponible en este blog, y en mi repositorio principal de Bitbucket, lo ofrezco, para que pueda ayudar a otros.

Utilízalo sin restricciones, en caso de no mencionarse explícitamente, se aplica la licencia MIT.

Utilízalo bajo tu responsabilidad, y nunca directamente en una ORG productiva.

Query Performance Detector

A medida que nuestra ORG crece, las consultas que inicialmente diseñamos (que quizás optimizamos o quizás no) pueden sufrir degradación. Pero no estoy hablando sólo de las Queries de los Developers con SOQL, estoy hablando de List  viewsReports y Dashboards que crean los usuarios.

Además, esta degradación se realiza en silencioinadvertida, y solo es visible con incidencias de rendimiento en Producción, cuando ya es demasiado tarde, y las acciones correctoras (creación de índices, re-organización de datos, etc.) no serán inmediatas.

Por eso he creado esta herramienta.

Entrada explicativa en  Query Performance Detector con Código completo y libre en este repositorio QPD-SourceCode.

This repo is also available in English.

Cuadro de Mando Multi-ORG

Tenía la necesidad de proporcionar información sobre licencias y otros aspectos de varias instancias de Salesforce.

Al principio, accedía a cada una de ellas para obtener la info refrescando informes, consultando pantallas, etc., pero pronto me pareció repetitivo y tedioso. Analizando la API de Salesforce, me pareció que era posible acceder a mucha de la información que necesitaba.

Después de analizar la alternativa, confirmé que ejecutando queries a los objetos adecuados de Salesforce es posible obtener información desde cualquier aplicación que pueda utilizar la API.

Esta es una aplicación Java sencilla para obtener los datos de Salesforce, y el framework Bootstrap para mostrar los resultados en una interfaz de usuario, que no dependa de nula habilidad como diseñador.

Entrada explicativa en Cuadro de mando multi-ORG y código completo y libre en este repositorio: Cuadro Manto MultiORG

Planificador Dinámico de Procesos

Aún siendo muy potentes las capacidades asíncronas de Salesforce, encontré la necesidad de exprimir al máximo y con mejor rendimiento el planificador de Salesforce. Es por eso, que construí un planificador más agresivo y con más capacidades .

Entrada explicativa en Planificador Dinámico de Procesos Asíncronos  y Código completo y libre en este repositorio: Dynamic Planner.

This repo is also available in English.

Data Skew Detector

No conozco qué Salesforce ofrezca, ninguna utilidad para la localización de Data Skew (anomalía en los datos que produce problemas graves de rendimiento), 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.

Entrada explicativa en Data Skew Detector Código completo y libre en este repositorio: Data Skew Detector Repo.

Obtener información del consumo de Licencias en nuestras ORGs

Estar al corriente del uso de tus licencias, es fundamental para evitar sorpresas y costes inesperados. Desafortunadamente, no me parece práctico entrar regularmente en la ORG para evaluarlo.

Por eso investigué como automatizar mediante la API de Salesforce la obtención de esta información. Para obtener la información del uso de las licencias de las ORG se accede mediante el objeto UserLicense .

Varios de los campos usados en la query requieren la apertura de un ticket a Salesforce para que activen la capacidad de consultarlos: This field is available through the API Access to User Licenses pilot program. For information on enabling this pilot program for your organization, contact Salesforce.

Entrada explicativa y Código completo y libre en este repositorio: License Usage Multiple ORGs Salesforce.

Storage Notification Alert

Salesforce does not send notification when File or Data Storage hits the ORG limit, that’s note very covenient for an admin.

The Limits values are only exposed through REST API, no via standard object, to query it through SOQL No Packages found in App Exchange that are reliable and customizable, so I wrote mine, based on idea of bob_buzzard in https://developer.salesforce.com/forums/?id=906F000000092EjIAI (Screen Scraper, what is scaring and challenging at the same time).

Repository with open source is available here: Storage Notification Alert Salesforce.

Estudio de Frameworks de Triggers

Los triggers, es una funcionalidad fantástica en Salesforce, pero 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.

Estuve estudiando, cuales son las problemáticas habituales, cuando aparecen, y las best practices y frameworks que se han desarrollado para mitigarlas. Desarrollé una serie de artículos, al respecto: Un Patrón Simple pero Potente: Análisis del patrón de Gestión de Triggers de Tony Scott,  El Framework de Appleman que los inició a todos: Análisis del Framework que publicó Dan Appleman en su libro Advanced Apex, y que es la referencia para muchos frameworks que aparecieron posteriormente, y finalmente El Framework de Hari Krishman, que evolucionó los conceptos de los 2 anteriores, y propuso una implementación mejorada de gran calidad.

El código utilizado en estos artículos está disponible en estos repositorios: Trigger Framework Dan Appleman, Trigger Framework Tony Scott, y en este el código empleado para el Meetup: Meetup Framework Trigger.

Evaluar el rendimiento de las consultas asociadas a un Dashboard

No existe la posibilidad para un administrador de obtener los costes y Query Plans generados por el Optimizer desde todos los Reports de un Dashboard en Salesforce.

Por tanto, escribí este código para obtener todos los Query Plans de los Reports que contiene cada Dashboard Component de un Dashboard de Salesforce. Para ello se invoca el recurso explain de la Tooling API.

Entrada explicativa en  Optimización de Queries en Salesforce (Parte 2) – con Query Plan y Tooling/REST API. y Código completo y libre en este repositorio: Get Query Plans for a Salesforce Dashboard.

Evaluación de Funcionalidades de la Plataforma

Apex Connector Framework

Entrada explicativa en Entrada del blog con la explicación completa  y código completo y libre en este repositorio: ApexConnectorFramework.

Uso de la BULK API V2

Dado que he usado ampliamente esta API para cargar grandes volúmenes de datos, cuando apareció la versión 2, creé un cliente Java evaluar sus servicios y medir su rendimiento comparado con la versión inicial.

Entrada explicativa en BULK API v2: 2 veces más rápida con la mitad de código   y código completo y libre en este repositorio: Forcegraells-BulkApiV2.

Big Objects

Big Objects es la implementación de Salesforce de contenedores de datos, para ingesta masiva, rendimiento garantizado de consulta e independientemente del volumen de registros (según la documentación oficial, sea 1 Millón o 1.000 Millones de registros).

Por tanto, como contenedores de datos de gran masivo, inicialmente podrían aplicarse a muchos casos de uso por la gran cantidad de datos que generan las compañías, pero sus limitaciones, restringen el abanico de casos de uso real.

Por ello, creé un proyecto, para probar su uso y rendimiento.

Entrada explicativa en Big Objects: Contenedores de Datos – un quiero y quizás puedo de almacenamiento masivo en Salesforce   y código completo y libre en este repositorio: Forcegraells-BigObjects.

Uso del Flujo de Autenticación JWT Bearer Token con Salesforce

Este proyecto experimenta con el Flujo de Autenticación JWT de Salesforce. Después de buscar ejemplos y no encontrar un proyecto completo, me decidí a crear el mío propio.

Entrada explicativa y código disponible en este repositorio: Uso del Flujo de Autenticación JWT Bearer Token con Salesforce.

Uso del Flujo de Autenticación Username/Password Salesforce

Este proyecto experimenta con el Flujo de Autenticación Username/Password de Salesforce.

Entrada explicativa y código disponible en este repositorio: Uso del Flujo de Autenticación Username/Password.