<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Salesforce ERP]]></title><description><![CDATA[Artículos de EGA Futura sobre el ERP 100 % nativo de Salesforce: Apex, Lightning Web Components y procesos de ventas, compras, inventario y finanzas.]]></description><link>https://salesforce-erp.hashnode.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/6ae7dc589cd2abbaa37e8bdf/14d47868-3fb9-4e0c-b64b-4f1db9069806.png</url><title>Salesforce ERP</title><link>https://salesforce-erp.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Sun, 15 Nov 2026 20:12:46 GMT</lastBuildDate><atom:link href="https://salesforce-erp.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Cómo armar el onboarding de alguien nuevo en un equipo de Salesforce y ERP para que aprender no dependa de la agenda del senior]]></title><description><![CDATA[Sandbox propio, tiempo reservado para enseñar y cada explicación repetida escrita donde se usa: campos, Path, reglas de validación y artículos de…]]></description><link>https://salesforce-erp.hashnode.dev/c-mo-armar-el-onboarding-de-alguien-nuevo-en-un-equipo-de-salesforce-y-erp-para-que-aprender-no-dependa-de-la-agenda-del-senior</link><guid isPermaLink="true">https://salesforce-erp.hashnode.dev/c-mo-armar-el-onboarding-de-alguien-nuevo-en-un-equipo-de-salesforce-y-erp-para-que-aprender-no-dependa-de-la-agenda-del-senior</guid><category><![CDATA[knowledge management]]></category><category><![CDATA[Salesforce]]></category><category><![CDATA[onboarding]]></category><category><![CDATA[mentoring]]></category><category><![CDATA[ERP]]></category><dc:creator><![CDATA[EGA Futura]]></dc:creator><pubDate>Sat, 14 Nov 2026 18:52:34 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ae7dc589cd2abbaa37e8bdf/aa3c2db9-baa3-406b-aad2-e1eae7f2d99e.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Cuando entra alguien nuevo a un equipo de Salesforce o de ERP, buena parte de lo que necesita saber suele estar en la cabeza de dos o tres personas.</p>
<p>Hoy escribí en LinkedIn sobre ese senior que, en lugar de hacértelo notar, se sentó a enseñarte. Me quedé pensando en qué hace falta para que eso pase seguido y no por casualidad. Esto es lo que ordenaría en las primeras semanas de alguien que se suma al equipo.</p>
<h2>1. Un sandbox propio desde el primer día</h2>
<p>Se aprende tocando. Y nadie toca tranquilo si cada prueba es en producción.</p>
<p>En <strong>Setup &gt; Sandboxes</strong> se crea un sandbox Developer para la persona nueva. Copia la configuración de la org (objetos, campos, flujos, reglas) sin los datos de producción, así que puede romper lo que quiera. Si necesita datos reales de muestra para entender un proceso, un sandbox Partial Copy trae una parte según una plantilla.</p>
<p>El primer ejercicio que le daría: recorrer en el sandbox el proceso más usado de la empresa, de punta a punta, y anotar cada cosa que no entiende. Esa lista es el temario de la primera charla con el senior.</p>
<h2>2. Un senior de referencia, con tiempo en la agenda</h2>
<p>Si enseñar se hace en los ratos libres, no se hace. Reservaría un bloque fijo por semana en la agenda del senior, visible para todos, que cuente como trabajo.</p>
<p>En esas charlas, lo que más rinde es que el senior explique por qué está armado así, no solo cómo se usa. El cómo se encuentra en la documentación. El porqué casi nunca está escrito.</p>
<h2>3. Lo que se explica dos veces, se escribe donde se usa</h2>
<p>Si el senior explica lo mismo por segunda vez, es una señal de que falta algo escrito. Y lo mejor es escribirlo en el lugar donde la persona lo va a necesitar:</p>
<table>
<thead>
<tr>
<th>Lo que se pregunta</th>
<th>Dónde escribirlo en Salesforce</th>
</tr>
</thead>
<tbody><tr>
<td>Qué significa este campo y qué poner</td>
<td><strong>Texto de ayuda</strong> del campo (aparece como el ícono de información junto al campo) y <strong>Descripción</strong> para el admin</td>
</tr>
<tr>
<td>Qué hacer en cada etapa de la venta</td>
<td><strong>Guidance for Success</strong> del Path, por etapa, con los campos que importan en esa etapa</td>
</tr>
<tr>
<td>Por qué me salta este error</td>
<td><strong>Mensaje de error</strong> claro en la regla de validación y <strong>Descripción</strong> con el motivo de la regla</td>
</tr>
<tr>
<td>Qué hace este flujo y quién lo pidió</td>
<td><strong>Descripción</strong> del flujo en Flow Builder</td>
</tr>
<tr>
<td>Cómo se resuelve este caso o este trámite</td>
<td>Artículo de conocimiento ligado al caso, al ticket o a la tarea</td>
</tr>
<tr>
<td>Un cambio que todos tienen que ver</td>
<td>Un prompt de <strong>In-App Guidance</strong> (Setup &gt; In-App Guidance) en la página donde aplica</td>
</tr>
</tbody></table>
<p>Si el ERP vive en la misma org, como <a href="https://www.egafutura.com/erp/erp-para-salesforce">EGA Futura ERP</a>, los procedimientos internos pueden ir en <a href="https://www.egafutura.com/cloud/clarity">EGA Futura Clarity</a>, donde un artículo de conocimiento se enlaza a un ticket de servicio o a una tarea de proyecto. Quien hace el trabajo lo encuentra sin salir de la pantalla.</p>
<h2>4. Un lugar para preguntar sin castigo</h2>
<p>La persona nueva tiene que poder decir "no entiendo" sin sentirse menos. Ayuda que haya un lugar acordado para preguntar, y que el senior conteste ahí y no por privado, así la respuesta le queda al próximo.</p>
<p>En Salesforce sirve un grupo de Chatter del equipo. En la Plataforma EGA Futura es <a href="https://www.egafutura.com/cloud/habitat">EGA Futura Habitat</a>, donde la conversación queda sobre el registro del que se habla. Una pregunta sobre un pedido queda en ese pedido.</p>
<h2>5. Festejar cuando resuelve solo</h2>
<p>Parece menor y no lo es. Cuando la persona nueva resuelve algo por su cuenta, y sobre todo si encontró una forma mejor que la que usaba el equipo, que se note. Ese es el momento en el que el senior hizo bien su trabajo.</p>
<h2>Para seguir aprendiendo afuera del equipo</h2>
<p>Todos los jueves hay <a href="https://www.egafutura.com/salesforce">clases de Salesforce en vivo y gratis</a> para administradores y desarrolladores, y los <a href="https://www.egafutura.com/soporte/cursos">cursos de la Plataforma EGA Futura</a> están ordenados de principiante a intermedio.</p>
<p>La parte humana de este tema, la del senior que se sienta a enseñar y la del que se guarda todo, la desarrollé en <a href="https://discover.egafutura.com/senior-que-se-sento-a-ensenarte-generosidad-para-ensenar/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=amplify">EGA Futura Discover</a>.</p>
<hr />
<p><em>Juan Manuel Garrido, EGA Futura (ERP nativo en Salesforce).</em></p>
]]></content:encoded></item><item><title><![CDATA[Cómo detectar en Salesforce las aprobaciones que se resuelven por WhatsApp: consultas a ProcessInstance para empezar]]></title><description><![CDATA[Trabajo pendiente que nadie mira, aprobaciones de un minuto, aprobadores que no son los asignados y descuentos que cambian después del OK: qué consultar y…]]></description><link>https://salesforce-erp.hashnode.dev/como-detectar-en-salesforce-las-aprobaciones-que-se-resuelven-por-whatsapp-consultas-a-processinstance-para-empezar</link><guid isPermaLink="true">https://salesforce-erp.hashnode.dev/como-detectar-en-salesforce-las-aprobaciones-que-se-resuelven-por-whatsapp-consultas-a-processinstance-para-empezar</guid><category><![CDATA[ERP]]></category><category><![CDATA[crm]]></category><category><![CDATA[Salesforce]]></category><category><![CDATA[SOQL]]></category><category><![CDATA[Approval Process]]></category><dc:creator><![CDATA[EGA Futura]]></dc:creator><pubDate>Fri, 13 Nov 2026 17:32:18 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ae7dc589cd2abbaa37e8bdf/2664c7fa-a343-443c-a50b-ad301ae68781.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Una aprobación que supuestamente estaba automatizada y que igual termina en un WhatsApp deja rastros en Salesforce. No el mensaje, claro, pero sí lo que pasa antes y después: un pedido que espera días, una aprobación que se resuelve en un minuto sin comentarios o un descuento que cambia cuando ya estaba aprobado.</p>
<p>El contexto de negocio está en Discover: <a href="https://discover.egafutura.com/por-que-seguimos-pidiendo-los-numeros-en-excel-cuatro-problemas-que-no-arregla-el-software/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=amplify">por qué seguimos pidiendo los números en Excel con CRM, ERP e IA</a>. Acá van las consultas para encontrar esos rastros con datos, antes de hablar con el equipo.</p>
<p>Los objetos son estándar: <code>ProcessInstance</code> (cada vez que un registro entra a un proceso de aprobación), <code>ProcessInstanceStep</code> (cada paso resuelto) y <code>ProcessInstanceWorkitem</code> (lo que está pendiente). Uso <code>Opportunity</code> como ejemplo; si tu circuito aprueba pedidos o cotizaciones, cambiá el objeto.</p>
<h2>1. Qué está pendiente hace más de dos días</h2>
<pre><code class="language-sql">SELECT ProcessInstance.TargetObject.Name, Actor.Name, CreatedDate, ElapsedTimeInHours
FROM ProcessInstanceWorkitem
WHERE CreatedDate &lt; LAST_N_DAYS:2
ORDER BY CreatedDate ASC
</code></pre>
<p>Un pendiente viejo puede querer decir que la persona asignada no es la que decide. Mientras tanto, alguien ya consiguió el OK por otro lado y el registro quedó esperando.</p>
<h2>2. Aprobaciones que se resolvieron en minutos</h2>
<pre><code class="language-sql">SELECT TargetObject.Name, Status, CreatedDate, CompletedDate, ElapsedTimeInMinutes
FROM ProcessInstance
WHERE Status = 'Approved' AND CreatedDate = LAST_N_DAYS:90
</code></pre>
<p>Exportá el resultado y ordená por <code>ElapsedTimeInMinutes</code>. Una aprobación de un minuto no es mala en sí misma. Pero si se repite siempre con el mismo aprobador, es probable que la decisión se haya tomado antes, por otro canal, y que el sistema solo la registre.</p>
<h2>3. Quién aprobó y quién estaba asignado</h2>
<pre><code class="language-sql">SELECT ProcessInstance.TargetObject.Name, StepStatus, Actor.Name, OriginalActor.Name, Comments, CreatedDate
FROM ProcessInstanceStep
WHERE StepStatus IN ('Approved','Rejected') AND CreatedDate = LAST_N_DAYS:90
</code></pre>
<p>SOQL no compara dos campos entre sí, así que filtrá en la planilla las filas donde <code>Actor</code> y <code>OriginalActor</code> son distintos. Ahí están las reasignaciones y las delegaciones. Si son muchas, la regla del sistema no coincide con quién decide en la práctica.</p>
<p>Mirá también la columna <code>Comments</code>. Muchas aprobaciones sin comentario, de alguien que casi nunca entra a Salesforce, suelen ser un OK que llegó por otro lado.</p>
<h2>4. Registros que debían pasar por aprobación y no pasaron</h2>
<pre><code class="language-sql">SELECT Id, Name, Descuento__c, (SELECT Id, Status FROM ProcessInstances)
FROM Opportunity
WHERE Descuento__c &gt; 15 AND CloseDate = LAST_N_DAYS:90
</code></pre>
<p><code>Descuento__c</code> y el 15 son un ejemplo: poné el campo y el umbral de tu regla. Las filas con la subconsulta vacía cumplen la condición y nunca entraron al proceso. O la regla no se aplica, o alguien lo resolvió por fuera.</p>
<h2>5. Descuentos que cambiaron después del OK</h2>
<p>Si el campo tiene historial activado:</p>
<pre><code class="language-sql">SELECT OpportunityId, OldValue, NewValue, CreatedDate, CreatedBy.Name
FROM OpportunityFieldHistory
WHERE Field = 'Descuento__c' AND CreatedDate = LAST_N_DAYS:90
ORDER BY OpportunityId, CreatedDate
</code></pre>
<p>Cruzalo con <code>CompletedDate</code> de la consulta 2. Un cambio de descuento posterior a la aprobación es justo el caso que el circuito debía evitar.</p>
<h2>Qué hacer con los resultados</h2>
<p>Las consultas no dicen por qué. Dicen a quién preguntarle:</p>
<table>
<thead>
<tr>
<th>Señal</th>
<th>Pregunta para la charla</th>
</tr>
</thead>
<tbody><tr>
<td>Pendiente de más de dos días</td>
<td>Quién lo resolvió mientras tanto?</td>
</tr>
<tr>
<td>Aprobación de un minuto, sin comentario</td>
<td>Dónde se decidió esto?</td>
</tr>
<tr>
<td>Aprobador distinto del asignado</td>
<td>La regla del sistema sigue siendo la correcta?</td>
</tr>
<tr>
<td>Registro que no pasó por aprobación</td>
<td>La regla se cumple o hay excepciones de palabra?</td>
</tr>
<tr>
<td>Descuento cambiado después del OK</td>
<td>Quién lo autorizó y por qué no volvió a aprobación?</td>
</tr>
</tbody></table>
<p>Para el diseño del circuito, con la prueba del aprobador de vacaciones, está <a href="https://discover.egafutura.com/quien-aprueba-un-descuento-cuando-el-gerente-esta-de-vacaciones-la-prueba-para-tu-circuito-de-aprobacion-en-salesforce/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=amplify">quién aprueba un descuento cuando el gerente está de vacaciones</a>.</p>
<p>Si el ERP vive en la misma org, como <a href="https://www.egafutura.com/erp/erp-para-salesforce?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=amplify">EGA Futura ERP</a>, estas consultas cubren también aprobaciones de pedidos, compras o notas de crédito, porque están en la misma base. Y antes de poner un agente de IA a aprobar, estas cinco señales te dicen si el circuito que va a seguir es el real.</p>
<hr />
<p><em>Juan Manuel Garrido, EGA Futura (ERP nativo en Salesforce).</em></p>
]]></content:encoded></item><item><title><![CDATA[Cómo medir si el equipo usa el ERP en Salesforce antes de culpar al usuario: cinco consultas para empezar]]></title><description><![CDATA[Consultas SOQL y de Tooling API para encontrar campos que nadie completa, usuarios que no entran, pedidos cargados por pocos y datos duplicados que…]]></description><link>https://salesforce-erp.hashnode.dev/c-mo-medir-si-el-equipo-usa-el-erp-en-salesforce-antes-de-culpar-al-usuario-cinco-consultas-para-empezar</link><guid isPermaLink="true">https://salesforce-erp.hashnode.dev/c-mo-medir-si-el-equipo-usa-el-erp-en-salesforce-antes-de-culpar-al-usuario-cinco-consultas-para-empezar</guid><category><![CDATA[ERP]]></category><category><![CDATA[crm]]></category><category><![CDATA[SOQL]]></category><category><![CDATA[data analysis]]></category><category><![CDATA[Salesforce]]></category><dc:creator><![CDATA[EGA Futura]]></dc:creator><pubDate>Thu, 12 Nov 2026 19:43:51 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ae7dc589cd2abbaa37e8bdf/f78d5a36-b72b-4f5a-95a4-eb19953a1cfd.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Cuando después de una implementación el equipo vuelve al Excel, la discusión suele quedarse en opiniones: "no lo quieren usar", "el sistema es complicado". En Discover conté <a href="https://discover.egafutura.com/equipo-sigue-en-excel-despues-de-implementar-erp-crm/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=amplify">por qué el equipo sigue en Excel después de implementar un ERP o un CRM</a>. Acá van cinco consultas para tener datos antes de sentarte a hablar con la gente.</p>
<p>Son puntos de partida. Los nombres de objetos son estándar de Salesforce; si tu ERP guarda pedidos o facturas en objetos propios, cambiá <code>Order</code> por el objeto que corresponda.</p>
<h2>1. Quién entra y quién no</h2>
<pre><code class="language-sql">SELECT Name, Profile.Name, LastLoginDate
FROM User
WHERE IsActive = true
AND (LastLoginDate &lt; LAST_N_DAYS:14 OR LastLoginDate = null)
ORDER BY LastLoginDate ASC NULLS FIRST
</code></pre>
<p>Un usuario activo que no entra hace dos semanas está trabajando en otro lado. No es una acusación: es la primera persona con la que conviene hablar.</p>
<h2>2. Quién carga los pedidos</h2>
<pre><code class="language-sql">SELECT CreatedBy.Name, COUNT(Id) pedidos
FROM Order
WHERE CreatedDate = LAST_N_DAYS:30
GROUP BY CreatedBy.Name
ORDER BY COUNT(Id) DESC
</code></pre>
<p>Si diez vendedores venden y dos personas cargan casi todos los pedidos, hay una planilla en el medio. Alguien junta lo que le mandan y lo pasa al sistema.</p>
<h2>3. Qué campos nadie completa</h2>
<p><code>COUNT(campo)</code> cuenta solo los registros donde el campo tiene valor, así que comparar contra <code>COUNT(Id)</code> da el porcentaje de llenado:</p>
<pre><code class="language-sql">SELECT COUNT(Id) total, COUNT(PoNumber) con_oc, COUNT(Campo_Personalizado__c) con_campo
FROM Order
WHERE CreatedDate = LAST_N_DAYS:90
</code></pre>
<p><code>Campo_Personalizado__c</code> es un ejemplo: reemplázalo por los campos que el vendedor ve al cargar. No todos los tipos de campo admiten <code>COUNT(campo)</code> (por ejemplo, áreas de texto largo); para esos, usá un reporte con filtro "no está vacío". Un campo obligatorio con llenado del 100% no dice nada; un campo opcional casi vacío que alguien pidió "ya que estamos" es candidato a salir del layout.</p>
<h2>4. Qué personalizaciones hay en el objeto</h2>
<p>Con Tooling API (por ejemplo desde Developer Console, tildando "Use Tooling API"):</p>
<pre><code class="language-sql">SELECT DeveloperName, CreatedDate, LastModifiedDate
FROM CustomField
WHERE TableEnumOrId = 'Order'
ORDER BY CreatedDate
</code></pre>
<p>Cruza esta lista con la consulta 3. Los campos creados para copiar el sistema anterior y que casi nadie completa son los que más pesan cuando hay que cambiar algo.</p>
<h2>5. Qué quedó duplicado de la migración</h2>
<pre><code class="language-sql">SELECT Name, COUNT(Id) cantidad
FROM Account
GROUP BY Name
HAVING COUNT(Id) &gt; 1
ORDER BY COUNT(Id) DESC
</code></pre>
<p>Es una búsqueda gruesa: dos cuentas pueden llamarse igual y ser distintas, y dos duplicados pueden tener nombres apenas diferentes. Para lo segundo están las Matching Rules y Duplicate Rules de Salesforce. Pero como primera foto alcanza para ver si "lo limpiamos después" sigue pendiente.</p>
<h2>Qué hacer con los resultados</h2>
<p>Las consultas no reemplazan la charla con el equipo. La ordenan:</p>
<table>
<thead>
<tr>
<th>Señal</th>
<th>Pregunta para la charla</th>
</tr>
</thead>
<tbody><tr>
<td>Usuario que no entra</td>
<td>Dónde estás cargando lo que antes cargabas acá?</td>
</tr>
<tr>
<td>Pocos cargan muchos pedidos</td>
<td>Cómo te llegan los pedidos que cargás?</td>
</tr>
<tr>
<td>Campo casi vacío</td>
<td>Sabés para qué está este campo?</td>
</tr>
<tr>
<td>Campos que copian el sistema anterior</td>
<td>Lo seguís necesitando o era costumbre?</td>
</tr>
<tr>
<td>Cuentas duplicadas</td>
<td>Con cuál de las dos trabajás?</td>
</tr>
</tbody></table>
<p>Si tu ERP es nativo de Salesforce, como <a href="https://www.egafutura.com/erp/erp-para-salesforce?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=amplify">EGA Futura ERP</a>, estas consultas cubren también pedidos, facturas y cobranzas, porque viven en la misma base que el CRM. Si el ERP está afuera, vas a necesitar repetirlas en cada sistema, y esa diferencia ya es un dato.</p>
<hr />
<p><em>Juan Manuel Garrido, fundador de EGA Futura.</em></p>
]]></content:encoded></item><item><title><![CDATA[Cómo inventariar las planillas puente entre Salesforce y el ERP antes de sumar agentes de IA]]></title><description><![CDATA[Una plantilla para listar cada dato que viaja entre sistemas, ubicar dónde nace y clasificar qué se elimina con una base única, qué puede tomar un agente y…]]></description><link>https://salesforce-erp.hashnode.dev/como-inventariar-planillas-puente-salesforce-erp-agentes-ia</link><guid isPermaLink="true">https://salesforce-erp.hashnode.dev/como-inventariar-planillas-puente-salesforce-erp-agentes-ia</guid><category><![CDATA[ERP]]></category><category><![CDATA[Salesforce]]></category><category><![CDATA[crm]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[data]]></category><dc:creator><![CDATA[EGA Futura]]></dc:creator><pubDate>Wed, 11 Nov 2026 17:36:06 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ae7dc589cd2abbaa37e8bdf/ba69296a-96e0-4791-9195-113a9ec9d90c.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Cuando Salesforce dice 100, el ERP dice 80 y el Excel dice 120, el problema rara vez es un dato mal cargado. Es que cada sistema registra un momento distinto de la misma operación y alguien los une a mano. En Discover conté <a href="https://discover.egafutura.com/salesforce-erp-excel-tres-numeros-dia-de-un-jefe/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=amplify">por qué el día de un jefe se va en conciliar números</a>. Esta nota es la parte técnica: cómo hacer el inventario de esas uniones manuales antes de poner un agente de IA encima.</p>
<h2>1. Qué es una planilla puente</h2>
<p>Una planilla puente es cualquier archivo, mensaje o carga manual que existe solo para mover un dato de un sistema a otro. Las más comunes:</p>
<ul>
<li>El Excel que cruza oportunidades ganadas con facturas emitidas.</li>
<li>El pedido que llega por WhatsApp y alguien carga en el CRM y después en el ERP.</li>
<li>La factura de proveedor que alguien tipea a partir de un PDF.</li>
<li>El reporte que se arma antes de una reunión porque ningún sistema tiene el número completo.</li>
</ul>
<p>Si no las listas, un agente de IA va a terminar leyendo las mismas fuentes que no coinciden.</p>
<h2>2. Una fila por cada dato que viaja</h2>
<p>Recorre con cada área una semana normal y completa una fila por cada dato que pasa de un lugar a otro:</p>
<table>
<thead>
<tr>
<th>Dato</th>
<th>Dónde nace</th>
<th>Dónde se usa</th>
<th>Cómo viaja hoy</th>
<th>Quién lo mueve</th>
<th>Frecuencia</th>
<th>Clave para cruzar</th>
</tr>
</thead>
<tbody><tr>
<td>Pedido de cliente</td>
<td>WhatsApp</td>
<td>CRM y ERP</td>
<td>Carga manual dos veces</td>
<td>Vendedor</td>
<td>Diaria</td>
<td>Número de pedido</td>
</tr>
<tr>
<td>Venta del mes</td>
<td>CRM</td>
<td>Reunión de dirección</td>
<td>Excel puente</td>
<td>Jefe comercial</td>
<td>Semanal</td>
<td>Cliente + mes</td>
</tr>
<tr>
<td>Factura emitida</td>
<td>ERP</td>
<td>Reporte de ventas</td>
<td>Exportación a Excel</td>
<td>Administración</td>
<td>Semanal</td>
<td>Número de factura</td>
</tr>
<tr>
<td>Factura de proveedor</td>
<td>Mail en PDF</td>
<td>ERP</td>
<td>Tipeo manual</td>
<td>Administración</td>
<td>Diaria</td>
<td>CUIT + número</td>
</tr>
</tbody></table>
<p>Los valores son un ejemplo de formato, no un caso real. Las columnas que más dicen son "Cómo viaja hoy" y "Clave para cruzar": si no hay clave común, la conciliación depende del criterio de una persona.</p>
<h2>3. Definir qué significa cada número</h2>
<p>Buena parte de la reunión de los cuatro números es un problema de definición. "Vendido" puede querer decir cosas distintas en Salesforce:</p>
<pre><code class="language-sql">-- Vendido como oportunidad ganada en el mes
SELECT SUM(Amount) FROM Opportunity
WHERE IsWon = true AND CloseDate = THIS_MONTH

