> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.2cloudnine.com/llms.txt
> Use this file to discover all available pages before exploring further.

# BH4SF Configuration & Implementation Guide (Bullhorn for Salesforce Integration)

**External Resources**

| Name of Document                                               | Details                                                                                                                                                                               |
| -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2c9 Bullhorn for Salesforce Integration Component List (BH4SF) | [https://docs.google.com/spreadsheets/d/10r1VCgMA\_OlvneqpP](https://docs.google.com/spreadsheets/d/10r1VCgMA_OlvneqpP) sMiw2UAkf9TfFPj\_CLBXm9T0cU/edit?gid=411403545#gid=4114 03545 |
| 2cloudnine BH4SF Integration User Guide                        | [https://docs.google.com/document/d/1hZ0h6ljbb8dwGikpKZq](https://docs.google.com/document/d/1hZ0h6ljbb8dwGikpKZq) 9fmfNHJnnFnU7q6wT0hgVejU/edit?tab=t.0#heading=h.jet8ub ymjuer      |

## **Read First** Introduction & Overview

The 2cloudnine Bullhorn for Salesforce (BH4SF) Integration provides a flexible and
seamless solution for integrating the Bullhorn for Salesforce (BH4SF) and 2cloudnine
Payroll. Its primary purpose is the creation and updating of 2cloudnine Assignments from
the BH4SF Job and Closing Report objects.

With the 2cloudnine BH4SF Integration a recruiter is able to manage their temp and
perm employees using BH4SF and have the data seamlessly flow to 2cloudnine. Middle
and back office functions are then able to pick up and manage this data without a need to
interact with the BH4SF records.

The purpose of this user guide is to provide instructions related to the deployment and
configuration of the 2cloudnine BH4SF integration.

The intended audience for this document is system Administrators, recruiters, Payroll and
finance users.

<Note>
  **Important Notes**

  The following packages must be installed in the org before you can install the 2cloudnine
  BH4SF Integration package.

  * 2cloudnine Payroll
  * 2cloudnine Time2Pay Extension
  * Talent Rover
  * Unofficial SF FlowActionsBasePack
  * Unofficial SF FlowScreenComponentsBasePack
  * Unofficial SF Datatable
</Note>

## Pre-Deployment Steps

Prior to the deployment of components you must first install the following packages.
Failure to install these packages will result in a failed deployment validation.

### Install ‘Unofficial SF Flow’ Packages

The screen flows used throughout the 2cloudnine BH4SF Integration includes
functionality provided in the unofficial SF Flow Action and Screen Component Basepacks.
These packages must be installed before you can install the 2cloudnine BH4SF
Integration package.

To install the Flow Action and Screen Component Basepacks:

1. [Go to the Unofficial SF site for the Flow action and screen components basepacks.](https://unofficialsf.com/flow-action-and-screen-component-basepacks/)
2. Install the 2 packages into your Salesforce Org (Links provided for both sandbox
   and production).
   1. FlowActionsBasePack
   2. FlowScreenComponentsBasePack
3. [Go to the Unofficial SF site for Datatables.](https://unofficialsf.com/datatable-lightning-web-component-for-flow-screens-2/)
4. Install the package into your Salesforce Org (Links provided for both sandbox and
   production).

## Deployment Steps

The 2cloudnine BH4SF Integration is currently only available via the deployment of the
required components and not via a package installation.

All components are stored in a 2cloudnine managed org and can only be deployed via a
request to 2cloudnine.

[The following document](https://docs.google.com/spreadsheets/d/10r1VCgMA_OlvneqpPsMiw2UAkf9TfFPj_CLBXm9T0cU/edit?gid=411403545#gid=411403545) outlines all components that make up the 2cloudnine BH4SF
Integration.

## **Post Deployment Configuration** 1. Apply Security

The ‘2cloudnine BH4SF Integration’ contains components across the standard salesforce,
Bullhorn and 2cloudnine packages that require user access in order to successfully
function.

Typically all functions (front, middle and back) will require access to these components.
To streamline these security requirements, the 2cloudnine BH4SF integration includes a
**2cloudnine BH4SF** permission set that can be applied to these users.

<Warning>
  *This permission set grants access only to components within the 2cloudnine BH4SF*
  *integration. Additional permissions on 2cloudnine objects may be required*
  *depending on the specific functions the user needs to perform.*

  *While the 2cloudnine managed packages include permission sets for middle and*
  *back office roles, these are typically too permissive for front office users. As such,*
  *custom permission sets should be created to provide front office users with the*
  *appropriate level of access to middle and back office data.*
</Warning>

### 2cloudnine BH4SF Permission Set

A permission set ‘2cloudnine BH4SF’ is included in the deployment and contains access to
all the required components.

To apply the ‘2cloudnine BH4SF’ Permission Set:

1. Go to ‘Setup’
2. Search for and select ‘Permission Sets’
3. Select the ‘2cloudnine BH4SF’ permission set’
4. Select the button ‘Manage Assignments’
5. Select the button ‘Add Assignments’
6. Search for and select each user to assign the permission set to and click Next
7. Select the ‘Assign’ button.

### 2cloudnine Rate Calculator Permission Set

The ‘2cloudnine BH4SF Integration’ utilises the Rate Calculator for management of
Assignment Rates and oncosts.

Users who require access to manage Rates and related records and functionality of the
Rate Calculator, must be granted access to the 2cloudnine Rate Calculator via the
‘2cloudnine Rate Calculator’ permission set.

To apply the ‘2cloudnine Rate Calculator’ Permission Set:

1. Go to ‘Setup’
2. Search for and select ‘Permission Sets’
3. Select the ‘2cloudnine Rate Calculator’ permission set
4. Select the button ‘Manage Assignments’
5. Select the button ‘Add Assignments’
6. Search for and select each user to assign the permission set to and click Next
7. Select the ‘Assign’ button.

## 2. Flows

The 2cloudnine BH4SF Integration utilises multiple screen and record triggered flows in
the creation and synchronisation of records between 2cloudnine and BH4SF.

To utilise these flows you must install prerequisite packages from Unofficial SF and then
activate the flows.

### Activate Flows

Prior to using the 2cloudnine BH4SF Integration all flows included within the managed
package must be activated.

To activate the flows:

1. Go to Setup
2. Search for and select Flows
3. Search for and Select ‘2c9 - Create Job Assignment Template’
4. Select ‘Activate’
5. Repeat these steps for all flows listed in the flow glossary at the bottom of this
   document.

<Warning>
  *The flows included in the 2cloudnine BH4SF Integration provide a baseline for the*
  *integration to function as intended. Users should never remove the criteria and field*
  *mappings within these flows but can include additional functionality as required*
  *for their org specific requirements.*
</Warning>

## 3. Lightning Page and Page Layout Assignments

The 2cloudnine BH4SF integration includes lightning record pages and page layouts
which contain relevant fields and components required for end users.

If the customer chooses to retain their own Lightning pages and layouts, ensure these
layouts are referenced to verify that all necessary fields and components are included in
the customer's own layouts.

[For fields in the integration, please refer to the component workbook.](https://docs.google.com/spreadsheets/d/10r1VCgMA_OlvneqpPsMiw2UAkf9TfFPj_CLBXm9T0cU/edit?gid=411403545#gid=411403545)

**Lightning Pages**

| Object         | Label                      | API Name                    | Assigned To |
| -------------- | -------------------------- | --------------------------- | ----------- |
| Job            | 2cloudnine BH4SF Job       | Cloudnine\_BH4SF\_Job       | Global      |
| Closing Report | 2cloudnine BH4SF Placement | Cloudnine\_BH4SF\_Placement | Global      |

| Assignment | Template                    | Template                     | App, Record Type & Profile Assign to the ‘Template’ Record Type |
| ---------- | --------------------------- | ---------------------------- | --------------------------------------------------------------- |
| Assignment | 2cloudnine BH4SF Assignment | Cloudnine\_BH4SF\_Assignment | Global                                                          |

**Page Layouts**

| Object     | Page Layouts                | Record Type |
| ---------- | --------------------------- | ----------- |
| Assignment | 2cloudnine BH4SF - Template | Template    |
| Assignment | 2cloudnine BH4SF - Temp     | Temp        |
| Assignment | 2cloudnine BH4SF - Perm     | Perm        |
| Account    | 2cloudnine BH4SF - Client   | Client      |

### Client Page Layout

While the 2cloudnine BH4SF Integration provides a default page layout for the Account
object, front office systems commonly use their own record types and page layouts. As a
result, you will typically need to manually add the necessary 2cloudnine fields to your
custom Account layout.

[However, with the introduction of Assignment Templates (refer to the 2cloudnine](https://docs.google.com/document/d/1hZ0h6ljbb8dwGikpKZq9fmfNHJnnFnU7q6wT0hgVejU/edit?tab=t.0)
[Bullhorn for Salesforce (BH4SF) Integration User Guide), most 2cloudnine fields are no](https://docs.google.com/document/d/1hZ0h6ljbb8dwGikpKZq9fmfNHJnnFnU7q6wT0hgVejU/edit?tab=t.0)
longer required on the Account record. When updating an existing front office Account
layout, only the following fields and related lists are generally needed:

| Type         | Label                    |
| ------------ | ------------------------ |
| Field        | Invoice Contact          |
| Field        | Invoice Email CC         |
| Field        | ABN                      |
| Field        | ABN Lookup               |
| Field        | Billing Address          |
| Related List | Assignments              |
| Related List | Account Invoice Settings |
| Related List | Account Invoices         |
| Related List | Invoiceable Fees         |

### Job & Closing Report Page Layouts

The 2cloudnine BH4SF does not contain page layouts for the Job & Closing report objects
by default. This is because these pages are usually heavily customised in each org, based
upon their front office requirements.

As a result we recommend adding the following fields and related lists to your respective
Job and Closing report layouts.

**JOB**

| Type  | Label               |
| ----- | ------------------- |
| Field | Assignment Template |

*You MUST add the field ‘Assignment Template’ to the Job page layout. If this is not*
*done, any cloned Jobs will not correctly copy across the correct Assignment*
*Template data.*

**CLOSING REPORT**

| Type         | Label                       |
| ------------ | --------------------------- |
| Field        | Assignment                  |
| Field        | Trigger Assignment Creation |
| Related List | Invoiceable Fees            |

## 4. Enable Template Validation Override

Validations on the Assignment object are a critical part of the 2c9 product, designed to
ensure data integrity by enforcing strict criteria for record creation and updates. These
validations prevent errors and maintain consistency across records.

However, for the custom ‘Template’ record type, these validations need to be bypassed to
accommodate the streamlined data entry requirements specific to templates. This
functionality ensures that Assignment records for ‘Template’ can be successfully created
and updated with minimal data.

To achieve this, validation overrides are applied to the Assignment object for the
‘Template’ record type. This approach allows flexibility for templates while ensuring that all
validations remain enforced for other record types, such as ‘Temp,’ to preserve overall data
integrity. For more details on Assignment Templates, refer to the user guide.

To enable Assignment validation overrides for the ‘Template’ record type:

1. Go to Setup
2. Search for and select ‘Custom Settings’
3. Locate the custom setting labelled ‘Disable Assignment RecordType Validation’
   and click ‘Manage’
4. Click ‘New’
5. Enter the required details:
   1. Name = A name for the setting, e.g. ‘Template’
   2. Custom Record Type Id = Record Type Id of the Template from the above
      step (e.g. 0126F000001MobVQAS)
6. Click ‘Save’

<Warning>
  *To ensure data integrity, validation overrides are restricted to custom record types,*
  *such as the ‘Template’ record type. Overrides cannot be applied to product-based*
  *record types like ‘Temp,’ as these rely on strict validations to maintain consistency*
  *and prevent data errors across the system.*
</Warning>

## 5. Enable Invoice Setting Override

Currently the 2cloudnine product only supports the creation of 1 set of Invoice Settings per
Account. If a user attempts to add a second set (e.g. A different Invoice Entity), the system
will fire a validation and prevent the record from saving.

Due to this limitation and the requirement for staffing agencies to have multiple Invoice
Settings per Account, the use of Invoice Setting overrides are required, ensuring a single
Account can have as many different Invoice Settings as required.

To enable Invoice Setting

1. Go to Setup
2. Search for and select ‘Custom Settings’
3. Locate the custom setting labelled ‘Override TC9P Validation’ and select ‘Manage’
4. Select the ‘Edit’ button.
5. Set ‘Override Invoice Setting’ to TRUE.
6. Select ‘Save’.

## 6. Update FEE Record Type

The 2cloudnine BH4SF Integration allows users to generate Invoiceable Fee records from
the Account, Job, Closing Report and Assignment objects. To support this, a custom
record type called ‘FEE’ has been added to both the Invoiceable Fee and Invoice Item
objects.

This helps consolidate non-permanent placement fees into a single record type,
simplifying system maintenance. While the FEE record types are included with the
components, you must ensure that all required values are added to the **Fee Type** picklist.

To assign the Fee Type picklist values to the FEE record types:

1. Go to Setup
2. Select Object Manager
3. Search for and select the ‘Invoice Item’ object
4. Select ‘Record Types’
5. Select the ‘FEE’ record type
6. Select the ‘Fee Type’ picklist.
7. Assign all ‘Available’ values into the ‘Selected Values’ and select Save.
8. Repeat for the Invoiceable Fee and Pay Transaction objects.

## 7. Create Default Records (Optional)

### Global Assignment Templates

Global Assignment Templates are predefined "Template" Assignment records linked to a
parent Account. These templates can be automatically copied when creating new
Accounts, streamlining setup and ensuring consistency.

**Why Use Global Assignment Templates?**

* Reduces administrative effort when onboarding new Accounts.
* Improves data integrity by maintaining consistent default values.
* Flexible setup—an org can have:
  * A single global Assignment Template.
  * Multiple templates linked to one or more Template Accounts.

While optional, Global Assignment Templates provide a structured and efficient way to
manage Assignments across the organisation.

If Global Assignment Templates are not used, customers must manually create
Assignment Templates for each new Account, increasing administrative effort and the risk
of inconsistent data.

To create a global Assignment template:

1. Go to the app launcher and search for and select ‘Assignments’
2. Select the ‘New’ button
3. Select the ‘Template’ Record Type
4. Complete all relevant information that would apply to a Global template ensuring
   the client is set to your global template account.
5. Select Save
6. Repeat steps 1-5 for each template you require

<Warning>
  *Creating global Template Accounts to store Assignment Templates is*
  *recommended but not required. Customers can instead opt to use existing Account*
  *records as the parent Template account if their org setup supports that.*
</Warning>

The following provides different scenarios for the setup of Assignment Templates:

<Card title="Scenario 1: Single Entity Org (Basic Setup)">
  A customer with a single Payment and Invoice Entity wants a simple way to manage
  templates.

  * They create an Account record named "Template Account."
  * They then set up one Assignment Template linked to this account, defining key
    global defaults like the Payment Entity and Schedules.

  This approach keeps things streamlined with a single template for all cases.
</Card>

<Card title="Scenario 2: Single Entity Org (Advanced Setup)">
  A customer with a single Payment and Invoice Entity needs more flexibility, such as
  making templates specific to Job Roles.

  * They create an Account record named "Template Account."
  * Instead of one, they create multiple Assignment Templates under this account,
    each tailored with specific details like: Interpretation Rules, Rate Calculator
    Templates and other Job Role specific information.

  This allows greater customisation while still maintaining a centralised template
  structure.
</Card>

<Card title="Scenario 3: Multi-Entity Org">
  A customer has two separate Payment and Invoice Entities and wants to ensure that
  new Accounts only have access to the templates relevant to their entity.

  * They create two Template Account records:
    * "Entity 1 Template Account"
    * "Entity 2 Template Account"
  * For each Template Account, they create Assignment Templates with details
    specific to that entity, such as the Payment Entity and Schedules.

  With this setup, each entity maintains its own tailored templates, preventing
  cross-entity template confusion.
</Card>

### Global Invoice Settings Templates

Like Assignment Templates, Global Invoice Settings allow default middle and back-office
data to be applied to new or updated Account records.

The Global Invoice Setting Template is linked to the Assignment Template created in the
previous step. Within each Invoice Setting Template Group, four required Invoice Settings
must be configured.

To create a Global Invoice Setting Template, configure related Invoice Settings, and apply
them to an Assignment Template:

1. Open the app launcher, search for, and select Template Groups’
2. Select the ‘New’ button
3. Select the ‘Invoice Settings’ Record Type
4. Enter a name for the template group and select Save.
5. Open the newly created Template Group, go to the Related tab, and click New
   under Invoice Settings
6. Create the 4 required Invoice Setting records (Refer to the [QRG](https://drive.google.com/file/d/1yMg50woj2ESNCMMA6692jSk6OOVLfxWy/view) for details).
7. Go the first Assignment template from the above setup
8. Locate the lookup field ‘Invoice Settings Template Group’ and update it with the
   newly created Invoice Setting Template Group.
9. Repeat steps 1-8 for all required global Invoice Settings Templates.

<Warning>
  *A single Invoice Setting Template Group can be linked to multiple Assignment*

  *Templates. A new Invoice Setting Template is only needed if the related Invoice*
  *Settings differ or if they apply to a different Template Account.*
</Warning>

## 8. Update Custom Metadata (Conditionally Compulsory)

When using Global Assignment Templates, the following configuration is mandatory.

This step ensures that Template Accounts (created in the previous step) are assigned to a
defined picklist value. This picklist allows new or updated Account records to determine
the appropriate source for their Assignment Templates.

### Update Picklists

The integration includes picklist fields on both the Account object and Assignment
Templates custom metadata object.

These picklist values are used to align Account records with custom metadata for
querying purposes. Therefore, the values in these picklists must match.

The values of these fields are customer-driven based on the Template Account setup.
For example, if Template Accounts are configured by Payment Entity, it would be logical to
define the picklist values using the names of the Payment Entities.

To update the Account picklist:

1. Go to Setup > Object Manager
2. Search for and select ‘Account’
3. Select ‘Fields and Relationships’
4. Select ‘Assignment Template Group’.
5. Select ‘New’ in the values section
6. Add any required picklist values
7. Select Save.

<Warning>
  *The picklist value ‘Parent’ is used by the integration to assign Assignment*
  *Templates from parent Accounts. If this functionality is not required, the value can*
  *be deactivated but should never be deleted.*
</Warning>

To update the Assignment Template Custom Metadata picklist:

1. Go to Setup
2. Search for and select ‘Custom Metadata Types’
3. Select ‘Assignment Templates’
4. Select ‘Assignment Template Group’
5. Select ‘New’ in the values section
6. Add any required picklist values
7. Select Save.

### Create Custom Metadata

This configuration step maps the Template Accounts to the picklist values from the
previous step.

To create the custom metadata

1. Go to Setup

2. Search for and select ‘Custom Metadata Types’

3. Select ‘Manage Records’ on ‘Assignment Templates’

4. Select ‘New’

5. Enter all fields:
   1. Label - The name of the mapping (e.g. Payment Entity)
   2. Assignment Template Name - The API name, this defaults from the label.
   3. Assignment Template Group - The picklist value used to map the Accounts ‘Assignment Template Group’ to this custom metadata.
   4. Account ID - The ID of the template Account that will store the Assignment Templates.

6. Select Save

7. Repeat steps 1-6 for all required mappings.

<Info>
  **Example**

  Using scenario 3 from the global template scenario above, two template Accounts have
  been created:

  * Entity 1 Template Account
  * Entity 2 Template Account

  Both the Account and Assignment Template picklist fields will be updated with the
  values ‘Entity 1’, and ‘Entity 2’.

  When creating the custom metadata it would be configured as follows:

  Custom Metadata 1

  * Label = Entity 1 Mapping
  * Assignment Template Name = Entity\_1\_Mapping
  * Assignment Template Group = Entity 1 (As configured in above step)
  * Account ID = Entity 1 Template Account > Record ID

  Custom Metadata 2

  * Label = Entity 2 Mapping
  * Assignment Template Name = Entity\_2\_Mapping
  * Assignment Template Group = Entity 2 (As configured in above step)
  * Account ID = Entity 2 Template Account > Record ID
</Info>

## 9. Flow Glossary

The following glossary provides a high level overview of all flows provided within the
2cloudnine BH4SF Integration. These flows must be Active in order for the 2cloudnine
BH4SF integration to function as intended.

### Mandatory Flows

The following flows are mandatory for the operation of the 2cloudnine BH4SF integration.
Failure to activate and configure these flows according to the instructions above will result
in the integration not functioning as intended, or potentially failing entirely.

**2c9 - Create Account Assignment Template**

Record triggered flow that automatically creates a client specific Assignment template
from the global template (refer above). This flow is triggered by any Account on
create/update that does not have the field ‘Assignment Templates Default’ populated.

**2c9 - Create Job Assignment Template**

Record triggered flow used to clone Assignment Templates and assign them to a Job
when a new job is created or updated. This flow is triggered by a Job on create/update
when the field ‘Assignment Template’ is not populated.

**2c9 - Assignment Template Manager**

This Screen Flow is used to manage the Assignment Template from the Job record.
It plays a critical role in the 2cloudnine BH4SF integration, serving as the user interface for
updating middle- and back-office data from the Job record.

Any changes made through this flow are saved directly to the Job Assignment Template,
which is subsequently used to create the 2cloudnine Assignment.
This flow also provides direct access to subflows for managing Invoice Settings and Rates.

**2c9 - Create Assignment from Placement**

Record triggered flow used to automatically create Assignments when a Closing Report
record is created. This flow also contains the functionality to create the Payee record.

**2c9 - Manage Invoice Settings**

Screen flow used to streamline the management of invoice fields and related Invoice
Settings for both Assignments and Assignment Templates. It provides a user-friendly
front-office interface that enables users to view and update invoice-related data at the
Assignment level. The flow includes logic to automatically look up existing Invoice
Settings or create new records when none are found. This automation ensures
consistency, reduces manual data entry, and simplifies the overall invoice setup process.

**2c9 - Create Invoice Settings**

Record triggered flow used to automatically create Invoice Setting Templates and related
Invoice Settings. This flow is launched as a subflow from the ‘2c9 - Assignment Template
Manager’ flow and has been specifically designed to accept input variables to allow it to
be launched from other processes, providing a centralised method for the creation of
invoice settings.

**2c9 - Retrieve Invoice Settings**

Auto Launched flow used to get a collection of Invoice Settings based upon an input
variable. This flow is launched as a subflow from the ‘2c9 - Assignment Template Manager’
so that users can view related Assignment templates Invoice Settings.

**2c9 - Create Perm Fee**

This flow automatically creates a ‘Perm’ Invoiceable Fee and its related Pay Transaction. It
is triggered by a configuration option on the Assignment Template, which defines how
and when invoiceable perm fees should be automatically generated.

**2c9 - Create Invoiceable Fee Screen**

This screen flow allows users to generate Invoiceable Fees directly from the Client, Job,
Closing Report, and Assignment objects, integrating the fee process into the ATS for a
more streamlined experience. It is launched from the ‘2c9 - Manage Invoice Settings’ flow.

**2c9 - Enable Overrides**

This record-triggered flow ensures that Invoice Setting Overrides remain enabled (as
configured in Step 5) following the nightly automatic status update job, which disables all
overrides by default.
Without this flow, the configuration set in Step 5 will be overridden, resulting in errors
when users attempt to create a second set of Invoice Settings for the same Account.

### Optional Flows

The following flows are optional, depending on how the Placement will be used after the
Assignment is created.

If customers intend to retain and use the Placement for managing data such as the start
date, these flows are strongly recommended to ensure data integrity. However, if the
Placement is only used for the initial 2cloudnine Assignment hand-off, these flows can
typically be ignored.

**2c9 - Update Assignment from Placement**

Record triggered flow used to synchronise key shared fields between 2cloudnine
Assignments and BH4SF Closing Reports (Refer object and field mappings above).

If customers are not utilising the Closing Report after Assignment creation, this flow can
be safely deactivated.

**2c9 - Update Placement from Assignment**

Record triggered flow used to synchronise key shared fields between BH4SF Closing
Reports and 2cloudnine Assignments (Refer object and field mappings above).

If customers are not utilising the Closing Report after Assignment creation, this flow can
be safely deactivated.

**2c9 - Delete Assignment & Placement**

Autolaunched flow triggered from a button on the Assignment object. This flow is used to
correctly delete an Assignment and related Placement performing important checks such
as ensuring no Pay Transaction exists.

**2c9 - Delete Placement & Assignment**

Autolaunched flow triggered from a button on the Placement object. This flow is used to
correctly delete a Placement and related Assignment performing important checks such
as ensuring no Pay Transaction exists.
