Para demostrar cómo funciona el scripting en Workiva, anteriormente creamos un script que actualiza una celda de una hoja de cálculo. Este artículo se basa en ese ejemplo para demostrar cómo realizar la misma operación utilizando la autenticación basada en tokens.
Nota: Actualmente, el script solo está disponible a través de Personalizar Workiva. Obtén más información.
Requisitos
- Workiva Scripting debe estar activado para tu espacio de trabajo. Más información: sobre Workiva Scripting.
- El rol Editor de scripts es necesario para crear o editar scripts.
Paso 1: Crear un archivo script.
Este script es una variación del utilizado en nuestro artículo Ejemplo: Script para actualizar hojas de cálculo. Esta versión protege el Id de cliente y el secreto de cliente, y en su lugar obtiene un token que permite que el código se autentique en Workiva.
Para crear el script en tu espacio de trabajo, sigue estos pasos:
- Desde: página principal, haz clic en Crear => Script.
- A la derecha, introduce un nombre y una breve descripción del script.
- Ve al editor de script que hay en medio de la pantalla y elimina cualquier código existente. Copia y pega lo siguiente:
# Bienvenido a Workiva Scripting import requests import json import os from WorkivaAuth import WorkivaAuth OUTPUT_SS_ID = os.getenv('OUTPUT_SS_ID') OUTPUT_SHEET_ID = os.getenv('OUTPUT_SHEET_ID') SS_API_URL = 'https://api.app.wdesk.com/platform/v1/spreadsheets/' class SSApi: def __init__(self, accessToken, ssId, sheetId): self._accessToken = 'Portador ' + accessToken self._headers = {'Autorización': self._accessToken} self._ssId = ssId self._sheetId = sheetId def updateRange(self, range, values): url = SS_API_URL + self._ssId + "/sheets/" + \ self._sheetId + "/values/" + range requests.put(url, headers=self._headers, data=json.dumps(values)) def updateSS(outputSSApi: SSApi): values = [] values.append(["Hola Mundo"]) outputSSApi.updateRange('A1', {"valores": valores}) def main(): authToken = WorkivaAuth.getWorkivaAuthToken() outputSSApi = SSApi(authToken, OUTPUT_SS_ID, OUTPUT_SHEET_ID) updateSS(outputSSApi) print("SS actualizado!!!") main() - Haz clic en Guardar.
Etapa 2: Generar dependencias en tu máquina local
Mientras trabajas en esta sección, te darás cuenta de que esta variación no incluye ningún código para generar un token basado en el ID de cliente y el secreto de cliente. Más bien, el código se abstrae en una biblioteca creada localmente llamada WorkivaAuth y luego se empaqueta en el paquete dependencies.zip junto con la biblioteca de solicitudes.
Para seguir, abre el terminal en tu máquina local y completa estos pasos:
- Crea una carpeta llamada Creds.
mkdir Creds
- Entra en la carpeta Creds.
cd Creds
- Crea un archivo requirements.txt con el siguiente contenido:
./WorkivaAuth/dist/WorkivaAuth-1.0.tar.gz requests==2.29.0
- Crea una carpeta con el nombre WorkivaAuth.
mkdir WorkivaAuth
- Entra en la carpeta WorkivaAuth.
cd WorkivaAuth
- En la carpeta WorkivaAuth, crea un archivo setup.py con el siguiente contenido:
from setuptools import setup, find_packages setup( name='WorkivaAuth', version='1.0', packages=find_packages(), install_requires=[ 'requests' ] )
- En la carpeta WorkivaAuth, crea otra carpeta llamada WorkivaAuth.
mkdir WorkivaAuth
Nota: Esto no es una errata. La ruta correcta es ./WorkivaAuth/WorkivaAuth.
- Entra en la carpeta WorkivaAuth que acabas de crear.
cd WorkivaAuth
- Crea un archivo __init__.py vacío y un archivo WorkivaAuth.py en la carpeta WorkivaAuth/WorkivaAuth con el siguiente contenido:
# WorkivaAuth import requests import json # Sustitúyelo por la URL real AUTH_URL = "https://api.app.wdesk.com/iam/v1/oauth2/token" # Define la variable que falta CLIENT_ID CLIENT_ID = "your_client_id" # Define la variable que falta CLIENT_SECRET CLIENT_SECRET = "your_client_secret" def getWorkivaAuthToken(): data = { 'client_id': CLIENT_ID, 'client_secret': CLIENT_SECRET, 'grant_type': 'client_credentials' } # Sustitúyelo por las cabeceras adecuadas cabeceras = { 'Content-Type': 'application/x-www-form-urlencoded', } tokenRes = requests.post( AUTH_URL, data=data, headers=headers ) tokenResponse = json.loads(tokenRes.text) return tokenResponse['access_token']Ahora deberías tener la siguiente estructura de carpetas:
Creds/ |-- WorkivaAuth/ | |-- WorkivaAuth/ | | |-- __init__.py | | |-- WorkivaAuth.py | |-- setup.py |-- requirements.txt
-
Vuelve a la carpeta Creds.
cd ..
cd ..
- Ejecuta los siguientes comandos para generar tu paquete de distribución WorkivaAuth.
cd WorkivaAuth
python3 setup.py sdist
cd ..
- Instala la dependencia en un nuevo directorio Dependencias.
pip3 install --target ./dependencies --requirement requirements.txt
- Crea un archivo dependencies.zip.
cd dependencies
zip -r ../dependencies.zip .
cd ..
En la parte final de este artículo, te mostraremos cómo subir este archivo al script creado en Paso 1.
Paso 3: Subir de dependencias a Workiva
Ahora que has creado tu archivo de dependencias, volverás a Workiva y lo cargarás como origen.
- Ve a Workiva Scripting y abre el archivo de script que creaste anteriormente en este artículo.
- Ve al panel Orígenes en el lado izquierdo, haz clic con el botón derecho del ratón en el espacio en blanco que hay justo debajo del archivo actual y selecciona Cargar archivos de origen.
- Selecciona Busca y localiza el archivo dependencias.zip que creaste en el paso anterior.
- Carga el archivo dependencias.zip para finalizar.
Deberías ver un origen no seleccionable llamado dependencies.zip, ¡lo que indica que ya estás listo para autenticarte en Workiva sin exponer ninguna credencial!