{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Junction Object Patterns"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"junction-object-patterns","__idx":0},"children":["Junction Object Patterns"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Building on the flexibility described in the Using Your Own Objects page, some organizations have workflows that span ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["multiple"]}," custom objects. When your hiring and onboarding journey involves several Salesforce objects (e.g., Application, Interview, Offer, Background Check), you can leverage an ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Onboarded™ object as a junction object"]}," to consolidate data and simplify your integration architecture."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"junction-pattern-use-cases","__idx":1},"children":["Junction Pattern Use Cases"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The junction object pattern is especially valuable when you have a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["one-to-many mapping scenario"]}," — where a single Onboarded™ record (such as a Placement, Task, Employee, or Employer) needs to be referenced by multiple objects in your Salesforce org."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"common-scenarios","__idx":2},"children":["Common Scenarios"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Multiple workflow stages reference one Onboarded™ record."]}," Your ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Application__c"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Interview__c"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Offer__c"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Background_Check__c"]}," objects all need to track association with the same Onboarded™ record."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Multiple tracking objects need visibility into Onboarded™ data."]}," Different workflow objects need access to the same Onboarded™ status, completion data, or task information."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Reporting across multiple objects."]}," You need to build reports that connect data from various Salesforce objects to Onboarded™ records."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Data aggregation from multiple sources."]}," Information needed for the Onboarded™ API is spread across several Salesforce objects that need to be consolidated before syncing."]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Without the junction pattern:"]}," You would need to create and maintain separate lookup fields and sync logic on each custom object, leading to duplicated integration code and potential data inconsistencies. Using an Onboarded™ object as a junction centralizes these relationships."]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Exception — Salesforce HR Employee Service Cloud."]}," If your organization uses ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Salesforce HR Employee Service Cloud"]},", the junction object pattern described here does not apply. In HR Employee Service Cloud, a single employee's data may be spread across up to four different objects. Onboarded™ provides a dedicated architecture specifically designed to handle this unique data model. Contact your Onboarded™ implementation team for guidance on the HR Employee Service Cloud integration approach."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"junction-object-selection","__idx":3},"children":["Junction Object Selection"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Any Onboarded™ object can serve as a junction object depending on your business requirements. Choose the object that best represents the central point of your workflow:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Onboarded™ Object"},"children":["Onboarded™ Object"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Best Used When"},"children":["Best Used When"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Onboarded Placement"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Your workflow centers on job placements, assignments, or task delivery at specific stages"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Onboarded Employee"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Your workflow centers on the candidate/employee record and their progression"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Onboarded Employer"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Your workflow centers on company/employer records with multiple related processes"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Onboarded Task"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Your workflow centers on individual task completion and tracking"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Onboarded Job"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Your workflow centers on job requisitions with multiple candidate touchpoints"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"junction-pattern-benefits","__idx":4},"children":["Junction Pattern Benefits"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["By associating your custom Salesforce objects with an Onboarded™ object acting as a junction, you:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Centralize data"]}," – All fields needed for the Onboarded™ API exist in one location"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Simplify integrations"]}," – One sync operation handles all related data"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Maintain relationships"]}," – Track which Onboarded™ record corresponds to which source objects"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Enable reporting"]}," – Build reports that span multiple objects through a single junction point"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Reduce maintenance"]}," – Changes to sync logic happen in one place, not across multiple objects"]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Key Design Principle — One Source Object per Onboarded™ Record."]}," Although multiple custom objects may exist in your workflow, each Onboarded™ junction record should be associated with only ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["ONE"]}," source object at a time for sync purposes. This ensures clear data lineage and prevents sync conflicts."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"architecture-pattern","__idx":5},"children":["Architecture Pattern"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each custom object in your workflow connects to an Onboarded™ object, which serves as the single point of integration with the Onboarded™ API. The following example uses ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Placement__c"]},", but the same pattern applies to any Onboarded™ object:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"[Application__c] ──────┐\n                       │\n[Interview__c] ────────┼──→ [Onboarded_Placement__c] ──→ Onboarded API\n                       │      (junction object)\n[Offer__c] ────────────┤\n                       │\n[Background_Check__c] ─┘\n"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each custom object can have a lookup to the Onboarded™ junction record. For sync purposes, only ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["ONE"]}," source object should be actively linked at any time per junction record."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"implementation-steps","__idx":6},"children":["Implementation Steps"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The following subsections demonstrate the junction object pattern using ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Placement__c"]}," as an example, in the order you should perform them. Apply the same approach to whichever Onboarded™ object best fits your workflow."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"custom-attributes-and-field-mapping-configuration","__idx":7},"children":["Custom Attributes and Field Mapping Configuration"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["All Salesforce field data that needs to be sent to Onboarded™ must be mapped. There are standard fields within the Onboarded API that are populated automatically in the Mapping Configuration; however, additional mapping rows can be added. This is done by using the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Create Custom Attribute"]}," or ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Retrieve Custom Attribute"]}," buttons:"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"create-custom-attribute-new-attributes","__idx":8},"children":["Create Custom Attribute (New Attributes)"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use this approach to create a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["new"]}," custom attribute that doesn't yet exist in your Onboarded™ account:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Navigate to ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Onboarded Setup"]}," > ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Field Mapping"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Select the desired Onboarded™ object (e.g., Placement)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Create Custom Attribute"]}," button"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Select a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Scalar Type"]}," (String, Boolean, Date, DateTime, Integer, Decimal, or Address)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Enter the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Attribute Name"]}," (API name) and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Attribute Label"]}," (display name)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Optionally check ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["\"Add to OnboardedMappings__c\""]}," to automatically add the attribute to the field mapping list"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Create"]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This creates the custom attribute in your Onboarded™ account via API and optionally adds it to your Salesforce field mappings in one step."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"retrieve-custom-attributes-existing-attributes","__idx":9},"children":["Retrieve Custom Attributes (Existing Attributes)"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use this approach to import custom attributes that ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["already exist"]}," in your Onboarded™ account:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Create the custom attribute in your Onboarded™ account (via the Onboarded™ application)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Navigate to ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Onboarded Setup"]}," > ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Field Mapping"]}," in Salesforce"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Select the desired Onboarded™ object (e.g., Placement)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Retrieve Custom Attributes"]}," button"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The system queries your Onboarded™ account and displays available custom attributes not yet in your mappings"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Select the attributes you want to import"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Import Selected"]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This adds the selected attributes to your Salesforce field mappings, making them available for data sync."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"example-placement-custom-attributes","__idx":10},"children":["Example Placement Custom Attributes"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Common custom attributes you might create for a Placement junction object:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Attribute Name"},"children":["Attribute Name"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Scalar Type"},"children":["Scalar Type"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["start_date"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Date"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Candidate's anticipated start date"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["department"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["String"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Assigned department"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["manager_name"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["String"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Hiring manager name"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["office_location"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["String"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Work location"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["compensation"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Decimal"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Offered compensation"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Once custom attributes are added to your mappings, configure the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Salesforce Field"]}," mapping for each attribute to specify which Salesforce field will hold the data. This must be completed before proceeding with the remaining steps."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"source-object-lookup-fields","__idx":11},"children":["Source Object Lookup Fields"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["On your junction object, create ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["lookup fields"]}," to each source object that will be associated with it. This enables relationship navigation and the write-back process below."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Example:"]}," If using ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Placement__c"]}," as a junction for hiring workflow objects:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field Label"},"children":["Field Label"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"API Name"},"children":["API Name"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Type"},"children":["Type"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Related To"},"children":["Related To"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Offer"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Offer__c"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Lookup"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Offer__c"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Background Check"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Background_Check__c"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Lookup"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Background_Check__c"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"em","attributes":{},"children":["Create a lookup field for each source object type that may trigger the creation of or be associated with the junction record."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"junction-record-creation-flow","__idx":12},"children":["Junction Record Creation Flow"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Create a Record-Triggered Flow on your source object that fires when the business criteria for creating the junction record is met."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Example:"]}," Creating an ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Placement__c"]}," when an ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Offer__c"]}," is accepted."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"flow-settings","__idx":13},"children":["Flow Settings"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Flow Type:"]}," Record-Triggered Flow"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Object:"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Offer__c"]}," (or your source object)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Trigger:"]}," After Insert or After Update"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Entry Conditions:"]}," Status equals \"Accepted\" (or your criteria)"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"flow-elements","__idx":14},"children":["Flow Elements"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Get Records"]}," – Query the related Employee and Employer Onboarded IDs:",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Get the Contact/Employee record to retrieve ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Id__c"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Get the Account/Employer record to retrieve ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Id__c"]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Create Records"]}," – Create the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Placement__c"]}," record with:",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Employee__c"]}," = [Employee lookup]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Employer__c"]}," = [Employer lookup]"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Offer__c"]}," = ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{!$Record.Id}"]}," (lookup to the source object)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Start_Date__c"]}," = ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{!$Record.Start_Date__c}"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Department__c"]}," = ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{!$Record.Department__c}"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["[Map additional fields from the source object]"]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Store the Record Id"]}," – Capture the newly created junction record's Id for the next step"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"junction-record-sync","__idx":15},"children":["Junction Record Sync"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After creating the junction record, use the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Onboarded™ Data Sync"]}," invocable action to sync it to the Onboarded™ system."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"action-element","__idx":16},"children":["Action Element"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Search for: ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Onboarded Data Sync"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Set Input Values:",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["recordId:"]}," The Id of the junction record created in the previous subsection"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["sObjectName:"]}," The API name of your junction object (e.g., ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Placement__c"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["onboardedObjectType:"]}," The Onboarded™ object type (e.g., ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Placement"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["operation:"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Create"]}]}]}]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The invocable action uses your configured field mappings to automatically send all mapped custom attributes to the Onboarded™ API."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"onboarded-id-writeback","__idx":17},"children":["Onboarded ID Writeback"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When the sync completes, the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Id__c"]}," field on the junction record is populated with the Onboarded™ system's record ID (e.g., ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["plcmt_abc123"]}," for Placements, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["emp_xyz789"]}," for Employees). Create a separate Flow to write this value back to your source object for reference."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"scheduled-flow-recommended-for-async-operations","__idx":18},"children":["Scheduled Flow (Recommended for Async Operations)"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Since the Onboarded™ Data Sync may run asynchronously via Queueable, the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Id__c"]}," won't be immediately available. Use a Scheduled Flow:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Flow Type:"]}," Schedule-Triggered Flow"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Frequency:"]}," Every 15 minutes (or as needed)"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Flow Elements:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Get Records"]}," – Query junction records where:",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Id__c"]}," IS NOT NULL"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The source object lookup field IS NOT NULL (e.g., ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Offer__c"]}," IS NOT NULL)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Related source record's Onboarded ID field IS NULL"]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Loop"]}," – For each junction record:",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Build an update record for the source object"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Set the source object's Onboarded ID field = junction record's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Id__c"]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Update Records"]}," – Commit the source record updates"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"record-triggered-flow-on-junction-object-for-synchronous-operations","__idx":19},"children":["Record-Triggered Flow on Junction Object (For Synchronous Operations)"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If using Screen Flows where sync is synchronous:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Flow Type:"]}," Record-Triggered Flow"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Object:"]}," Your junction object (e.g., ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Placement__c"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Trigger:"]}," After Update"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Entry Conditions:"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Id__c"]}," IS NOT NULL AND ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Id__c"]}," IS CHANGED"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Flow Elements:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Decision"]}," – Check if the source object lookup is populated (e.g., ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Offer__c"]}," IS NOT NULL)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Update Records"]}," – Update the source record:",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Filter by Id = the lookup field value (e.g., ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{!$Record.Offer__c}"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Set the source object's Onboarded ID field = ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{!$Record.Onboarded_Id__c}"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"hiring-workflow-example","__idx":20},"children":["Hiring Workflow Example"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Your org uses these objects in the hiring process:"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Job_Application__c"]}," – Initial application"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Interview__c"]}," – Interview scheduling and feedback"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Offer__c"]}," – Offer details and acceptance"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Background_Check__c"]}," – Pre-employment verification"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Implementation Flow:"]}]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["When an ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Offer__c"]}," record status changes to \"Accepted\":",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Flow creates ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Onboarded_Placement__c"]}," with data from the Offer"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Flow calls ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Onboarded™ Data Sync"]}," to create the Placement in Onboarded™"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Candidate receives their onboarding tasks"]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The Onboarded™ ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["placement_id"]}," is written back to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Offer__c.Placement_Id__c"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Background_Check__c"]}," needs to trigger additional tasks later:",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A new Placement is created (or the existing one is updated)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The same pattern applies"]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"junction-pattern-summary","__idx":21},"children":["Junction Pattern Summary"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Step"},"children":["Step"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Action"},"children":["Action"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Tool"},"children":["Tool"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["1"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Add custom attributes and configure field mappings"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Setup > Object Manager / Onboarded Setup"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["2"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Create lookup fields to each source object"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Setup > Object Manager"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["3"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Build Flow to create junction record from source object"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Flow Builder"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["4"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Add Onboarded™ Data Sync action to the Flow"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Flow Builder"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["5"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Build Flow to write Onboarded™ ID back to source"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Flow Builder"]}]}]}]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Best Practice:"]}," Document your junction object pattern for your team. Create a simple diagram showing which source objects connect through your chosen Onboarded™ junction object and at what stage of your workflow each junction record is created."]}]}]},"headings":[{"value":"Junction Object Patterns","id":"junction-object-patterns","depth":1},{"value":"Junction Pattern Use Cases","id":"junction-pattern-use-cases","depth":2},{"value":"Common Scenarios","id":"common-scenarios","depth":3},{"value":"Junction Object Selection","id":"junction-object-selection","depth":2},{"value":"Junction Pattern Benefits","id":"junction-pattern-benefits","depth":2},{"value":"Architecture Pattern","id":"architecture-pattern","depth":2},{"value":"Implementation Steps","id":"implementation-steps","depth":2},{"value":"Custom Attributes and Field Mapping Configuration","id":"custom-attributes-and-field-mapping-configuration","depth":3},{"value":"Create Custom Attribute (New Attributes)","id":"create-custom-attribute-new-attributes","depth":4},{"value":"Retrieve Custom Attributes (Existing Attributes)","id":"retrieve-custom-attributes-existing-attributes","depth":4},{"value":"Example Placement Custom Attributes","id":"example-placement-custom-attributes","depth":4},{"value":"Source Object Lookup Fields","id":"source-object-lookup-fields","depth":3},{"value":"Junction Record Creation Flow","id":"junction-record-creation-flow","depth":3},{"value":"Flow Settings","id":"flow-settings","depth":4},{"value":"Flow Elements","id":"flow-elements","depth":4},{"value":"Junction Record Sync","id":"junction-record-sync","depth":3},{"value":"Action Element","id":"action-element","depth":4},{"value":"Onboarded ID Writeback","id":"onboarded-id-writeback","depth":3},{"value":"Scheduled Flow (Recommended for Async Operations)","id":"scheduled-flow-recommended-for-async-operations","depth":4},{"value":"Record-Triggered Flow on Junction Object (For Synchronous Operations)","id":"record-triggered-flow-on-junction-object-for-synchronous-operations","depth":4},{"value":"Hiring Workflow Example","id":"hiring-workflow-example","depth":2},{"value":"Junction Pattern Summary","id":"junction-pattern-summary","depth":2}],"frontmatter":{"seo":{"title":"Junction Object Patterns"}},"lastModified":"2026-05-29T01:46:02.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/onboarded_for_salesforce/junction_object_pattern","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}