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.

Salesforce Functions ahora está disponible en general , entonces, ¿cómo puede comenzar a escribir aplicaciones usando Functions hoy? Esta publicación de blog cubre el primer paso: comenzar con la experiencia de desarrollo local.

No necesita tener una licencia para comenzar con Salesforce Functions, puede usar Salesforce Developer Tools para crear y probar funciones hoy mismo. Todo lo que necesita es una organización de Developer Edition y está listo para comenzar.

La principal limitación es que no podrá implementar en un entorno informático, activar una función desde Apex o implementar cualquier clase de Apex que haga referencia al espacio de nombres de functions . Pero aún podrá crear e iniciar una función en su entorno local y utilizar el SDK de Salesforce para acceder a los datos de su organización.

Para comenzar, creemos un proyecto de Salesforce utilizando la nueva CLI de Salesforce e integremos con Functions. Escribiremos una función de JavaScript que recupere estadísticas e información de video de una lista de reproducción de YouTube usando la API de datos de YouTube v3 y las almacena en Salesforce.

Empezando

Antes de crear el proyecto, deberá instalar Salesforce CLI, Node.js, Docker Desktop y otras herramientas necesarias. Consulte la guía de configuración del entorno de desarrollo para obtener más información.

Nota: Nuestro equipo está trabajando actualmente en una experiencia de desarrollo local sin contenedores y estará lista antes del 31 de enero de 2022.

Usaremos el nuevo comando de la CLI de Salesforce: sf , que es parte de nuestro proyecto de unificación de CLI . Se utilizará para crear un proyecto e interactuar con el entorno de Funciones. No necesita instalar nada nuevo aquí, solo actualice su CLI de Salesforce ejecutando:

 actualización sfdx

Crear un proyecto con la nueva CLI de Salesforce

Creemos un proyecto desde cero ejecutando:

 sf generate project -n <nombre del proyecto>

Nota: Sea asegúrese de nombrar su proyecto; Lo llamé getting-started-functions , pero siéntase libre de ser más creativo.


Ahora que ha creado un proyecto, inicie sesión en su organización Developer Edition (o cualquier otra organización con DevHub), cree una organización temporal y cree un nuevo objeto personalizado llamado Video__c para almacenar las siguientes propiedades:

  • Nombre (Título)
  • ID de video (único – ID externo)
  • Descripción
  • Conteo de visitas
  • Como contar
  • No me gusta el recuento
  • Conteo favorito
  • Recuento de comentarios

Nota: Para su comodidad, cargué el código fuente de este proyecto en un repositorio de GitHub, incluidos los metadatos del objeto personalizado.

Utilice el nuevo sf para iniciar sesión en su organización de Developer Edition ejecutando:

 sf login org -d -a my_dev_org

Nota: Este paso es necesario para poder integrar su función de Salesforce con una organización autenticada.

Crear una función de Salesforce

Ahora es el momento de crear su primera función de Salesforce. Desde la raíz de su proyecto de Salesforce, ejecute el siguiente comando:

 sf generar función -n youtubestats -l javascript

Esto creará una carpeta llamada functions y dentro de ella se almacenarán todas las funciones del proyecto. Si navega a esa carpeta, encontrará una youtubestats contiene un proyecto Node.js con los archivos repetitivos necesarios para ejecutar y probar una función básica.

A continuación, modifique el index.js y cree una función que reciba un ID de lista de reproducción de YouTube como carga útil. Usando la API de datos de YouTube v3 , recupere sus videos y estadísticas, luego almacene la información en Salesforce usando el patrón de Unidad de trabajo. Este patrón le permite administrar transacciones de operaciones CRUD en una función.

Una de las principales ventajas de Salesforce Functions es poder utilizar un ecosistema de bibliotecas de código abierto para interactuar con servicios externos, en este caso, la API de YouTube. Para este fin, va a utilizar el googleapis biblioteca cliente de la NGP, el gestor de paquetes para Node.js y JavaScript.

