CommunityRedacción y edicióngithub.com

pariveo/salesforce-agent-skills

Construye, audita y migra Flows de Salesforce utilizando elementos modernos de la plataforma (Collection Filter, Transform incluyendo sumas, conteos y uniones, choice sets de registros y picklists, pantallas reactivas, acciones de pantalla, actualizaciones pre-guardado, errores personalizados, rutas asíncronas y programadas, disparadores de eventos de plataforma y esperas, acciones de agente) en lugar de patrones de bucle y decisión. Útil para todo trabajo con Flows: escribir o revisar metadatos .flow-meta.xml, especificaciones de construcción para Flow Builder, flujos de pantalla, disparados por registro, autoejecutados o programados, migrar Process Builder o reglas de workflow, y solucionar problemas de flujos.

¿Qué es salesforce-agent-skills?

Este skill transforma la manera en que los desarrolladores y administradores trabajan con Salesforce Flows, reemplazando los patrones obsoletos de bucle-decisión-asignación por los elementos modernos de la plataforma. Proporciona una tabla de decisión completa que mapea requisitos comunes (como filtrar colecciones, transformar datos, sumar, contar, unir colecciones, crear choice sets reactivos, manejar errores personalizados o trabajar con eventos de plataforma) al elemento Flow correcto, su metadato XML y la versión mínima de API requerida. El skill incluye un flujo de trabajo paso a paso con una lista de verificación, ejemplos desplegables verificados, y un script de verificación (`check-flow.mjs`) para detectar patrones heredados. Está optimizado para plataformas como Claude Code, Cursor y Codex, y su enfoque principal es escribir metadatos listos para desplegar, auditar flujos existentes identificando patrones legacy con priorización por impacto, y migrar Process Builder y reglas de workflow de forma estructurada. También define condiciones de escape explícitas (E1-E6) para los casos excepcionales donde un bucle o patrón antiguo sigue siendo necesario, asegurando que cada decisión esté justificada y documentada.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/pariveo/salesforce-agent-skills/tree/HEAD/skills/salesforce-flow-modernizer

Installed? Explore more Redacción y edición skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Modernización de Flows de Salesforce

Los modelos por defecto usan los patrones de sus datos de entrenamiento: Bucle + Decisión + Asignación, DML dentro de bucles, actualizaciones post-guardado del registro disparador, pantallas extra para recalcular. Este skill los reemplaza con los elementos actuales y te proporciona metadatos verificados para cada uno en examples/.

Estas reglas deciden la mayoría de los resultados:

  1. El elemento moderno es la opción por defecto. Un bucle necesita una condición de escape explícita (ver abajo). Cuando el XML de un elemento no te sea familiar, copia la estructura de su archivo de ejemplo en lugar de evitar el elemento.
  2. No verificable no significa no disponible. La disponibilidad sigue la versión de API de la organización y la tabla inferior. No necesitas acceso web para usar un elemento cuyo mínimo esté en o por debajo de la versión de la org. La validación de despliegue es la comprobación.
  3. Cada bucle y cada retroceso se explican. Nombra el escape en la descripción del Bucle y en el entregable. Sin un escape nombrado, no escribas el bucle.

Flujo de trabajo

Copia esta lista de verificación en tus notas de trabajo y márcala:

- [ ] 1. Leer references/org-conventions.md; listar los slots no configurados de los que depende esta tarea
- [ ] 2. Establecer la versión de API de la organización
- [ ] 3. Clasificar la tarea: construir, auditar o migrar; tipo de flow, evento disparador, ejecutado como quién
- [ ] 4. Mapear cada requisito a través de la tabla de decisión; abrir cada ejemplo que uses
- [ ] 5. Escribir los metadatos (o la especificación de construcción)
- [ ] 6. Ejecutar scripts/check-flow.mjs; corregir cada ERROR, decidir cada ADVERTENCIA
- [ ] 7. Validar el despliegue cuando una org esté disponible; de lo contrario, etiquetar el XML como no validado
- [ ] 8. Ejecutar la lista de verificación de revisión en references/delivery.md y entregar

Paso 1. Convenciones. Un slot rellenado en org-conventions.md anula los valores por defecto de este skill. Un slot vacío significa que se aplica el valor por defecto y el entregable lo lista bajo decisiones abiertas.

Paso 2. Versión de API. Con una org, sf org display --target-org <alias> muestra "Api Version". Sin una, usa sourceApiVersion del archivo sfdx-project.json del proyecto, o 67.0 si también falta, y dilo. Establece el apiVersion de los nuevos flows a esa versión.

