注:目前仅可通过自定义 Workiva 实现脚本编写。了解更多。
脚本设置和概述
脚本通常是如何使用的?
Workiva Scripting 可以自动完成许多重复性、耗时的任务,否则这些任务需要手动完成。一些常见的用例包括零行抑制、报表布局以及对多个文档应用自定义格式。
也就是说,脚本可以广泛地根据许多业务需求进行调整。代码是您自己的;您如何使用它很大程度上取决于您的脚本开发人员、工作区设置以及您企业中当前的手动流程数量。
脚本编写方面有任何限制吗?
是的,Workiva 对 Workiva Scripting 和脚本 API 都实施了一些限制。
了解更多关于 脚本限制的信息。
如何从链中触发脚本?
这需要 Workiva Scripting 连接器。
请阅读以下文章了解更多信息:
Workiva Scripting 是否符合 FedRAMP 标准?
绝对地。在 Workiva,安全是我们的首要任务,我们构建了基础设施,以确保您的代码运行既安全又高效。
如何保护对脚本的访问权限?
您可以通过以下几种方式保护您的代码,防止未经授权的用户访问:
- 为授权用户创建专用工作区或组织: 创建一个仅包含授权用户的工作区,甚至整个组织,是最安全的选择。例如,合作伙伴可以在您的组织中为 Workiva Scripting 创建一个工作区,并让客户从他们自己的组织运行脚本。
- 使用角色: Workiva 的脚本角色 (脚本查看器、脚本运行器和脚本编辑器)是分层的,以便用户只能访问其工作所需的脚本。例如,“脚本运行者”角色允许用户运行脚本,但不能访问任何代码。
- 使用权限: 脚本文件可以在文件级别进行限制,以便只有特定用户才能编辑或查看您的代码。
了解更多关于 脚本角色和权限的信息。
是否有允许脚本运行的IP地址列表?
是否有可用的脚本库?
我们收集了一些 示例脚本供 您使用。这些脚本也可以使用上一个问题中链接的文章手动创建。
使用脚本编辑器
如何管理脚本版本?
目前,Workiva 只存储脚本的最新版本。
您可以在 Workiva 中创建脚本文件的副本并将其整理到文件夹中,但我们建议使用单独的版本控制系统——特别是如果您有企业版本控制系统。
如何将 Workiva 代码与企业版本控制系统(例如 GitHub)同步?
Workiva脚本 API 提供 源代码管理端点,用户可以从中检索脚本的最新版本或将脚本更新到更新的版本。Workiva 目前不提供脚本文件与企业版本控制系统(例如 Gitlab、Github、SVN)之间的自动同步。
如何通过脚本访问 Workiva 系统和非 Workiva 系统的凭据?
有两种方法可以访问 Workiva 系统和非 Workiva 系统的凭据:
- (首选)将凭据作为运行时输入发送
- 将凭据硬编码到代码中
为什么脚本运行时输入的值在执行过程中没有显示在日志输出中?
这是安全防范措施。由于输入参数可能包含敏感数据,我们会将其从用户可见的日志中删除。
如何在脚本执行期间存储临时数据?
Workiva 脚本可以使用 Python Open 函数 (外部链接) 临时读取和写入 /tmp 文件夹中的文件。其他路径受限。
每次运行脚本时,Workiva 的云基础设施中都会启动一个容器。该容器已安装 Linux 系统,除 /tmp(为空)外,所有路径均受到限制。数据可以临时写入和读取到该路径中。运行结束后,容器就会被丢弃。
我可以像使用 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 Scripting 连接器 或 Workiva Scripting API 来执行托管在其他位置的脚本。
如果使用脚本 API,则必须在主工作区中创建并托管一个脚本,该脚本的唯一目的是调用脚本 API 并在辅助工作区中执行该脚本。
我可以在脚本执行时发送运行时输入/参数吗?
目前,自动化功能不允许在脚本执行时向脚本发送运行时输入。
自动化流程会向脚本执行发送哪些元数据?工作区 ID 是否已发送?
当从自动化流程执行脚本时,发送的唯一参数是配置该自动化流程的文档的 ID。
如何通过脚本执行访问 Workiva 系统和非 Workiva 系统的凭据?
当从自动化流程执行脚本时,唯一的选择是将凭据硬编码到代码本身中。
能否同时从两个或多个文件中执行同一个脚本?
是的,脚本可以从同一个文件或多个文件同时执行。
使用链中的脚本
我可以执行托管在其他工作区、组织或环境(亚太地区、欧盟、美国)中的脚本吗?
是的,托管在一个工作区中的脚本可以由托管在不同工作区、组织或环境中的链执行。
为此,链中使用的 Workiva Scripting 连接器 必须使用在主机工作区中创建的 API 授权进行设置,并且使用的脚本/IAM URL 必须与正确的工作区相对应。
请阅读以下文章了解更多信息:
同一个脚本能否在两个节点上同时执行?
同一个脚本可以在同一条链中的多个节点和/或多条链中同时执行。
如何在另一个链节点中使用脚本的输出?
运行脚本命令 允许您为每个生成 JSON 的输出输入示例有效负载,然后可以在其他节点中使用该有效负载。
能否通过脚本中的参数链式创建临时文件?
只要二进制文件不超过 128KB,就可以将其设置为参数。
API 和库
支持哪些 API 和库?
Workiva Scripting 目前支持:
- Workiva 公共 API
- 非Workiva API
- Python 标准库
- Python包索引 ( PyPI)
对其他语言的支持仍在考虑之中,未来可能会实现。
了解更多: 支持的 Workiva 脚本库和依赖项
Workiva Scripting 中使用的是哪个版本的 Python?
Workiva Scripting 目前支持使用 Python 3.9 和 Python 3.13,对 Python 3.9 的支持将于 2026 年 3 月结束。
了解更多: 在 Workiva 中将脚本迁移到 Python 3.13
Workiva是否为使用Python或Java等流行语言的API客户端提供支持?
我们目前不提供 Python 或 Java 的公共 SDK。
但是,我们为 Workiva API 提供了开放的 API 规范,因此您可以自行生成这些库。例如,您可以获取 Workiva 平台 API 的 OAS文件并生成客户端库。
是否有专门用于脚本编写的 API?
脚本 API 端点 可作为 Workiva 的原型平台 API中的原型端点使用。
如何创建和查看 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更新单元格格式?
更新工作表内容 原型端点允许使用 Python 代码更新单元格格式。
我可以读取/写入或上传存储在 Workiva 中的非 Workiva 文件吗?
目前,没有可用于读取/写入或上传存储在 Workiva 中的非 Workiva 文件的端点。
我可以通过编程方式创建和管理自动化流程吗?
目前还没有可用于以编程方式创建或管理自动化的端点。