Bienvenidos a Temas de Sistema Operativo

Contribuci贸n de Documentaci贸n

Lizeth S谩nchez Alvarado.

jueves, 4 de septiembre de 2025

Mini Proyecto Final: Desarrolladora Salesforce 2025

 

馃幆

Un proyecto peque帽o pero completo que combine lo aprendido: LWC + Apex + Flow + Einstein GPT + DevOps.


馃敡 馃攲 Proyecto: “Gestor Inteligente de Citas con Clientes”

馃搶 ¿Qu茅 hace?

  • El usuario elige un cliente desde una interfaz LWC.

  • Se consulta disponibilidad desde una API externa (simulada o real).

  • Se genera una recomendaci贸n de cita ideal usando Einstein GPT.

  • Se guarda todo con Flow y se dispara una notificaci贸n por Slack o email.


馃З Componentes del Proyecto

ParteTecnolog铆aDescripci贸n
1. UILWCLista de clientes + selector de fecha
2. BackendApexLlama a una API externa (simulada o real)
3. Automatizaci贸nFlowGuarda la cita y genera notificaci贸n
4. IAEinstein GPTSugiere fecha y hora 贸ptima
5. DevOpsDevOps CenterVersiona y despliega tu proyecto

馃И ¿C贸mo empezar?

  1. Crear el LWC con selector de cliente (Account o Contact)

  2. Escribir un m茅todo Apex que simule disponibilidad horaria

  3. Configurar un Flow que guarde la cita

  4. Usar un prompt con Einstein GPT para sugerir la mejor hora

  5. Versionar tu c贸digo en DevOps Center o GitHub


PLANTILLA PROYECTO GESTOR DE CITAS SALESFORCE

馃З ¿Qu茅 incluye esta plantilla?

  1. Apex Controller (CitaController)

    • obtenerClientes(): Lista cuentas (clientes)

    • consultarDisponibilidad(): Simula horarios disponibles

    • sugerirCitaConEinstein(): Simula sugerencia de cita usando Einstein GPT

  2. Flow sugerido (no-code):

    • Crea un registro de Cita__c

    • Usa clienteId y fechaHora

    • Puedes a帽adir notificaci贸n por correo o Slack


✅ Pr贸ximos pasos:

  • Crear un componente LWC que consuma este controller

  • Crear un Flow llamado Guardar Cita que cree el registro

  • Si tienes Einstein GPT habilitado, puedes reemplazar la funci贸n simulada por un prompt real

  • Opcional: A帽adir conexi贸n real a una API externa usando Named Credential


Proyecto Gestor Citas Salesforce

✅ He a帽adido el componente LWC base (gestorCitas) a tu plantilla.
Con esto ya tienes:

  • Apex Controller (CitaController) para clientes, disponibilidad y sugerencia.

  • LWC (gestorCitas.html y gestorCitas.js) que muestra clientes, consulta disponibilidad y obtiene una sugerencia simulada de Einstein.

  • Flow sugerido para guardar la cita.


Archivo 

// ApexController.cls

public with sharing class CitaController {
    @AuraEnabled(cacheable=true)
    public static List<Account> obtenerClientes() {
        return [SELECT Id, Name FROM Account LIMIT 50];
    }
    @AuraEnabled
    public static String consultarDisponibilidad(String clientId) {
        // Simulaci贸n de consulta a una API externa
        List<String> horarios = new List<String>{'10:00 AM', '11:30 AM', '3:00 PM'};
        return 'Disponible en: ' + String.join(horarios, ', ');
    }
    @AuraEnabled
    public static String sugerirCitaConEinstein(String nombreCliente) {
        // Simulaci贸n de sugerencia (el prompt real se har铆a con Apex + GPT API si tienes licencia)
        return 'Sugerencia: El mejor horario para ' + nombreCliente + ' es ma帽ana a las 11:30 AM';
    }
}


/* Flow sugerido:

 - Name: Guardar Cita

 - Variables: clienteId, fechaHora

 - Acci贸n: Create Record -> Objeto personalizado Cita__c

 - Opcional: Enviar correo o notificaci贸n de Slack */


// LWC: gestorCitas.html

