Workiva Scripting 包含在 Customize Workiva 中。要使用脚本功能,您的工作区必须启用“自定义 Workiva/脚本”功能,并且用户需要相应的脚本角色和文件权限。
脚本设置和概述
脚本通常是如何使用的?
Workiva Scripting 可以自动完成许多重复性、耗时的任务,否则这些任务需要手动完成。一些常见的用例包括零行抑制、报表布局以及对多个文档应用自定义格式。
更广泛地说,脚本可以根据您独特的业务需求进行调整——让您可以根据组织的运作方式定制和扩展工作流程,并实现您可以信赖的受控执行。代码是您自己的;您如何使用它很大程度上取决于您的脚本开发人员、工作区设置以及您企业中当前的手动流程数量。随着越来越多的工作由人工智能辅助完成,脚本编写为这些工作提供了一个可靠、可重复的基础,以便采取行动。
脚本编写方面有任何限制吗?
是的,Workiva 对 Workiva Scripting 和脚本 API 都实施了一些限制。
了解更多关于 Workiva脚本限制的信息。
如何从链中触发脚本?
这需要 Workiva Scripting 连接器。
请阅读以下文章了解更多信息:
Workiva Scripting 是否符合 FedRAMP 标准?
绝对地。在 Workiva,安全是我们的首要任务,我们构建了基础设施,以确保您的代码运行既安全又高效。您的脚本在 Workiva 管理的、符合 FedRAMP 标准的基础设施上执行——与您的其他 Workiva 工作一样,在同一个受信任的平台、权限和治理下运行。
如何保护对脚本的访问权限?
您可以通过以下几种方式保护您的代码,防止未经授权的用户访问:
- 为授权用户创建专用工作区或组织: 创建一个仅包含授权用户的工作区,甚至整个组织,是最安全的选择。例如,合作伙伴可以在您的组织中为 Workiva Scripting 创建一个工作区,并让客户从他们自己的组织运行脚本。
- 使用角色: Workiva 脚本角色 (脚本编辑器、脚本查看器和脚本运行器)是分层的,以便用户只能访问其工作所需的脚本。例如,“脚本运行者”角色允许用户运行脚本,但不能访问任何代码。
- 使用权限: 脚本文件可以在文件级别进行限制,以便只有特定用户才能编辑或查看您的代码。
了解更多关于 Workiva脚本角色和权限的信息。
是否有允许脚本运行的IP地址列表?
是否有可用的脚本库?
是的。我们收集了一些 示例脚本供 您使用。您还可以使用支持中心创建和管理脚本部分中的操作指南文章来构建自己的脚本。
使用脚本编辑器
如何管理脚本版本?
目前,Workiva 只存储脚本的最新版本。
您可以在 Workiva 中创建脚本文件的副本并将其组织到文件夹中,但我们建议使用单独的版本控制系统——特别是如果您有企业版本控制系统,请参阅Workiva 脚本:开发流程最佳实践。
如何将 Workiva 代码与企业版本控制系统(例如 GitHub)同步?
Workiva脚本 API 提供 源代码管理端点,用户可以从中检索脚本的最新版本或将脚本更新到更新的版本。Workiva 目前不提供脚本文件与企业版本控制系统(例如 Gitlab、Github、SVN)之间的自动同步。
如何通过脚本访问 Workiva 系统和非 Workiva 系统的凭据?
有两种方法可以访问 Workiva 系统和非 Workiva 系统的凭据:
- (首选)将凭据作为运行时输入发送
- 将凭据硬编码到代码中
为什么脚本运行时输入的值在执行过程中没有显示在日志输出中?
这是安全防范措施。由于输入参数可能包含敏感数据,我们会将其从用户可见的日志中删除。
如何在脚本执行期间存储临时数据?
Workiva 脚本可以使用 Python Open 函数 (外部链接)临时读取和写入 /tmp 文件夹中的文件。其他路径受限。
每次运行脚本时,Workiva 的云基础设施中都会启动一个容器。该容器已安装 linux,除 /tmp (为空)外,所有路径均受到限制。数据可以临时写入和读取到该路径中。运行结束后,容器就会被丢弃。
我可以像使用 Chains 那样,定义可在多个脚本中使用的全局变量吗?
目前还没有这个计划。但是,如果您的脚本作为 Chains 工作流的一部分运行,则可以使用 Chains 变量 并将其值作为运行时输入传递给脚本。
我可以发送文件作为参数吗?
只要二进制数据不超过 128KB 并且编码为文本(即 二进制到文本编码),就可以将其作为参数发送。
我可以在脚本中访问组织 ID、工作区 ID 和区域吗?
是的,组织 ID、工作区 ID 和区域(美国、亚太、欧盟)可以通过环境变量供脚本代码访问。例如, os.getenv("WORKIVA_ORGANIZATION_ID")。
| 多变的 | 描述 |
|---|---|
| WORKIVA_ORGANIZATION_ID | 脚本托管所在的 Workiva 组织的唯一 ID。 |
| WORKIVA_ACCOUNT_ID | 脚本所在的 Workiva 工作区的唯一 ID。 |
| WORKIVA_CLUSTER_DOMAIN | 脚本托管的生产环境的 Workiva 区域(美国、亚太或欧盟)。 |
| WORKIVA_SCRIPTING_SCRIPT_ID | 正在运行的脚本的唯一 ID。 |
| WORKIVA_SCRIPTING_RUN_ID | 当前脚本运行的唯一ID。 |
| WORKIVA_SCRIPTING_MEMORY_LIMIT | 脚本单次运行期间可用的最大内存量。 |
| WORKIVA_SCRIPTING_DISK_LIMIT | 脚本在单次运行期间可以使用的 /tmp 目录中的最大磁盘存储空间。 |
我可以在一个 Workiva 脚本中使用另一个 Workiva 脚本中的代码吗?
您无法直接从一个 Workiva 脚本导入或调用另一个 Workiva 脚本。对于一小段可重用的代码,您可以将其复制粘贴到每个需要它的脚本中。
对于需要在多个脚本中重复使用的代码,更好的方法是将其打包为共享依赖项。您可以构建一个包含共享库(甚至包括根据Workiva公共 API 规范生成的客户端代码)的dependencies.zip包,然后将该包上传到每个需要它的脚本。这样,您可以将通用代码保存在一个地方,并在不同的脚本中重复使用,而无需将其复制到每个脚本中。
有关构建和上传依赖项的步骤,请参阅支持的脚本库和依赖项。
使用自动化脚本
我可以执行托管在其他工作区、组织或环境(亚太地区、欧盟、美国)中的脚本吗?
Workiva 中的 自动化功能 只能在文件所在的同一工作区中执行脚本。但是,可以使用 Workiva Scripting 连接器 或 Workiva Scripting API 来执行托管在其他位置的脚本。
如果使用脚本 API,则必须在主工作区中创建并托管一个脚本,该脚本的唯一目的是调用脚本 API 并在辅助工作区中执行该脚本。
我可以在脚本执行时发送运行时输入/参数吗?
目前,自动化功能不允许在脚本执行时向脚本发送运行时输入。
自动化流程会向脚本执行发送哪些元数据?工作区 ID 是否已发送?
当从自动化流程中执行脚本时,会发送以下参数。
- DOCUMENT_ID: 运行自动化的文档的 ID。
- INPUT_SHEET_ID: 用于管理自动化输入参数的电子表格的 WURL。
- INPUT_RESOURCE_ID: “输入”电子表格中该部分的 WURL。
- INPUT_SPREADSHEET_ID: “输入”电子表格的 ID。
- INPUT_SPREADSHEET_SHEET_ID: “输入”电子表格中部分的 ID。
有关更多信息,请参阅 Workiva 支持页面 使用自动化执行脚本。
如何通过脚本执行访问 Workiva 系统和非 Workiva 系统的凭据?
当从自动化流程执行脚本时,唯一的选择是将凭据硬编码到代码本身中。
能否同时从两个或多个文件中执行同一个脚本?
是的,脚本可以从同一个文件或多个文件同时执行。
使用链中的脚本
我可以执行托管在其他工作区、组织或环境(亚太地区、加拿大、欧洲、中东和非洲地区、美国)中的脚本吗?
是的,托管在一个工作区中的脚本可以由托管在不同工作区、组织或环境中的链执行。
为此,链中使用的 Workiva Scripting 连接器 必须使用在主机工作区中创建的 API 授权进行设置,并且使用的脚本/IAM URL 必须与正确的工作区相对应。
请参阅以下文章了解更多信息:
同一个脚本能否在两个节点上同时执行?
同一个脚本可以在同一条链中的多个节点和/或多条链中同时执行。
如何在另一个链节点中使用脚本的输出?
运行脚本命令 允许您为每个生成 JSON 的输出输入示例有效负载。然后,该输出结果可供其他节点使用。
能否通过脚本中的参数链式创建临时文件?
只要二进制文件不超过 128KB,就可以将其设置为参数。
API 和库
支持哪些 API 和库?
Workiva Scripting 目前支持:
- Workiva 公共 API
- 非Workiva API
- Python 标准库
- Python包索引 ( PyPI)
Workiva Scripting 目前仅支持 Python。
了解更多: 支持的 Workiva 脚本库和依赖项
Workiva Scripting 中使用的是哪个版本的 Python?
新脚本运行在 Python 3.13 上。Workiva Scripting 仍然支持现有的 Python 3.9 脚本,但对 Python 3.9 的支持将于 2027 年 10 月结束——因此您应该尽快将所有 Python 3.9 脚本迁移到 Python 3.13。
了解更多: 在 Workiva 中将脚本迁移到 Python 3.13
Workiva是否为使用Python或Java等流行语言的API客户端提供支持?
我们目前不提供 Python 或 Java 的公共 SDK。
但是,我们为 Workiva API 提供了开放的 API 规范,因此您可以自行生成这些库。例如,您可以获取 Workiva 平台 API 的 OAS文件并生成客户端库。
是否有专门用于脚本编写的 API?
是的。脚本 API 端点 目前作为原型端点在 Workiva 的原型平台 API中提供。
公共脚本 API 端点将于 2026 年夏季推出。一旦可用,您将被要求迁移到公共端点——对 Workiva Scripting 非公共端点(包括原型)的支持将于 2027 年 10 月结束。
如何创建和查看 Workiva 公共 API 的 API 授权?
您需要按照此处的 说明获取客户端 ID 和密钥。
如何使用 Python 进行 Workiva 公共 API 的授权?
以下代码片段调用 IAM 服务生成访问令牌,然后使用该令牌对脚本原型端点进行身份验证。它将获取 API 授权(即客户端)在创建该授权的工作区中有权访问的所有脚本的列表。
import requests import json import os AUTH_URL = "https://api.app.wdesk.com/iam/v1/oauth2/token" SCRIPTING_API_URL = "https://api.app.wdesk.com/prototype/platform/scripts/" CLIENT_ID = os.getenv('CLIENT_ID') CLIENT_SECRET = os.getenv('CLIENT_SECRET') tokenResponse = requests.post( AUTH_URL, data = 'client_id=' + CLIENT_ID + '&client_secret=' + CLIENT_SECRET + '&grant_type=client_credentials', headers = {'Content-Type': 'application/x-www-form-urlencoded; \ charset=UTF-8'}) accessToken = 'Bearer ' + json.loads(tokenResponse.text)['access_token'] dataRes = requests.get(SCRIPTING_API_URL, headers = {'Authorization': accessToken}) print(json.loads(dataRes.text))
如何使用Python更新单元格格式?
您可以通过调用 Workiva 平台 API 的更新工作表内容端点(POST /spreadsheets/{spreadsheetId}/sheets/{sheetId}/update)从脚本更新单元格格式。使用applyFormats字段应用粗体、数字和货币格式以及底纹等格式,使用applyBorders应用边框。将多个格式操作批量到一个请求中——每个字段接受一个操作数组,并且端点有速率限制——而不是为每个范围发送一个请求。
了解更多:更新表格内容和电子表格数据指南。
我可以读取/写入或上传存储在 Workiva 中的非 Workiva 文件吗?
是的。使用 Workiva 的文件管理 API,您可以将非 Workiva 文件(例如 PDF、图像或其他任意文件类型)作为支持文档上传到平台,从而保留原始文件。要上传一个文件,请使用导入文件端点,并将kind设置为SupportingDocument。支持文档会与您的其他 Workiva 文件一起显示,并且可以像其他任何文件一样进行列出、移动、复制、导出(下载)和删除。
了解更多:文件管理 API 简介
我可以通过编程方式创建和管理自动化流程吗?
目前还没有可用于以编程方式创建或管理自动化的端点。