Um zu demonstrieren, wie Workiva Scripting in Workiva funktioniert, haben wir ein einfaches Skript erstellt, das eine Zelle in einer Kalkulationstabelle aktualisiert. Sie können diese Schritte befolgen, um das Skript in Ihrem eigenen Arbeitsbereich zu replizieren.
Hinweis: Scripting ist derzeit nur über Customize Workiva verfügbar. Erfahren Sie mehr.
Anforderungen
- Workiva Scripting muss für Ihren Arbeitsbereich aktiviert sein. Erfahren Sie mehr über Workiva Scripting.
- Die Rolle Script Editor ist erforderlich, um Scripts zu erstellen oder zu bearbeiten.
- Die in diesem Beispiel verwendete API-Berechtigung muss den Geltungsbereich „
file:write“ sowie Zugriff auf die Ziel-Tabelle haben. Eine Anleitung finden Sie unter „Workiva API-Einrichtung“. - Sie müssen Abhängigkeiten generieren, um dieses Skript direkt aus einer Kalkulationstabelle heraus ausführen zu können. Dazu gehört die Bibliothek „requests“, die für die Interaktion mit den öffentlichen Workiva-APIs unter erforderlich ist.
Erstellen Sie das Skript
Um das Skript in Ihrem Arbeitsbereich zu erstellen, gehen Sie folgendermaßen vor:
- Von der Startseite aus klicken Sie auf Erstellen => Skript.
- Geben Sie auf der rechten Seite einen Namen und eine kurze Beschreibung für das Skript ein.
-
Gehen Sie zum Skript-Editor in der Mitte des Bildschirms und löschen Sie den vorhandenen Code. Kopieren Sie Folgendes und fügen Sie es ein:
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"] Klasse 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", "Aktualisierung der Tabelle fehlgeschlagen") ) time.sleep(float(operationRes.headers.get("Retry-After", "2"))) raise TimeoutError("Die Aktualisierung der Tabelle wurde nicht vor Ablauf des Timeouts abgeschlossen") def updateRange(self, sheetId, range, values): url = ( SS_API_URL + SPREADSHEET_ID + "/sheets/" + sheetId + "/values/" + range ) print("Bereich aktualisieren:", url) print("Werte:", 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("Die Tabellenaktualisierung hat keine Operations-URL zurückgegeben") 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("Aufruf von main") main() - Klicken Sie auf Speichern.
An diesem Punkt sollten Sie sicherstellen, dass Sie die notwendigen Abhängigkeiten für dieses Skript generiert haben.
Das Skript ausführen
Bevor Sie dieses Skript ausführen, müssen Sie die Abhängigkeiten erstellen. Das Abhängigkeitspaket enthält die Bibliothek „ requests “, die zum Aufruf der öffentlichen Workiva-APIs verwendet wird.
- Wenn das Skript geöffnet ist, klicken Sie in der Menüleiste am oberen Bildschirmrand auf Skript ausführen.
- Geben Sie die Parameter ein, die für den Zugriff auf die Tabellenkalkulations-API erforderlich sind, die IDs der Tabellenkalkulation und des Arbeitsblatts sowie den Textinhalt für die Zelle. Klicken Sie auf Script ausführen.
Hinweis: Die IDs sind in der URL des Arbeitsblatts zu finden: /spreadsheet/{spreadsheetId}/sheet/{sheetId}.
Überprüfen Sie die aktualisierte Zelle im Arbeitsblatt, um zu sehen, ob das Skript vollständig ist.
Führen Sie das Skript direkt aus einer Tabellenkalkulation aus
Die Workiva-Automatisierungen stellen die Tabellen- und Blatt-IDs über Umgebungsvariablen bereit, übergeben jedoch keine benutzerdefinierten Laufzeiteingaben. Um dieses Skript in einer Automatisierung zu verwenden, ersetzen Sie die „runtime-input“-Deklarationen im Originalskript. Beschränken Sie den Zugriff auf das Skript auf autorisierte Benutzer, da Benutzer mit Quellcode-Berechtigungen die im Code definierten Werte einsehen können.
Ersetzen:
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")Mit:
CLIENT_ID = "your_client_id" CLIENT_SECRET = "Ihr_Client-Geheimnis" SPREADSHEET_ID = os.getenv("INPUT_SPREADSHEET_ID") SHEET_ID = os.getenv("INPUT_SPREADSHEET_SHEET_ID") HELLO_WORLD = "Hello World"- Ersetzen Sie die Platzhalter für die Anmeldedaten und den Zellwert durch Ihre Werte.
- Speichern Sie das Skript.
- Erstellen Sie im Bereich „Automatisierungen“ der Tabelle eine Automatisierung mit dem Auslöser „ “ (manuelle Ausführung) .
- Fügen Sie eine Aktion „ : Skript ausführen“ ( ) hinzu und wählen Sie dieses Skript aus.
- Speichern und führen Sie die Automatisierung aus.
Weitere Informationen finden Sie unter „ “ (Skripte mit Automatisierungen ausführen) .