Om te laten zien hoe scripting in Workiva werkt, hebben we eerder een script gemaakt dat een cel in een spreadsheet bijwerkt. Dit artikel bouwt voort op dat voorbeeld door te laten zien hoe dezelfde bewerking kan worden uitgevoerd met behulp van tokengebaseerde authenticatie.
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.
Stap 1: Maak een scriptbestand aan
Dit script is een variant van het script dat gebruikt wordt in ons artikel Voorbeeld: Script om spreadsheets bij te werken . Deze versie beschermt de client-ID en het clientgeheim en verkrijgt in plaats daarvan een token waarmee de code zich bij Workiva kan authenticeren.
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:
# 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.
Naarmate u dit gedeelte doorneemt, zult u merken dat deze variant geen code bevat om een token te genereren op basis van client-ID en clientgeheim. De code wordt echter geabstraheerd in een lokaal aangemaakte bibliotheek genaamd WorkivaAuth en vervolgens verpakt in de dependencies.zip bundel samen met de request-bibliotheek.
Om mee te doen, open je de terminal op je computer en volg je deze stappen:
-
Maak een map aan met de naam Creds .
mkdir Creds -
Ga naar de map Creds .
cd-credits -
Maak een requirements.txt bestand aan met de volgende inhoud:
./WorkivaAuth/dist/WorkivaAuth-1.0.tar.gz requests==2.29.0 -
Maak een map met de naam WorkivaAuth .
mkdir WorkivaAuth -
Ga naar de map WorkivaAuth .
cd WorkivaAuth -
Maak in de map WorkivaAuth een bestand setup.py aan 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 map WorkivaAuth een nieuwe map aan met de naam WorkivaAuth .
mkdir WorkivaAuthOpmerking : Dit is geen typefout. Het juiste pad is ./WorkivaAuth/WorkivaAuth .
-
Ga naar de map WorkivaAuth die je zojuist hebt aangemaakt.
cd WorkivaAuth -
Maak een leeg __init__.py bestand en een WorkivaAuth.py bestand aan in de WorkivaAuth/WorkivaAuth map met de volgende inhoud:
# WorkivaAuth import requests import json # Vervang door de daadwerkelijke URL AUTH_URL = "https://api.app.wdesk.com/iam/v1/oauth2/token" # Definieer de ontbrekende variabele CLIENT_ID CLIENT_ID = "jouw_client_id" # Definieer de ontbrekende variabele CLIENT_SECRET CLIENT_SECRET = "jouw_client_secret" def getWorkivaAuthToken(): data = { 'client_id': CLIENT_ID, 'client_secret': CLIENT_SECRET, 'grant_type': 'client_credentials' } # Vervang 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']Je zou nu de volgende mapstructuur moeten hebben:
Creds/ |-- WorkivaAuth/ | |-- WorkivaAuth/ | | |-- __init__.py | | |-- WorkivaAuth.py | |-- setup.py |-- requirements.txt -
Ga terug naar de map Creds .
cd ..cd .. -
Voer de volgende opdrachten uit om uw WorkivaAuth distributiepakket te genereren.
cd WorkivaAuthpython3 setup.py sdistcd .. -
Installeer de afhankelijkheid in een nieuwe map Dependencies .
pip3 install --target ./dependencies --requirement requirements.txt -
Maak een dependencies.zip bestand aan.
cd dependencieszip -r ../dependencies.zip .cd ..
In het laatste deel van dit artikel laten we je zien hoe je dit bestand kunt uploaden naar het script dat is gemaakt in Stap 1 .
Stap 3: Upload de afhankelijkheden naar Workiva
Nu je je afhankelijkheidsbestand hebt aangemaakt, ga je terug naar Workiva en upload je het als bron.
- Ga naar Workiva Scripting en open het scriptbestand dat je eerder in dit artikel hebt gemaakt.
- Ga naar het paneel Bronnen aan de linkerkant; klik met de rechtermuisknop in de lege ruimte direct onder het huidige bestand en selecteer Bronbestanden uploaden .
- Selecteer Bladeren en zoek het bestand dependencies.zip dat je in de vorige stap hebt gemaakt.
- Upload het bestand dependencies.zip om te voltooien.
Je zou een niet-selecteerbare bron met de naam dependencies.zip moeten zien, wat aangeeft dat je nu klaar bent om je bij Workiva aan te melden zonder je inloggegevens prijs te geven!