Paso 3. Clasificar. Flow existente o nueva construcción. Tipo de flow (de pantalla, disparado por registro antes o después de guardar, autoejecutado, disparado por programación, disparado por evento de plataforma). Objeto disparador y evento disparador, respondido a partir del requisito antes de abrir cualquier ejemplo. La pregunta es si un registro creado que ya cumple la condición cuenta, o solo uno que cambia para cumplirla. Crear y actualizar con "solo cuando se actualiza para cumplir la condición" se dispara en dicha creación, mientras que solo actualización no. Si el requisito no lo dice, pregunta o indica la suposición (record-triggered.md). Quién lo ejecuta (usuario, sistema, agente). Qué debe suceder sincrónicamente. Para flows de pantalla, la superficie que lo incrusta y qué recibe y devuelve.

Paso 4. Mapear. Para cada operación de colección, lista de opciones, interacción de pantalla, actualización de registro, necesidad de sincronización e integración, toma la fila de la tabla de decisión. Lee el archivo de ejemplo para cada elemento que vayas a escribir y la referencia de dominio para sus límites. Lee solo las referencias para los dominios que toca la tarea.

Paso 5. Escribir. Los metadatos van a force-app/main/default/flows/<ApiName>.flow-meta.xml (ajusta al directorio de paquete del proyecto). Nombres por defecto: nombres de API de flow Objeto_Verbo_Condición, nombres de elementos Tipo_Propósito (Obtener_Casos_Abiertos, Filtrar_Alta_Prioridad, Transformar_En_Tareas, Dec_Es_Renovacion), a menos que org-conventions.md diga lo contrario. Establece <status>Draft</status> a menos que el usuario pida explícitamente un flow activo o el slot de política de activación lo indique. Los ejemplos están Activos solo porque se ejecutaron. Mantén todos los elementos de un mismo tipo juntos en el archivo (los grupos divididos fallan en el despliegue). Sin acceso a CLI, entrega una especificación de construcción en el formato de delivery.md.

Paso 6. Verificar. Ejecuta el verificador en cada flow que escribiste o te pidieron revisar. Solo necesita Node:

node <skill-dir>/scripts/check-flow.mjs --api <org-api-version> force-app/main/default/flows/<ApiName>.flow-meta.xml

Los ERRORES son patrones heredados o formas que la plataforma rechaza, así que corrígelos. Las ADVERTENCIAS necesitan una decisión, que indicas en el entregable.

Paso 7. Validar. Con una org autenticada, nombra la org explícitamente en lugar de depender de la org por defecto de la CLI:

sf project deploy validate --source-dir force-app/main/default/flows/<ApiName>.flow-meta.xml --target-org <alias>

Corrige según el error exacto y vuelve a ejecutar. El XML que no fue validado se etiqueta como no validado en el entregable, claramente.

Paso 8. Revisar y entregar. Ejecuta la lista de verificación de revisión en delivery.md. Termina el entregable con este bloque, cada línea rellenada:

Modo: metadatos | especificación de construcción
Verificador: <comando> → <n> errores, <n> advertencias (<decisión por advertencia>)
Validación de despliegue: <comando y resultado> | no ejecutado, no validado (<razón>)
Estado: Borrador | Activo (<por qué>)
Contexto de ejecución: <runInMode o defecto, y qué significa para este tipo de flow>
Escapes: <E-id y razón por bucle o retroceso> | ninguno
Decisiones abiertas: <slots de convención no configurados de los que depende este flow> | ninguna

Valores por defecto del contexto de ejecución (runInMode DefaultMode): los flows disparados por registro, por programación y por evento de plataforma se ejecutan en contexto de sistema sin compartir. Los flows de pantalla y autoejecutados se ejecutan en contexto de usuario cuando se lanzan desde la UI o la API REST, y en el contexto de quien llama cuando se invocan desde Apex u otro flow. Autoejecutado no es "sistema por defecto".

Auditorías y migraciones

Para un flow existente, ejecuta primero el verificador, luego inventaría los patrones heredados restantes contra la última columna de la tabla de decisión. Entrega el informe de auditoría definido en delivery.md antes de cualquier reescritura, clasificado por impacto: límites de gobernador, luego contexto de seguridad, luego experiencia de usuario. No modifiques el flow a menos que se te pida. Cuando se te pida, sigue el plan de migración del informe en orden. Describe patrones, nunca a las personas que los construyeron, porque la mayoría de los patrones heredados eran el enfoque recomendado cuando se escribieron. El mapeo de Process Builder y reglas de workflow está en legacy-migration.md.

