Crear un flujo mediante acciones de servicios externos
Para comenzar, vamos a crear un flujo que pueda generar nuevas cuentas bancarias o actualizar cuentas existentes en su banco ficticio.
Agregar el lienzo de pantalla
Un lienzo de pantalla permite recopilar entradas del usuario que correspondan a los parámetros de entrada de su especificación de API.
- En Setup (Configuración), ingrese
Flows
(Flujos) en el cuadro de búsqueda rápida y, a continuación, seleccione Flows (Flujos).
- Haga clic en New Flow (Nuevo flujo).
- Asegúrese de que la opción Start from Scratch (Comenzar desde cero) esté seleccionada y haga clic en Next (Siguiente).
- Seleccione Screen Flow (Flujo de pantalla) y haga clic en Create (Crear).
- En la barra de botones, modifique la configuración Auto-Layout (Formato automático) a Free-Form (Forma libre).
- Desde la caja de herramientas, con la ficha Elements (Elementos) seleccionada, arrastre el elemento Screen (Pantalla) al lienzo.
- Label (Etiqueta):
Bank Account Record
(Registro de cuenta bancaria) - API Name (Nombre de API):
Bank_Account_Record
- Desde la lista de componentes de entrada, arrastre dos componentes Text (Texto) al lienzo de pantalla Flow Label (Etiqueta de flujo).
- Haga clic para resaltar el primer componente Text (Texto).
- Label (Etiqueta):
Last Name on Account
(Apellido en la cuenta) - API Name (Nombre de API):
Last_Name_on_Account
- Haga clic en el segundo componente Text (Texto).
- Label (Etiqueta):
Bank Account Type
(Tipo de cuenta bancaria) - API Name (Nombre de API):
Bank_Account_Type
- Haga clic en Done (Listo).
- Haga clic en Save (Guardar) para guardar el flujo y establecer sus propiedades.
- Flow Label (Etiqueta de flujo):
Bank Account Records
(Registros de cuenta bancaria) - Flow API Name (Nombre de la API del flujo):
Bank_Account_Records
- Haga clic en Save (Guardar) e ignore todas las advertencias.
Hasta ahora, solo agregamos un elemento de pantalla a nuestro flujo que permite dos entradas de texto. Ahora, es momento de la acción.
Agregar una acción
Los elementos de acción, por definición, presentan y realizan acciones invocables del flujo que los servicios externos crearon cuando registró la especificación de API. Llamar a una de las acciones que registró el servicio de banco externo es un ejemplo de invocación de una acción por fuera del flujo.
Le interesa la capacidad de agregar una cuenta a nuestro banco ficticio desde adentro de Salesforce. “¡Un momento! ¿No debo ser desarrollador para hacer eso?”. Para nada. Los servicios externos realizaron todo el trabajo pesado por usted. Ahora, solo debe utilizar una herramienta como Flow Builder o bots de Einstein para vincular las conexiones.
Para continuar, agregue la acción addAccount, que originalmente es una operación de nuestra especificación de API, como un elemento de acción en el flujo. Si no hay una cuenta bancaria existente, deberá utilizar la acción addAccount para crear una nueva cuenta bancaria en el servicio de banco. Esta acción toma las dos entradas de usuario, llama al servicio de banco mediante la credencial con nombre BankService y busca una cuenta bancaria existente con un nombre y un tipo de cuenta coincidentes.
Hay dos valores de salida de la operación addAccount en nuestra especificación de API que define aquí como variables.
-
201: no se encontró una coincidencia de nombre. En este momento, no hay una cuenta bancaria. Por lo tanto, se crea una nueva cuenta bancaria a través de addAccount.
-
409: es una excepción que significa que se encontró una coincidencia de nombre, la cuenta bancaria ya existe, por lo que no crearemos una nueva. En este caso, se muestra un mensaje dentro del flujo junto con los detalles de la cuenta existente. Los detalles se muestran para que sepamos con exactitud qué cuenta desencadenó la excepción 409.
Debe definir estos valores de salida aquí para hacer que otros elementos descendentes en nuestro flujo sean más inteligentes. De acuerdo. Hablemos con claridad: la cursiva no le dará superpoderes de Salesforce… pero completar el resto de esta unidad y el reto práctico sí lo hará.
- Desde la caja de herramientas, con la ficha Elements (Elementos) seleccionada, arrastre el elemento Action (Acción) al lienzo.
- Cambie Filter By (Filtrar por) a Type (Tipo), seleccione External Service (Servicio externo) y haga clic en el cuadro de búsqueda.
- Seleccione Add Account (Agregar cuenta).
- Label (Etiqueta):
Add Bank Account
(Agregar cuenta bancaria) - API Name (Nombre de API):
Add_Bank_Account
- Haga clic en el campo Account Name (Nombre de la cuenta), seleccione Bank Account Record (Registro de cuenta bancaria) y, luego, Last_Name_on_Account.
- Haga clic en el campo Account Type (Tipo de cuenta), seleccione Bank Account Record (Registro de cuenta bancaria) y, luego, Bank_Account_Type.
- Amplíe la sección Show advanced options (Mostrar opciones avanzadas) y marque Manually assign variables (Asignar variables manualmente).
- En Store Output Values (Almacenar valores de salida), haga clic en el campo 201 y seleccione New Resource (Nuevo recurso).
- Resource Type (Tipo de recurso): Variable
- API Name (Nombre de API):
account
(cuenta) - Data Type (Tipo de datos): Definido por Apex
- Apex Class (Clase de Apex): ExternalService__BankService_accountDetails
- Availability Outside the Flow (Disponibilidad fuera del flujo): seleccione Available for input (Disponible para entrada) y Available for output (Disponible para salida)
- Haga clic en Done (Listo).
- En Store Output Values (Almacenar valores de salida), haga clic en el campo 409 Exception (Excepción 409) y seleccione New Resource (Nuevo recurso).
- Resource Type (Tipo de recurso): Variable
- API Name (Nombre de API):
existingAccount
- Data Type (Tipo de datos): Definido por Apex
- Apex Class (Clase de Apex): ExternalService__BankService_accountDetails
- Availability Outside the Flow (Disponibilidad fuera del flujo): seleccione Available for input (Disponible para entrada) y Available for output (Disponible para salida)
- Haga clic en Done (Listo) y Done (Listo).
Con tantos representantes de bancos que registran clientes nuevos, ¿quién sabe con seguridad si ya existe una cuenta para Maria Thompson? Agreguemos una lógica para evaluar si la cuenta ya existe o no.
Agregar una decisión
Cuando el flujo se ejecuta, si la cuenta no existe, este se enrutará a través de una ruta “create account” (crear cuenta) y procederá a actualizar la nueva cuenta de usuario mediante addAccount. Si la cuenta ya existe (resultado predeterminado), se enrutará a través de una ruta “update” (actualizar), y simplemente actualizaremos el registro de usuario de Salesforce con la información del servicio bancario. Este tipo de lógica de evaluación y bifurcación es perfecta para el elemento Decision (Decisión) de Flow Builder.
- Desde la ficha Elements (Elementos) de la caja de herramientas, arrastre Decision (Decisión) al lienzo.
- En la parte superior de la ventana New Decision (Nueva decisión), ingrese los siguientes valores.
- Label (Etiqueta):
Bank Account Updated?
(¿Se actualizó la cuenta bancaria?) - API Name (Nombre de API):
Bank_Account_Updated
(Quite el signo ? al final de la cadena para API_Name)
- En la sección Outcomes (Resultados), observe los dos resultados enumerados a la izquierda: New Outcome (Nuevo resultado) y Default Outcome (Resultado predeterminado).
- Asegúrese de que New Outcome (Nuevo resultado) esté seleccionado e ingrese estos valores en la sección Outcome Details (Detalles del resultado).
- Label (Etiqueta):
Bank Account Created
(Cuenta bancaria creada) - API Name (Nombre de API):
Bank_Account_Created
- Para Condition Requirements to Execute Outcome (Requisitos de condición para ejecutar el resultado), seleccione All Conditions Are Met (AND) (Se cumplen todas las condiciones [AND]).
- En Resource (Recurso), ingrese las siguientes condiciones.
- Resource (Recurso): existingAccount
- Operator (Operador): Is Null (Es nulo)
- Value (Valor): True (Verdadero)
Observe que el recurso existingAccount no especifica un sufijo como existingAccount.id o existingAccount.name. Esto se debe a que desea buscar coincidencias en todo el objeto, no en un único campo. Esto significa que el nombre y el tipo de cuenta, que se proporcionan en la entrada de pantalla inicial, deben coincidir ambos para actualizar una cuenta existente. Si no se encuentra una coincidencia, debe crear una cuenta nueva.
- Seleccione Default Outcome (Resultado predeterminado) e ingrese lo siguiente:
- Label (Etiqueta):
Bank Account Found
(Cuenta bancaria encontrada)
- Haga clic en Done (Listo).
Agregar una asignación
En el caso de que una cuenta bancaria ya exista, debemos indicarle al flujo que actualice el campo Salesforce User Account ID (Id. de cuenta del usuario de Salesforce) con la Id. de la cuenta bancaria. Para ello, debe asignar el valor a una variable (account.id).
- Desde la caja de herramientas, arrastre Assignment (Asignación) al lienzo.
- En la ventana New Assignment (Nueva asignación), ingrese estos valores.
- Label (Etiqueta):
Assign Existing Bank Account ID
(Asignar Id. de la cuenta bancaria existente) - API Name (Nombre de API):
Assign_Existing_Bank_Account_ID
- En Set Variable Values (Establecer valores de variable), ingrese los siguientes valores.
- Variable: seleccione account (cuenta) y, luego, id
- Operator (Operador): Equals (Es igual a)
- Value (Valor): seleccione existingAccount y, luego, id
- Haga clic en Done (Listo) e ignore todas las advertencias.
Agregar el elemento Update Records
Utilicemos los valores almacenados en variables para actualizar nuestro registro de usuario de Salesforce con el tipo y la Id. de la cuenta bancaria.
- Desde la caja de herramientas, arrastre el elemento Update Records (Actualizar registros) al lienzo.
- En la ventana New Update Records (Nueva actualización de registros), ingrese los siguientes valores:
- Label (Etiqueta):
Update Salesforce User Record
(Actualizar registro de usuario de Salesforce) - API name (Nombre de API):
Update_Salesforce_User_Record
- Seleccione Specify conditions to identify records, and set fields individually (Especificar condiciones para identificar registros y establecer campos individualmente)
- En Update Records of This Object Type (Actualizar registros de este tipo de objeto):
- Object (Objeto): User (Usuario)
- En Filter User Records (Filtrar registros de usuario):
- Condition Requirements for record to update (Requisitos de condición para que los registros se actualicen): All Conditions Are Met (AND) (Se cumplen todas las condiciones [AND])
- Field (Campo): LastName
- Operator (Operador): Equals (Es igual a)
- Value (Valor): Last_Name_on_Account
- En Set Field Values for the User Records (Establecer valores de campo para los registros de usuario):
- Field (Campo): Account_ID__c
- Value (Valor): seleccione account (cuenta) y, luego, id en Apex-Defined (Definido por Apex)
- Haga clic en + Add Field (Agregar campo).
- Field (Campo): Account_Type__c
- Value (Valor): Bank_Account_Type, en Screen Components (Componentes de pantalla), no en Apex-Defined (Definido por Apex)
- Haga clic en Done (Listo).
Conectar los elementos
¡Casi terminamos! Solo necesita vincular su flujo. Para comenzar, conectemos los elementos en el orden correcto. Para ello, arrastremos el nodo del conector al elemento de destino para que nuestro proceso de negocio fluya con éxito al momento de la ejecución. No se olvide de guardarlo.
- Conecte Start (Iniciar) con la pantalla Bank Account Record (Registro de cuenta bancaria).
- Conecte la pantalla Bank Account Record (Registro de cuenta bancaria) con la acción Add Bank Account (Agregar cuenta bancaria).
- Conecte la acción Add Bank Account (Agregar cuenta bancaria) con la decisión Bank Account Updated? (¿Se actualizó la cuenta bancaria?).
- Alinee el elemento Decision (Decisión) en el lienzo para tener espacio para un conector saliente en cada extremo.
- Conecte el resultado de la decisión Bank Account Updated? (¿Se actualizó la cuenta bancaria?) con la asignación Assign Existing Bank Account ID (Asignar Id. de la cuenta bancaria existente).
- Cuando se le solicite, seleccione Bank Account Found (Cuenta bancaria encontrada) para que se asigne el resultado de la decisión a la ruta y haga clic en Done (Listo).
- Conecte la asignación Assign Existing Bank Account ID (Asignar Id. de la cuenta bancaria existente) con el elemento de actualización de registros Update Salesforce User Record (Actualizar registro de usuario de Salesforce).
- Conecte la decisión Bank Account Updated? (¿Se actualizó la cuenta bancaria?) con el elemento de actualización de registros Update Salesforce User Record (Actualizar registro de usuario de Salesforce).
- Haga clic en Save (Guardar).
Depurar el flujo
¡Casi termina! Antes de finalizar, utilicemos el modo de depuración para verificar el flujo.
- Haga clic en Debug (Depurar).
- Seleccione Show details of what’s executed and render flow in Lightning runtime (Mostrar los detalles de qué se ejecuta y representar el flujo en el tiempo de ejecución de Lightning).
- Haga clic en Run (Ejecutar).
- En Last Name on Account (Apellido en la cuenta), escriba
Thompson
. Además, en Bank Account Type (Tipo de cuenta bancaria), ingreseChecking
(Cuenta corriente).
- Haga clic en Next (Siguiente).
El flujo se ejecuta con nuestras entradas.
En Debug Details (Detalles de depuración), siga el flujo completo que acaba de crear.
Primero, se encuentran sus entradas de texto. A continuación, en BANKSERVICE.ADDACCOUNT, podemos observar que las entradas de texto se asignaron de forma adecuada y que los resultados indican una cuenta existente:
y
… o bien, que no se encontró una cuenta y se creó una nueva:
y
En la fase Decision (Decisión), se confirma el resultado de la decisión. Se asignaron las variables.
Ahora, en Update Records (Actualizar registros), se propagaron los campos Account Type (Tipo de cuenta) y Account ID (Id. de cuenta) en Salesforce con los nuevos valores desde del servicio web de banco.
(Música maestro…) Ahora, observe el registro de usuario de Maria Thompson en Salesforce.
Como representante del banco, ingresó el nombre y el tipo de cuenta en Salesforce, y nuestra aplicación de flujo actualizó de forma automática una cuenta bancaria existente (o creó una nueva) en el servicio de banco y mostró la Id. de la cuenta y el nuevo tipo de cuenta en el registro de usuario de Salesforce.
Ahora, cuenta con un seguimiento de la actividad de ventas en las cuentas bancarias desde Salesforce. ¿Acaso dijo “sin código”? Así es. Se hizo todo sin escribir ni una sola línea de código.
Conocer los límites de su aplicación
También debe saber que puede recibir un error. Por ejemplo, si escribe “Maria Thompson” en Last Name on Account (Apellido en la cuenta), verá un error, ya que está prohibido ingresar un espacio en este campo. De forma similar, puede que se muestre un error si ingresa un nombre con menos de seis caracteres (por ejemplo, Jones), ya que este es otro límite de nuestra aplicación simple. Los siguientes son algunos de los códigos que puede observar.
Código |
Descripción del servicio de banco Acme |
---|---|
200 |
El sistema encuentra una cuenta con un nombre específico. |
201 |
Es la respuesta cuando la cuenta no existe y podemos crear una. |
204 |
Es la respuesta cuando el sistema encuentra una cuenta con nombre específico. |
400 |
Es una respuesta de error si el nombre de la cuenta tiene menos de seis caracteres o si contiene espacios. |
404 |
Es una respuesta de error si la cuenta no es compatible con el servicio o no se encuentra. |
409 |
Es la respuesta cuando la cuenta existe y no podemos crear una. |
Revisión
¡Bien! ¡Excelente trabajo! Revisemos cómo creó un flujo mediante servicios externos y observemos los pasos que realizó durante el proceso. Observe que, si bien tuvo que tratar con una definición de esquema que cumpla con OpenAPI en su especificación de API, la mayor parte del trabajo es declarativa (con poco o nada de código). Excelente, ¿no es así?
Llegó el momento que estaba esperando. Comprobemos su trabajo.