> ## Documentation Index
> Fetch the complete documentation index at: https://docs.get-clara.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# 显示关联记录数据

> 使用工作流显示关联记录中的数据（例如，在机会中显示公司的信息）。

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

## 常见使用案例

| 来源 | 目标 | 要复制的字段            |
| -- | -- | ----------------- |
| 公司 | 机会 | 行业、公司规模、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}}`

<Note>
  **任务和备注限制**：任务和备注上的关系被硬编码为多对多，目前尚不可用于工作流触发器或操作。 要访问这些关系，请改用 [API](/l/zh/developers/extend/api)。
</Note>

## 双向同步

### 示例：保持主要联系人同步

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

### 工作流 1：公司 → 人员

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

### 工作流 2：人员 → 公司

1. **触发器**：记录已更新（人员，是否为主要联系人 = true）
2. **更新记录**：将公司的主要联系人设置为此人

<Note>
  在进行双向同步时要小心，避免无限循环。 在更新前使用筛选条件检查值是否实际发生变化。
</Note>

## 使用代码进行复杂映射

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

**目标**：将人员的电话号码复制到机会并进行格式化。

```javascript theme={null}
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

## 相关内容

* [工作流操作](/l/zh/user-guide/workflows/capabilities/workflow-actions)
* [工作流触发器](/l/zh/user-guide/workflows/capabilities/workflow-triggers)