Tabla de decisión

"API de Org" es la versión de API de org más baja que tiene el elemento (Flow, Guía del desarrollador de Metadata API). Los ejemplos están en examples/flows/, desplegados y ejecutados en la API 67.0.

RequisitoUsarMetadatosAPI de OrgEjemploReemplaza
Mantener los elementos de una colección que coinciden con criteriosCollection Filter (condiciones o fórmula)collectionProcessors, FilterCollectionProcessor53Opportunity_Create_Followup_TasksBucle + Decisión + Asignación
Construir registros a partir de una colección, reformar camposTransform, Maptransforms59Opportunity_Create_Followup_TasksBucle + Asignación construyendo una colección
Sumar o contar una colecciónTransform, Sum / Count. En flows de pre-guardado, Filter + Asignación AssignCount, o un Bucle para una Suma (E3)transforms, inputParameters59 (destino primitivo 62)Opportunity_Create_Followup_Tasks, Account_Before_Save_Count_ContactsContadores de bucle
Combinar dos colecciones por una claveTransform, InnerJoin, con el mapeo en el mismo Transformtransforms, JoinDefinition63Opportunity_Create_Account_Tasks_JoinedBucles anidados, Obtener Registros dentro de un bucle
Ordenar una colecciónCollection Sort (ordena en el lugar)SortCollectionProcessor50Opportunity_Allocate_Budget_WaterfallOrdenación manual en un bucle
Crear, actualizar o eliminar muchos registrosUn DML sobre la colección preparadarecordCreates inputReferencecualquieraOpportunity_Create_Followup_TasksDML dentro de un bucle
Opciones a partir de registros o un picklistChoice set de registros / picklistdynamicChoiceSetscualquieraAccount_Order_Entry_ScreenObtener Registros + Bucle construyendo opciones
Totales, visibilidad o texto que siguen a la entradaFórmula reactiva, visibilityRuleformulas, campos de pantalla59Account_Order_Entry_ScreenUna segunda pantalla para recalcular
Reglas de entrada en una pantallavalidationRule de componentefields de pantallacualquieraAccount_Order_Entry_ScreenDecisión después de la pantalla de vuelta a una pantalla de error
Lógica de servidor sin salir de la pantallaAcción de pantalla + Botón de acciónscreens.actions, triggers59Account_Check_Pipeline_ScreenSiguiente, Obtener Registros, volver
Establecer campos en el registro disparadorFlow de pre-guardado, Asignación a $RecordtriggerType RecordBeforeSavecualquieraOpportunity_Before_Save_Set_Next_StepActualizar Registros post-guardado en $Record
Bloquear un guardado con un mensajeCustom ErrorcustomErrors59Opportunity_Before_Save_Set_Next_StepCompensación post-guardado
Ejecutar solo cuando cambien campos relevantesCondiciones de entrada, filterFormula con ISCHANGED, "solo cuando se actualiza para cumplir la condición"start55 (fórmula)Opportunity_Before_Save_Set_Next_Step, Opportunity_Closed_Won_HandoverDecisión como primer elemento
Llamadas, correos electrónicos, DML no relacionados que el usuario no necesita esperarRuta asíncronascheduledPaths AsyncAfterCommit53Opportunity_Closed_Won_HandoverTodo sincrónico
Trabajar antes o después de una fecha de registroRuta programadascheduledPaths RecordField51Opportunity_Closed_Won_HandoverFlow disparado por programación consultando registros vencidos
Reaccionar a un evento de plataformaFlow disparado por evento de plataformatriggerType PlatformEvent49Order_Event_Create_TaskDisparador Apex escrito para iniciar lógica de Flow
Pausar hasta que llegue un eventoElemento Wait con un evento de plataformawaitscualquieraOrder_Wait_For_ConfirmationSondeo
Lógica de Flow para un agente AgentforceFlow autoejecutado con entradas y salidas descritasvariables descriptioncualquieraCase_Get_Status_For_AgentEnvoltorio Apex invocable
Orden entre flows en un mismo objetoTrigger OrdertriggerOrder54Opportunity_Closed_Won_HandoverDepender del orden de creación
Llamar a una API RESTAcción HTTP CalloutactionCalls (generado por Builder)ver referencia de integraciónningunoApex escrito solo para la llamada

Transform no está permitido en flows de pre-guardado (error de despliegue). Pre-guardado tiene prioridad sobre Transform, por lo que un valor en el registro disparador permanece como pre-guardado, y una Suma allí es un Bucle bajo E3, nunca un Transform post-guardado más un segundo guardado. Todo lo demás arriba funciona en todo tipo de flow que tenga el concepto, y las referencias de dominio enumeran las excepciones.

