Relationships в Salesforce предоставляют возможность связывать объекты между собой. Вы не можете изменить стандартные связи, но можете создавать собственные, с помощью custom fields указывая необходимый вам тип. Разница между типами заключается в их поведении при создании, удалении, обращении к ним, а так же они имеют разные лимиты.
Виды связей:
1. Master-detail
2. Lookup
3. External lookup
4. Indirect lookup
5. Hierarchical
6. Many-to-many
Master-detail
Master-detail может быть 1 ко многим(1:n) и многие ко многим(n:n). При использовании этой связи объекты делятся на Detail(дочерний) и Master(родительский).
Имеет ряд своих ограничений:
-
Удаление
- Когда запись основного объекта удаляется, его связанные записи также удаляются.
- При удалении detail записи master запись остается.
- При восстановлении master записи восстанавливается также и detail запись.
- Если удалить Detail, а потом Master запись, то восстановить detail связь уже не удастся.
- Вы не можете удалить кастомный объект если он является Master.
- Если удалить кастомный объект, который является Detail, то отношение конвертируется в Lookup.
-
Создание
- Каждая detail обязана иметь master запись.
- Поле связи master-detail обязательное на “page layout” detail записи.
- Стандартный или кастомный объект может быть Master. Но стандартный объект не может быть Detail.
- Кастомный объект может иметь до двух master-detail связей.
- По умолчанию нельзя переназначать Master для Detail записи. Однако администратор может включить «Allow reparenting» при создании связи;
- Поле «Owner» не доступно на detail записи и автоматически получает значение из Master.
- Вы не можете создать связь Master-Detail если кастомный объект уже содержит данные. Вы можете создать Lookup связь, и потом конвертировать её в master-detail при условии что все дочерние записи имеют родителя.
-
Доступ
- Detail запись наследует все настройки доступа из Master. Если у вас нет доступа к Master записи, то и к Detail обратиться не получится.
Так же, только на Master объекте вы можете создать Roll-up поле.
Преобразование Master-detail в LookUp
Существуют некоторые условия которые нужно выполнить, чтобы произвести преобразование.
Для конвертации Master-detail в LookUp нужно чтобы на объекте Master не было Roll-up summary полей.
Для конвертации LookUp в Master-detail нужно:
- Все дочерние записи в Lookup связи должны иметь родителя. Так как в Master-detail не существует дочерних записей без родителя.
Junction object
Junction object - это “Custom object” который используют для связи двух объектов в отношении многие ко многим. Этот объект имеет две связи master-detail на два разных объекта.
Руководство по созданию Master-Detail relationship: Создание Master-detail связи
Lookup
Lookup связь связывает два объекта, как и master-detail, но не влияет на удаление и доступ detail записи. В отличие от master-detail записей, родитель в Lookup не является обязательным для заполнения. Когда вы определяете Lookup, то на родительском объекте в настройке “page layout” появится возможность добавить “related list” зависимых записей.
Создавая Lookup вы можете:
- Связать два разных объекта.
- Связать объект с самим собой за исключением объекта User.
Lookup связь самая распространенная связь в Salesforce.
External lookup
External lookup - это связь между внешним объектом и объектом Salesforce, где объекты сопоставляются по уникальному полю.
Когда вы создаете external lookup связь она связывает “standart objet” или “custom objects” с внешним объектом, где внешний объект будет в роли родительского объекта, а Salesforce объект в роли дочернего. Поля внешнего объекта сопоставляются с полями Salesforce объекта, значения которых заполняются из внешнего источника.
Более детально про External Relationships : External Object Relationships.
Работа с External Object : Знакомство с External object
Indirect lookup
Indirect lookup связь связывает внешний объект с “standart objet” или “custom objects” в Salesforce. Иными словами Indirect lookup связь похожа на External lookup только теперь Salesforce объект является родительским объектом, а внешний дочерним объектом. Когда вы создаете поле Indirect lookup на внешнем объекте, вы указываете уникальное поле родительского объекта и уникальное поле дочернего объекта, чтобы сопоставить записи. Значения полей внешнего объекта в отличие от External lookup заполняются значениями из Salesforce объекта.
Hierarchical
Hierarchical - это специальная Lookup связь которая доступна только для объекта User. Он позволяет пользователям использовать поле Lookup, чтобы связать одного пользователя с другим, который прямо или косвенно не ссылается на него. Например, вы можете создать иерархию пользователей организации.
Many-to-many
Вы можете использовать связь master-detail для моделирования отношений «многие-ко-многим» между любыми двумя объектами. Отношение «многие ко многим» позволяет каждой записи одного объекта связываться с несколькими записями от другого объекта и наоборот.
Чтобы реализовать связь многие ко многим между двумя объектами в Salesforce создают третий объект который называется Junction. Он будет иметь ссылки на эти два объекта.
Junction Object: в Salesforce объект Junction - это кастомный объект с двумя master-detail полями для двух разных типов записей.