动作类型详解

函数动作·批量(Batched Execution)

当同一个函数动作被一批触发时,默认是一次请求调一次函数。这一篇讲如何把它改成 一次执行吃下整批,以提升性能、规避编辑冲突。

原文 Palantir Foundry · Action types 预计阅读 9 分钟 互动演示 + 6 道测验
本文来源 · Source 内容整理自 Palantir Foundry 官方文档:
https://www.palantir.com/docs/foundry/action-types/function-actions-batched-execution/
原始标题:Action types · Function-backed actions · Batched execution

一句话速览

函数动作·批量(Batched Execution):当同一个函数动作被一批触发时,默认是一次请求调一次函数。这一篇讲如何把它改成 一次执行吃下整批,以提升性能、规避编辑冲突。

1 让一次执行吃下整批调用
当一个动作被批量触发时——例如在 Workshop 的行内编辑(inline edits)里,或在 Automate 里——背后的函…
2 启用批量执行
要启用批量执行,函数必须接收一个输入参数,而这个参数包含一个 struct 的列表 (也常被称为 "map" 或 "dictiona…
3 从逐条到批量
默认逐条的写法(一次处理一个 flight 与 destination)
1

一句话:让一次执行吃下整批调用

批量执行 = 把整批动作调用合并进一次函数执行。

当一个动作被批量触发时——例如在 Workshop 的行内编辑(inline edits)里,或在 Automate 里——背后的函数通常每个请求依次调用一次,并且所有编辑会在动作调用结束时原子地(atomically)应用。

Alternatively, to improve performance or resolve edit conflicts, you may wish to configure a function to receive the whole batch of action calls in a single execution. 或者,为了提升性能或解决编辑冲突,你也可以配置函数,让它在一个执行里接收整批动作调用。

也就是说,存在另一种选择:配置函数一次性接收整批,在一次执行里处理完所有调用。这常用于优化性能或规避编辑冲突。

2

默认行为 vs 批量配置

两种模式,按需取舍。

× 默认(逐条)
行为 · 每次请求顺序调用一次函数 · 所有编辑在动作调用结束时原子应用 · 批量大时调用次数多、易冲突
✓ 批量(一次吃整批)
行为 · 函数一次执行收下整批调用 · 适合提升性能、规避编辑冲突 · 需把函数改成"接收列表"的签名
3

如何启用批量执行

函数必须接收一个"包含 struct 列表"的单一参数。

要启用批量执行,函数必须接收一个输入参数,而这个参数包含一个 struct 的列表 (也常被称为 "map" 或 "dictionary")。

怎么传数据:启用批量执行后,你仍像往常一样把数据传进这个 struct 的各个字段—— 只是现在这些字段挂在一个"列表元素"上,整批列表作为单一参数传入。
4

单条调用 vs 批次调用

看列表参数里有几个 entry。

单次动作调用
触发一次函数执行,列表输入参数里有 1 个 entry
批量动作调用
触发一次函数执行,列表输入参数里有 多个 entry

关键区别:无论单条还是批次,都是"一次函数执行";差别只在列表参数里 entry 的数量。 这让批量场景的开销从"N 次执行"降到"1 次执行"。

5

示例:从逐条到批量

把"逐对象"的签名改成"收列表"的签名。

默认逐条的写法(一次处理一个 flight 与 destination):

@OntologyEditFunction() public updateDestination(flight: Flight, destination: Airport): void { // update flight object }

改成批量写法(一次收下整批,在单次执行里遍历处理):

@OntologyEditFunction() public updateDestinationBatch(batch: {flight: Flight, destination: Airport}[]): void { batch.forEach(({flight, destination}) => { // update flight object }); }

把函数改成接收 {flight, destination}[] 这样的列表后,就能在配置动作类型时启用批量执行, 让整批请求合并进这一次函数执行。

记忆口诀:批量执行 = 把"N 个独立入参"改成"1 个 struct 列表入参",再开启批量——单条 1 个 entry、批次多个 entry,都是一次执行。
6

动手:关于批量执行,哪句对?

逐个判断。点选项看解析。

一页带走

① 批量执行
让函数一次执行收下整批调用,而非逐条调用。
② 签名要求
单一参数 + struct 列表(map/dictionary)。
③ 单条 vs 批次
都是一次执行;区别在列表 entry 数:单条 1 个、批次多个。
④ 动机
提升性能、规避编辑冲突;默认仍是逐条 + 原子应用。

延伸阅读 · 相关页面

按主题横向跳转,不必顺着目录一篇篇读。

常见问题速答 · FAQ

关于「函数动作·批量(Batched Execution)」,读者最常问的几个问题。

一句话:让一次执行吃下整批调用是什么?
当一个动作被批量触发时——例如在 Workshop 的行内编辑(inline edits)里,或在 Automate 里——背后的函数通常每个请求依次调用一次,并且所有编辑会在动作调用结束时原子地(atomically)应用。
如何启用批量执行?
要启用批量执行,函数必须接收一个输入参数,而这个参数包含一个 struct 的列表 (也常被称为 "map" 或 "dictionary")。
示例:从逐条到批量是什么?
默认逐条的写法(一次处理一个 flight 与 destination)。