Condiciones de escape

Un patrón heredado es correcto solo cuando se cumple una de estas condiciones. Decláralo en la <description> de un Bucle como Escape: E<n> <razón>, y en el entregable.

IdPermiteSe cumple solo cuando
E1Un BucleCada elemento necesita su propia llamada a una acción, subflow o plugin de Apex que solo acepta valores individuales. El cuerpo del bucle contiene esa llamada.
E2Un BucleEl resultado de un elemento depende de elementos anteriores más allá de una suma o cuenta: un saldo corriente, asignación, número de secuencia, round robin.
E3Un BucleUn flow de pre-guardado necesita una Suma (Transform no está permitido allí). Esto es deliberado, porque el Bucle en memoria es más barato que un segundo guardado post-guardado. Los conteos usan Filter + AssignCount en su lugar.
E4Trabajo en la ruta síncronaUn elemento posterior en la misma transacción lee el resultado, o el usuario debe verlo antes de que se complete el guardado.
E5Sin características de pantalla reactiva o más nuevasLa superficie de incrustación nombrada no las soporta: tiempo de ejecución de Salesforce Classic, Slack (conjunto de componentes limitado), o un componente que los documentos reactivos enumeran como no reactivo.
E6Dejar un patrón heredado en su lugarSolo ámbito de auditoría: el flow está fuera del cambio que se te pidió hacer. Nunca se aplica a flows nuevos o reescritos.

Estas no cuentan como condiciones de escape:

  • "No puedo verificar que el elemento existe en esta org" (se aplica la regla 2, así que verifica la versión de API, luego valida el despliegue).
  • "No estoy seguro del XML" (copia el ejemplo).
  • "Un bucle es más simple o más claro."
  • "Valores condicionales por elemento" (usa IF() en una fórmula de Transform).
  • "Filtrar y mapear en un solo paso" (Filter, luego Transform).
  • "La superficie podría no soportarlo" (nombra la superficie o listala como una decisión abierta, porque una superficie desconocida no es E5).
  • DML u Obtener Registros dentro de un bucle. Ningún escape lo permite.

Usa el elemento más simple suficiente. Eso significa Filter solo cuando solo se filtra, opciones estáticas cuando la lista de opciones es fija, y ningún subflow para lógica con un solo llamante.

Verificar antes de afirmar

  • Disponibilidad: versión de API de la org contra la tabla. Trata las funciones limitadas por licencia (Agentforce, Einstein, Data 360, algunas ediciones de orquestación) como suposiciones hasta que la org las confirme, y dilo.
  • Límites y estado de disponibilidad general que cambian un diseño o un hallazgo de auditoría: cita la fuente oficial (help.salesforce.com, developer.salesforce.com). No cites números de memoria, porque las referencias de dominio proporcionan los verificados.

Manejo de errores

  • CLI faltante o org inalcanzable: entrega metadatos etiquetados como no validados, o una especificación de construcción, y di cuál.
  • La validación falla: corrige según el mensaje exacto, vuelve a ejecutar el verificador y la validación. Las referencias de dominio enumeran los errores de despliegue vistos hasta ahora.
  • Característica no en la org (versión de API, edición, licencia): usa la fila compatible más cercana de la tabla, nombra la brecha y el escape.

Referencias

Lee las que la tarea necesite:

  • org-conventions.md: las decisiones del equipo, que anulan los valores por defecto.
  • collections.md: Filter, Sort, Transform (mapa, suma, cuenta, unión), DML masivo, bucles.
  • screens.md: choice sets, pantallas reactivas, validación, acciones de pantalla, incrustación.
  • record-triggered.md: condiciones de entrada, modos de disparo, orden, objeto de programación.
  • asynchronous.md: rutas asíncronas y programadas, Wait, eventos de plataforma.
  • integration.md: llamadas HTTP, acciones de agente, invocación Apex.
  • security-sharing.md: contexto de usuario frente a sistema, Modo sin compartir, permiso de acceso a la API de Flow.
  • limits.md: tamaño de colección, profundidad de anidamiento, número de elementos, tiempo de ejecución, límites de API de Metadata.
  • delivery.md: formato de entregable, lista de verificación de revisión, plantilla de informe de auditoría.
  • legacy-migration.md: mapeo de Process Builder y reglas de workflow a Flows.
  • agent-actions.md: acciones de agente para Agentforce.

Skills relacionados