---
schema_version: "1"
id: 304036933cb2e7c30867a73cbd27ae0b2b442a8f272c0100746e69e2b08795eb
title: Operational Excellence - Patrones de automatización
collection: architect
version: current
locale: es-mx
portal_url: https://docs.salesforce.com/architect/current/es-mx/well-architected/guides/operational-excellence-automation-patterns.md
canonical_url: https://architect.salesforce.com/docs/architect/es-mx/well-architected/guide/operational-excellence-automation-patterns.html
source_site: architect.salesforce.com
content_type: documentation
content_hash: 76762c1958b6b7491dc7a4fae36bd7a74fba4e1859b18e31256ffe5c95a724d4
products:
  - Marco bien estructurado
  - Architect Site Content Repo
---
# Operational Excellence - Patrones de automatización

<br>

Obtenga más información acerca de [Excelencia operativa](/docs/architect/es-mx/well-architected/guide/operational-excellence.html) bien arquitectónica → [Automatización y eficiencia](/docs/architect/es-mx/well-architected/guide/operational-excellence.html#automation-and-efficiency)

## KPI y mediciones

**Patrones**

| Dónde buscar | Qué aspecto tiene |
| --- | --- |
| Plataforma \| Tableros                     | ✅ Todas las mediciones relacionadas con los KPI están incluidas en al menos un tablero        |
| Plataforma \| Documentación                  | ✅ Las salidas para cada automatización son mensurables y están sujetas a plazos                 |
| Plataforma \| Documentación                  | ✅ Las partes interesadas responsables se enumeran para cada KPI                          |

**Antipatrones**

| Dónde buscar | Aspecto negativo |
| --- | --- |
| Plataforma \| Tableros                     | ⚠️ La creación de reportes de KPI no existe o faltan tableros de mediciones relacionadas con algunos KPI |
| Plataforma \| Documentación                  | ⚠️ Existen indicadores clave de desempeño sin partes interesadas responsables                                     |
| Plataforma \| Documentación                  | ⚠️ Los KPI no existen para automatizaciones o tienen plazos poco claros para mediciones  |

## Automatización declarativa

**Patrones**

| Dónde buscar | Qué aspecto tiene |
| --- | --- |
| Plataforma \| Flujo                           | ✅ Flow Builder se utiliza para la automatización desencadenada por registros (sustitución de Process Builder y reglas de flujo de trabajo)                                       |
| Plataforma \| Flujo                           | ✅ Los flujos desencadenados por registros con ejecución antes del guardado se utilizan para la población de campos antes de la creación de registros                                    |
| Plataforma \| Flujo                           | ✅ Los flujos gestionan lógica de decisiones, bucles, llamadas de API, operaciones DML y orquestación compleja de múltiples pasos                                    |
| Plataforma \| Flujo                           | ✅ El control de transacciones de flujo se utiliza para confirmar cambios intermedios cuando es necesario                                                          |
| Plataforma \| Flujo                           | ✅ La gestión de fallos está implementada para una recuperación de errores elegante en flujos                                                                        |
| Plataforma \| Flujo                           | ✅ Los flujos de pantalla reactivos proporcionan experiencias de usuario dinámicas                                                                                    |
| Plataforma \| Flujo                           | ✅ La automatización declarativa se selecciona cuando los usuarios de negocio o administradores necesitan modificar la lógica sin la participación del desarrollador                 |
| Plataforma \| Flujo                           | ✅ Las variables no hacen referencia a valores codificados (para tipos de registro, usuarios, etc.)                                                              |
| Plataforma \| Flujo                           | ✅ Lógica de transferencia de flujos a Apex en contextos de gran volumen de datos                                                                                |
| Plataforma \| Flujo                           | ✅ Los flujos secundarios se utilizan para secciones de procesos que necesitan reutilizarse en todo el negocio                                                    |
| Plataforma \| Flujo                           | ✅ Todos los flujos iniciados automáticamente utilizan elementos de decisión y/o pausa para evaluar criterios de entrada y evitar bucles infinitos o ejecuciones en grandes volúmenes de datos |
| Plataforma \| Flujo                           | ✅ Solo se solicita a los usuarios proporcionar datos cuando no se pueden utilizar datos del sistema existentes                                                              |
| Plataforma \| Flujo                           | ✅ Los flujos están organizados en una estructura jerárquica que consta de un flujo principal y subflujos de soporte                                         |
| Plataforma \| Flujo                           | ✅ Todas las entradas de usuario tienen un propósito claro dentro del flujo                                                                                      |
| Plataforma \| Flujo                           | ✅ Cada flujo sirve a un único propósito específico                                                                                               |
| Plataforma \| Flujo                           | ✅ Cada paso realiza una tarea granular específica                                                                                              |
| Plataforma \| Flujo                           | ✅ Todos los flujos iniciados en contexto de usuario abstraen transacciones de contexto del sistema en subflujos, colocados coherentemente después del elemento Pausa para crear una nueva transacción |
| Plataforma \| Flujo                           | ✅ Todos los flujos desencadenados por registros tienen valores de orden de desencadenador rellenados                                                                            |
| Plataforma \| Flujo                           | ✅ Los flujos que implican llamadas del sistema externo o procesos de larga ejecución utilizan rutas asíncronas                                                 |
| Plataforma \| Flujo                           | ✅ Se crean secuencias complejas de operaciones de datos relacionadas con Orchestrator (en vez de invocar múltiples subflujos dentro del flujo monolítico) |
| Plataforma \| Validación                     | ✅ La integridad de los datos se aplica a nivel de plataforma utilizando reglas de validación, reglas de duplicados y campos obligatorios                                 |
| Plataforma \| Validación                     | ✅ Las reglas de validación evitan el ingreso de datos no válidos antes de guardar (más eficiente que la validación de desencadenadores)                                          |
| Plataforma \| Procesos de aprobación             | ✅ El enrutamiento de aprobación de múltiples pasos gestiona rutas de aprobación paralelas y secuenciales con aprobadores delegados                                       |
| Plataforma \| Procesos de aprobación             | ✅ La arquitectura de aprobación tiene en cuenta escenarios de excepción (todos los aprobadores de vacaciones, requisitos de negocio urgentes omitiendo la aprobación normal) |

**Antipatrones**

| Dónde buscar | Aspecto negativo |
| --- | --- |
| Plataforma \| Flujo                           | ⚠️ Process Builder y reglas de flujo de trabajo utilizados para la nueva automatización (Flow Builder es la dirección estratégica)                     |
| Plataforma \| Flujo                           | ⚠️ Automatización programática utilizada cuando los usuarios de negocio o administradores necesitan modificar la lógica sin la participación del desarrollador    |
| Plataforma \| Flujo                           | ⚠️ Los flujos carecen de gestión de fallos dando como resultado una mala recuperación de errores                                                               |
| Plataforma \| Flujo                           | ⚠️ Las variables tienen valores codificados                                                                                        |
| Plataforma \| Flujo                           | ⚠️ Los flujos deben desactivarse manualmente antes de cargas de datos masivas                                                             |
| Plataforma \| Flujo                           | ⚠️ Partes de un flujo se repiten entre flujos en vez de utilizar subflujos                                                 |
| Plataforma \| Flujo                           | ⚠️ Los flujos desencadenan avisos de "excepción no gestionada"                                                                             |
| Plataforma \| Flujo                           | ⚠️ Incluso flujos sencillos causan regularmente errores relacionados con límites reguladores                                                     |
| Plataforma \| Flujo                           | ⚠️ Los flujos requieren entradas adicionales para proporcionar contexto                                                                      |
| Plataforma \| Flujo                           | ⚠️ Los flujos sirven para múltiples fines                                                                                           |
| Plataforma \| Flujo                           | ⚠️ Los grupos de pasos relacionados contienen funciones que se solapan con grupos de pasos en otros flujos                         |
| Plataforma \| Flujo                           | ⚠️ Los flujos solicitan entradas de usuario cuando se pueden utilizar datos almacenados en su lugar                                                          |
| Plataforma \| Flujo                           | ⚠️ Los flujos requieren entradas cuyos datos no se utilizan                                                                             |
| Plataforma \| Flujo                           | ⚠️ Realización de DML utilizando recopilación que se genera desde componente de pantalla (aprovechando la configuración "Utilizar los Id. y todos los valores de campo desde un registro o recopilación de registros" en crear, actualizar o eliminar elemento cuando se genera recopilación desde componente de pantalla) |
| Plataforma \| Flujo                           | ⚠️ Los flujos desencadenados por registro no utilizan atributos de orden de desencadenador en absoluto o no utilizan valores de orden de desencadenador de forma coherente        |
| Plataforma \| Flujo                           | ⚠️ Rutas asíncronas no utilizadas de forma coherente o en absoluto                                                                      |
| Plataforma \| Flujo                           | ⚠️ Los flujos grandes y monolíticos intentan coordinar secuencias complejas de operaciones de datos relacionadas (con o sin subflujos)    |
| Plataforma \| Procesos de aprobación             | ⚠️ La arquitectura de aprobación no tiene en cuenta escenarios de excepción (todos los aprobadores de vacaciones, requisitos de negocio urgentes) |
| Plataforma \| Validación                     | ⚠️ Integridad de datos aplicada solo en desencadenadores en vez de reglas de validación (validación de desencadenadores menos eficiente y más compleja) |

## Automatización programática

**Patrones**

| Dónde buscar | Qué aspecto tiene |
| --- | --- |
| Plataforma \| Apex                           | ✅ El marco de trabajo del controlador de desencadenadores aplica la función de desencadenador único por objeto, masificación, separación de problemas y prevención de ejecuciones recursivas     |
| Plataforma \| Apex                           | ✅ Los controladores de desencadenadores delegan en clases de servicio para lógica de negocio, manteniendo una clara separación de preocupaciones                                  |
| Plataforma \| Apex                           | ✅ Los desencadenadores utilizan protección de recursión utilizando indicadores estáticos o clase de control de recursión exclusiva                                                  |
| Plataforma \| Apex                           | ✅ Apex futuro se utiliza con moderación, para llamadas o DML de objetos del sistema                                                                            |
| Plataforma \| Apex                           | ✅ Las invocaciones Apex asíncronas utilizan DML complejo Colocable en cola para 'encadenar' entre transacciones                                                             |
| Plataforma \| Apex                           | ✅ Apex por lotes se utiliza para grandes volúmenes de datos (procesa grandes cantidades de datos con límites reguladores exclusivos por fragmento) |
| Plataforma \| Apex                           | ✅ Los trabajos por lotes tienen una gestión de errores que registra registros con fallos sin detener la ejecución de lotes completa                                            |
| Plataforma \| Apex                           | ✅ La API masiva se utiliza solo cuando se deben procesar grandes cantidades de datos (las API de SOAP y REST nativas se aprovechan para cantidades más pequeñas de datos)       |
| Plataforma \| Apex                           | ✅ Apex colocable en cola se utiliza para orquestación de flujos de trabajo complejos, llamadas externas con lógica de reintento y procesamiento que se benefician de límites asíncronos  |
| Plataforma \| Apex                           | ✅ Apex programado ejecuta el procesamiento en programaciones fijas para mantenimiento nocturno, creación de reportes diarios, sincronización de integración periódica y reglas de negocio basadas en tiempo |
| Plataforma \| Estándares de diseño               | ✅ Los casos de uso para operaciones síncronas y asíncronas en automatizaciones se describen claramente como parte de estándares de diseño                  |
| Plataforma \| Documentación                  | ✅ Las rutas de ejecución planificadas y potenciales para automatizaciones se describen claramente                                                                 |

**Antipatrones**

| Dónde buscar | Aspecto negativo |
| --- | --- |
| Plataforma \| Apex                           | ⚠️ Múltiples desencadenadores en un objeto con orden de ejecución impredecible y lógica solapada            |
| Plataforma \| Apex                           | ⚠️ Lógica de negocio incrustada directamente en archivos de desencadenador dificultando las pruebas                          |
| Plataforma \| Apex                           | ⚠️ Sin marco de trabajo del controlador de desencadenadores o patrones de desencadenadores incoherentes entre objetos                        |
| Plataforma \| Apex                           | ⚠️ Los trabajos Apex por lotes tienen un tamaño de ámbito muy pequeño (por ejemplo, tamaño de ámbito = 1)                                   |
| Plataforma \| Apex                           | ⚠️ Apex por lotes utilizado para llamadas externas (grandes volúmenes de datos de Salesforce enviados al sistema externo utilizando Apex por lotes) |
| Plataforma \| Apex                           | ⚠️ Funciones Apex asíncronas utilizadas arbitrariamente (Métodos futuros y Apex colocable en cola utilizados de forma incoherente o indistinta) |
| Plataforma \| Apex                           | ⚠️ Apex asíncrono rara vez utilizado                                                                              |
| Plataforma \| Apex                           | ⚠️ Las operaciones de base de datos no tienen lógica clara y coherente para pasar la ejecución a Apex por lotes cuando sea necesario |
| Plataforma \| Estándares de diseño               | ⚠️ Los casos de uso para operaciones síncronas y asíncronas no se solucionan                             |
| Plataforma \| Documentación                  | ⚠️ La invocación de automatización no está documentada                                                             |

## Eventos de plataforma

**Patrones**

| Dónde buscar | Qué aspecto tiene |
| --- | --- |
| Plataforma \| Eventos de plataforma                | ✅ Eventos de plataforma se utilizan para la automatización dirigida por eventos que desvincula publicadores de suscriptores                       |
| Plataforma \| Eventos de plataforma                | ✅ Los publicadores no están al tanto de suscriptores y publican fuego y olvido                                                     |
| Plataforma \| Eventos de plataforma                | ✅ Múltiples suscriptores reaccionan independientemente a eventos a través de flujos desencadenados por eventos de plataforma, desencadenadores Apex o integraciones externas |
| Plataforma \| Eventos de plataforma                | ✅ Los Id. de reproducción se utilizan para reproducir eventos perdidos desde cualquier punto en el plazo de retención de 72 horas                            |
| Plataforma \| Eventos de plataforma                | ✅ Eventos de plataforma activa la comunicación entre organizaciones, la notificación del sistema externo y la orquestación de flujos de trabajo internos     |

**Antipatrones**

| Dónde buscar | Aspecto negativo |
| --- | --- |
| Plataforma \| Eventos de plataforma                | ⚠️ Acoplamiento directo entre publicadores y suscriptores evitando la automatización componible                                                                             |
| Plataforma \| Eventos de plataforma                | ⚠️ La actualización del nivel de cuenta llama directamente a la actualización de oportunidades, la notificación del equipo de cuentas y la sincronización del almacén de datos en una transacción (el acoplamiento ajustado requiere cambios en la lógica de la cuenta cada vez que se necesita un nuevo procesamiento descendente) |
| Plataforma \| Apex                           | ⚠️ Publicar inmediatamente Eventos de plataforma utilizados adhoc (eventos en tiempo real utilizados en vez de Publicar después de confirmar independientemente de los requisitos de pedidos de publicación o los riesgos de bloqueo de registros) |

## Estándares de desarrollo Apex

**Patrones**

| Dónde buscar | Qué aspecto tiene |
| --- | --- |
| Plataforma \| Apex                           | ✅ Las declaraciones SOQL utilizan operadores de comparación de lógica positiva (`INCLUDES`, `IN`) como lógica principal o única           |
| Plataforma \| Apex                           | ✅ SOQL evita `= NULL`, `!= NULL` o los utiliza con moderación después de operadores de comparación positivos                    |
| Plataforma \| Apex                           | ✅ SOQL no utiliza declaraciones de `LIMIT 1`                                                                        |
| Plataforma \| Apex                           | ✅ SOQL no utiliza la palabra clave `ALL ROWS`                                                                          |
| Plataforma \| Apex                           | ✅ SOQL no aparece en bucles                                                                             |
| Plataforma \| Apex                           | ✅ Los criterios comodín aparecen en SOSL (no SOQL)                                                                   |
| Plataforma \| Apex                           | ✅ Las declaraciones SOQL evitan comparaciones de `LIKE` o comparaciones de texto parcial                                          |
| Plataforma \| Apex                           | ✅ SOQL está envuelto en bloques de `try-catch`                                                                         |
| Plataforma \| Apex                           | ✅ Las variables no hacen referencia a valores codificados (para tipos de registro, usuarios, etc.)                                  |
| Plataforma \| Apex                           | ✅ Cada clase sirve a un único propósito específico                                                                  |
| Plataforma \| Apex                           | ✅ Cada método realiza una tarea granular específica                                                                |
| Plataforma \| Apex                           | ✅ Todas las variables de entrada tienen un propósito claro dentro de la clase                                                     |
| Plataforma \| Apex                           | ✅ La ejecución de código requiere un número mínimo de recursos                                                         |

**Antipatrones**

| Dónde buscar | Aspecto negativo |
| --- | --- |
| Plataforma \| Apex                           | ⚠️ Las declaraciones SOQL utilizan `NOT`, criterios de `NOT IN` como operador principal o único operador de comparación (no selectivo)                          |
| Plataforma \| Apex                           | ⚠️ Las declaraciones SOQL utilizan la palabra clave `ALL ROWS` (no selectiva)                                                                       |
| Plataforma \| Apex                           | ⚠️ Las declaraciones SOQL utilizan `= NULL`, criterios de `!= NULL` como operador principal o único operador de comparación (no selectivo)                      |
| Plataforma \| Apex                           | ⚠️ Las variables tienen valores codificados                                                                                             |
| Plataforma \| Apex                           | ⚠️ SOQL aparece dentro de bucles                                                                                                    |
| Plataforma \| Apex                           | ⚠️ Las declaraciones SOQL utilizan criterios de filtro de `LIKE` y comodines con frecuencia (no selectivo)                                           |
| Plataforma \| Apex                           | ⚠️ SOQL no incluido en bloques de `try-catch`                                                                                       |
| Plataforma \| Apex                           | ⚠️ Las declaraciones SOQL utilizan `LIMIT 1` (no selectivo)                                                                                |
| Plataforma \| Apex                           | ⚠️ SOSL rara vez o no se utiliza coherentemente para criterios de selección de comodines                                                         |
| Plataforma \| Apex                           | ⚠️ Las clases sirven para múltiples fines                                                                                             |
| Plataforma \| Apex                           | ⚠️ Los métodos realizan múltiples tareas o los métodos realizan tareas que no se alinean con el propósito declarado de la clase de la que forman parte  |
| Plataforma \| Apex                           | ⚠️ Las variables de entrada no se utilizan actualmente en métodos                                                                             |
| Plataforma \| Apex                           | ⚠️ Los métodos recuperan innecesariamente datos de la base de datos o de sistemas externos                                              |

## Tratamiento de errores

**Patrones**

| Dónde buscar | Qué aspecto tiene |
| --- | --- |
| Plataforma \| Apex                           | ✅ Las excepciones personalizadas se utilizan para crear lógica y mensajería de error avanzada                                       |
| Plataforma \| Apex                           | ✅ El código encierra todos los pasos de proceso DML, SOQL, llamadas y otros pasos críticos en bloques de `try-catch`                    |
| Plataforma \| Apex                           | ✅ Los métodos de clase de base de datos pueden utilizarse exclusivamente para todas las operaciones de datos (en vez de DML)                       |
| Plataforma \| Apex                           | ✅ En contextos asíncronos y masivos, se utilizan métodos de clase Base de datos en vez de DML                                    |
| Plataforma \| Aura                           | ✅ JavaScript encierra todas las operaciones de datos y pasos de procesos críticos en bloques de `try-catch`                         |
| Plataforma \| Aura                           | ✅ Dentro de los bloques de `try-catch`, el `Error` JavaScript nativo se utiliza en declaraciones throw (sin uso de `$A.error()`)   |
| Plataforma \| Aura                           | ✅ Toda la lógica de error recuperable aparece en declaraciones de `catch` y proporciona mensajes de usuario claros               |
| Plataforma \| Flujo                           | ✅ Los flujos con operaciones de datos, llamadas y otra lógica de procesamiento crítica tienen rutas de fallo para todas las acciones clave |
| Plataforma \| Flujo                           | ✅ Los flujos de pantalla utilizan de forma coherente conectores de fallos para mostrar errores a los usuarios                                        |
| Plataforma \| Flujo                           | ✅ Los mensajes de error personalizados están configurados para errores que aparecerán en pantalla                                    |
| Plataforma \| Componentes web Lightning (LWC) | ✅ JavaScript encierra todas las operaciones de datos y pasos de procesos críticos en `if ()`/`else if ()` bloques                |
| Plataforma \| Componentes web Lightning (LWC) | ✅ Todas las funciones de `@wire` utilizan propiedades de `data` y `error` proporcionadas por la API                                   |
| Plataforma \| Componentes web Lightning (LWC) | ✅ Todas las `if (error)` /`else if (error)` declaraciones contienen lógica para procesar errores y proporcionar mensajes informativos |

**Antipatrones**

| Dónde buscar | Aspecto negativo |
| --- | --- |
| Plataforma \| Apex                           | ⚠️ DML, SOQL, llamadas u otros pasos de procesos críticos no incluidos de forma coherente en bloques de intento de captura               |
| Plataforma \| Apex                           | ⚠️ No se utilizan métodos de clase Base de datos                                                                             |
| Plataforma \| Apex                           | ⚠️ Operaciones de datos realizadas exclusivamente con DML                                                                      |
| Plataforma \| Apex                           | ⚠️ Las declaraciones de `System.debug` aparecen en código de producción (y no se comentan)                                |
| Plataforma \| Aura                           | ⚠️ JavaScript no encierra de forma coherente operaciones de datos y pasos de procesos críticos en bloques de `try-catch`          |
| Plataforma \| Aura                           | ⚠️ Los componentes utilizan `$A.error()`                                                                                    |
| Plataforma \| Aura                           | ⚠️ La lógica de error recuperable no aparece coherentemente en declaraciones de `catch`, y los mensajes de error a usuarios no son claros |
| Plataforma \| Flujo                           | ⚠️ Los flujos no utilizan rutas de fallo de forma coherente o en absoluto                                                            |
| Plataforma \| Flujo                           | ⚠️ Mensajes de error personalizados no utilizados, de modo que los usuarios ven el mensaje predeterminado "Se produjo un fallo no gestionado en este flujo"     |
| Plataforma \| Componentes web Lightning (LWC) | ⚠️ Las funciones de `@wire` no utilizan propiedades de `data` y `error` proporcionadas por la API (o no las utilizan de forma coherente) |
| Plataforma \| Componentes web Lightning (LWC) | ⚠️ Si se utiliza en absoluto, las declaraciones `if (error)`/`else if (error)` no contienen realmente lógica para procesar errores y proporcionan mensajes de error útiles |
| Plataforma \| Componentes web Lightning (LWC) | ⚠️ JavaScript no utiliza de forma coherente `if ()`/`else if ()` bloques con operaciones de datos o pasos de procesos críticos  |
