Per dimostrare come funziona Workiva Scripting in Workiva, abbiamo creato un semplice script che aggiorna una cella di un foglio di calcolo. Puoi seguire questi passaggi per replicare lo script nel tuo spazio di lavoro.
Nota: Lo scripting è attualmente disponibile solo tramite la funzione Personalizza Workiva. Per saperne di più.
Requisiti
- Workiva Scripting deve essere abilitato per il tuo workspace. Scopri di più su Workiva Scripting.
- Il ruolo Script Editor è necessario per creare o modificare gli script.
- L'autorizzazione API utilizzata in questo esempio deve avere l'ambito "
file:write " e l'accesso al foglio di calcolo di destinazione. Per le istruzioni, consultare la guida alla configurazione dell'API di Workiva. - Devi generare le dipendenze per poter eseguire questo script direttamente da un foglio di calcolo. Ciò includerà la libreria "requests" necessaria per interagire con le API pubbliche di Workiva .
Creare lo script
Per creare lo script nel tuo spazio di lavoro, segui i seguenti passaggi:
- Dalla Home, clicca su + Crea => Script.
- A destra, inserisci un nome e una breve descrizione per lo script.
-
Vai all'editor di script al centro dello schermo ed elimina tutto il codice presente. Copia e incolla quanto segue:
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") classe 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"] classe 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", "Aggiornamento del foglio di calcolo non riuscito") ) time.sleep(float(operationRes.headers.get("Retry-After", "2"))) raise TimeoutError("L'aggiornamento del foglio di calcolo non è stato completato prima del timeout") def updateRange(self, sheetId, range, values): url = ( SS_API_URL + SPREADSHEET_ID + "/sheets/" + sheetId + "/values/" + range ) print("Intervallo di aggiornamento:", url) print("Valori:", 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") se non è presente operationUrl: raise RuntimeError("L'aggiornamento del foglio di calcolo non ha restituito un URL dell'operazione") 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("Chiamata della funzione main") main() - Clicca su Salva.
A questo punto, devi assicurarti di aver generato le dipendenze necessarie per questo script.
Esegui lo script
Prima di eseguire questo script, è necessario generare le dipendenze. Il pacchetto delle dipendenze include la libreria ` requests `, utilizzata per richiamare le API pubbliche di Workiva.
- Con lo script aperto, clicca su Esegui script nella barra dei menu in alto.
- Inserisci i parametri necessari per accedere all'API di Spreadsheets, gli ID del foglio e del foglio e il contenuto del testo della cella. Clicca su Esegui lo script.
Nota: Gli ID si trovano nell'URL del foglio di calcolo: /spreadsheet/{spreadsheetId}/sheet/{sheetId}.
Per verificare che lo script venga completato, controlla la cella aggiornata del foglio di calcolo.
Esegui lo script direttamente da un foglio di calcolo
Le automazioni di Workiva forniscono gli ID dei fogli di calcolo e dei fogli tramite variabili d'ambiente, ma non trasmettono input personalizzati in fase di esecuzione. Per utilizzare questo script con un'automazione, sostituire le dichiarazioni relative agli input di runtime presenti nello script originale. Limitare l'accesso allo script agli utenti autorizzati, poiché gli utenti con permessi di lettura del codice sorgente possono visualizzare i valori definiti nel codice stesso.
Sostituisci:
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")Con:
CLIENT_ID = "il_tuo_id_cliente" CLIENT_SECRET = "il_tuo_client_secret" SPREADSHEET_ID = os.getenv("INPUT_SPREADSHEET_ID") SHEET_ID = os.getenv("INPUT_SPREADSHEET_SHEET_ID") HELLO_WORLD = "Hello World"- Sostituisci i segnaposto delle credenziali e il valore della cella con i tuoi valori.
- Salva lo script.
- Nel pannello "Automazioni" del foglio di calcolo, crea un'automazione con un trigger " " (Esecuzione manuale) .
- Aggiungi un'azione "Esegui script" in e seleziona questo script.
- Salva ed esegui l'automazione.
Per ulteriori informazioni, consulta Eseguire script con le automazioni .