跳转到主要内容
将关联记录的数据直接显示在你的记录上——例如,将公司的员工数量显示在其机会上。 在原生支持嵌套字段之前,此工作流变通方案很有用。

常见使用案例

来源目标要复制的字段
公司机会行业、公司规模、ARR
人员机会电子邮件、电话、职位
机会公司最后一次成交金额、最后一次赢单日期

基础字段复制

示例:将联系人电子邮件复制到机会

目标:在机会上设置联系人时,将其电子邮件复制到该机会以便于访问。

先决条件

在构建工作流之前,先在 设置 → 数据模型 → 机会 中创建目标字段:
  • 联系人邮箱(类型:Email)
  • 联系人电话(类型:Phone)

设置

  1. 触发器:记录已更新(机会,联系人字段)
  2. 筛选条件:检查联系人不为空
  3. 搜索记录:查找关联的人员
    • 对象:People
    • 筛选条件:ID 等于 {{trigger.object.pointOfContact.id}}
  4. 更新记录
    • 对象:机会
    • 记录:{{trigger.object.id}}
    • 联系人邮箱:{{searchRecords[0].email}}
    • 联系人电话:{{searchRecords[0].phone}}

复制多个字段

示例:将公司信息同步到所有相关机会

目标:当公司详细信息发生变化时,更新所有相关的机会。

设置

  1. 触发器:记录已更新(公司)
    • 字段:行业、公司规模、年度收入
  2. 搜索记录:查找该公司的所有机会
    • 对象:机会
    • 筛选条件:公司 ID 等于 {{trigger.object.id}}
  3. Iterator:遍历每个机会
  4. 更新记录(在迭代器内):
    • 对象:机会
    • 记录:{{iterator.currentItem.id}}
    • 公司行业:{{trigger.object.industry}}
    • 公司规模:{{trigger.object.companySize}}
    • 公司 ARR:{{trigger.object.annualRevenue}}

在创建记录时复制

示例:用公司数据预填机会

目标:当创建与某公司关联的机会时,自动复制关键的公司信息。

先决条件

设置 → 数据模型 → 机会 中创建目标字段:
  • 公司行业(类型:Text)
  • 公司规模(类型:Number)

设置

  1. 触发器:记录已创建(机会)
    • 筛选条件:公司不为空
  2. 搜索记录:获取关联公司的详细信息
    • 对象:公司
    • 筛选条件:ID 等于 {{trigger.object.company.id}}
  3. 更新记录
    • 对象:机会
    • 记录:{{trigger.object.id}}
    • 公司行业:{{searchRecords[0].industry}}
    • 公司规模:{{searchRecords[0].employees}}
任务和备注限制:任务和备注上的关系被硬编码为多对多,目前尚不可用于工作流触发器或操作。 要访问这些关系,请改用 API

双向同步

示例:保持主要联系人同步

目标:当公司的主要联系人发生变化时,更新该联系人。 当某人被设为主要联系人时,更新公司。

工作流 1:公司 → 人员

  1. 触发器:记录已更新(公司,主要联系人字段)
  2. 更新记录:将该人员的“是否为主要联系人”设为 true
  3. 搜索记录:查找之前的主要联系人
  4. 更新记录:将先前联系人的“是否为主要联系人”设为 false

工作流 2:人员 → 公司

  1. 触发器:记录已更新(人员,是否为主要联系人 = true)
  2. 更新记录:将公司的主要联系人设置为此人
在进行双向同步时要小心,避免无限循环。 在更新前使用筛选条件检查值是否实际发生变化。

使用代码进行复杂映射

示例:在复制过程中转换数据

目标:将人员的电话号码复制到机会并进行格式化。
export const main = async (params) => {
  const { phone } = params;

  if (!phone) return { formattedPhone: null };

  // Remove non-numeric characters
  const digits = phone.replace(/\D/g, '');

  // Format as (XXX) XXX-XXXX
  const formatted = digits.length === 10
    ? `(${digits.slice(0,3)}) ${digits.slice(3,6)}-${digits.slice(6)}`
    : phone;

  return { formattedPhone: formatted };
};

最佳实践

避免循环

  • 不要创建相互无限触发的工作流
  • 使用特定的字段条件
  • 添加检查以确定值是否真的发生变化

处理缺失数据

  • 在复制之前始终检查源记录是否存在
  • 为可选字段提供默认值
  • 当源字段为空时使用筛选条件跳过

性能

  • 在复制到大量记录时进行批量更新
  • 对于批量同步操作,使用计划的工作流
  • 对于多条记录的更新,考虑使用 Iterator

相关内容