<template>
    <lightning-card title="Gestor Inteligente de Citas">
        <lightning-combobox
            name="clientes"
            label="Selecciona un cliente"
            value={clienteSeleccionado}
            placeholder="Selecciona"
            options={opcionesClientes}
            onchange={handleClienteChange}>
        </lightning-combobox>
        <lightning-button label="Consultar Disponibilidad" onclick={consultarDisponibilidad}></lightning-button>
        <p>{disponibilidad}</p>
        <lightning-button label="Sugerir con Einstein" onclick={sugerirCita}></lightning-button>
        <p>{sugerencia}</p>
    </lightning-card>
</template>


// LWC: gestorCitas.js

import { LightningElement, track } from 'lwc';
import obtenerClientes from '@salesforce/apex/CitaController.obtenerClientes';
import consultarDisponibilidadApex from '@salesforce/apex/CitaController.consultarDisponibilidad';
import sugerirCitaConEinstein from '@salesforce/apex/CitaController.sugerirCitaConEinstein';
export default class GestorCitas extends LightningElement {
    @track clienteSeleccionado;
    @track opcionesClientes = [];
    @track disponibilidad;
    @track sugerencia;
    connectedCallback() {
        obtenerClientes()
            .then(result => {
                this.opcionesClientes = result.map(cliente => ({ label: cliente.Name, value: cliente.Id }));
            })
            .catch(error => {
                console.error('Error al cargar clientes', error);
            });
    }
    handleClienteChange(event) {
        this.clienteSeleccionado = event.detail.value;
    }
    consultarDisponibilidad() {
        consultarDisponibilidadApex({ clientId: this.clienteSeleccionado })
            .then(result => {
                this.disponibilidad = result;
            })
            .catch(error => {
                console.error('Error en disponibilidad', error);
            });
    }
    sugerirCita() {
        sugerirCitaConEinstein({ nombreCliente: this.clienteSeleccionado })
            .then(result => {
                this.sugerencia = result;
            })
            .catch(error => {
                console.error('Error en sugerencia', error);
            });
    }
}

✅ He a帽adido el archivo gestorCitas.js-meta.xml, con configuraci贸n para exponer tu componente en:

  • 馃敼 Record Page

  • 馃敼 App Page

  • 馃敼 Home Page

De esta forma ya podr谩s arrastrar el componente desde el App Builder en Salesforce.


// LWC: gestorCitas.js-meta.xml

<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>59.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
    </targets>
</LightningComponentBundle>


✅ He preparado tambi茅n el objeto personalizado Cita__c con campos b谩sicos:

  • 馃敆 Cliente__c → Lookup a Account

  • 馃搮 FechaHora__c → DateTime

  • 馃彿️ Estado__c → Picklist con valores Pendiente, Confirmada, Cancelada

Con esto ya tienes el ciclo completo: Apex + LWC + Flow + Objeto personalizado 馃幆.


// Objeto personalizado: Cita__c (archivo de metadatos Cita__c.object-meta.xml)

<type>Text</type>
<label>Nombre de la Cita</label>
</nameField>
<deploymentStatus>Deployed</deploymentStatus>
<sharingModel>ReadWrite</sharingModel>
<fields>
<fullName>Cliente__c</fullName>
<externalId>false</externalId>
<label>Cliente</label>
<referenceTo>Account</referenceTo>
<relationshipLabel>Citas</relationshipLabel>
<relationshipName>Citas</relationshipName>
<required>true</required>
<trackHistory>false</trackHistory>
<trackTrending>false</trackTrending>
<type>Lookup</type>
</fields>
<fields>
<fullName>FechaHora__c</fullName>
<label>Fecha y Hora</label>
<required>true</required>
<trackHistory>true</trackHistory>
<type>DateTime</type>
</fields>
<fields>
<fullName>Estado__c</fullName>
<label>Estado</label>
<type>Picklist</type>
<valueSet>
<valueSetDefinition>
<sorted>false</sorted>
<value>
<fullName>Pendiente</fullName>
<default>true</default>
<label>Pendiente</label>
</value>
<value>
<fullName>Confirmada</fullName>
<default>false</default>
<label>Confirmada</label>
</value>
<value>
<fullName>Cancelada</fullName>
<default>false</default>
<label>Cancelada</label>
</value>
</valueSetDefinition>
</valueSet>
</fields>
</CustomObject>


✅ Ya tienes tambi茅n el Flow de ejemplo (Guardar_Cita.flow-meta.xml) que:

  • Recibe como entrada clienteId y fechaHora.

  • Crea un registro en el objeto Cita__c.

  • Asigna el estado inicial como Pendiente.

