配置连接器的触发事件与执行动作。
概述
触发动作是指当一个事件发生时,触发数据流程。而产生触发事件的应用系统就是触发系统。Action 执行动作与 Trigger 操作差别不大。区别在于 Trigger 可作为集成流第一个节点,而接口若配置为 Action,则不能作为集成流的第一个触发事件。。
开始之前
- 角色权限:你所在企业需经过研发灰度,可访问连接器开发页面
- 前置配置:已了解目标系统的触发事件类型和接口要求
第一步:选择触发事件
根据真实系统需求,选择哪些事件作为 Trigger(触发事件),选择新建。
实时触发:触发事件产生时,应用系统自动把数据推送到集成平台,集成平台随即响应并执行。
第二步:配置触发字段
根据接口要求,配置对应字段。
第三步:配置 Rest Hook
如果事件需要实时触发,需要选择 Rest Hook。Hook 地址有两种级别:
- 按照集成流生成:每个集成流都有不同 Hook 地址,用于不同事件区分
- 按照账号生成:系统级别(系统授权对应账号),多个事件共用一个 Hook 地址
Hook 地址需要在连接器配置完成后,进入集成流选择对应事件,生成对应 Hook 地址。
第四步:配置订阅请求
部分 SaaS 系统支持根据接口动态将 Hook 地址注册到对方系统。此时可按对方系统接口文档要求,配置对应接口及参数。。订阅请求中需要将平台生成的回调地址传给外部系统,使用 path("['input_data']['bundleUrl']") 引用。
第五步:配置轮询
如果事件需要轮询,配置轮询间隔或 cron 表达式。平台的轮询框架每次执行时会自动算好一组查询参数,塞进 pollingTimeArg 参数包中。
轮询占位符
| 占位符 | 含义 | 取值说明 |
|---|---|---|
path("['input_data']['pollingTimeArg']['startTime']") |
本次查询的时间窗口起点 | 毫秒时间戳(13 位数字)。取「上次拉到数据的时间」,没拉到过数据则往前回溯约 28 小时 |
path("['input_data']['pollingTimeArg']['endTime']") |
本次查询的时间窗口终点 | 毫秒时间戳,即本次轮询的执行时刻 |
path("['input_data']['pollingTimeArg']['limit']") |
每页条数 | 平台固定为 100,不需要你设置 |
path("['input_data']['pollingTimeArg']['offset']") |
翻页偏移量 | 第一页从 0 开始,每翻一页自动 +100,框架持续翻页直到取完(单轮上限 100 万条) |
轮询配置要点
你不需要自己填值。只需在连接器的请求配置(URL、Query 参数、Header、请求体)里用占位符把四个值「接」出来,再传给目标系统的查询接口。。
提示:时间单位是毫秒。如果目标接口要的是秒级时间戳,要把参数放到 Query 参数或请求体的值里,用整条表达式做除法:
path("['input_data']['pollingTimeArg']['startTime']") / 1000。
配置 Action 类型
Action 执行动作与 Trigger 操作差别不大,配置方式相同。
预期结果与验证
配置完成后,Trigger 事件可以正常触发,Action 动作可以正常执行。
验证方法:
- 进入集成流,选择对应事件生成 Hook 地址。
- 触发一次事件,观察集成流是否按配置响应。
- 若未响应,检查触发字段、订阅请求与轮询配置是否正确。
配置动态字段(可选)
如果 Trigger 的输入字段需要根据连接账号、已选对象或已填值动态变化,例如选择「订单」后才出现「订单状态」「最小金额」,可以配置动态字段函数。
说明:动态字段只影响配置页面上的表单展示,不参与事件数据的解析。Webhook 推送解析、轮询执行仍由请求配置和数据处理函数完成。
标准模式与函数模式(二选一)
Trigger 的输入字段有两种来源,不会合并:
| 配置 | 表单实际显示 |
|---|---|
| 标准模式:只配置静态字段 | 显示配置的静态字段 |
| 函数模式:开启并绑定函数 | 只显示函数返回的字段,静态字段被忽略 |
| 函数模式,但函数执行失败 | 回退显示静态字段 |
| 函数模式,函数返回结构不合法 | 页面报错,不回退 |
配置建议:
- 函数模式会整体替换表单,函数必须返回全部字段,固定字段也要一起返回;
- 建议保留一套完整的静态字段,作为函数异常时的兜底;
- 如果只是少量固定字段,不需要使用函数模式。
配置步骤
- 打开「连接器开发平台」→「连接器」,进入需要配置的 Trigger 节点。
- 找到「字段属性输入」。
- 将模式切换为「函数模式」。
- 在「绑定函数」中填写已发布的函数 API 名。
- 保存节点,并发布连接器版本。
- 进入集成流,添加该 Trigger 并选择连接账号,验证表单字段。
前提:函数需已在函数平台创建并发布,命名空间为 erpdss、绑定对象为 NONE、唯一入参为 syncArg(Map)。
函数入参
函数只有一个入参 syncArg(Map),常用字段如下:
| 字段 | 类型 | 说明 |
|---|---|---|
type |
String | 固定为 SCHEMA,表示获取表单结构 |
connectorKey |
String | 连接器标识 |
operation |
String | Trigger 节点标识 |
tenantId |
String | 企业 ID |
connectionId |
String | 当前选择的连接账号 ID,未选账号时为空 |
auth_data |
Map | 当前连接账号的授权数据,如 token、区域 |
input_data |
Map | 当前表单已填值,只有固定值 |
extra.schemaArg |
Map | 完整请求参数,含 inputData 与 securityContext |
注意:
input_data里只有固定值,表达式、变量、上游节点输出都不会被求值。需要变量的场景请在运行态请求配置或数据处理函数中处理。
返回格式
返回字段列表,推荐直接使用 inputFields:
{
"inputFields": [
{
"apiName": "objectType",
"title": "对象类型",
"type": "string",
"schemaType": "select",
"required": true,
"options": [
{ "value": "order", "label": "订单" },
{ "value": "customer", "label": "客户" }
]
}
]
}
也可以返回 fields,或 outputData.inputFields。
注意:不要把字段数组直接放在
outputData下(如"outputData": [ ... ]),否则会提示 Schema 格式错误。也不要用code/message表示失败:平台会把它当作成功结果,随后因缺少字段列表报 Schema 格式错误。
字段配置要点
| 属性 | 说明 |
|---|---|
apiName |
字段标识,同一表单内唯一 |
title |
字段显示名称 |
type |
string、number、integer、boolean、array、object |
schemaType |
控件类型,必须使用小写值 |
required |
是否必填 |
defaultValue |
默认值 |
needReload |
该字段值变化后是否重新拉取整张表单 |
visibleIf |
可见条件,如 { "objectType": "order" } |
options |
select 的选项,元素为 { "value": "...", "label": "..." } |
multiple |
select 是否多选 |
placeholder |
输入提示 |
minLength / maxLength |
文本长度限制 |
minimum / maximum |
数字范围 |
schemaType 常用值(小写,写错会退化成普通文本框):
string_input:单行/多行文本number_input:数字输入integer_input:整数输入select:下拉选择switch:开关array:数组array_object:对象数组object:子表单fixed_string:固定文本
联动提醒:
- 需要触发表单重载的字段,配置
needReload: true; - 例如对象类型字段配置
needReload: true后,用户切换对象类型会重新调用函数,刷新后续字段; - 动态字段函数只对 Trigger 生效,Action 始终使用静态字段。
完整函数示例
下面是一个按「对象类型」联动、同时包含固定字段、下拉、数字范围和账号信息判断的完整示例:
/**
* @description Trigger 动态字段函数示例
* @bindingObjectApiName NONE
*/
Map authData = (syncArg["auth_data"] ?: [:]) as Map
Map inputData = (syncArg["input_data"] ?: [:]) as Map
String objectType = inputData["objectType"] as String
String region = authData["region"] as String
List fields = []
// 固定字段:函数模式不会自动合并静态字段,必须在这里返回
fields.add([
apiName : "objectType",
title : "对象类型",
type : "string",
schemaType: "select",
required : true,
needReload: true,
options : [
[value: "order", label: "订单"],
[value: "customer", label: "客户"]
]
])
// 条件字段:根据已选对象类型追加
if (objectType == "order") {
fields.add([
apiName : "orderStatus",
title : "订单状态",
type : "string",
schemaType: "select",
required : false,
options : [
[value: "paid", label: "已支付"],
[value: "unpaid", label: "未支付"]
]
])
fields.add([
apiName : "minAmount",
title : "最小金额",
type : "number",
schemaType: "number_input",
required : false,
minimum : 0,
step : 0.01,
precision : 2
])
} else if (objectType == "customer") {
fields.add([
apiName : "customerLevel",
title : "客户级别",
type : "string",
schemaType: "string_input",
required : false,
maxLength : 32
])
}
// 账号信息参与判断
if (region == "CN") {
fields.add([
apiName : "regionHint",
title : "数据区域",
type : "string",
schemaType: "fixed_string",
fixedValue: "中国区",
readonly : true
])
}
log.info("[trigger-fields] connectorKey=" + syncArg["connectorKey"] + ", operation=" + syncArg["operation"] + ", objectType=" + objectType + ", fieldCount=" + fields.size())
return [inputFields: fields]
需要远程下拉选项时,在函数里调用第三方接口后,把结果转成 options 数组即可,元素只需要 value 和 label。接口失败时返回空选项或静态兜底选项,不要让整个函数失败。
失败与排查
| 现象 | 原因 | 处理 |
|---|---|---|
| 页面始终显示静态字段 | 函数模式未开启,或函数名为空 | 检查「字段属性输入」是否为函数模式,绑定函数是否填写 |
函数里取不到 input_data |
表单还没填值,或字段值不是固定值 | 先在页面填写后再刷新;变量不会被求值 |
| 修改函数后页面没变化 | 命中缓存,或连接器版本未发布 | 换一个入参触发新调用,等待 2 分钟缓存过期,确认已发布版本 |
| 页面提示 Schema 格式错误 | 返回结构不合法、字段列表为空、元素不是对象 | 改为 inputFields 平铺返回,至少返回一个对象元素 |
| 下拉显示成普通文本框 | schemaType 写成大写或不支持的类型 |
使用小写 select |
函数返回 code / message 但没有回退 |
平台把返回内容当作成功结果 | 需要降级时抛出异常,或在函数内部返回兜底字段 |
| Action 节点配了函数不生效 | 函数模式只对 Trigger 生效 | Action 使用静态字段 |
验收建议:
- 选择连接账号,确认表单出现函数返回的字段;
- 切换对象类型,确认后续字段随之刷新;
- 切换另一个连接账号,确认账号相关字段或选项变化;
- 让函数异常或返回空选项,确认页面回退到静态字段或函数兜底字段,没有白屏。