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.
…
La CLI de Salesforce es una herramienta poderosa y esencial para el desarrollo de Salesforce. Puede usarse no solo para crear y desarrollar aplicaciones, sino también para crear y administrar organizaciones, importar y exportar datos, ejecutar pruebas y funcionar como una herramienta de automatización para múltiples propósitos. Pero uno de los aspectos más poderosos, y a menudo pasados por alto, de la CLI es su extensibilidad a través de complementos.
En esta publicación de blog, le mostraremos cómo escribir un complemento de la CLI de Salesforce utilizando el generador @salesforce/plugin-dev
para la CLI de sf
. También cubriremos cómo conectarse a una organización de Salesforce utilizando las bibliotecas proporcionadas por el generador de complementos.
requisitos previos
- Node.js LTS
- Gestor de paquetes de hilo
- La última versión de la CLI de Salesforce :
sfdx update
- Código de Visual Studio con extensiones de Salesforce (opcional pero recomendado)
Además, deberá instalar el @salesforce/plugin-dev
para que la CLI de sf
comience a crear un nuevo complemento. Puedes hacerlo ejecutando:
Generación de un complemento
Generemos un nuevo complemento ejecutando sf dev generate plugin
. Este generador te hará algunas preguntas:
- Si el complemento es o no un complemento interno de Salesforce
- Nombre del complemento
- Descripción del complemento
- Información del autor
- Cobertura de código % para hacer cumplir
Como ejemplo, crearemos un complemento API REST que nos permitirá realizar solicitudes de API REST de Salesforce autenticadas directamente desde la terminal. No tendremos que preocuparnos por los tokens de autorización, las URL de las instancias, etc.; nuestro complemento se encargará de todo esto.
Generando un comando
Un complemento puede estar compuesto por un comando independiente o varios comandos agrupados por temas. Tenga en cuenta que cubrimos mucho terreno sobre los fundamentos de la aplicación CLI en la publicación de blog Creación de una aplicación CLI con oclife .
El @salesforce/plugin-dev
viene con un práctico generador, y también podemos generar comandos ejecutando:
Veamos qué archivos se crearon para el comando rest
.
Archivo | Descripción |
paquete.json | npm que describe las dependencias y versiones del paquete. |
src/comandos/rest.ts | Archivo TypeScript principal que contiene el código para el comando resto. El comando importa y amplía clases desde @salesforce/sf-plugins-core. |
mensajes/descanso.md | Archivo Markdown que contiene los mensajes que componen la ayuda y los errores del comando. |
prueba/comandos/rest.nut.ts | Pruebas complejas de integración, humo y de extremo a extremo. También conocido como NUTS (pruebas no unitarias). |
prueba/comandos/rest.test.ts | Pruebas unitarias. |
A los efectos de esta publicación de blog, nos centraremos únicamente en el archivo src/commands/rest.ts
. Si desea echar un vistazo al proyecto, el código fuente completo está alojado en GitHub.
Algunas partes clave del código anterior incluyen:
- Se amplía un comando de la clase
SfCommand
de la biblioteca@salesforce/sf-plugins-core
. - Las cadenas (mensajes) como el resumen, la descripción, los ejemplos, etc. se almacenan en formato de descuento y se cargan mediante la clase
Messages
. - Las banderas se definen con la clase
Flags
de@salesforce/sf-plugins-core
, esto le dará más opciones para banderas comodirectory
,url
,requiredOrg
,orgApiVersion
y otras. Puede encontrar más información sobre los indicadores disponibles en la documentación . - El método
run
es donde se ejecuta la lógica del comando. Se recomienda especificar un tipo de retorno, que será utilizado por el indicador--json
.
Implementación de un comando API REST de Salesforce
El comando que queremos implementar nos permitirá realizar solicitudes autenticadas a la API REST de Salesforce. Antes de implementar la lógica, se recomienda diseñar cómo funcionará su complemento. Puede encontrar más información sobre cómo diseñar un complemento en la documentación .
<dx-code-block title language code-block="# perform a GET request to the provided REST API path # (without /services/data/
sf rest [path] –target-org [target-org] # Example: Describe the Account object
sf rest /sobjects/Account/describe –target-org mydevhub»>
Argumentos
-
path
: representa la ruta del recurso API (con o sin el prefijo/services/data/<apiVersion>/
)
Banderas
-
target-org, o
— representa el nombre de usuario o alias de la organización autenticada -
method, m
— representa el método HTTP utilizado para interactuar con la API -
content-type, t
: representa el encabezado Content-Type de la solicitud (ya seaapplication/json
oapplication/xml
) -
payload, p
: representa la carga útil de la solicitud en JSON o XML -
api-version
: representa la versión de API de Salesforce que se usará para la solicitud (si no está presente, usará el valor predeterminado actual)
Conexión a una organización de Salesforce
Hay dos formas de conectarse a una organización de Salesforce:
- Podemos crear una conexión utilizando las clases
AuthInfo
yConnection
de la biblioteca@salesforce/core
. Para eso, necesitaríamos el nombre de usuario (o alias) de la organización, que será proporcionado por el indicadortarget-org
.
Afortunadamente, @salesforce/sf-plugins-core nos brinda mejores utilidades para esto. Podemos usar la utilidad Flags.requiredOrg personalizada para recuperar la organización por nombre de usuario o alias, y esto devolverá un objeto de organización autenticado cuando se analicen las banderas.
Uso del objeto Conexión
La clase Connection se extiende desde JSforce Connection , lo que significa que podrá realizar cualquier operación compatible con JSforce. A los efectos de este complemento, utilizaremos el método de request
para realizar solicitudes HTTP sin formato a la API REST de Salesforce. Nota: JSforce es una potente biblioteca de JavaScript para desarrollar aplicaciones de Salesforce.
La lógica del complemento, como se muestra arriba, hace lo siguiente:
- Extrae la organización del indicador
target-org
- Obtiene la conexión de la organización usando
org.getConnection()
, que devolverá un objeto de conexión autenticado - Establece
apiVersion
en la conexión si se especifica el indicador - Extrae los parámetros HTTP de las banderas
- Realiza la solicitud HTTP utilizando el método de
request
del objeto de conexión - Imprime la salida como un JSON con estilo usando el método
this.styledJSON()
Nota: Asegúrese de autenticarse en una organización usando sf login org
antes de usar el complemento sf rest
.
Y finalmente, puede vincular el complemento con su instalación local de sf
ejecutando:
¡Y voilá! Ahora puede usar el complemento y comenzar a realizar solicitudes de la API REST de Salesforce mediante la CLI de sf
.
¿Que sigue?
Asegúrese de echar un vistazo a las grandes mejoras que llegan a la CLI de Salesforce , especialmente aquellas relacionadas con el desarrollo de complementos que son más fáciles que nunca.
Además, no cubrimos cómo escribir pruebas para un complemento de Salesforce, que requerirá su propia publicación de blog. Afortunadamente, nuestro amigo y principal promotor de desarrollo, Mohith Shrivastava, ya presentó una sesión de CodeLive en la que enseñó cómo probar los complementos de la CLI de Salesforce mediante NUT , y habrá una publicación de seguimiento que publicaremos pronto. ¡Estén atentos y feliz codificación!
Recursos de aprendizaje
Sobre el Autor
Julián Duque es Defensor Principal de Desarrolladores en Salesforce. Es desarrollador y educador y pasa su tiempo ejecutando juegos TTRPG en línea y jugando y entrenando a su Mini Aussie, Cumbia, y a su gatita Sphynx, Nefertiti.
Obtenga las últimas publicaciones de blog de desarrolladores de Salesforce y episodios de podcast a través de Slack o RSS.
Agregar a Slack Suscríbete a RSS
…
Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2023/01/building-a-salesforce-cli-plug-in.html