-- Vendido como pedido activado en el mes
SELECT SUM(TotalAmount) FROM Order
WHERE Status = 'Activated' AND EffectiveDate = THIS_MONTH
</code></pre>
<p>Las dos consultas son válidas y pueden dar números distintos el mismo día. Y "facturado" vive en otro lado, en el ERP. Antes de automatizar, cada área tiene que acordar qué consulta responde la pregunta de dirección.</p>
<h2>4. Clasificar cada fila en tres grupos</h2>
<p>Con el inventario completo, cada fila cae en uno de estos grupos:</p>
<ol>
<li><strong>Desaparece con una base única.</strong> Si ventas, facturación y stock comparten la misma base de datos que el CRM, el Excel que cruza oportunidades con facturas deja de hacer falta. Es el caso de un ERP nativo de Salesforce como <a href="https://www.egafutura.com/erp/erp-para-salesforce?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=amplify">EGA Futura ERP</a>.</li>
<li><strong>Lo puede tomar un agente de IA.</strong> Entradas que hoy alguien tipea: pedidos por WhatsApp, facturas u órdenes de compra en PDF, preguntas sobre los datos que terminan en otro Excel.</li>
<li><strong>Necesita una decisión de negocio.</strong> Cuál es la definición oficial de "vendido", quién es dueño de cada dato, qué área corrige un error. Ningún agente resuelve esto configurando nada.</li>
</ol>
<p>El orden importa. Si pones un agente sobre filas del grupo 3 sin resolverlas, automatizás la discusión.</p>
<h2>5. Qué mirar después</h2>
<p>Con el inventario hecho, revisa tres señales cada mes:</p>
<ul>
<li>Cuántas filas siguen viajando por Excel o carga doble.</li>
<li>Cuántas preguntas de dirección se contestan con una consulta y no con una planilla.</li>
<li>Cuánto tiempo pasa entre que entra un pedido y aparece registrado en el sistema.</li>
</ul>
<p>Si las tres mejoran, el agente está trabajando sobre algo firme.</p>
<hr />
<p><em>Juan Manuel Garrido, fundador de EGA Futura y cofundador de Vantegrate.</em></p>
]]></content:encoded></item><item><title><![CDATA[Cómo mapear una venta del pedido al cobro en Salesforce antes de presupuestar una implementación]]></title><description><![CDATA[Una plantilla para recorrer una operación real, ubicar cada paso en objetos de Salesforce y separar estándar, configuración, desarrollo y decisiones de…]]></description><link>https://salesforce-erp.hashnode.dev/c-mo-mapear-una-venta-del-pedido-al-cobro-en-salesforce-antes-de-presupuestar-una-implementaci-n</link><guid isPermaLink="true">https://salesforce-erp.hashnode.dev/c-mo-mapear-una-venta-del-pedido-al-cobro-en-salesforce-antes-de-presupuestar-una-implementaci-n</guid><category><![CDATA[Salesforce]]></category><category><![CDATA[ERP]]></category><category><![CDATA[project management]]></category><category><![CDATA[crm]]></category><category><![CDATA[Business process]]></category><dc:creator><![CDATA[EGA Futura]]></dc:creator><pubDate>Tue, 10 Nov 2026 19:03:12 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ae7dc589cd2abbaa37e8bdf/5405678b-eeb9-4f89-9090-b838cf3f3a58.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Un ERP o un Salesforce puede salir en fecha y dejar a Administración facturando en Excel el lunes siguiente. Casi siempre, la causa está antes del proyecto: nadie recorrió una operación real completa antes de presupuestar. En Discover conté <a href="https://discover.egafutura.com/implementacion-erp-sale-en-fecha-administracion-sigue-en-excel/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=amplify">por qué una implementación puede salir en fecha y fallar igual</a>. Esta nota es la parte técnica: cómo documentar ese recorrido, ubicarlo en objetos de Salesforce y clasificar cada brecha antes de que se convierta en un adicional.</p>
<h2>1. Elegir la operación correcta</h2>
<p>No sirve el caso ideal. Elige una venta reciente que haya tenido al menos una excepción: entrega parcial, descuento fuera de lista, nota de crédito o cobro en varias partes. Las excepciones son las que después aparecen como "eso no estaba contemplado".</p>
<h2>2. Registrar cada paso con la misma plantilla</h2>
<p>Recorre la venta con quien la hizo y completa una fila por paso:</p>
<table>
<thead>
<tr>
<th>Paso</th>
<th>Quién lo hace</th>
<th>Dónde queda hoy</th>
<th>Excepciones</th>
<th>Quién aprueba</th>
<th>Fuera del sistema</th>
</tr>
</thead>
<tbody><tr>
<td>Pedido</td>
<td>Vendedor</td>
<td>Mail del cliente + planilla</td>
<td>Precio especial</td>
<td>Gerente comercial</td>
<td>Aprobación por WhatsApp</td>
</tr>
<tr>
<td>Entrega</td>
<td>Depósito</td>
<td>Sistema de stock</td>
<td>Entrega en dos partes</td>
<td>Jefe de depósito</td>
<td>Remito en papel</td>
</tr>
<tr>
<td>Factura</td>
<td>Administración</td>
<td>Sistema contable</td>
<td>Factura parcial</td>
<td>Nadie</td>
<td>Excel de control</td>
</tr>
<tr>
<td>Nota de crédito</td>
<td>Administración</td>
<td>Sistema contable</td>
<td>Devolución parcial</td>
<td>Finanzas</td>
<td>Mail</td>
</tr>
<tr>
<td>Cobro</td>
<td>Tesorería</td>
<td>Banco + planilla</td>
<td>Pago en cuotas</td>
<td>Nadie</td>
<td>Excel de imputación</td>
</tr>
</tbody></table>
<p>Los valores de la tabla son un ejemplo de formato, no un caso real. Lo que importa son las dos últimas columnas: ahí está el trabajo que nadie presupuesta.</p>
<h2>3. Ubicar cada paso en Salesforce</h2>
<p>Con la tabla completa, cada paso se puede ubicar en el modelo de datos:</p>
<ul>
<li><strong>Cliente y contactos:</strong> Account y Contact.</li>
<li><strong>Oportunidad y cotización:</strong> Opportunity, y Quote con sus Quote Line Items si la empresa cotiza formalmente. Quotes se habilita en Setup.</li>
<li><strong>Pedido:</strong> Order y Order Product. Orders también se habilita en Setup, y conviene definir qué estados de Order usa la empresa y quién puede activar un pedido.</li>
<li><strong>Precios:</strong> Price Book y Price Book Entry. Si hay listas por cliente o canal, se ve acá.</li>
<li><strong>Aprobaciones:</strong> Approval Processes o aprobaciones construidas con Flow. Toda aprobación que hoy vive en WhatsApp tiene que tener un criterio escrito (monto, porcentaje, rol) y un suplente para cuando el aprobador no está.</li>
<li><strong>Entrega, factura, nota de crédito y cobro:</strong> Sales Cloud no trae objetos estándar para facturación, notas de crédito ni cobranzas. Esa parte la cubre una aplicación nativa (un ERP sobre Salesforce, como el de EGA Futura), otro producto de Salesforce o una integración con el sistema contable. Esa decisión cambia el presupuesto y conviene tomarla antes de firmar.</li>
</ul>
<h2>4. Clasificar cada brecha</h2>
<p>Cada cosa que no entra limpia en el mapa va a una de cuatro categorías:</p>
<ol>
<li><strong>Estándar:</strong> lo resuelve la plataforma o la aplicación tal como viene.</li>
<li><strong>Configuración:</strong> campos, listas de valores, reglas de validación, Flows declarativos, permisos.</li>
<li><strong>Desarrollo:</strong> Apex, componentes Lightning, integraciones. Necesita estimación propia.</li>
<li><strong>Decisión de negocio:</strong> nadie definió la regla. Ejemplo: quién autoriza una nota de crédito por encima de cierto monto. No se presupuesta como horas de consultoría; se resuelve en una reunión con alguien que tenga autoridad.</li>
</ol>
<p>La cuarta categoría es la que más pesa. Si se mezcla con las otras tres, termina como adicional, como fecha que se corre o como planilla que sobrevive a la salida en producción.</p>
<h2>5. Revisar las planillas una por una</h2>
<p>Por cada Excel que aparezca en la columna "Fuera del sistema", anota qué calcula, de dónde saca los datos y quién lo usa para decidir. Muchas veces se convierte en un campo fórmula, un roll-up o un informe. Otras veces esconde una regla de negocio que nadie había escrito. En los dos casos, tiene que estar en el alcance.</p>
<h2>6. Con qué salir de la reunión</h2>
<ul>
<li>La tabla del recorrido, validada por quienes hacen el trabajo.</li>
<li>El mapa de pasos a objetos y aplicaciones.</li>
<li>La lista de brechas clasificada en las cuatro categorías.</li>
<li>Las decisiones de negocio pendientes, cada una con un responsable.</li>
</ul>
<p>Con eso se puede hablar de alcance, equipo, presupuesto y fechas con criterio. Y unas semanas después de salir en producción, la misma tabla sirve para comprobar si la columna "Fuera del sistema" quedó vacía.</p>
<p>Juan Manuel Garrido</p>
]]></content:encoded></item><item><title><![CDATA[Qué se ejecuta en Salesforce cuando un agente de IA actualiza un registro]]></title><description><![CDATA[Validation Rules, Flows, triggers y límites de transacción, y cómo darle al agente una acción de Apex que simule antes de escribir]]></description><link>https://salesforce-erp.hashnode.dev/qu-se-ejecuta-en-salesforce-cuando-un-agente-de-ia-actualiza-un-registro</link><guid isPermaLink="true">https://salesforce-erp.hashnode.dev/qu-se-ejecuta-en-salesforce-cuando-un-agente-de-ia-actualiza-un-registro</guid><category><![CDATA[Salesforce]]></category><category><![CDATA[Apex]]></category><category><![CDATA[AI]]></category><category><![CDATA[ai agents]]></category><category><![CDATA[Artificial Intelligence]]></category><dc:creator><![CDATA[EGA Futura]]></dc:creator><pubDate>Mon, 09 Nov 2026 13:49:23 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ae7dc589cd2abbaa37e8bdf/34f570d6-4008-4643-bfbd-9e9057bcfe40.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Un agente de IA puede ser, simplificando mucho, un LLM dentro de un bucle while: recibe una instrucción, decide qué hacer, llama a una herramienta, mira el resultado y vuelve a empezar. En una demo eso alcanza. Cuando la herramienta escribe en Salesforce, el agente entra en el mismo circuito de guardado que cualquier usuario o integración, con todo lo que ya vive en la org.</p>
<p>Esta nota es la parte técnica de algo que planteé en Discover: <a href="https://discover.egafutura.com/agente-de-ia-en-salesforce-de-la-demo-a-la-empresa/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=amplify">por qué un agente de IA que se arma en 20 minutos tarda meses en funcionar dentro de Salesforce</a>. Acá me concentro en qué pasa cuando el agente hace un update y en cómo diseñar la herramienta para que no escriba a ciegas.</p>
<h2>El agente no se salta el orden de ejecución</h2>
<p>Para Salesforce, un update que llega desde un agente es un update más. Pasa por el <a href="https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_triggers_order_of_execution.htm">orden de ejecución de triggers y automatizaciones</a>. Resumido:</p>
<ol>
<li>Se cargan los valores y corren las validaciones de sistema.</li>
<li>Corren los Flows before-save (record-triggered, rápidos, sin DML).</li>
<li>Corren los triggers before de Apex.</li>
<li>Corren las Validation Rules custom y las reglas de duplicados.</li>
<li>Se guarda el registro, todavía sin commit.</li>
<li>Corren los triggers after.</li>
<li>Corren assignment rules, auto-response y Workflow Rules. Si una Workflow Rule actualiza un campo, los triggers before y after de update se ejecutan una vez más.</li>
<li>Corren procesos de Process Builder y Flows after-save.</li>
<li>Se recalculan roll-up summaries y sharing, y recién ahí se hace commit.</li>
<li>Después del commit salen mails y lógica asíncrona.</li>
</ol>
<p>Un registro con 4 Validation Rules, 3 Flows y un trigger de Apex que nadie se anima a tocar no es raro. Cada paso puede rechazar el cambio, modificar otros campos o crear registros nuevos. El agente no ve nada de esto. Solo recibe un éxito o un mensaje de error.</p>
<h2>Qué cambia cuando son 500 registros</h2>
<p>Si le pides al agente actualizar los precios de 500 productos, aparecen cosas que en la demo no existen:</p>
<ul>
<li>Los triggers procesan registros en bloques de hasta 200. Un trigger que no está bulkificado puede chocar con los límites de transacción, como las 100 consultas SOQL sincrónicas o las 150 sentencias DML.</li>
<li>Con allOrNone en true, un solo registro rechazado tira abajo el lote entero. Con false, el lote queda a medias y alguien tiene que saber cuáles pasaron.</li>
<li>Una Validation Rule puede rechazar algunos registros y otros no, según sus datos.</li>
<li>Un Flow after-save puede disparar cambios en objetos relacionados que el agente nunca pidió.</li>
</ul>
<p>Y lo peor no es técnico. El agente puede hacer exactamente lo que le pediste, pero si nadie contempló que esos precios estaban asociados a contratos vigentes, la org queda consistente y el negocio queda mal.</p>
<h2>Darle al agente una acción, no acceso libre al DML</h2>
<p>La alternativa a "el agente actualiza lo que quiera" es exponerle una acción acotada. En Salesforce eso puede ser un Flow autolanzado o un método de Apex con @InvocableMethod, que después se registra como acción del agente. La lógica de negocio queda en código revisado y probado, y el modelo solo decide cuándo llamarla.</p>
<p>Este ejemplo simula por defecto y solo escribe cuando se pide de forma explícita. Corre en modo usuario para respetar permisos de objeto y de campo, y devuelve el resultado de cada registro en el mismo orden en que llegó:</p>
<pre><code class="language-apex">public with sharing class ActualizarPreciosAccion {

    public class Solicitud {
        @InvocableVariable(required=true label='PricebookEntry Id')
        public Id pricebookEntryId;
        @InvocableVariable(required=true label='Nuevo precio')
        public Decimal nuevoPrecio;
        @InvocableVariable(label='Aplicar cambio (false = solo simular)')
        public Boolean aplicar;
    }

    public class Resultado {
        @InvocableVariable public Id pricebookEntryId;
        @InvocableVariable public String estado;
        @InvocableVariable public String mensaje;
    }

    @InvocableMethod(label='Actualizar precios con control'
        description='Simula o aplica cambios de precio y devuelve el estado de cada registro')
    public static List&lt;Resultado&gt; ejecutar(List&lt;Solicitud&gt; solicitudes) {
        List&lt;Resultado&gt; resultados = new List&lt;Resultado&gt;();
        List&lt;PricebookEntry&gt; aActualizar = new List&lt;PricebookEntry&gt;();
        List&lt;Integer&gt; posiciones = new List&lt;Integer&gt;();

        for (Integer i = 0; i &lt; solicitudes.size(); i++) {
            Solicitud s = solicitudes[i];
            Resultado r = new Resultado();
            r.pricebookEntryId = s.pricebookEntryId;
            r.estado = 'SIMULADO';
            r.mensaje = 'Precio propuesto: ' + s.nuevoPrecio;
            resultados.add(r);

            if (s.aplicar == true) {
                aActualizar.add(new PricebookEntry(
                    Id = s.pricebookEntryId,
                    UnitPrice = s.nuevoPrecio
                ));
                posiciones.add(i);
            }
        }

        if (!aActualizar.isEmpty()) {
            Database.SaveResult[] srs =
                Database.update(aActualizar, false, AccessLevel.USER_MODE);
            for (Integer j = 0; j &lt; srs.size(); j++) {
                Resultado r = resultados[posiciones[j]];
                if (srs[j].isSuccess()) {
                    r.estado = 'ACTUALIZADO';
                    r.mensaje = null;
                } else {
                    r.estado = 'RECHAZADO';
                    r.mensaje = srs[j].getErrors()[0].getMessage();
                }
            }
        }
        return resultados;
    }
}
</code></pre>
<p>Algunas decisiones de diseño:</p>
<ul>
<li><strong>Simular por defecto.</strong> Si el campo aplicar viene vacío, no se escribe nada. El agente primero muestra qué cambiaría y una persona o una regla confirma.</li>
<li><strong>allOrNone en false con resultado por registro.</strong> El agente puede informar qué pasó y qué quedó rechazado, con el mensaje real de la Validation Rule, en vez de reintentar a ciegas.</li>
<li><strong>USER_MODE.</strong> La acción corre con los permisos del usuario que la ejecuta, no con permisos de sistema.</li>
<li><strong>Las reglas del negocio van adentro.</strong> Si hay que frenar cuando un producto está atado a un contrato vigente, ese chequeo se escribe en la acción según cómo lo modela tu org, no se le pide al modelo que lo deduzca.</li>
</ul>
<h2>Antes de registrar la acción en el agente</h2>
<ul>
<li>Revisa qué Flows, triggers y Validation Rules tiene cada objeto que la acción toca.</li>
<li>Prueba la acción con lotes de más de 200 registros en un sandbox con datos parecidos a producción.</li>
<li>Define con qué usuario corre el agente y qué puede ver y editar.</li>
<li>Decide quién aprueba las excepciones. Si no hay respuesta, la acción no debería existir todavía.</li>
<li>Deja fuera del agente lo que una regla resuelve sola. Si la decisión cabe en un if, Flow o Apex la resuelven más rápido, con menos costo y de forma predecible.</li>
</ul>
<p>El motor del agente puede ser un bucle while. Lo que hace que funcione en una empresa es todo lo que rodea a ese bucle.</p>
<hr />
<p>Juan Manuel Garrido, fundador de EGA Futura y cofundador de Vantegrate. La mirada de negocio sobre este tema está en Discover: <a href="https://discover.egafutura.com/agente-de-ia-en-salesforce-de-la-demo-a-la-empresa/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=amplify">qué resolver antes de dejar un agente trabajando en tu empresa</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Checklist técnica antes del kickoff de un ERP o CRM en Salesforce]]></title><description><![CDATA[Qué definir antes de configurar un ERP o CRM: responsables de procesos, dependencias, datos maestros y pruebas de punta a punta.]]></description><link>https://salesforce-erp.hashnode.dev/checklist-t-cnica-antes-del-kickoff-de-un-erp-o-crm-en-salesforce</link><guid isPermaLink="true">https://salesforce-erp.hashnode.dev/checklist-t-cnica-antes-del-kickoff-de-un-erp-o-crm-en-salesforce</guid><dc:creator><![CDATA[EGA Futura]]></dc:creator><pubDate>Mon, 09 Nov 2026 02:01:32 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ae7dc589cd2abbaa37e8bdf/c30a4d11-9589-494b-ac5e-66bbd280b966.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Por Juan Manuel Garrido</strong></p>
<p>Cuando una implementación de ERP o CRM se cae, la primera explicación suele ser “el sistema”. En la práctica, lo que falta casi siempre es gobernanza de proceso antes de tocar configuración. Aplica a Salesforce, Oracle o Microsoft.</p>
<h2>Inventario mínimo antes de configurar</h2>
<ol>
<li><strong>Dueño nombrado por workflow crítico</strong> (ventas, stock, facturación, compras, cobranzas), con tiempo real en el proyecto, no solo en el comité de status.</li>
<li><strong>Mapa de dependencias</strong> entre objetos y procesos: qué dispara qué, y qué dato maestro alimenta cada paso.</li>
<li><strong>Modelo de datos acordado</strong> antes de la primera pantalla: claves, estados, excepciones, quién escribe cada campo.</li>
<li><strong>Estrategia de testing punta a punta</strong>, no solo UAT de pantallas sueltas.</li>
<li><strong>Plan de capacitación</strong> antes del go-live, no después del incendio.</li>
</ol>
<p>Sin eso, la configuración se hace a las apuradas, las excepciones se esconden y los change requests se vuelven el plan.</p>
<h2>Señales tempranas de que el proyecto ya viene torcido</h2>
<ul>
<li>Estados en verde sin descubrimiento documentado.</li>
<li>Requerimientos vagos (“que haga lo mismo que hoy”).</li>
<li>Datos maestros tratados como tarea de última semana.</li>
<li>El implementador pide acelerar mientras nadie puede explicar el proceso punta a punta.</li>
</ul>
<h2>Por qué el software “falla” en el go-live</h2>
<p>Facturas que no cierran, stock inconsistente, pedidos trabados y finanzas que no cierra el mes no son misterios de plataforma. Son el resultado de procesos sin dueño y datos sin gobierno. El ERP o el CRM dejan en evidencia lo que ya estaba roto.</p>
<p>Si tu stack es Salesforce, un ERP nativo evita una capa extra de sincronización, pero no reemplaza el trabajo de descubrimiento. La herramienta no arregla un proceso que nadie lidera.</p>
<h2>Qué documentar en la primera semana</h2>
<ul>
<li>Lista de workflows críticos con dueño y backup.</li>
<li>Diagrama simple de dependencias (aunque sea en una pizarra).</li>
<li>Definición de “dato maestro limpio” para clientes, productos y precios.</li>
<li>Casos de prueba de punta a punta con resultado esperado.</li>
<li>Criterio de go/no-go que no sea “la demo salió linda”.</li>
</ul>
<p>Lectura ampliada en <a href="https://discover.egafutura.com/erp-espejo-liderazgo-del-proyecto/">EGA Futura Discover</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Salesforce Flow: separar el alta de un contacto de una solicitud comercial]]></title><description><![CDATA[Crear un contacto no debería disparar una tarea comercial por accidente. Vamos a separar el alta de la solicitud de seguimiento en Salesforce Flow. Esta es…]]></description><link>https://salesforce-erp.hashnode.dev/salesforce-flow-separar-el-alta-de-un-contacto-de-una-solicitud-comercial</link><guid isPermaLink="true">https://salesforce-erp.hashnode.dev/salesforce-flow-separar-el-alta-de-un-contacto-de-una-solicitud-comercial</guid><dc:creator><![CDATA[EGA Futura]]></dc:creator><pubDate>Sat, 07 Nov 2026 18:44:30 GMT</pubDate><content:encoded><![CDATA[<p>Crear un contacto no debería disparar una tarea comercial por accidente. Vamos a separar el alta de la solicitud de seguimiento en Salesforce Flow.</p>
<p>Esta es una propuesta técnica hipotética, todavía no un tutorial ejecutado en una organización. El campo que aparece abajo es personalizado. El diseño necesita pruebas en sandbox y revisión de las automatizaciones que ya tenga tu entorno.</p>
<p>El origen de la idea es una frase que escribí sobre relaciones profesionales: “pero las relaciones humanas no funcionan como un CRM.” La bajada técnica que propongo es acotada: registrar una persona no alcanza para inferir que pidió una propuesta.</p>
<h2>Antes de abrir Flow Builder</h2>
<p>Definí qué hecho habilita el seguimiento. En este ejemplo es una solicitud comercial explícita. Una conversación agradable no cuenta como sustituto. El equipo tiene que acordar cómo registra el pedido y quién está autorizado a hacerlo.</p>
<p>No uses este campo como consentimiento legal para marketing. Tampoco guardes detalles personales que no sean necesarios para el propósito del registro. El modelo no pretende describir la relación completa; representa una señal operativa.</p>
<p>Revisá las rutas que hoy crean tareas para Contact. Si ya hay otra automatización que actúa al guardar, este nuevo Flow no la desactiva. El comportamiento que ve el usuario será el de todas las rutas que lleguen a ejecutarse.</p>
<h2>Campo propuesto y disparador</h2>
<p>En Contact, la propuesta usa un checkbox con API name <code>Solicita_seguimiento_comercial__c</code>. Su valor inicial es falso. No es un campo estándar de Salesforce y no hay que asumir que existe en tu organización.</p>
<p>En una sandbox, creá el campo según tus convenciones de administración y asigná acceso únicamente a quienes corresponda. Comprobá que la interfaz permita registrar la solicitud sin inducir a marcarla por defecto. La etiqueta visible puede explicar el sentido del dato sin exponer el API name a quien trabaja con el contacto.</p>
<p>Luego creá un Record-Triggered Flow sobre Contact. La variante descrita escucha creación o actualización. Así permite tratar un pedido registrado durante el alta y otro que llegue después. Si tu proceso solo acepta solicitudes posteriores, cambiá el alcance y documentá esa diferencia antes de probar.</p>
<p>La condición de entrada es:</p>
<pre><code class="language-text">Object: Contact
Trigger: created or updated
Entry condition:
  Solicita_seguimiento_comercial__c Equals True
