常见使用案例
| 来源 | 目标 | 要复制的字段 |
|---|---|---|
| 公司 | 机会 | 行业、公司规模、ARR |
| 人员 | 机会 | 电子邮件、电话、职位 |
| 机会 | 公司 | 最后一次成交金额、最后一次赢单日期 |
基础字段复制
示例:将联系人电子邮件复制到机会
目标:在机会上设置联系人时,将其电子邮件复制到该机会以便于访问。先决条件
在构建工作流之前,先在 设置 → 数据模型 → 机会 中创建目标字段:- 联系人邮箱(类型:Email)
- 联系人电话(类型:Phone)
设置
- 触发器:记录已更新(机会,联系人字段)
- 筛选条件:检查联系人不为空
-
搜索记录:查找关联的人员
- 对象:People
- 筛选条件:ID 等于
{{trigger.object.pointOfContact.id}}
-
更新记录:
- 对象:机会
- 记录:
{{trigger.object.id}} - 联系人邮箱:
{{searchRecords[0].email}} - 联系人电话:
{{searchRecords[0].phone}}
复制多个字段
示例:将公司信息同步到所有相关机会
目标:当公司详细信息发生变化时,更新所有相关的机会。设置
-
触发器:记录已更新(公司)
- 字段:行业、公司规模、年度收入
-
搜索记录:查找该公司的所有机会
- 对象:机会
- 筛选条件:公司 ID 等于
{{trigger.object.id}}
- Iterator:遍历每个机会
-
更新记录(在迭代器内):
- 对象:机会
- 记录:
{{iterator.currentItem.id}} - 公司行业:
{{trigger.object.industry}} - 公司规模:
{{trigger.object.companySize}} - 公司 ARR:
{{trigger.object.annualRevenue}}
在创建记录时复制
示例:用公司数据预填机会
目标:当创建与某公司关联的机会时,自动复制关键的公司信息。先决条件
在 设置 → 数据模型 → 机会 中创建目标字段:- 公司行业(类型:Text)
- 公司规模(类型:Number)
设置
-
触发器:记录已创建(机会)
- 筛选条件:公司不为空
-
搜索记录:获取关联公司的详细信息
- 对象:公司
- 筛选条件:ID 等于
{{trigger.object.company.id}}
-
更新记录:
- 对象:机会
- 记录:
{{trigger.object.id}} - 公司行业:
{{searchRecords[0].industry}} - 公司规模:
{{searchRecords[0].employees}}
任务和备注限制:任务和备注上的关系被硬编码为多对多,目前尚不可用于工作流触发器或操作。 要访问这些关系,请改用 API。
双向同步
示例:保持主要联系人同步
目标:当公司的主要联系人发生变化时,更新该联系人。 当某人被设为主要联系人时,更新公司。工作流 1:公司 → 人员
- 触发器:记录已更新(公司,主要联系人字段)
- 更新记录:将该人员的“是否为主要联系人”设为 true
- 搜索记录:查找之前的主要联系人
- 更新记录:将先前联系人的“是否为主要联系人”设为 false
工作流 2:人员 → 公司
- 触发器:记录已更新(人员,是否为主要联系人 = true)
- 更新记录:将公司的主要联系人设置为此人
在进行双向同步时要小心,避免无限循环。 在更新前使用筛选条件检查值是否实际发生变化。
使用代码进行复杂映射
示例:在复制过程中转换数据
目标:将人员的电话号码复制到机会并进行格式化。最佳实践
避免循环
- 不要创建相互无限触发的工作流
- 使用特定的字段条件
- 添加检查以确定值是否真的发生变化
处理缺失数据
- 在复制之前始终检查源记录是否存在
- 为可选字段提供默认值
- 当源字段为空时使用筛选条件跳过
性能
- 在复制到大量记录时进行批量更新
- 对于批量同步操作,使用计划的工作流
- 对于多条记录的更新,考虑使用 Iterator