Para demostrar cómo funciona Workiva Scripting en Workiva, hemos creado un script sencillo que actualiza una celda de una hoja de cálculo. Puedes seguir estos pasos para reproducir el script en tu espacio de trabajo.
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.
- Debes generar dependencias para poder ejecutar este script directamente desde una hoja de cálculo. Esto incluirá la biblioteca de "solicitudes" necesaria para interactuar con las API públicas de Workiva.
Construye el script
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:
import requests import json import os AUTH_URL = "https://api.app.wdesk.com/iam/v1/oauth2/token" SS_API_URL = 'https://api.app.wdesk.com/platform/v1/spreadsheets/' CLIENT_ID = os.getenv('CLIENT_ID') CLIENT_SECRET = os.getenv('CLIENT_SECRET') SPREADSHEET_ID = os.getenv('SPREADSHEET_ID') SHEET_ID = os.getenv('SHEET_ID') HELLO_WORLD = os.getenv('HELLO_WORLD') class ApiAuth: def __init__(self): self._headers = {'Content-Tipo de': \ 'application/x-www-form-urlencoded;charset=UTF-8'} def getAuthToken(self): tokenRes = requests.post(AUTH_URL, data = 'client_id=' + CLIENT_ID + \ '&client_secret=' + CLIENT_SECRET + '&grant_type=client_credentials', \ headers = self._headers) tokenResponse = json.loads(tokenRes.text) return tokenResponse['access_token'] class SSApi: def __init__(self, accessToken): self._accessToken = 'Portador ' + accessToken self._ssApiUrl = SS_API_URL + SPREADSHEET_ID + "/hojas/" + SHEET_ID + \ "/valores/A2:H" self._headers = {'Autorización': self._accessToken} def getRawData(self): dataRes = requests.get(self._ssApiUrl, headers = self._headers) # print(dataRes) rawData = json.loads(dataRes.text) # todo gestiona la paginación # print("---", rawData['datos'][0]['valores'][0]) return rawData['datos'][0]['valores'] def updateRange(self, sheetId, range, values): url = SS_API_URL + SPREADSHEET_ID + "/hojas/" + sheetId + "/valores/" + \ rango print("Actualizar rango: ", url) print("Valores: ", valores) dataRes = solicitudes.put(url, headers = self._headers, \ data=json.dumps(values)) def write_tier_data(ssApi: SSApi): values = [] values.append([HELLO_WORLD]) ssApi.updateRange(HOJA_ID, 'A1:ZZZZ99', {"valores": valores}) def main(): authToken = ApiAuth().getAuthToken() ssApi = SSApi(authToken) # rawData = ssApi.getRawData() write_tier_data(ssApi) print('Llamando a main') main() - Haz clic en Guardar.
En este punto, debes asegurarte de que has generado en las dependencias necesarias para este script.
Ejecuta el script.
Para hacer manualmente el script:
- Con el script abierto, haz clic en Ejecutar Script en la barra de menús de la parte superior de la pantalla.
- Introduce los parámetros necesarios para acceder a la API de Hojas de Cálculo, los ID de hoja y de hoja de cálculo, y el contenido de texto de la celda. Haz clic en Ejecutar Script.
Nota: Los ID pueden encontrarse en la URL de la hoja de cálculo: /hoja de cálculo/{spreadsheetId}/hoja de cálculo/{sheetId}.
Para verificar que el script se ha completado, comprueba la celda actualizada en la hoja de cálculo.
Ejecuta el script directamente desde una hoja de cálculo.
Este script, y otros similares, también pueden ejecutarse directamente desde una hoja de cálculo mediante el uso de automatizaciones.
Para utilizar el script con Automatizaciones:
- Elimina el código existente.
- Sustitúyelo por este código:
import requests import json import os AUTH_URL = "https://api.sandbox.wdesk.com/iam/v1/oauth2/token" SS_API_URL = 'https://api.sandbox.wdesk.com/platform/v1/spreadsheets/' # CLIENT_ID = os.getenv('CLIENT_ID') # CLIENT_SECRET = os.getenv('CLIENT_SECRET') # SPREADSHEET_ID = os.getenv('SPREADSHEET_ID') # SHEET_ID = os.getenv('SHEET_ID') # HELLO_WORLD = os.getenv('HELLO_WORLD') CLIENT_ID = "" # Introduce aquí tu Id de cliente CLIENT_SECRET = "" # Introduce aquí tu secreto de cliente DOCUMENT_ID = os.getenv('DOCUMENT_ID') INPUT_SHEET_ID = os.getenv('INPUT_SHEET_ID') INPUT_RESOURCE_ID = os.getenv('INPUT_RESOURCE_ID') def getSpreadsheetId(wurl): start = wurl.find("hojas_") if (start >= 0): return wurl[start + len("hojas_"):] return None def getSpreadsheetSectionId(sheetId, wurl): start = wurl.¡find("hojas_" + sheetId + "_") if (start >= 0): return wurl[start + len("hojas_" + sheetId + "_"):] return None SPREADSHEET_ID = getSpreadsheetId(INPUT_SHEET_ID) if SPREADSHEET_ID != None : SHEET_ID = getSpreadsheetSectionId(SPREADSHEET_ID, INPUT_RESOURCE_ID) HELLO_WORLD = "Holaaaaaaaaaa" class ApiAuth: def __init__(self): self._headers = {'Content-Tipo de': \ 'application/x-www-form-urlencoded;charset=UTF-8'} def getAuthToken(self): tokenRes = requests.post(AUTH_URL, data = 'client_id=' + CLIENT_ID + \ '&client_secret=' + CLIENT_SECRET + '&grant_type=client_credentials', \ headers = self._headers) tokenResponse = json.loads(tokenRes.text) return tokenResponse['access_token'] class SSApi: def __init__(self, accessToken): self._accessToken = 'Portador ' + accessToken self._ssApiUrl = SS_API_URL + SPREADSHEET_ID + "/hojas/" + SHEET_ID + \ "/valores/A2:H" self._headers = {'Autorización': self._accessToken} def getRawData(self): dataRes = requests.get(self._ssApiUrl, headers = self._headers) # print(dataRes) rawData = json.loads(dataRes.text) # todo gestiona la paginación # print("---", rawData['datos'][0]['valores'][0]) return rawData['datos'][0]['valores'] def updateRange(self, sheetId, range, values): url = SS_API_URL + SPREADSHEET_ID + "/hojas/" + sheetId + "/valores/" + \ rango print("Actualizar rango: ", url) print("Valores: ", valores) dataRes = solicitudes.put(url, headers = self._headers, \ data=json.dumps(values)) def write_tier_data(ssApi: SSApi): values = [] values.append([HELLO_WORLD]) ssApi.updateRange(HOJA_ID, 'A1:ZZZZ99', {"valores": valores}) def main(): authToken = ApiAuth().getAuthToken() ssApi = SSApi(authToken) # rawData = ssApi.getRawData() write_tier_data(ssApi) print('Llamando a main') main() - Ve a este artículo y sigue los pasos para ejecutar el script desde tu hoja de cálculo.