为了演示 Workiva 中的脚本是如何工作的,我们之前构建了一个 脚本,用于更新电子表格中的单元格。本文以该示例为基础,演示如何使用基于令牌的身份验证来执行相同的操作。
注:目前仅可通过自定义 Workiva 实现脚本编写。了解更多。
要求
- 您的工作区必须启用 Workiva 脚本功能。了解更多关于Workiva脚本的信息。
- 要创建或编辑脚本,需要 脚本编辑器 角色。
步骤 1:创建脚本文件
此脚本是我们在 示例:更新电子表格的脚本 文章中使用的脚本的变体。此版本保护客户端 ID 和客户端密钥,而是获取一个令牌,允许代码对 Workiva 进行身份验证。
要在您的工作区中构建脚本,请按照以下步骤操作:
- 从主页,点击 + 创建 => 脚本。
- 在右侧,输入剧本名称和简短描述。
- 转到屏幕中间的脚本编辑器,删除所有现有代码。复制并粘贴以下内容:
# 欢迎使用 Workiva 脚本 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 updated!!!") main() - 点击 保存。
步骤 2:在本地计算机上生成依赖项
在学习本节的过程中,你会注意到这种变体不包含任何根据客户端 ID 和客户端密钥生成令牌的代码。相反,代码被抽象成一个名为 WorkivaAuth 的本地创建的库,然后与请求库一起打包到 dependencies.zip 包中。
请按照以下步骤操作:打开本地计算机上的终端,并完成以下步骤:
- 创建一个名为 Creds的文件夹。
mkdir Creds
- 进入 Creds文件夹
。cd
Creds - 创建一个 名为requirements.txt 的文件,内容如下:
./WorkivaAuth/dist/WorkivaAuth-1.0.tar.gz requests==2.29.0
- 创建一个名为 WorkivaAuth 的文件夹。
mkdir WorkivaAuth
- 进入 WorkivaAuth文件夹
。cd
WorkivaAuth - 在 WorkivaAuth 文件夹中,创建一个 名为setup.py 的文件
,内容如下: from setuptools import setup, find_packages setup( name='WorkivaAuth', version='1.0', packages=find_packages(), install_requires=[ 'requests' ]
) - 在 WorkivaAuth 文件夹中,创建另一个名为 WorkivaAuth的文件夹。
mkdir WorkivaAuth
注意: 这不是拼写错误。正确的路径是 ./WorkivaAuth/WorkivaAuth.
- 进入您刚刚创建的 WorkivaAuth 文件夹。
cd WorkivaAuth
- 在 WorkivaAuth / WorkivaAuth文件夹中创建一个空的 ` __init__. py`文件和一个 WorkivaAuth.py 文件,内容如下:
# WorkivaAuth import requests import json # 替换为实际 URL AUTH_URL = "https://api.app.wdesk.com/iam/v1/oauth2/token" # 定义缺失的变量 CLIENT_ID CLIENT_ID = "your_client_id" # 定义缺失的变量 CLIENT_SECRET CLIENT_SECRET = "your_client_secret" def getWorkivaAuthToken(): data = { 'client_id': CLIENT_ID, 'client_secret': CLIENT_SECRET, 'grant_type': 'client_credentials' } # 替换为相应的请求头 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']您现在应该看到以下文件夹结构:
Creds/ |-- WorkivaAuth/ | |-- WorkivaAuth/ | | |-- __init__.py | | |-- WorkivaAuth.py | |-- setup.py |-- requirements.txt
-
返回到 Creds 文件夹。
cd ..
cd ..
- 运行以下命令生成您的 WorkivaAuth 发行包。
cd WorkivaAuth
python3 setup.py sdist
cd ..
- 将依赖项安装到新的 Dependencies 目录中。
pip3 install --target ./dependencies --requirement requirements.txt
- 创建 dependencies.zip 文件。
cd dependencies
zip -r ../dependencies.zip .
cd
..
在本文的最后一部分,我们将向您展示如何将此文件上传到 步骤 1中创建的脚本。
步骤 3:将依赖项上传到 Workiva
现在您已经创建了依赖项文件,接下来您将返回 Workiva 并将其作为源上传。
- 转到 Workiva Scripting 并打开您在本文章前面创建的脚本文件 。
- 转到左侧的 源 面板;在当前文件正下方的空白处单击鼠标右键,然后选择 上传源文件。
- 选择 浏览 并找到您在上一步中创建的 dependencies.zip 文件。
- 上传 dependencies.zip 文件即可完成。
您应该看到一个名为 dependencies.zip的不可选择的源,这表明您现在可以无需暴露任何凭据即可对 Workiva 进行身份验证!