Esta es una traducción que desde EGA Futura ofrecemos como cortesía a toda la Ohana y comunidad de programadores , consultores , administradores y arquitectos de Salesforce para toda Iberoamérica .
El enlace a la publicación original, lo encontrarás al final de este artículo.
…
Estamos orgullosos de lanzar Salesforce Functions Beta en nuestra versión Summer '21, y esperamos su GA en nuestra versión Winter '22.
Salesforce Functions es un nuevo servicio en la plataforma Salesforce que le permite brindar experiencias más escalables al extender los datos y los flujos de trabajo que ya tiene, haciéndolos más robustos con el poder de la computación elástica y la flexibilidad del lenguaje abierto. Ahora puede acelerar significativamente la productividad de los desarrolladores en una infraestructura de Salesforce administrada y confiable a través del acceso preautenticado y preconfigurado a los datos de Salesforce y la integración con herramientas de bajo código como Flow.
Functions permite a los desarrolladores escribir código que implemente su lógica empresarial, que luego se puede ensamblar como bloques de construcción en Flows o integrarse con Lightning Web Components. Salesforce Functions amplifica la productividad de código bajo con el poder y la flexibilidad del software personalizado, incluido el acceso a ecosistemas de lenguaje abierto de bibliotecas y paquetes.
Echemos un vistazo más profundo a lo que esto realmente significa y, a lo largo del camino, le mostraremos la experiencia actualizada de las Herramientas para desarrolladores.
Novedades de Salesforce Functions Beta
- Mayor rendimiento sin límites y escala elástica
- Cree aplicaciones de forma más rápida y sin límites para una lógica empresarial más compleja o una actividad de solicitud / tráfico intensiva en cálculo. Salesforce Functions conserva toda la seguridad y el cumplimiento que usted confía en Salesforce, por lo que ya no necesita lidiar con VPN, tokens de seguridad, Cloud IAM y toda la complejidad de bricolaje cuando sale de la plataforma Salesforce.
- Compatibilidad con lenguajes abiertos y framework en su proyecto SFDX, incluidos Java y Node.js
- Las funciones le permiten programar en lenguajes estándar de la industria, como Node.js y Java. Esto trae el poder expresivo de estos lenguajes a sus aplicaciones, así como a todo el ecosistema de herramientas, bibliotecas y desarrolladores para acelerar su tiempo de comercialización.
- Herramientas familiares e integración nativa de código bajo
- Las funciones están completamente integradas en Salesforce Developer Experience y se invocan directamente desde Apex, lo que facilita su incorporación a los flujos y la forma más sencilla de añadir lógica empresarial compleja a sus aplicaciones.
- Una CLI para el desarrollo
- La CLI de Salesforce se está mejorando con un nuevo ejecutable global,
sf
, que simplifica la forma de crear, administrar e implementar en Salesforce.
- La CLI de Salesforce se está mejorando con un nuevo ejecutable global,
Caso de uso de funciones: ejecución de cargas de trabajo informáticas pesadas y de alto rendimiento
En esta publicación de blog, crearemos una función Java que procesa un conjunto de datos muy grande. Sin Funciones, sería imposible manejar un conjunto de datos tan grande en Apex, y muchos usuarios habrían tenido que implementar soluciones complejas para permanecer dentro de sus límites de Apex. Con Functions, puede superar este tipo de limitaciones computacionales. En este ejemplo, la función carga el conjunto completo de datos de seis mil registros en la memoria.
En el siguiente ejemplo, usaremos Funciones para encontrar una escuela de código más cercana a un punto geográfico específico. También iterará sobre el conjunto de datos para calcular la distancia desde un punto de origen, ordenando los resultados por distancia y luego devolviendo los que están más cerca de la ubicación proporcionada.
Esto se puede hacer en unos sencillos pasos:
- Escribir una función en un proyecto SFDX
- Ejecute y depure su función localmente para validar la lógica
- Implementar la función en una organización de Salesforce
- Integrar con código bajo: invocar la función a través de Apex
Listo: ha aprovechado las capacidades informáticas de las herramientas declarativas.
Las funciones se pueden escribir en un proyecto de Salesforce DX mediante la CLI de Salesforce o el editor de código de Visual Studio con Salesforce Extension Pack .
Para crear un proyecto con esta nueva estructura de comando usando la CLI de Salesforce, ejecute:
$ sfdx generate: proyecto -n sfdx_functions_project
El editor de código de Visual Studio con Salesforce Extension Pack creará un proyecto con los archivos necesarios para comenzar a desarrollar para la plataforma Salesforce.
Después de crear el proyecto, podemos comenzar a escribir nuestras funciones, usando Java o JavaScript .
processlargedata
función processlargedata en Java con la CLI de Salesforce:
$ sfdx generate: function -n processlargedata -l java
O usando el Visual Studio Code SFDX: Create Function
comando Crear función:
Generar una función a partir del código de Visual Studio
Esto generará un proyecto Java en la carpeta de funciones con todos los archivos necesarios para escribir su función y ejecutar pruebas localmente.
Actualicemos la función autogenerada con el caso de uso que describimos anteriormente. El código fuente completo para este proyecto en la aplicación de muestra de recetas de funciones está disponible en Github.com.
paquete com.salesforce.functions.recipes; // ... / ** * Esta función carga un gran conjunto de datos JSON, calcula la distancia entre un cordón suministrado * y los datos, ordénelos y devuelva los resultados x más cercanos. * / La clase pública ProcessLargeDataFunction implementa SalesforceFunction <FunctionInput, FunctionOutput> { Logger final estático privado LOGGER = LoggerFactory.getLogger (ProcessLargeDataFunction.class); Cadena final estática privada SCHOOLS_URL = "https://code.org/schools.json"; @Anular Aplicar FunctionOutput público (evento InvocationEvent <FunctionInput>, contexto de contexto) lanza Exception { // Leer parámetros de entrada // - Punto de origen doble latitudeSt = event.getData (). getLatitude (); doble longitudeSt = event.getData (). getLongitude (); // - Número de resultados para devolver int length = event.getData (). getLength (); // Leer la base de datos JSON de las escuelas en la memoria desde la URL URL url = nueva URL (SCHOOLS_URL); HttpURLConnection connection = (HttpURLConnection) url.openConnection (); connection.setRequestMethod ("OBTENER"); conexión.conectar (); Lector BufferedReader = nuevo BufferedReader (nuevo InputStreamReader (connection.getInputStream ())); // Parse Schools JSON Dataset Gson gson = nuevo Gson (); Respuesta de JsonResponse = gson.fromJson (lector, JsonResponse.class); // Calcular la distancia desde el punto de origen -> Ordenar por distancia -> Limitar resultados Lista de escuelas <Escuela> = response.getSchools (). stream () .mapa( escuela -> { school.setDistance ( distancia( latitudeSt, longitudeSt, school.getLatitude (), school.getLongitude ())); regreso a la escuela; }) .sorted (Comparator.comparingDouble (Escuela :: getDistance)) .limit (longitud) .collect (Collectors.toList ()); LOGGER.info ("Función filtrada correctamente {} escuelas", schools.size ()); return new FunctionOutput (escuelas); } // ...
Una función de Salesforce de Java recibe dos parámetros:
- un InvocationEvent que contiene la carga útil de entrada de la función
- el contexto , que tiene acceso a la organización de Salesforce autenticada y al SDK. (Nota: Node.js Functions contiene un 3er parámetro Logger , que se utiliza para operaciones de registro).
Esta ProcessLargeDataFunction recibe una carga útil JSON con latitude
, longitude
y length
, y devuelve una lista de las escuelas más cercanas a ese punto de partida especificado en la carga útil de entrada. Ahora, veamos cómo podemos ejecutar esta función localmente.
Ejecutando su primera función
Una función de Salesforce se puede ejecutar localmente mediante el uso de la CLI, que es una forma útil de desarrollar y probar su función sin implementarla en una organización de Salesforce. La ejecución local también se puede integrar con una organización de Salesforce autenticada al realizar la invocación. Puede iniciar esta función localmente ejecutando:
$ sfdx ejecutar: función: iniciar
O mediante el comando SFDX: Start Function
Iniciar una función desde Visual Studio Code
Esto creará y ejecutará la función localmente y estará lista para comenzar a recibir solicitudes de invocación.
Una función que se ejecuta localmente desde Visual Studio Code
Ahora que nuestra función se está ejecutando localmente, usaremos una carga útil JSON para invocar la función. payload.json
un payload.json en la carpeta de funciones con la siguiente información:
{ "latitud": "36.169090", "longitud": "-115.140579", "longitud": 5 }
Esta información de carga útil representa el punto de origen y el número de resultados que devolverá. Será recibido por la función en el objeto InvocationEvent.
Puede invocar la función con esta carga útil de entrada desde la CLI ejecutando:
$ sfdx ejecutar: función --url = http: // localhost: 8080 --payload=@payload.json
O puede hacer esto desde Visual Studio Code abriendo el payload.json
y haciendo clic en la acción Invoke
CodeLens:
Invocar una función desde Visual Studio Code con CodeLens
Ha visto cómo generar, ejecutar e invocar su primera función de Salesforce utilizando las herramientas de desarrollo de Salesforce. Ahora es el momento de conectarse a una organización de Salesforce, crear un entorno informático e implementar la función.
Implementar su primera función
Hemos podido ejecutar nuestra función localmente gracias a las herramientas de desarrollo de Salesforce, pero el poder real de las funciones de Salesforce se produce cuando se ejecutan en nuestro entorno informático sin servidor. Implementemos nuestra función en una organización de Salesforce. Para hacer eso, necesitamos crear un entorno informático y conectarlo a una organización ejecutando:
$ sfdx env: create: compute -o connected_org_alias -a compute_env_alias
Luego, necesitamos implementar nuestro proyecto y funciones de Salesforce. La próxima sf
CLI le permitirá implementar los metadatos de su proyecto junto con la función en un solo comando. Pero hasta entonces, tenemos que hacerlo usando sfdx
en dos pasos:
$ sfdx force: fuente: empujar $ sfdx proyecto: implementar: funciones -o conectado_org_alias
Ahora que nuestro proyecto está implementado, podemos invocar la función desde Apex usando la nueva clase de Function
functions.Function fn = functions.Function.get ('sfdx_functions_project.processlargedata'); functions.FunctionInvocation invocation = fn.invoke ('{"latitud": "36.169090", "longitud": "-115.140579", "longitud": 5}'); String jsonResponse = invocation.getResponse (); System.debug ('Respuesta obtenida' + jsonResponse);
Activación de una función con Apex desde Developer Console
Integrando su función con herramientas low-code
Ahora que nuestra función se puede invocar a través de Apex, podemos integrarla con un componente web Flow o Lightning. FindCodeSchools.cls
una clase de Apex, FindCodeSchools.cls, que invoca la función ProcessLargeData de un flujo. El código fuente completo para este proyecto en el repositorio de la aplicación de muestra de recetas de funciones está disponible en Github.com.
público con clase compartida FindCodeSchools { @InvocableMethod (label = 'Buscar escuelas') public static List <Escuela> findSchools (List <Input> input) { Carga útil de entrada = input.get (0); // Obtener una referencia de la función ProcessLargeData functions.Function fn = functions.Function.get ( 'sfdx_functions_project.processlargedata' ); // Invocar la función ProcessLargeData functions.FunctionInvocation invocación = fn.invoke ( JSON.serialize (carga útil) ); Respuesta de cadena = invocation.getResponse (); // Serializar la respuesta en un objeto Salida salida = (Salida) JSON.deserialize (respuesta, Output.class); return output.schools; } // ... }
Con esta clase de Apex con un @InvocableMethod
, crearemos un nuevo flujo que active este método como una acción de Apex y usaremos la salida como mejor nos parezca. También puede activar la función desde un componente LWC utilizando la anotación @AuraEnabled
Invocar el método de Apex FindSchools desde un flujo
Como puede ver a continuación, integramos a la perfección el poder de las capacidades de cómputo de Salesforce Functions con la simplicidad de bajo código de Flow.
Flujo integrado con una función de Salesforce
Aprende más
Estamos emocionados de ver lo que crea con Salesforce Functions. Nomínese para la Invite Beta .
Sobre los autores
Julián Duque es un defensor de desarrolladores líder en Salesforce. Conéctese con él en Twitter @julian_duque .
Khushboo Goel es gerente sénior de marketing de productos en Salesforce. Conéctese con ella en Twitter @ kgoel31 .
…
Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2021/06/functions-announcement.html