出站脚本入参
出站流程通过 Studio 脚本调用外部系统。对方接口的地址、方法和包体由对方的 API 决定,Soln 不做规定;Soln 规定的是脚本能拿到什么:执行到目标节点时,脚本收到的 payload 结构如下,schema 为 soln.runtime-context/v1。
在画布的目标节点里,配置面板的 脚本入参示例 展示同一份结构,可以直接对照着写脚本。
payload 结构
| 字段 | 说明 |
|---|---|
schema | 固定为 soln.runtime-context/v1 |
source | 流程与执行信息:flowId、flowCode、bindingId、executionId、direction(outbound)、stage(target),以及 trigger.mode(执行类型)、trigger.action(本次触发动作)、trigger.actions(流程配置的推送时机) |
form | 本地主表单:id、apiName、name |
record | 本地主记录:id 和 data(本地字段 API 名到值的映射) |
input.transformedData | 转换节点映射后的外部字段值 |
input.transformedChildTables | 子表映射结果,见下文 |
input.request | 触发本流程的原始输入 |
input.context | 本次执行的上下文快照 |
result | 脚本执行前固定为 null |
runtime | locale、timezone、executionId、traceId |
draft、selection、child 在出站目标执行中为空或空数组,不需要使用。
input.transformedData
key 是外部字段编码,值是经过匹配字段、选项映射和主体映射处理后的结果。没有参与映射的字段不会出现。
input.transformedChildTables
数组,每一项只包含:
| 字段 | 说明 |
|---|---|
localFormId | 本地子表表单 ID |
externalObjectId | 外部子对象 ID |
rows | 子表行数组,每行只有映射后的外部业务字段 |
写脚本时要注意三点:
rows只包含映射后的外部业务字段,不带op、status、addedRows、updatedRows、deletedRows这类平台字段- 本地已删除的子表行不会出现在快照里
- 因此要判断外部侧哪些行需要删除,脚本必须自己拉取外部当前状态,与
rows对账
脚本示例
export default async function main(
payload: StudioScriptRuntimeContextPayload,
context: StudioScriptContext
) {
const { transformedData, transformedChildTables } = payload.input;
const response = await context.http.requestJson({
method: 'POST',
url: 'https://partner.example/api/orders',
json: {
order: transformedData,
lines: transformedChildTables[0]?.rows ?? [],
},
timeoutMs: 20_000,
idempotency: { key: 'order-' + payload.record.id },
});
return { ok: true, externalId: response.data.id };
}
出站请求的行为
| 行为 | 说明 |
|---|---|
| 鉴权 | 运行时按该 OpenLink 的出站鉴权配置自动添加鉴权请求头,并覆盖脚本设置的同名请求头,详见出站鉴权 |
| 超时 | Studio 脚本默认 30 秒,OpenLink 集成脚本为 60 秒;脚本里的单次 HTTP 请求建议设置更短的超时 |
| 重试 | 默认只请求一次;需要重试时由脚本传入 retry,默认可重试状态码为 408、425、429、500、502、503、504 |
| 幂等 | 需要脚本显式传入 idempotency(字符串或对象),默认请求头为 Idempotency-Key;不传就不发 |