Om te demonstreren hoe Workiva Scripting werkt in Workiva, hebben we een eenvoudig script gemaakt dat een cel in een spreadsheet bijwerkt. U kunt deze stappen volgen om het script in uw eigen werkruimte te repliceren.
Opmerking: Scripting is momenteel alleen beschikbaar via Customize Workiva. Meer informatie.
Vereisten
- Workiva Scripting moet ingeschakeld zijn voor uw werkruimte. Meer informatie over Workiva Scripting.
- De rol Script Editor is vereist om scripts te maken of te bewerken.
- U moet dependencies genereren om dit script rechtstreeks vanuit een spreadsheet uit te voeren. Dit omvat de "requests" bibliotheek die nodig is voor interactie met de Workiva Public API's.
Het script bouwen
Volg deze stappen om het script in uw werkruimte te bouwen:
- Klik vanuit Home op + Create => Script.
- Voer aan de rechterkant een naam en 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 erin:
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-Type': \ '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'] 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} def getRawData(self): dataRes = requests.get(self._ssApiUrl, headers = self._headers) # print(dataRes) rawData = json.loads(dataRes.text) # todo handle pagination # print("---", rawData['data'][0]['values'][0]) return rawData['data'][0]['values'] def updateRange(self, sheetId, range, values): url = SS_API_URL + SPREADSHEET_ID + "/sheets/" + sheetId + "/values/" + \ range print("Update Range: ", url) print("Values: ", values) dataRes = requests.put(url, headers = self._headers, \data=json.dumps(values)) def write_tier_data(ssApi: SSApi): values = [] values.append([HELLO_WORLD]) ssApi.updateRange(SHEET_ID, 'A1:ZZZZ99', {"values": values}) def main(): authToken = ApiAuth().getAuthToken() ssApi = SSApi(authToken) # rawData = ssApi.getRawData() write_tier_data(ssApi) print('Calling main') main() - Klik op Opslaan.
Op dit punt moet u ervoor zorgen dat u de benodigde afhankelijkheden voor dit script hebt gegenereerd.
Het script uitvoeren
Het script handmatig uitvoeren:
- Als het script geopend is, klikt u op Script uitvoeren in de menubalk boven in het scherm.
- Voer de parameters in die nodig zijn voor toegang 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 de spreadsheet: /spreadsheet/{spreadsheetId}/sheet/{sheetId}.
Om te controleren of het script voltooid is, controleert u de bijgewerkte cel in de spreadsheet.
Het script rechtstreeks vanuit een spreadsheet uitvoeren
Dit script, en soortgelijke scripts, kunnen ook rechtstreeks vanuit een spreadsheet worden uitgevoerd met behulp van automations.
Om dit script met automatiseringen te gebruiken:
- Verwijder de bestaande code.
- Vervang het door deze code:
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 = "" # Voer hier uw cliënt-ID in CLIENT_SECRET = "" # Voer hier uw cliënt-secret in 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("sheets_") if (start >= 0): return wurl[start + len("sheets_"):] return None def getSpreadsheetSectionId(sheetId, wurl): start = wurl.find("sheets_" + sheetId + "_") if (start >= 0): return wurl[start + len("sheets_" + 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-Type': \ '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'] 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} def getRawData(self): dataRes = requests.get(self._ssApiUrl, headers = self._headers) # print(dataRes) rawData = json.loads(dataRes.text) # todo handle pagination # print("---", rawData['data'][0]['values'][0]) return rawData['data'][0]['values'] def updateRange(self, sheetId, range, values): url = SS_API_URL + SPREADSHEET_ID + "/sheets/" + sheetId + "/values/" + \ range print("Update Range: ", url) print("Values: ", values) dataRes = requests.put(url, headers = self._headers, \data=json.dumps(values)) def write_tier_data(ssApi: SSApi): values = [] values.append([HELLO_WORLD]) ssApi.updateRange(SHEET_ID, 'A1:ZZZZ99', {"values": values}) def main(): authToken = ApiAuth().getAuthToken() ssApi = SSApi(authToken) # rawData = ssApi.getRawData() write_tier_data(ssApi) print('Calling main') main() - Ga naar dit artikel en volg de stappen om het script vanuit uw spreadsheet uit te voeren.