Con esto tu mini-proyecto queda completo: Apex + LWC + Flow + Objeto personalizado 馃殌.

// Flow de ejemplo: Guardar_Cita.flow-meta.xml

<?xml version="1.0" encoding="UTF-8"?>
<Flow xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>59.0</apiVersion>
<label>Guardar Cita</label>
<processType>Flow</processType>
<status>Active</status>
<variables>
<name>clienteId</name>
<dataType>String</dataType>
<isCollection>false</isCollection>
<isInput>true</isInput>
<isOutput>false</isOutput>
</variables>
<variables>
<name>fechaHora</name>
<dataType>DateTime</dataType>
<isCollection>false</isCollection>
<isInput>true</isInput>
<isOutput>false</isOutput>
</variables>
<records>
<name>CreateCita</name>
<label>Create Cita</label>
<locationX>150</locationX>
<locationY>100</locationY>
<connector>
<targetReference>END</targetReference>
</connector>
<faultConnector>
<targetReference>END</targetReference>
</faultConnector>
<object>Cita__c</object>
<storeOutputAutomatically>true</storeOutputAutomatically>
<inputAssignments>
<field>Cliente__c</field>
<value>{!clienteId}</value>
</inputAssignments>
<inputAssignments>
<field>FechaHora__c</field>
<value>{!fechaHora}</value>
</inputAssignments>
<inputAssignments>
<field>Estado__c</field>
<value>Pendiente</value>
</inputAssignments>
</records>
<start>
<connector>
<targetReference>CreateCita</targetReference>
</Flow>

Desplegar todo esto en un sandbox con SFDX paso a paso



馃敡 1. Pre-requisitos

  • Tener instalado Salesforce CLI (SFDX)descargar aqu铆

  • Tener VS Code con la extensi贸n Salesforce Extension Pack

  • Tener un sandbox o scratch org disponible


馃攽 2. Conectar con tu sandbox

En tu terminal (VS Code o CMD):

sfdx auth:web:login -r https://test.salesforce.com -a MiSandbox
  • Se abrir谩 el navegador → inicia sesi贸n en tu sandbox.

  • -a MiSandbox es un alias para que sea m谩s f谩cil referenciarlo.


馃搨 3. Estructura del proyecto

Tu proyecto debe tener una carpeta force-app/main/default/ con esta estructura:

force-app/ └── main/ └── default/ ├── classes/ │ └── CitaController.cls │ └── CitaController.cls-meta.xml ├── lwc/ │ └── gestorCitas/ │ ├── gestorCitas.html │ ├── gestorCitas.js │ ├── gestorCitas.js-meta.xml ├── objects/ │ └── Cita__c/ │ └── Cita__c.object-meta.xml └── flows/ └── Guardar_Cita.flow-meta.xml

馃摛 4. Desplegar al sandbox

Una vez dentro del proyecto:

sfdx force:source:push -u MiSandbox

Esto desplegar谩 Apex, LWC, Objeto y Flow al sandbox.


