Om te demonstreren hoe Workiva Scripting in Workiva werkt, hebben we een eenvoudig script gemaakt dat een cel in een spreadsheet bijwerkt. Je kunt deze stappen volgen om het script in je eigen werkruimte te repliceren.
Opmerking : Scripting is momenteel alleen beschikbaar via Workiva aanpassen. Meer informatie.
Vereisten
- Workiva Scripting moet ingeschakeld zijn voor uw werkruimte. Leer meer over Workiva Scripting.
- De rol Scripteditor is vereist om scripts te maken of te bewerken.
- De API-machtiging die in dit voorbeeld wordt gebruikt, moet de scope
file:write hebben en toegang tot het doelspreadsheet. Zie Workiva API-installatie voor instructies. - Je moet afhankelijkheden genereren om dit script rechtstreeks vanuit een spreadsheet uit te voeren. Dit omvat de "requests"-bibliotheek die nodig is om te communiceren met de Workiva Public API's .
Bouw het script
Volg deze stappen om het script in uw werkruimte te bouwen:
- Klik vanuit het startscherm op + Maken => Script .
- Voer aan de rechterkant een naam en een korte beschrijving voor het script in.
-
Ga naar de scripteditor in het midden van het scherm en verwijder alle bestaande code. Kopieer en plak het volgende:
import os import time import requests AUTH_URL = "https://api.app.wdesk.com/oauth2/token" SS_API_URL = "https://api.app.wdesk.com/spreadsheets/" API_VERSION = "2026-01-01" REQUEST_TIMEOUT = 30 OPERATION_TIMEOUT = 120 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-Type": "application/x-www-form-urlencoded;charset=UTF-8", "X-Version": API_VERSION, } def getAuthToken(self): tokenRes = requests.post( AUTH_URL, data={ "client_id": CLIENT_ID, "client_secret": CLIENT_SECRET, "grant_type": "client_credentials", }, headers=self._headers, timeout=REQUEST_TIMEOUT, ) tokenRes.raise_for_status() return tokenRes.json()["access_token"] class SSApi: def __init__(self, accessToken): self._accessToken = "Bearer " + accessToken self._ssApiUrl = ( SS_API_URL + SPREADSHEET_ID + "/sheets/" + SHEET_ID + "/values/A2:H" ) self._headers = { "Authorization": self._accessToken, "X-Version": API_VERSION, } def getRawData(self): dataRes = requests.get( self._ssApiUrl, headers=self._headers, timeout=REQUEST_TIMEOUT, ) dataRes.raise_for_status() rawData = dataRes.json() return rawData["data"][0]["values"] def waitForOperation(self, operationUrl): deadline = time.monotonic() + OPERATION_TIMEOUT while time.monotonic() < deadline: operationRes = requests.get( operationUrl, headers=self._headers, timeout=REQUEST_TIMEOUT, ) operationRes.raise_for_status() operation = operationRes.json() if operation["status"] == "completed": return if operation["status"] == "failed": raise RuntimeError( operation.get("failureReason", "Spreadsheet-update mislukt") ) time.sleep(float(operationRes.headers.get("Retry-After", "2"))) raise TimeoutError("Spreadsheet-update was niet voltooid vóór de time-out") def updateRange(self, sheetId, range, values): url = ( SS_API_URL + SPREADSHEET_ID + "/sheets/" + sheetId + "/values/" + range ) print("Bereik bijwerken:", url) print("Waarden:", values) dataRes = requests.put( url, headers=self._headers, json=values, timeout=REQUEST_TIMEOUT, ) dataRes.raise_for_status() operationUrl = dataRes.headers.get("Location") if not operationUrl: operationUrl = dataRes.json().get("operationLocation") if not operationUrl: raise RuntimeError("Het bijwerken van het spreadsheet leverde geen bewerkings-URL op") self.waitForOperation(operationUrl) def write_tier_data(ssApi): ssApi.updateRange(SHEET_ID, "A1", {"values": [[HELLO_WORLD]]}) def main(): authToken = ApiAuth().getAuthToken() ssApi = SSApi(authToken) write_tier_data(ssApi) print("main wordt aangeroepen") main() - Klik op Opslaan .
Op dit punt moet je ervoor zorgen dat je de benodigde afhankelijkheden voor dit script hebt gegenereerd.
Voer het script uit.
Je moet de benodigde afhankelijkheden genereren voordat je dit script kunt uitvoeren. Het dependency bundle bevat de requests library die gebruikt wordt om de Workiva Public API's aan te roepen.
- Klik, zodra het script geopend is, op Script uitvoeren in de menubalk bovenaan het scherm.
- Voer de parameters in die nodig zijn om toegang te krijgen tot de Spreadsheets API, de spreadsheet- en blad-ID's en de tekstinhoud voor de cel. Klik op Script uitvoeren .
Opmerking : De ID's zijn te vinden in de URL van het spreadsheet: /spreadsheet/ {spreadsheetId} /sheet/ {sheetId} .
Om te controleren of het script is voltooid, controleert u de bijgewerkte cel in het spreadsheet.
Voer het script rechtstreeks vanuit een spreadsheet uit.
Workiva-automatiseringen leveren de spreadsheet- en blad-ID's via omgevingsvariabelen, maar geven geen aangepaste runtime-inputs door. Om dit script met een automatisering te gebruiken, vervangt u de runtime-input-declaraties in het oorspronkelijke script. Beperk de toegang tot het script tot geautoriseerde gebruikers, omdat gebruikers met bronrechten de waarden in de code kunnen bekijken.
Vervangen:
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")Met:
CLIENT_ID = "uw_client_id" CLIENT_SECRET = "uw_client_secret" SPREADSHEET_ID = os.getenv("INPUT_SPREADSHEET_ID") SHEET_ID = os.getenv("INPUT_SPREADSHEET_SHEET_ID") HELLO_WORLD = "Hallo wereld"- Vervang de inloggegevens-placeholders en celwaarden door uw eigen waarden.
- Sla het script op.
- Maak in het paneel Automatiseringen van de spreadsheet een automatisering aan met een trigger Handmatige uitvoering .
- Voeg een Script uitvoeren actie toe en selecteer dit script.
- Sla de automatisering op en voer deze uit.
Voor meer informatie, zie Scripts uitvoeren met automatiseringen .