functions/youtubestats carpeta googleapis biblioteca de googleapis ejecutando los siguientes dos comandos:

 funciones de cd / youtubestats
 npm instalar googleapis

Obtener una clave API de Google

Para llamar a la API de datos de YouTube v3, deberá obtener una clave de API válida. Siga el proceso de la guía de introducción para obtener uno antes de continuar con este tutorial.

Nota: asegúrese de restringir esta clave de API a la API de datos de YouTube v3.

Ahora, tiene todo lo que necesita y puede comenzar a compilar y ejecutar la función localmente. Primero, reemplace el contenido del index.js en la functions/youtubestats con el siguiente código:

 importar {google} de "googleapis";
const youtube = google.youtube ({ versión: "v3", auth: process.env.YOUTUBE_API_KEY
}); / ** * Función YouTubeStats * Esta función recibe una identificación de lista de reproducción, recupera sus videos y almacena las estadísticas de cada video en Salesforce * * El método exportado es el punto de entrada para su código cuando se invoca la función. * * Los siguientes parámetros están preconfigurados y se proporcionan a su función en la ejecución: * @param event: representa los datos asociados con la ocurrencia de un evento, y * Metadatos de apoyo sobre la fuente de esa ocurrencia. * @param context: representa la conexión con Functions y su organización de Salesforce. * @param logger: controlador de registro utilizado para capturar registros de aplicaciones y rastrear específicamente * a una ejecución dada de una función. * /
exportar función asíncrona predeterminada (evento, contexto, registrador) { logger.info ( `Invocar YouTubeStats con carga útil $ {JSON.stringify (event.data || {})}` ); const playlistId = event.data.playlistId; if (! playlistId) { lanzar un nuevo Error ("Falta el parámetro playlistId"); } // 1. Recupera los videos de una lista de reproducción usando la biblioteca de googleapis. logger.info (`Recuperando PlaylistItems con ID = $ {playlistId}`); const {data: playlistItems} = await youtube.playlistItems.list ({ part: "contentDetails, snippet", playlistId }); // 2. Crea una lista con objetos de video que contienen: título, descripción y videoId const videos = playlistItems.items.map ((video) => { regreso { videoId: video.contentDetails.videoId, título: video.snippet.title, descripción: video.snippet.description }; }); // 3. Recupera las estadísticas de video de cada video usando la biblioteca de googleapis. logger.info (`Obtener estadísticas de video`); const {data: videoStats} = await youtube.videos.list ({ parte: "estadísticas", id: videos.map ((video) => video.videoId) .join (",") }); // 4. Asigna las estadísticas a la lista de objetos de video estadísticas const = {}; para (estadística constante de videoStats.items) { stats [stat.id] = stat.statistics; } // Creando una tabla para almacenar el referenceId por Video ID const referenceTable = new Map (); // 5. Utiliza el patrón Unidad de trabajo para registrar la creación de cada objeto de video en Salesforce const uow = context.org.dataApi.newUnitOfWork (); para (const v de videos) { logger.info (`Creación de video con ID: $ {v.videoId}`); const referenceId = uow.registerCreate ({ tipo: "Video__c", los campos: { Video_ID__c: v.videoId, Nombre: v.title, Description__c: v.description, View_Count__c: estadísticas [v.videoId] .viewCount, Like_Count__c: estadísticas [v.videoId] .likeCount, Dislike_Count__c: stats [v.videoId] .dislikeCount, Favorite_Count__c: stats [v.videoId] .favoriteCount, Comment_Count__c: stats [v.videoId] .commentCount } }); referenceTable.set (v.videoId, referenceId); } // 6. Compromete la Unidad de Trabajo como una sola operación respuesta constante = aguardar context.org.dataApi.commitUnitOfWork (uow); // 7. Asigna el resultado que contiene el ID de Salesforce y el videoId resultados constantes = []; para (const [videoId, referenceId] de referenceTable.entries ()) { resultado constante = { id: response.get (referenceId) .id, videoId }; results.push (resultado); } devolver resultados;
}

