Om te demonstreren hoe scripting in Workiva werkt, hebben we eerder een script gebouwd dat een cel in een spreadsheet bijwerkt. Dit artikel bouwt voort op dat voorbeeld door te laten zien hoe u dezelfde bewerking kunt uitvoeren met token-gebaseerde verificatie.
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.
Stap 1: Maak een scriptbestand
Dit script is een variatie op het script dat wordt gebruikt in ons artikel Sample: Script om spreadsheets bij te werken artikel. Deze versie beschermt de client-ID en het clientgeheim, en verkrijgt in plaats daarvan een token waarmee de code zich kan authenticeren in Workiva.
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 in het volgende:
# Welkom bij Workiva Scripting import requests import json import os from WorkivaAuth import WorkivaAuth OUTPUT_SS_ID = os.getenv('OUTPUT_SS_ID') OUTPUT_SHEET_ID = os.getenv('OUTPUT_SHEET_ID') SS_API_URL = 'https://api.app.wdesk.com/platform/v1/spreadsheets/' class SSApi: def __init__(self, accessToken, ssId, sheetId): self._accessToken = 'Bearer ' + accessToken self._headers = {'Authorization': self._accessToken} self._ssId = ssId self._sheetId = sheetId def updateRange(self, range, values): url = SS_API_URL + self._ssId + "/sheets/" + \ self._sheetId + "/values/" + range requests.put(url, headers=self._headers, data=json.dumps(values)) def updateSS(outputSSApi: SSApi): values = [] values.append(["Hello World"]) outputSSApi.updateRange('A1', {"values": values}) def main(): authToken = WorkivaAuth.getWorkivaAuthToken() outputSSApi = SSApi(authToken, OUTPUT_SS_ID, OUTPUT_SHEET_ID) updateSS(outputSSApi) print("SS bijgewerkt!!!") main() - Klik op Opslaan.
Stap 2: Genereer afhankelijkheden op uw lokale machine
Bij het doorwerken van deze sectie zult u merken dat deze variatie geen code bevat om een token te genereren op basis van client ID en clientgeheim. In plaats daarvan wordt de code geabstraheerd in een lokaal gemaakte bibliotheek met de naam WorkivaAuth en vervolgens verpakt in de dependencies.zip bundel naast de aanvraagbibliotheek.
Om mee te volgen, opent u de terminal op uw lokale machine en voert u deze stappen uit:
- Maak een map met de naam Creds.
mkdir Creds
- Stap in de map Creds.
cd Creds
- Maak een bestand requirements.txt met de volgende inhoud:
./WorkivaAuth/dist/WorkivaAuth-1.0.tar.gz requests==2.29.0
- Maak een map met de naam WorkivaAuth.
mkdir WorkivaAuth
- Stap in de map WorkivaAuth.
cd WorkivaAuth
- Maak in de WorkivaAuth map een setup.py bestand met de volgende inhoud:
from setuptools import setup, find_packages setup( name='WorkivaAuth', version='1.0', packages=find_packages(), install_requires=[ 'requests' ] )
- Maak in de WorkivaAuth map een andere map aan met de naam WorkivaAuth.
mkdir WorkivaAuth
Opmerking: Dit is geen typefout. Het juiste pad is ./WorkivaAuth/WorkivaAuth.
- Stap in de map WorkivaAuth die u net hebt aangemaakt.
cd WorkivaAuth
- Maak een leeg __init__.py bestand en een WorkivaAuth.py bestand in de WorkivaAuth/WorkivaAuth map met de volgende inhoud:
# WorkivaAuth import requests import json # Vervang door de eigenlijke URL AUTH_URL = "https://api.app.wdesk.com/iam/v1/oauth2/token" # Definieer de ontbrekende variabele CLIENT_ID CLIENT_ID = "your_client_id" # Definieer de ontbrekende variabele CLIENT_SECRET CLIENT_SECRET = "your_client_secret" def getWorkivaAuthToken(): data = { 'client_id': CLIENT_ID, "client_secret": CLIENT_SECRET, "grant_type": "client_credentials" } # Vervangen door de juiste headers headers = { 'Content-Type': 'application/x-www-form-urlencoded', } tokenRes = requests.post( AUTH_URL, data=data, headers=headers ) tokenResponse = json.loads(tokenRes.text) return tokenResponse['access_token']U zou nu de volgende mappenstructuur moeten hebben:
Creds/ |-- WorkivaAuth/ | |-- WorkivaAuth/ | | |-- __init__.py | | |-- WorkivaAuth.py | |-- setup.py |-- requirements.txt
-
Ga terug naar de map Creds.
cd ..
cd ..
- Voer de volgende commando's uit om uw WorkivaAuth distributiepakket te genereren.
cd WorkivaAuth
python3 setup.py sdist
cd ....
- Installeer de afhankelijkheid in een nieuwe map Dependencies.
pip3 install --target ./dependencies --requirement requirements.txt
- Maak een dependencies.zip bestand.
cd dependencies
zip -r ../dependencies.zip .
cd ....
In het laatste deel van dit artikel laten we u zien hoe u dit bestand kunt uploaden naar het script dat u hebt gemaakt in Stap 1.
Stap 3: Afhankelijkheden uploaden naar Workiva
Nu u uw afhankelijkhedenbestand hebt gemaakt, gaat u terug naar Workiva en uploadt u het als bron.
- Ga naar Workiva Scripting en open het scriptbestand dat u eerder in dit artikel hebt gemaakt.
- Ga naar het paneel Bronnen aan de linkerkant; klik met de rechtermuisknop in de lege ruimte net onder het huidige bestand en selecteer Bronbestanden uploaden.
- Selecteer Browse en zoek het bestand dependencies.zip dat u in de vorige stap hebt gemaakt.
- Upload het bestand dependencies.zip om te voltooien.
U zou een niet-selecteerbare bron moeten zien met de naam dependencies.zip, wat aangeeft dat u nu klaar bent om u te authenticeren in Workiva zonder enige inloggegevens vrij te geven!