Pour démontrer le fonctionnement de Workiva Scripting dans Workiva, nous avons construit un script simple qui met à jour une cellule dans une feuille de calcul. Vous pouvez suivre les étapes suivantes pour reproduire le script dans votre propre espace de travail.
Note: La création de scripts n'est actuellement possible que par l'intermédiaire de Customize Workiva. En savoir plus.
Exigences
- Workiva Scripting doit être activé pour votre espace de travail. En savoir plus sur Workiva Scripting.
- Le rôle d'éditeur de script est nécessaire pour créer ou modifier des scripts.
- Vous devez générer les dépendances afin d'exécuter ce script directement à partir d'une feuille de calcul. Il comprendra la bibliothèque "requests" nécessaire pour interagir avec les Workiva Public APIs.
Construire le script
Pour créer le script dans votre espace de travail, procédez comme suit :
- Depuis Home, cliquez sur Create => Script.
- Dans la partie droite, saisissez un nom et une brève description du script.
- Allez dans l'éditeur de script au milieu de l'écran et supprimez tout code existant. Copiez et collez ce qui suit :
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'] class 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() - Cliquez sur Enregistrer.
À ce stade, vous devez vous assurer que vous avez généré les dépendances nécessaires pour ce script.
Exécuter le script
Pour effectuer manuellement le script :
- Lorsque le script est ouvert, cliquez sur Run Script dans la barre de menu en haut de l'écran.
- Saisissez les paramètres nécessaires pour accéder à l'API des feuilles de calcul, les identifiants de la feuille de calcul et de la feuille, ainsi que le contenu textuel de la cellule. Cliquez sur Run Script.
Note: Les ID se trouvent dans l'URL de la feuille de calcul : /spreadsheet/{spreadsheetId}/sheet/{sheetId}.
Pour vérifier que le script est terminé, vérifiez la cellule mise à jour dans la feuille de calcul.
Exécuter le script directement à partir d'une feuille de calcul
Ce script, et d'autres similaires, peuvent également être exécutés directement à partir d'une feuille de calcul grâce à l'utilisation des automatismes .
Pour utiliser ce script avec des automatismes :
- Supprimer le code existant.
- Remplacer par ce 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 = "" # Enter your client Id here CLIENT_SECRET = "" # Enter your client secret here 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'] class 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() - Allez sur cet article et suivez les étapes pour exécuter le script à partir de votre feuille de calcul.