Nota: El código fuente de este archivo se puede encontrar en el repositorio de GitHub .

Esta función YouTubeStats hace lo siguiente:

  1. Recupera los videos de una lista de reproducción usando la biblioteca de googleapis
  2. Crea una lista con objetos de video que contienen: title , description y videoId
  3. Recupera las estadísticas de video de cada video usando la biblioteca de googleapis
  4. Asigna las estadísticas a la lista de objetos de video
  5. Utiliza el patrón Unidad de trabajo para registrar la creación de cada objeto de video en Salesforce
  6. Compromete la Unidad de Trabajo como una sola operación
  7. Asigna el resultado que contiene el id Salesforce y el videoId

Invocar una función localmente

Primero, deberá crear e iniciar un contenedor que ejecute la función. Puede hacerlo ejecutando el siguiente comando en su entorno de desarrollo local desde la carpeta functions/youtubestats

 sf run function start -e YOUTUBE_API_KEY = <INSERT API KEY>

sf run function start ejecutará la función en un contenedor Docker y expondrá un proceso web que se ejecuta de forma predeterminada en la siguiente URL: http: // localhost: 8080 .

El parámetro -e establece una variable de entorno ; para este ejemplo, está configurando la YOUTUBE_API_KEY que creó anteriormente, que es necesaria para recuperar datos de YouTube. Si echas un vistazo al código, estás recuperando este valor al llamar a: process.env.YOUTUBE_API_KEY .

Ahora que la función se está ejecutando, puede invocarla desde la CLI usando la sf run function . Desde una terminal separada, ejecute el siguiente comando:

 función de ejecución sf -l http: // localhost: 8080 -p '{"playlistId": "PLgIMQe2PKPSLNXs8AGpxgGbmk8Ylp_WTP"}'

En este ejemplo, estoy usando la lista de reproducción Introducción a Node.js para desarrolladores de Salesforce de nuestro canal de desarrolladores de Salesforce.

Nota: Puede especificar una organización de destino configurando la -o . Lea más sobre la sf run function en la documentación del desarrollador .

Aquí, está enviando el playlistId como parte de la carga útil de invocación con el -p , y esto debe codificarse como una cadena JSON.

Y eso es todo: ha visto cómo una función de Salesforce puede recuperar datos de un servicio externo y almacenarlos en una organización Developer Edition utilizando la experiencia de desarrollo local. Video__c y consulte el objeto Video__c en su organización temporal para confirmar que los datos se almacenaron correctamente.

 SELECCIONE Nombre, Descripción__c, Video_ID__c, View_Count__c, Like_Count__c, Dislike_Count__c, Favorite_Count__c, Comment_Count__c DESDE Video__c
LÍMITE 10

¿Que sigue?

¡Tengo un reto para usted! ¿Qué pasa con la creación de una función de Salesforce para actualizar las estadísticas mediante el ID de video? Eche un vistazo a la documentación de DataApi para aprender a realizar consultas y operaciones CRUD desde una función.

Si desea implementar esta función en un entorno informático y activarla desde Apex, puede registrarse para obtener una prueba gratuita . No olvide revisar la documentación sobre permisos e implementación de funciones.

Si necesita ayuda con la experiencia de desarrollo local, o tiene alguna sugerencia para contenido futuro sobre Funciones, visite Salesforce Functions Trailblazer Community Group o Salesforce StackExchange impulsado por la comunidad utilizando la etiqueta salesforce-functions

Recursos

Sobre el Autor


Julián Duque es un defensor de desarrolladores líder en Salesforce. Conéctese con él en Twitter @julian_duque .

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/11/getting-started-with-salesforce-functions-locally-no-license-required.html

Entradas recomendadas