Updated records:
  Only when a record is updated to meet the condition requirements
Run: after save, optimized for actions and related records
</code></pre>
<p>Es una descripción de la configuración propuesta, no un archivo importable. Los rótulos de la interfaz pueden depender del idioma de tu entorno.</p>
<p>El ajuste sobre actualizaciones importa. Si se ejecuta cada vez que un registro cumple la condición, cambiar un dato ajeno a la solicitud podría volver a crear la tarea. Queremos reaccionar a la entrada en la condición, no a cualquier guardado mientras el checkbox siga verdadero.</p>
<p>After-save permite crear el registro relacionado que necesita este caso. No estamos usando una actualización before-save para modificar el mismo Contact. Salesforce explica operaciones con registros en <a href="https://trailhead.salesforce.com/content/learn/modules/data-and-actions-in-flows/work-sf-records-flows">Record Management in Flows</a>.</p>
<h2>Creación de la Task</h2>
<p>Agregá un elemento Create Records para Task. La relación con el contacto se expresa mediante <code>WhoId</code>, con el identificador del Contact que disparó el flujo, por ejemplo <code>$Record.Id</code> en la selección de recursos.</p>
<p>El asunto podría describir la solicitud comercial, sin inventar un compromiso que la persona no hizo. El responsable y el estado tienen que salir de una decisión de tu organización. No copies identificadores de otra sandbox ni valores de listas que tu entorno no use.</p>
<p>Antes de guardar el diseño, revisá los campos requeridos por tu configuración de Task. Puede haber validaciones o reglas de asignación que este esquema no representa. La ruta de error también necesita una decisión operativa: cómo detectar un fallo de creación sin dejarlo pasar inadvertido ni exponer información innecesaria.</p>
<p>Este flujo no manda correos. Crear una tarea interna y contactar a una persona son acciones distintas. Que exista la Task no autoriza a lanzar una campaña ni a ampliar el pedido recibido.</p>
<h2>Pruebas que todavía hay que ejecutar</h2>
<p>Prepará los registros de prueba en sandbox. No se incluyen capturas ni resultados porque este diseño no fue ejecutado como parte de la redacción.</p>
<p>Caso sin solicitud: creá Contact con el checkbox falso. El resultado esperado es que este Flow no cree ninguna Task. Después modificá otro dato manteniendo el campo falso. Tampoco debería crearla.</p>
<p>Caso con pedido posterior: sobre ese contacto, registrá una solicitud y cambiá el checkbox a verdadero. El resultado esperado es una Task vinculada al Contact correcto y asignada según la regla que definiste.</p>
<p>Ahora guardá otra modificación sin tocar el checkbox. El resultado esperado es que no aparezca una segunda Task de este Flow. Esta prueba distingue un disparador por transición de uno que actúa siempre que encuentra verdadero.</p>
<p>Probá además un alta con el checkbox verdadero. En la variante de creación o actualización, se espera una tarea desde ese primer guardado. Si el negocio no quiere admitir ese caso, el disparador necesita otro alcance.</p>
<p>Queda la repetición deliberada: llevá el campo a falso y luego otra vez a verdadero. El diseño básico puede crear otra tarea. Eso no contradice la condición: el registro volvió a entrar en ella. Puede contradecir, en cambio, la expectativa del equipo.</p>
<p>No resuelvas esa expectativa ocultándola. Si debe existir una sola tarea abierta por solicitud, necesitás una comprobación o un modelo que represente cada solicitud por separado. El checkbox no guarda un historial y no ofrece idempotencia global frente a otras automatizaciones.</p>
<h2>Qué valida este diseño</h2>
<p>La <a href="https://architect.salesforce.com/docs/architect/decision-guides/guide/record-triggered">guía de Salesforce Architects sobre automatización disparada por registros</a> sirve como referencia para evaluar criterios de entrada y cambios de estado. No certifica este ejemplo ni reemplaza las pruebas del entorno.</p>
<p>La diferencia entre Lead y Contact tampoco decide quién pidió seguimiento. Trailhead describe al Lead como un posible prospecto en <a href="https://trailhead.salesforce.com/content/learn/modules/leads_opportunities_lightning_experience/create-and-convert-leads-lightning">Track Potential Customers with Leads</a>. No hace falta convertir eso en una regla que impida a un Contact participar de una venta.</p>
<p>Lo que estamos modelando es más concreto: el alta y el pedido son eventos diferentes. Hasta tener la solicitud, el checkbox queda falso. Si la charla terminó sin agenda comercial, la prueba correcta es que no aparezca una tarea de este flujo.</p>
]]></content:encoded></item><item><title><![CDATA[De MS-DOS a agentes de IA: por qué la generación que más se adaptó no debería tener que demostrarlo]]></title><description><![CDATA[Hace poco leí que a los mayores de 40 nos cuesta adaptarnos a las nuevas tecnologías. Soy Juan Manuel Garrido, fundador de EGA Futura y cofundador de…]]></description><link>https://salesforce-erp.hashnode.dev/de-ms-dos-a-agentes-de-ia-por-qu-la-generaci-n-que-m-s-se-adapt-no-deber-a-tener-que-demostrarlo</link><guid isPermaLink="true">https://salesforce-erp.hashnode.dev/de-ms-dos-a-agentes-de-ia-por-qu-la-generaci-n-que-m-s-se-adapt-no-deber-a-tener-que-demostrarlo</guid><dc:creator><![CDATA[EGA Futura]]></dc:creator><pubDate>Fri, 06 Nov 2026 11:33:18 GMT</pubDate><content:encoded><![CDATA[<p>Hace poco leí que a los mayores de 40 nos cuesta adaptarnos a las nuevas tecnologías. Soy Juan Manuel Garrido, fundador de EGA Futura y cofundador de Vantegrate, y esa frase choca de frente con la historia real de cómo aprendimos a trabajar.</p>
<h2>La línea de tiempo que casi nadie recuerda</h2>
<table>
<thead>
<tr>
<th>Momento</th>
<th>Qué tuvimos que aprender</th>
</tr>
</thead>
<tbody><tr>
<td>Pantalla negra / MS-DOS</td>
<td>Comandos, sin mouse, disquetes que fallaban</td>
</tr>
<tr>
<td>Internet dial-up</td>
<td>Esperar el teléfono libre, el chillido del módem, páginas que cargaban de a poco</td>
</tr>
<tr>
<td>Windows y el mail</td>
<td>Mouse, arroba, explicar el correo electrónico</td>
</tr>
<tr>
<td>Celular y smartphone</td>
<td>Del teclado numérico a WhatsApp como canal de trabajo</td>
</tr>
<tr>
<td>Nube</td>
<td>Los servidores de la oficina se mudaron</td>
</tr>
<tr>
<td>2020</td>
<td>Trabajo remoto, videollamadas y equipos a distancia, de un día para otro</td>
</tr>
<tr>
<td>Hoy</td>
<td>Trabajar con IA, empezando de cero igual que alguien de 25</td>
</tr>
</tbody></table>
<p>Cada vez que nos sabíamos un sistema de memoria, aparecía uno nuevo. Nadie nos dio un manual. Lo aprendimos haciendo, preguntando y equivocándonos, muchas veces mientras criábamos hijos y pagábamos cuentas.</p>
<h2>El dato personal</h2>
<p>Fundé mi empresa en 1994 con un software que corría en MS-DOS. Hoy desarrollamos <a href="https://vantegrate.com/agentes-ia">agentes de IA</a> para empresas medianas. En el medio me tuve que reinventar más veces de las que puedo contar.</p>
<p>Somos la generación que más cambios tecnológicos atravesó en su vida laboral. Adaptarnos no es una asignatura pendiente: es lo que venimos haciendo desde el primer día. Si un reclutador todavía usa la edad como proxy de capacidad de aprendizaje, está midiendo mal.</p>
<p>Versión completa en <a href="https://discover.egafutura.com/de-ms-dos-a-agentes-de-ia-por-que-la-generacion-que-mas-se-adapto-no-deberia-tener-que-demostrarlo/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=amplify">EGA Futura Discover</a>. Si querés formarte en la plataforma, damos <a href="https://www.egafutura.com/salesforce">clases de Salesforce en vivo y gratis</a>.</p>
]]></content:encoded></item><item><title><![CDATA[AIforce vs Agentforce: qué es cada uno y cómo cambia el trabajo del developer de Salesforce]]></title><description><![CDATA[Guía práctica a partir de lo que explicó Alba Rivas en Dreamforce 2026: Headless Toolkit, MCP, skills y guardrails]]></description><link>https://salesforce-erp.hashnode.dev/aiforce-vs-agentforce-qu-es-cada-uno-y-c-mo-cambia-el-trabajo-del-developer-de-salesforce</link><guid isPermaLink="true">https://salesforce-erp.hashnode.dev/aiforce-vs-agentforce-qu-es-cada-uno-y-c-mo-cambia-el-trabajo-del-developer-de-salesforce</guid><category><![CDATA[Salesforce]]></category><category><![CDATA[mcp]]></category><category><![CDATA[Agentforce]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[Developer]]></category><dc:creator><![CDATA[EGA Futura]]></dc:creator><pubDate>Thu, 05 Nov 2026 17:41:15 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ae7dc589cd2abbaa37e8bdf/7a1e258d-42ff-45d4-821d-137922b29834.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>AIforce no reemplaza a Agentforce: es la capa que abre Salesforce a cualquier cliente de MCP o agente, mientras Agentforce sigue siendo la IA propia de la plataforma. Para el developer, el cambio es pasar de escribir todo el código a diseñar con el agente, revisarlo y ponerle guardrails. Soy Juan Manuel Garrido, fundador de EGA Futura y cofundador de Vantegrate, y esto lo explicó Alba Rivas, de Salesforce, en nuestra masterclass desde Dreamforce 2026.</p>
<h2>Qué es el Headless Toolkit?</h2>
<table>
<thead>
<tr>
<th>Pieza</th>
<th>Qué hace</th>
</tr>
</thead>
<tbody><tr>
<td>MCP Servers</td>
<td>Exponen la lógica de negocio a cualquier agente</td>
</tr>
<tr>
<td>Headless Experience Layer</td>
<td>Crea componentes e interfaces que aparecen de forma dinámica dentro de los agentes</td>
</tr>
<tr>
<td>Multi framework</td>
<td>Permite construir con Angular, React u otro framework, no solo Lightning Web Components</td>
</tr>
</tbody></table>
<p>Antes se llamaba Headless 360 (se presentó en TrailblazerDX). Las tecnologías son las mismas; cambió el nombre.</p>
<h2>AIforce o Agentforce?</h2>
<table>
<thead>
<tr>
<th></th>
<th>AIforce</th>
<th>Agentforce</th>
</tr>
</thead>
<tbody><tr>
<td>Qué es</td>
<td>Capa que usa el Headless Toolkit y abre Salesforce a cualquier cliente de MCP o agente</td>
<td>La IA propia de Salesforce</td>
</tr>
<tr>
<td>Reemplaza al otro?</td>
<td>No</td>
<td>Sigue igual de importante</td>
</tr>
</tbody></table>
<h2>Cómo cambia el ciclo de desarrollo?</h2>
<ul>
<li><strong>Diseño:</strong> pedirle al agente una solución que siga tus directrices, tecnologías y criterios.</li>
<li><strong>Revisión:</strong> chequear que lo desarrollado sea lo pedido, porque la IA también se equivoca.</li>
<li><strong>Guardrails:</strong> poner conocimiento y límites a lo que el agente puede hacer.</li>
</ul>
<p>Los skills se escriben en Markdown y se pueden compartir entre compañeros. Para calidad y seguridad del código generado con IA, la receta de Alba: sistema bien montado, skills y directrices claras, y revisión siempre por encima.</p>
<h2>MCP en la práctica</h2>
<p>En su demo de Data 360, Alba usó el MCP Server de Data 360 y, con un agente, creó DMOs, calculated insights, transforms e índices de búsqueda. Lo usó para configurar la plataforma, no para programar.</p>
<p>Para ver cómo se implementan agentes en una empresa, en Vantegrate explicamos <a href="https://vantegrate.com/agentes-ia">qué son los agentes de IA</a>. Crónica completa en <a href="https://vantegrate.com/pulse/dreamforce-2026-aiforce-agentforce-developer">Vantegrate Pulse</a> y versión con FAQ en <a href="https://discover.egafutura.com/aiforce-reemplaza-a-agentforce-tres-aclaraciones-de-dreamforce-2026-sobre-agentes-mcp-y-el-nuevo-rol-del-developer/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=amplify">EGA Futura Discover</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Checklist para implementar Salesforce o un ERP: gobernanza, cronograma, capacitación y datos limpios]]></title><description><![CDATA[Un plan práctico para que la implementación no falle por lo que no es software, desde la experiencia de EGA Futura]]></description><link>https://salesforce-erp.hashnode.dev/checklist-para-implementar-salesforce-o-un-erp-gobernanza-cronograma-capacitaci-n-y-datos-limpios</link><guid isPermaLink="true">https://salesforce-erp.hashnode.dev/checklist-para-implementar-salesforce-o-un-erp-gobernanza-cronograma-capacitaci-n-y-datos-limpios</guid><category><![CDATA[Salesforce]]></category><category><![CDATA[ERP]]></category><category><![CDATA[project management]]></category><category><![CDATA[data migration]]></category><category><![CDATA[crm]]></category><dc:creator><![CDATA[EGA Futura]]></dc:creator><pubDate>Wed, 04 Nov 2026 17:16:30 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ae7dc589cd2abbaa37e8bdf/503395e4-efbc-499c-a275-29887584a3da.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Una implementación de Salesforce o de un ERP se prepara en cuatro frentes antes de configurar nada: gobernanza (quién administra y quién responde por el proyecto), cronograma con margen, capacitación pensada para el equipo y datos limpios antes de migrar. Soy Juan Manuel Garrido, fundador de EGA Futura (ERP nativo en Salesforce) y cofundador de Vantegrate, y este es el checklist que uso.</p>
<h2>Por qué hace falta un checklist que no es técnico?</h2>
<p>Porque la tecnología no resuelve problemas, los deja a la vista. En implementaciones de compañías grandes, medianas y de todo tipo vi empresas crecer con software básico y equipos enormes hundirse con Salesforce o SAP. La diferencia no fue el software: fue la estructura, el plan y la gobernanza.</p>
<h2>1. Gobernanza: quién hace qué?</h2>
<table>
<thead>
<tr>
<th>Rol</th>
<th>Pregunta a responder antes de empezar</th>
</tr>
</thead>
<tbody><tr>
<td>Project Manager</td>
<td>Quién tiene responsabilidad real sobre el proyecto?</td>
</tr>
<tr>
<td>Administrador del sistema</td>
<td>Quién va a administrar la Org el día después del lanzamiento?</td>
</tr>
<tr>
<td>Usuarios clave</td>
<td>Quién valida que los procesos configurados son los reales?</td>
</tr>
</tbody></table>
<p>Un error frecuente es asignar la administración al gerente de marketing o de ventas. No es un admin. Tampoco es un project manager. Si quieres ver cómo piensa un administrador, en EGA Futura Discover reunimos <a href="https://discover.egafutura.com/se-puede-anadir-un-campo-10-preguntas-que-los-administradores-deben-hacerse-primero/">10 preguntas que los administradores deben hacerse primero</a>.</p>
<h2>2. Cronograma: cuánto margen sumar?</h2>
<p>Regla práctica: al cronograma estimado, súmale un 70% más de tiempo. La experiencia me enseñó que ese margen casi nunca sobra.</p>
<table>
<thead>
<tr>
<th>Estimación inicial</th>
<th>Con 70% de margen</th>
</tr>
</thead>
<tbody><tr>
<td>10 semanas</td>
<td>17 semanas</td>
</tr>
<tr>
<td>20 semanas</td>
<td>34 semanas</td>
</tr>
</tbody></table>
<h2>3. Capacitación: genérica o a medida?</h2>
<p>A medida. Tiene que estar pensada para el equipo que va a usar el sistema, con:</p>
<ul>
<li>Sus procesos reales, no los del manual.</li>
<li>Su idioma.</li>
<li>Su forma de trabajar.</li>
</ul>
<p>En EGA Futura armamos los <a href="https://www.egafutura.com/soporte/cursos">cursos de la Plataforma EGA Futura</a> con ese criterio.</p>
<h2>4. Datos: cuándo se limpian?</h2>
<p>Antes de migrar. La frase los limpiamos después aparece en casi todos los proyectos y casi nunca se cumple. Si migras el mismo cliente cargado tres veces, el sistema nuevo va a mostrar tres clientes.</p>
<h2>Los tres no negociables</h2>
<ol>
<li><strong>Un Project Manager con responsabilidad real sobre el proyecto.</strong></li>
<li><strong>Una herramienta para gestionarlo.</strong> Nosotros usamos EGA Futura Project, nuestra <a href="https://www.egafutura.com/cloud/project">aplicación de gestión de proyectos</a>.</li>
<li><strong>Datos limpios antes de migrar.</strong></li>
</ol>
<h2>Por qué esto importa en un ERP sobre Salesforce?</h2>
<p>En nuestro <a href="https://www.egafutura.com/erp/erp-para-salesforce">ERP nativo para Salesforce</a> ventas y operación comparten los mismos datos en la misma Org, así que un dato sucio aparece en todas partes. Para practicar, damos <a href="https://www.egafutura.com/salesforce">clases de Salesforce en vivo y gratis</a>.</p>
<p>La versión completa, con preguntas frecuentes, está en <a href="https://discover.egafutura.com/por-que-fallan-las-implementaciones-de-salesforce-oracle-o-sap-personas-procesos-y-tres-cosas-que-no-se-negocian/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=amplify">EGA Futura Discover</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Cómo diseñar y probar un circuito de aprobación de descuentos en Salesforce antes de automatizarlo?]]></title><description><![CDATA[Un plan de trabajo práctico con casos de prueba, desde la experiencia de EGA Futura con un ERP nativo en Salesforce]]></description><link>https://salesforce-erp.hashnode.dev/c-mo-dise-ar-y-probar-un-circuito-de-aprobaci-n-de-descuentos-en-salesforce-antes-de-automatizarlo</link><guid isPermaLink="true">https://salesforce-erp.hashnode.dev/c-mo-dise-ar-y-probar-un-circuito-de-aprobaci-n-de-descuentos-en-salesforce-antes-de-automatizarlo</guid><category><![CDATA[Salesforce]]></category><category><![CDATA[Salesforce Flow]]></category><category><![CDATA[ERP]]></category><category><![CDATA[automation]]></category><category><![CDATA[crm]]></category><dc:creator><![CDATA[EGA Futura]]></dc:creator><pubDate>Tue, 03 Nov 2026 17:18:07 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ae7dc589cd2abbaa37e8bdf/3575fdeb-52b4-43c3-ab83-68867ff28db2.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Un circuito de aprobación de descuentos se diseña en tres pasos: reconstruir un caso real con Ventas y Finanzas, convertir lo que salga en reglas explícitas (límite del vendedor, intervención de Finanzas, reemplazo del aprobador) y probarlo con el escenario del aprobador ausente antes de darlo por terminado. Soy Juan Manuel Garrido, fundador de EGA Futura (ERP nativo en Salesforce) y cofundador de Vantegrate, y acá dejo el plan de trabajo que uso.</p>
<h2>Cuál es el escenario de partida?</h2>
<p>El cliente pide un 20% de descuento. El vendedor puede autorizar hasta el 15%. El gerente, que es quien aprueba por encima de ese límite, está de vacaciones.</p>
<p>Si el circuito se armó pensando solo en el camino feliz, la oportunidad queda en Pendiente de aprobación y la decisión se busca por fuera del sistema. Un ERP en Salesforce hace visible ese agujero, porque la oportunidad, el pedido y el margen están en la misma Org.</p>
<h2>Paso 1: cómo reconstruyo el último caso real?</h2>
<p>Antes de abrir Flow Builder, pido la última venta en la que pasó exactamente esto. Con la oportunidad abierta, respondemos tres preguntas y anotamos lo que salga:</p>
<table>
<thead>
<tr>
<th>Pregunta</th>
<th>Para qué sirve</th>
</tr>
</thead>
<tbody><tr>
<td>Quién terminó aprobando el descuento?</td>
<td>Descubre el aprobador real, que muchas veces no es el formal</td>
</tr>
<tr>
<td>Qué margen le quedaba a la operación?</td>
<td>Define qué dato necesita ver quien aprueba</td>
</tr>
<tr>
<td>Dónde quedó registrado el motivo de la excepción?</td>
<td>Muestra si hoy existe trazabilidad o no</td>
</tr>
</tbody></table>
<h2>Paso 2: qué reglas tengo que dejar escritas?</h2>
<p>Del caso real salen tres definiciones. Conviene escribirlas en lenguaje de negocio antes de pensar en la implementación:</p>
<ol>
<li><strong>Hasta dónde decide el vendedor.</strong> El límite de descuento que puede aplicar sin pedir permiso.</li>
<li><strong>Cuándo interviene Finanzas.</strong> El punto a partir del cual el margen pesa más que la urgencia comercial.</li>
<li><strong>Quién reemplaza al aprobador.</strong> Con nombre o con rol, y desde cuándo.</li>
</ol>
<p>Recién con esto acordado tiene sentido configurar permisos, reglas y alertas en Salesforce. Si quieres ver las herramientas disponibles, en EGA Futura Discover repasamos <a href="https://discover.egafutura.com/nuevas-capacidades-en-el-proceso-de-aprobacion-con-salesforce-flow/">las capacidades del proceso de aprobación con Salesforce Flow</a>.</p>
<h2>Paso 3: qué datos tiene que capturar el circuito?</h2>
<p>Para que la aprobación se pueda auditar después, el registro tiene que guardar, como mínimo:</p>
<ul>
<li>Quién autorizó el descuento.</li>
<li>Por qué lo autorizó, es decir, el motivo de la excepción.</li>
<li>Con qué política vigente se tomó la decisión.</li>
</ul>
<p>Y quien aprueba tiene que ver el margen de la operación en la misma pantalla en la que decide.</p>
<h2>Paso 4: qué casos de prueba corro?</h2>
<p>Este es el set mínimo que corro antes de dar el circuito por terminado. El caso del gerente ausente va primero, porque es donde más circuitos fallan:</p>
<table>
<thead>
<tr>
<th>Caso</th>
<th>Resultado esperado</th>
</tr>
</thead>
<tbody><tr>
<td>Descuento por encima del límite, aprobador de vacaciones</td>
<td>El pedido le llega al reemplazo definido</td>
</tr>
<tr>
<td>El reemplazo abre la solicitud</td>
<td>Tiene el margen a mano para decidir</td>
</tr>
<tr>
<td>Se aprueba la excepción</td>
<td>Queda registrado quién, por qué y con qué política</td>
</tr>
<tr>
<td>Revisión seis meses después</td>
<td>Cualquiera puede abrir la oportunidad y entender qué pasó</td>
</tr>
<tr>
<td>Descuento dentro del límite del vendedor</td>
<td>No genera aprobación</td>
</tr>
</tbody></table>
<p>Si algún caso falla, la solución casi nunca es un recordatorio más. Es volver a la regla del paso 2.</p>
<h2>Por qué esto importa en un ERP?</h2>
<p>Porque el descuento sigue vivo después de la venta: impacta en la facturación, el margen y la cobranza. En nuestro <a href="https://www.egafutura.com/erp/erp-para-salesforce">ERP nativo para Salesforce</a> el circuito trabaja sobre los mismos datos que usa Finanzas, y el <a href="https://www.egafutura.com/cloud/motor-automatizacion">motor de automatización de procesos</a> permite llevar las reglas acordadas al sistema. Para practicar, en EGA Futura damos <a href="https://www.egafutura.com/salesforce">clases de Salesforce en vivo y gratis</a>.</p>
<p>La versión completa, con preguntas frecuentes, está en <a href="https://discover.egafutura.com/quien-aprueba-un-descuento-cuando-el-gerente-esta-de-vacaciones-la-prueba-para-tu-circuito-de-aprobacion-en-salesforce/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=amplify">EGA Futura Discover</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Cómo conectar una acción invocable de Apex a la Data Table de un Screen Flow paso a paso?]]></title><description><![CDATA[Guía práctica con Apex-Defined Collection Variables y Unique Identifier, desde la experiencia de EGA Futura]]></description><link>https://salesforce-erp.hashnode.dev/c-mo-conectar-una-acci-n-invocable-de-apex-a-la-data-table-de-un-screen-flow-paso-a-paso</link><guid isPermaLink="true">https://salesforce-erp.hashnode.dev/c-mo-conectar-una-acci-n-invocable-de-apex-a-la-data-table-de-un-screen-flow-paso-a-paso</guid><category><![CDATA[Apex]]></category><category><![CDATA[Salesforce Flow]]></category><category><![CDATA[Low Code]]></category><category><![CDATA[crm]]></category><category><![CDATA[Salesforce]]></category><dc:creator><![CDATA[EGA Futura]]></dc:creator><pubDate>Mon, 02 Nov 2026 17:19:28 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ae7dc589cd2abbaa37e8bdf/2f949d76-99d6-47f5-9d99-a6296d0fe3bf.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Desde Winter '26 (API 65.0 o superior) podés usar una colección de un tipo definido en Apex como Source Collection de la Data Table en un Screen Flow. Necesitás tres cosas: una clase con campos visibles para Flow, una acción invocable que devuelva la colección y un campo único para el nuevo Unique Identifier. Soy Juan Manuel Garrido, fundador de EGA Futura (ERP nativo en Salesforce) y cofundador de Vantegrate, y acá dejo el recorrido completo.</p>
<h2>El escenario</h2>
<p>Un Screen Flow para el área de finanzas que muestra cotizaciones de monedas traídas de una API externa. El usuario elige las monedas que le interesan y el Flow sigue trabajando solo con esas. No queremos guardar las cotizaciones en Salesforce: cambian todo el tiempo.</p>
<p>Antes de Winter '26 la Data Table solo aceptaba colecciones de registros, así que la salida típica era un objeto custom espejo, registros temporales o un elemento Transform. Ahora no hace falta.</p>
<h2>Paso 1: la clase que define cada fila</h2>
<p>Los campos tienen que ser visibles para Flow, por eso van con <code>@AuraEnabled</code>.</p>
<pre><code class="language-apex">public class FxRate {
    @AuraEnabled public String currencyCode;
    @AuraEnabled public String currencyName;
    @AuraEnabled public Decimal buy;
    @AuraEnabled public Decimal sell;
}
</code></pre>
<h2>Paso 2: la acción invocable</h2>
<p>Una acción invocable recibe y devuelve listas, una entrada por cada invocación. Para devolver una colección por invocación, la envolvemos en una clase de resultado.</p>
<pre><code class="language-apex">public with sharing class GetFxRates {
    public class Result {
        @InvocableVariable(label='Rates')
        public List&lt;FxRate&gt; rates;
    }

    @InvocableMethod(label='Get FX Rates')
    public static List&lt;Result&gt; run() {
        Result r = new Result();
        r.rates = FxService.fetchRates(); // tu callout o cálculo
        return new List&lt;Result&gt;{ r };
    }
}
</code></pre>
<p><code>FxService.fetchRates()</code> representa tu lógica: un callout con Named Credential, un cálculo o lo que tengas.</p>
<h2>Paso 3: el Flow</h2>
<ol>
<li>Creá un Screen Flow y agregá una acción Apex que llame a <strong>Get FX Rates</strong>.</li>
<li>Guardá la salida <strong>Rates</strong> en una variable de colección de tipo Apex-Defined, clase <code>FxRate</code>. Podés dejar que Flow la cree automáticamente.</li>
<li>Agregá una pantalla con el componente <strong>Data Table</strong>.</li>
<li>En <strong>Source Collection</strong>, elegí esa variable.</li>
<li>En <strong>Unique Identifier</strong>, elegí <code>currencyCode</code>.</li>
<li>Configurá columnas (<code>currencyName</code>, <code>buy</code>, <code>sell</code>) y el modo de selección.</li>
</ol>
<h2>Paso 4: usar las filas seleccionadas</h2>
<p>La Data Table expone las filas seleccionadas como salida, igual que con registros. Desde ahí podés pasarlas a otra acción de Apex, recorrerlas con un Loop o mostrar un resumen en la pantalla siguiente.</p>
<h2>Cómo elegir bien el Unique Identifier</h2>
<ul>
<li>Tiene que ser único por fila. Si se repite, la selección se vuelve ambigua.</li>
<li>Preferí un código estable (un recordId, un código de moneda, una clave de negocio) antes que un texto que pueda cambiar.</li>
<li>Si tu fuente no trae un identificador, generalo en Apex al armar la lista.</li>
</ul>
<h2>Limitaciones a tener en cuenta</h2>
<ul>
<li>Por ahora es mostrar y seleccionar. La edición inline de celdas con colecciones de Apex sigue pendiente para una próxima release.</li>
<li>Revisá que el Flow use API 65.0 o superior.</li>
<li>Si tu caso necesita editar valores dentro de la tabla, por ahora seguí con inputs aparte o con un componente propio.</li>
</ul>
<h2>Dónde lo estamos aplicando</h2>
<p>En proyectos sobre Salesforce lo vemos útil para cálculos financieros resueltos en Apex, resultados de procesos batch que no queremos persistir y pantallas internas armadas rápido. Encaja con cómo diseñamos nuestro <a href="https://www.egafutura.com/erp/erp-para-salesforce">ERP nativo para Salesforce</a>: usar lo que la plataforma ya resuelve antes de sumar objetos. Si querés ver cómo documentamos estos patrones, están los <a href="https://www.egafutura.com/soporte/tutoriales">tutoriales de la Plataforma EGA Futura</a>.</p>
<h2>Cierre</h2>
<p>No es la feature más vistosa del release, pero saca fricción real entre Apex y la interfaz.</p>
<p>La versión completa, con preguntas frecuentes, está en <a href="https://discover.egafutura.com/como-mostrar-una-coleccion-de-apex-en-la-data-table-de-un-screen-flow-sin-crear-objetos-custom/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=amplify">EGA Futura Discover</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Cómo evaluar a un candidato de Salesforce más allá de la certificación]]></title><description><![CDATA[Una certificación de Salesforce muestra lo que alguien estudió, pero no cómo razona frente a un proceso real. La forma más práctica de ver eso es ponerle…]]></description><link>https://salesforce-erp.hashnode.dev/c-mo-evaluar-a-un-candidato-de-salesforce-m-s-all-de-la-certificaci-n</link><guid isPermaLink="true">https://salesforce-erp.hashnode.dev/c-mo-evaluar-a-un-candidato-de-salesforce-m-s-all-de-la-certificaci-n</guid><category><![CDATA[Career]]></category><category><![CDATA[Salesforce]]></category><category><![CDATA[hiring]]></category><category><![CDATA[interview]]></category><category><![CDATA[AI]]></category><dc:creator><![CDATA[EGA Futura]]></dc:creator><pubDate>Mon, 02 Nov 2026 15:40:40 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ae7dc589cd2abbaa37e8bdf/089006a1-0cd2-4132-bb01-a6d28b30f390.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Una certificación de Salesforce muestra lo que alguien estudió, pero no cómo razona frente a un proceso real. La forma más práctica de ver eso es ponerle un caso real adelante y observar cinco señales concretas. Esto es lo que hacemos en Vantegrate, la empresa de agentes de IA que cofundé, y lo que aprendí en más de 32 años con EGA Futura, que fundé en 1994 y que es Partner de Salesforce desde 2009. Soy Juan Manuel Garrido.</p>
<h2>El problema con filtrar solo por certificaciones</h2>
<p>Las certificaciones valen. Son un excelente punto de partida y las recomiendo fuertemente. Pero un examen tiene escenarios cerrados. Un proyecto real llega con información incompleta, procesos sin documentar y un sistema que ya tiene historia.</p>
<p>Si usás la certificación como único filtro pasan dos cosas. Dejás afuera a personas con trayectorias no lineales: gente que viene de otro rubro, cambió de camino o aprendió trabajando. Y podés quedarte con alguien que sabe la teoría pero se pierde en el primer problema real.</p>
<h2>El ejercicio: un caso real, con información incompleta</h2>
<p>La propuesta es sencilla. En lugar de preguntar definiciones, armá un caso basado en un problema que tu equipo ya resolvió. Dejá huecos a propósito. Pedile a la persona que piense en voz alta y que al final escriba qué haría y por qué.</p>
<p>No hace falta que lo resuelva entero. Lo que importa es cómo llega.</p>
<h2>Las cinco señales que observar</h2>
<h3>1. Cómo ordena el problema</h3>
<p>Antes de tocar una sola línea de código o de configuración, arma un mapa del problema? Identifica actores, datos y pasos? O salta directo a la herramienta?</p>
<h3>2. Qué pregunta cuando falta información</h3>
<p>Este es el motivo por el que dejamos huecos. Una persona que pregunta por el volumen de datos, por quién usa el proceso o por qué se hace así hoy, está mostrando criterio. Una que no pregunta nada, asume.</p>
<h3>3. Si ve los límites del sistema</h3>
<p>En Salesforce hay límites de plataforma, automatizaciones que se pisan y datos que crecen. La pregunta es si la persona ve esos bordes antes de que colapsen, no después.</p>
<h3>4. Cómo lo explica por escrito</h3>
<p>Pedí un resumen corto al final. Si puede explicar qué hizo y por qué de forma que otra persona lo entienda sin estar en la entrevista, eso vale oro en un equipo distribuido.</p>
<h3>5. Qué hace cuando algo se rompe</h3>
<p>Podés simularlo: a mitad del ejercicio, decí que la solución propuesta falló en producción. Se hace cargo y busca la causa, o mira para otro lado? Para mí este punto es clave.</p>
<h2>Una rúbrica simple</h2>
<p>Para cada señal podés anotar tres niveles: no aparece, aparece con ayuda, aparece sola. No es ciencia exacta, pero ordena la conversación del panel y evita que la decisión dependa solo de los logos del perfil.</p>
<p>Si tu empresa ya contrata con cierta frecuencia, conviene que ese registro no viva en planillas sueltas. Nuestro <a href="https://www.egafutura.com/cloud/recruit">software de reclutamiento y selección</a> lleva cada candidato del CV al legajo dentro de la misma plataforma.</p>
<h2>Dónde entran las certificaciones</h2>
<p>Siguen siendo una gran base. Si alguien de tu equipo quiere arrancar, en EGA Futura ofrecemos <a href="https://www.egafutura.com/salesforce">clases de Salesforce en vivo y gratis</a>. La certificación más el caso práctico te dan una foto mucho más completa que cualquiera de los dos por separado.</p>
<h2>El paralelo con los sistemas</h2>
<p>Lo mismo que vale para las personas vale para la tecnología: una herramienta no reemplaza un proceso. Por eso, cuando implementamos nuestro <a href="https://www.egafutura.com/erp/erp-para-salesforce">ERP nativo para Salesforce</a>, empezamos por entender cómo trabaja la empresa. Y en Vantegrate, cuando diseñamos <a href="https://vantegrate.com/agentes-ia">agentes de IA para empresas</a>, el criterio del equipo pesa más que el modelo.</p>
<h2>Cierre</h2>
<p>Evaluá habilidades. Poné un caso real adelante. Mirá cómo piensa.</p>
<p>Desarrollé la idea completa, con preguntas frecuentes, en <a href="https://discover.egafutura.com/una-certificacion-de-salesforce-alcanza-para-contratar-a-alguien-lo-que-miro-cuando-armo-equipo/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=amplify">EGA Futura Discover</a>.</p>
]]></content:encoded></item></channel></rss>