Перейти к основному содержанию
Отображайте данные из связанных записей прямо в ваших записях — например, показывайте численность сотрудников из компании в её сделках. Этот обходной путь с рабочим процессом полезен, пока вложенные поля не поддерживаются нативно.

Типичные случаи использования

ИсточникНазначениеПоля для копирования
КомпанияВозможностьОтрасль, размер компании, ARR
КонтактВозможностьEmail, телефон, должность
ВозможностьКомпанияСумма последней сделки, дата последней выигранной сделки

Базовое копирование полей

Пример: копирование Email контакта в сделку

Цель: При указании контактного лица в сделке скопируйте его email в сделку для быстрого доступа.

Предварительное условие

Создайте целевые поля в Settings → Data Model → Opportunities перед созданием рабочего процесса:
  • Email контакта (тип: Email)
  • Телефон контакта (тип: Phone)

Настройка

  1. Триггер: Запись обновлена (Сделки, поле Контактное лицо)
  2. Фильтр: Проверьте, что поле Контактное лицо не пустое
  3. Поиск записей: найдите связанного контакта
    • Объект: Контакты
    • Фильтр: ID равен {{trigger.object.pointOfContact.id}}
  4. Обновление записи:
    • Объект: Сделки
    • Запись: {{trigger.object.id}}
    • Email контакта: {{searchRecords[0].email}}
    • Телефон контакта: {{searchRecords[0].phone}}

Копирование нескольких полей

Пример: синхронизация данных компании со всеми связанными сделками

Цель: Когда данные компании меняются, обновляйте все связанные сделки.

Настройка

  1. Триггер: Запись обновлена (Компании)
    • Поля: отрасль, размер компании, годовой доход
  2. Поиск записей: найдите все сделки для этой компании
    • Объект: Сделки
    • Фильтр: ID компании равен {{trigger.object.id}}
  3. Итератор: цикл по каждой сделке
  4. Обновление записи (внутри итератора):
    • Объект: Сделки
    • Запись: {{iterator.currentItem.id}}
    • Отрасль компании: {{trigger.object.industry}}
    • Размер компании: {{trigger.object.companySize}}
    • ARR компании: {{trigger.object.annualRevenue}}

Копирование при создании записи

Пример: предзаполнение сделки данными компании

Цель: При создании сделки, связанной с компанией, автоматически копируйте ключевую информацию о компании.

Предварительное условие

Создайте целевые поля в Settings → Data Model → Opportunities:
  • Отрасль компании (тип: Text)
  • Размер компании (тип: Number)

Настройка

  1. Триггер: Запись создана (Сделки)
    • Фильтр: поле Компания не пустое
  2. Поиск записей: получите сведения о связанной компании
    • Объект: Компании
    • Фильтр: ID равен {{trigger.object.company.id}}
  3. Обновление записи:
    • Объект: Сделки
    • Запись: {{trigger.object.id}}
    • Отрасль компании: {{searchRecords[0].industry}}
    • Размер компании: {{searchRecords[0].employees}}
Ограничение для задач и заметок: связи в задачах и заметках жёстко заданы как многие-ко-многим и пока недоступны в триггерах или действиях рабочего процесса. Чтобы получить доступ к этим связям, вместо этого используйте API.

Двунаправленная синхронизация

Пример: синхронизация основного контакта

Цель: Когда в компании меняется основной контакт, обновляйте контакт. Когда контакт становится основным, обновляйте компанию.

Рабочий процесс 1: Компания → Контакт

  1. Триггер: Запись обновлена (Компании, поле Основной контакт)
  2. Обновление записи: установите у контакта “Is Primary Contact” в значение true
  3. Поиск записей: найдите предыдущего основного контакта
  4. Обновление записи: установите у предыдущего контакта “Is Primary Contact” в значение false

Рабочий процесс 2: Контакт → Компания

  1. Триггер: Запись обновлена (Контакты, Is Primary Contact = true)
  2. Обновление записи: установите у компании поле Primary Contact на этого контакта
Осторожнее с двунаправленными синхронизациями, чтобы избежать бесконечных циклов. Используйте фильтры, чтобы проверять, действительно ли значение изменилось, прежде чем обновлять.

Использование кода для сложного сопоставления

Пример: преобразование данных при копировании

Цель: Скопировать и отформатировать номер телефона из контакта в сделку.
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 };
};

Лучшие практики

Избегайте циклов

  • Не создавайте рабочие процессы, которые бесконечно запускают друг друга
  • Используйте конкретные условия для полей
  • Добавляйте проверки, что значение действительно изменилось

Обработка отсутствующих данных

  • Всегда проверяйте, что исходная запись существует, перед копированием
  • Задавайте значения по умолчанию для необязательных полей
  • Используйте фильтры, чтобы пропускать случаи, когда исходное поле пусто

Производительность

  • Выполняйте пакетные обновления при копировании во множество записей
  • Используйте запланированные рабочие процессы для массовых операций синхронизации
  • Рассмотрите использование Итератора для обновления множества записей

Связанные материалы