Workiva Scripting 为在 Workiva 平台上运行 Python 代码提供了一个灵活、安全的环境。通过编写可自动执行可重复流程的自定义脚本,您可以跨多个报告、文件和工作区大规模提高效率。随着越来越多的工作由人工智能辅助完成,脚本编写为这些工作提供了一个可靠的、受控的基础,从而将灵活性与必要的控制相结合,将自动化转化为您可以信赖的可重复结果。
Workiva 自定义功能包含脚本编写功能。要使用脚本功能,您的工作区必须启用“自定义 Workiva/脚本”功能,并且用户需要相应的脚本角色和文件权限。
角色和权限
在 Workiva 中,角色是系统范围内的设置,这意味着它们为工作区中的每个脚本建立了一个标准的访问级别。Workiva 提供了三种脚本编写角色 ,可由您的工作区管理员分配。
| 角色 | 访问权限级别 |
|---|---|
| 脚本运行器 | 可以运行脚本。 |
| 脚本查看器 | 可以查看脚本。 |
| 脚本编辑器 | 可以查看、创建和编辑脚本。 |
有关更多信息,请参阅 脚本角色和权限 支持页面。
如何使用 Workiva 脚本
在您的工作区启用脚本后,脚本将与网站中的其他电子表格、文档和演示文稿一起出现在您的主屏幕上。您可以创建新脚本,也可以从文件列表中选择现有脚本。
脚本编辑器用于构建、编辑和运行网站内的脚本。
其中包括:
- 中心画布您将在此处编写脚本
- 底部有一个输出部分 ,您可以在这里查看脚本运行的结果
- 顶部有一个菜单栏,您可以在这里保存或运行脚本 。
- 右侧有一个属性面板 ,用于管理脚本属性和运行历史记录
- 左侧的“来源”面板
脚本构建完成后,可以通过手动、编程、链式调用或从 Workiva 文件内部执行。
手动运行脚本:
- 点击屏幕顶部菜单栏中的 运行脚本 。
- 点击 + 添加变量。
- 请输入要作为参数传递的环境变量的名称和值。
- 点击 运行脚本。
要以编程方式运行脚本,请向 发起脚本执行 原型端点发出 HTTP POST 请求。
脚本 ID 包含在端点中;您可以通过在 POST 请求正文中定义环境变量的名称和值来传递参数。
脚本输出会记录为 stderr 和 stdout,以及一些使用指标,以监控产品的运行状况。
要在 Workiva 文件中运行脚本,您需要按照以下步骤操作:
在文档、电子表格或演示文稿的“自动化”面板中,创建一个新的自动化,并选择 手动执行 作为触发器。
添加 执行脚本 操作,选择要运行的脚本,并可选择定义哪些用户或角色有权执行该脚本。
注: 只有指定的用户才能看到并运行文件中的自动化脚本。
了解更多关于 使用自动化执行脚本的信息。
创建练习脚本
在网站上创建实际脚本之前,我们建议您先在脚本编辑器中创建一个练习脚本。这将有助于您在处理实时数据之前熟悉相关流程。
按照以下步骤创建一个简单的脚本来计算货币的时间价值:
- 从主页,点击 + 创建 => 脚本。
- 在右侧,输入剧本名称和简短描述。
- 转到屏幕中间的脚本编辑器,删除所有现有代码。你应该有一张空白的画布。
-
将此代码粘贴到编辑器中:
import os, sys # https://www.investopedia.com/terms/t/timevalueofmoney.asp # 货币时间价值公式 # FV = PV x [1 + (i / n)]^(nxt) # 假设投资 10,000 美元,年利率 10%,按年复利计算,投资期限为一年。 # 这笔钱的未来价值为: # FV = $10,000 x [1 + (10% / 1)] ^ (1 x 1) = $11,000 compounding_periods = {"annual" : 1, "monthly" : 12, "quarterly" : 4, "daily" :365} if 'INVESTMENT' not in os.environ: print("无法运行脚本。" 投资缺失。") sys.exit() if 'INTEREST_RATE' not in os.environ: print("无法运行脚本。缺少利率。") sys.exit() if 'COMPOUNDING_PERIOD' not in os.environ: print("无法运行脚本。缺少复利周期。") sys.exit() if 'YEARS' not in os.environ: print("无法运行脚本。缺少年数。"" sys.exit() compounding_period = os.getenv('COMPOUNDING_PERIOD') if compounding_period not in compounding_periods.keys(): print("无法运行脚本。", compounding_period," 不是一个有效的周期") sys.exit() investment = int(os.getenv('INVESTMENT')) interest_rate = float(os.getenv('INTEREST_RATE')) years = int(os.getenv('YEARS')) n = compounding_periods[compounding_period] FV = investment * pow((1 + ((interest_rate/100) / n)),n * years) print("假设投资金额为""investment,",投资期限为""year,"年,利率为""interest_rate,"%,复利计算,基数为""compounding_period,"。") print("这笔钱的未来价值是:") print(FV) - 点击左上角的 运行脚本 。
- 点击 +添加变量 ,然后输入您想要使用的任何参数。
- 点击 运行脚本完成。
现在可以在屏幕底部的 输出面板中查看脚本结果。
如何获得 Workiva Scripting 的支持
如有任何关于 Workiva 脚本的问题,您可以联系 Workiva 支持。但请注意,我们的客服人员只能协助解答有关平台本身的问题——我们无法协助您编写代码或进行代码故障排除。
您还可以浏览支持中心的Workiva 脚本编写部分,了解更多信息,包括脚本编写的基础知识、创建和管理脚本、示例、故障排除和最佳实践。
这些资源将帮助您开始使用 Workiva 脚本。有关使用 Workiva 公共 API 编写代码以通过编程方式与 Workiva 平台交互的问题,请访问我们的 开发者和 API 社区。
FAQ|常见问题解答
脚本通常是如何使用的?
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包,然后将该包上传到每个需要它的脚本。这样,您可以将通用代码保存在一个地方,并在不同的脚本中重复使用,而无需将其复制到每个脚本中。
有关构建和上传依赖项的步骤,请参阅支持的脚本库和依赖项。