跳到主要内容

出站脚本入参

出站流程通过 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
runtimelocale、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;不传就不发