✅ 5. Verificaci贸n en Salesforce

  1. Entra al sandbox (https://test.salesforce.com).

  2. Ve a App Builder → agrega el componente GestorCitas a una App Page o Record Page.

  3. Revisa que el objeto Cita__c aparezca en Object Manager.

  4. Abre Flows → confirma que Guardar Cita est谩 activo.


馃攧 6. Opcional: desplegar solo un componente

Si quieres desplegar solo un archivo (ejemplo, el Apex):

sfdx force:source:deploy -p force-app/main/default/classes/CitaController.cls -u MiSandbox

馃檶 Te preparo el package.xml para desplegar todo con Metadata API (por ejemplo usando sfdx force:mdapi:deploy).

馃摝 package.xml

Gu谩rdalo en la ra铆z de tu proyecto (manifest/package.xml):

<?xml version="1.0" encoding="UTF-8"?> <Package xmlns="http://soap.sforce.com/2006/04/metadata"> <types> <members>CitaController</members> <name>ApexClass</name> </types> <types> <members>gestorCitas</members> <name>LightningComponentBundle</name> </types> <types> <members>Cita__c</members> <name>CustomObject</name> </types> <types> <members>Guardar_Cita</members> <name>Flow</name> </types> <version>59.0</version> </Package>

馃殌 1. Convertir a formato MDAPI

Si tu proyecto est谩 en formato SFDX (source format), convi茅rtelo a Metadata API format:


sfdx force:source:convert -r force-app -d mdapi_output


馃殌 2. Desplegar con Metadata API

package.xml

sfdx force:mdapi:deploy -d mdapi_output -u MiSandbox -w 10

  • -u MiSandbox → tu alias de sandbox.
  • -w 10 → espera 10 minutos (aj煤stalo seg煤n necesites).

✅ 3. Verificaci贸n

Despu茅s del despliegue:


  • Ve a Setup → Object Manager → busca Cita__c.

  • Revisa Flows → debe estar Guardar Cita activo.

  • Ve al App Builder → a帽ade tu LWC gestorCitas.




Entonces ya tienes todo: Apex + LWC + Flow + Objeto + package.xml para desplegar en tu sandbox 馃殌.

Ayuda de Actualizaci贸n de Salesforce

⚡ ACTUALIZACI脫N R脕PIDA: SALESFORCE DESDE 2023 A 2025

馃敺 1. Lightning Web Components (LWC)

  • LWC sigue siendo el est谩ndar para desarrollo frontend en Salesforce.

  • Mejor rendimiento, m谩s integraci贸n con Apex, y soporte m谩s fuerte para pruebas.

  • Stand-Alone LWC: ahora puedes usar LWCs en sitios externos (sin necesidad de Visualforce).

  • Custom Events y Lightning Message Service (LMS) mejorados.

✅ Si no has trabajado a煤n con LWC, es la prioridad #1 para un dev de Salesforce moderno.


馃敹 2. Salesforce Flow: Automatizaci贸n sin c贸digo y con c贸digo

  • Flow reemplaz贸 casi por completo a:

    • Workflow Rules (deprecated)

    • Process Builder (deprecated)

  • Flow ahora tiene acciones invocables, subflows reutilizables, y l贸gica avanzada (como try/catch).

  • Flow Orchestration: permite crear procesos multiusuario y multitarea complejos sin Apex.

✅ Tienes que dominar Record-Triggered Flows como base de automatizaci贸n moderna.


馃 3. Einstein GPT + AI Cloud (desde 2023)

  • Einstein GPT genera contenido con prompts directamente en Salesforce: emails, res煤menes, campos, c贸digo.

  • Einstein Copilot (2024): un asistente de IA que te ayuda en tiempo real, como ChatGPT dentro de Salesforce.

  • Disponible en Sales Cloud, Service Cloud y Developer Console (bajo licencias espec铆ficas).

  • Prompt templates para desarrolladores (personalizables).

✅ Si te interesa la IA, aprender a usar y extender Einstein GPT con Apex o LWC es el nuevo plus.


馃З 4. Apex: mejoras recientes

  • Apex SDK for Slack: Puedes crear funciones Salesforce que interact煤an con Slack directamente.

  • Nuevas anotaciones: @AuraEnabled(cacheable=true) optimizado para LWC.

  • Safe Navigation Operator (?.) y mejoras en null handling.

  • User Mode for Apex: puedes controlar si el c贸digo se ejecuta con los permisos del usuario final.

✅ Apex sigue vivo y bien, pero ahora se combina m谩s con Flows y LWC para soluciones h铆bridas.


☁️ 5. DevOps Center (GA desde 2023)

  • Ya no necesitas depender de herramientas externas (como Gearset o Copado).

  • DevOps Center te permite:

    • Trabajar con ramas de Git.

    • Rastrear cambios.

    • Hacer despliegues con clics.

✅ Si manejas entornos sandbox y producci贸n, DevOps Center es esencial.


馃摫 6. Salesforce Mobile App y LWC Mobile

  • Puedes usar LWC para crear componentes responsivos para m贸viles.

  • Soporte mejorado para navigation, offline caching, y QR/barcode scanning.


馃敡 HERRAMIENTAS DE DESARROLLO

HerramientaEstado actual
VS Code + Salesforce Extension PackEst谩ndar
SFDX CLIMuy usado, actualizado con plugins
Scratch Orgs + Unlocked PackagesAdoptados en DevOps modernos
Code Builder (IDE en la nube)GA desde 2024

馃殌 ¿POR D脫NDE EMPEZAR PARA ACTUALIZARTE?

馃摎 M贸dulos clave en Trailhead:

  1. Lightning Web Components Basics

  2. Automate with Flow

  3. Einstein GPT for Developers

  4. DevOps Center Quick Look


馃幆 Plan de 30 d铆as para ponerte al d铆a

SemanaObjetivo
1Repasar LWC, usar VS Code + Scratch Org
2Hacer Flows y comparar con Process Builder
3Practicar DevOps Center y despliegues
4Integrar Einstein GPT o Flow Orchestration

馃椇️ ROADMAP VISUAL: 30 D脥AS PARA ACTUALIZARTE EN SALESFORCE (2025)

D铆a Tema Acci贸n Recurso
1–2 馃敡 Instalar SFDX + VSCode Configura tu entorno local Instalaci贸n de SFDX
3–5 Lightning Web Components (LWC) Aprende sintaxis, ciclo de vida, eventos LWC B谩sico en Trailhead
6–7 馃И Crear componentes LWC Con茅ctalos a Apex, usa eventos y navegaci贸n Crea un buscador de cuentas
8–10 馃攣 Apex Moderno Null handling, @AuraEnabled, async patterns Apex Specialist Superbadge
11–12 馃攢 Integraciones B谩sicas (REST/SOAP) Con茅ctate a un servicio externo con Http Apex Integration Services
13–14 馃摡 API Externa + Named Credentials Usa Named Credential, External Services Named Credential Setup
15–16 馃攧 Salesforce Flow Avanzado Subflows, variables, try/catch Automate with Flow
17–18 馃 Einstein GPT Developer Aprende a crear prompts y usarlos en LWC Einstein GPT Trailhead
19–20 馃 Flow + AI Usa Flows con predicciones de Einstein Crear un proceso de recomendaci贸n de productos
21–22 馃洜️ DevOps Center Control de versiones y despliegues DevOps Center Quick Look
23–24 馃摝 Unlocked Packages Desarrolla como en GitHub: modular, controlado Learn about Packages
25–26 馃З Slack + Apex SDK Env铆a mensajes autom谩ticos desde Apex a Slack Salesforce for Slack
27–28 馃摬 Mobile First con LWC Componentes responsivos y mobile-ready Mobile Development Guide
29 Mini Proyecto Final Elige: integraci贸n externa o app Einstein
30 馃 Reflexi贸n + Certificaci贸n ¿Salesforce Developer o Platform App Builder? Certificaciones Salesforce


Gu铆a de estudio de Salesforce

 

Semana

Objetivo

1

Repasar LWC, usar VS Code + Scratch Org

2

Hacer Flows y comparar con Process Builder

3

Practicar DevOps Center y despliegues

4

Integrar Einstein GPT o Flow Orchestration



D铆a

Tema

Acci贸n

Recurso

1–2

馃敡 Instalar SFDX + VSCode

Configura tu entorno local


Instalaci贸n de SFDX



3–5

Lightning Web Components (LWC)

Aprende sintaxis, ciclo de vida, eventos

LWC B谩sico en Trailhead

6–7

馃И Crear componentes LWC

Con茅ctalos a Apex, usa eventos y navegaci贸n

Crea un buscador de cuentas

8–10

馃攣 Apex Moderno

Null handling, @AuraEnabled, async patterns

Apex Specialist Superbadge

11–12

馃攢 Integraciones B谩sicas (REST/SOAP)

Con茅ctate a un servicio externo con Http

Apex Integration Services

13–14

馃摡 API Externa + Named Credentials

Usa Named Credential, External Services

Named Credential Setup

15–16

馃攧 Salesforce Flow Avanzado

Subflows, variables, try/catch

Automate with Flow

17–18

馃 Einstein GPT Developer

Aprende a crear prompts y usarlos en LWC

Einstein GPT Trailhead

19–20

馃 Flow + AI

Usa Flows con predicciones de Einstein

Crear un proceso de recomendaci贸n de productos

21–22

馃洜️ DevOps Center

Control de versiones y despliegues

DevOps Center Quick Look

23–24

馃摝 Unlocked Packages

Desarrolla como en GitHub: modular, controlado

Learn about Packages

25–26

馃З Slack + Apex SDK

Env铆a mensajes autom谩ticos desde Apex a Slack

Salesforce for Slack

27–28

馃摬 Mobile First con LWC

Componentes responsivos y mobile-ready

Mobile Development Guide

29

Mini Proyecto Final

Elige: integraci贸n externa o app Einstein


30

馃 Reflexi贸n + Certificaci贸n

¿Salesforce Developer o Platform App Builder?

Certificaciones Salesforce