Configure Extra Table Fields
Use Extra Table Fields to define the complete column structure for supported Employee Hub tables, and the filters employees can use above them. Configure each column and filter with flair__Extra_Table_Field__mdt.
Salesforce Admins who manage fields and the Flair Extra Table Field custom metadata type in Salesforce Setup. Employees see the columns and filters in the Employee Hub.
Before you begin
- Create the Salesforce field before adding it as a table column or filter, unless you use a supported
$customcolumn. - Record the object's API name and the field's API name.
- Identify the table ID when the column or filter should appear in one table only.
- Grant the Employee Hub integration user read access to any field you add, and for a filter also to the object it looks up and that object's Name field. A field you created yourself is not in the packaged Flair Hub permission set.
Review supported tables
| Table | Table ID |
|---|---|
| My Absences | flair__Absence__c.MyAbsences |
| Manager Absences | flair__Absence__c.ManagerAbsences |
| My Expenses | flair__Expense__c.MyExpenses |
| Manager Expenses | flair__Expense__c.ManagerExpenses |
| Directory | flair__Employee__c.Directory |
| People overview (manager) | flair__Employee__c.TeamPeople |
| Absences → Colleagues calendar | flair__Employee__c.TeamCalendar |
| Time Tracking History & Overtime (employee) | flair__Time_Entry__c.HistoryEmployee |
| Time Management timesheets (manager) | flair__Time_Entry__c.ControllingManager |
Only Directory, My Absences, and the Absences → Colleagues calendar (TeamCalendar) read filter records. Filter records on other tables do nothing.
The two time-entry tables behave differently from the others: their columns are off by default. Each person turns them on per table with the gear icon above the table, under Customize columns. Values are shown per day, so when a day has several time entries the distinct values are listed together in one cell.
Create an Extra Table Field
-
In Salesforce Setup, enter
Custom Metadata Typesin Quick Find. -
Open Custom Metadata Types.
-
Next to Flair Extra Table Field, click Manage Records.
-
Optional: Under View, filter the existing records by object, such as
AbsenceorExpense.
-
Click New.
-
In Object API Name, enter the target object, such as
flair__Absence__corflair__Expense__c. -
In Field API Name, enter the field or supported
$customcolumn. -
Configure any optional settings in Review Extra Table Field settings.
-
Click Save.

Review Extra Table Field settings
| Setting | What it does |
|---|---|
| Object API Name | Identifies the Salesforce object. This setting is required. |
| Field API Name | Identifies the field or $custom value to display. This setting is required. |
| Filter | Offers the field as a filter above the table instead of as a column. Lookup and picklist fields can be filtered. Only the packaged $filter. values listed below create filters rendered by the Employee Hub without a Salesforce field. |
| Active | Shows the column or filter. Clear it to hide it without deleting the metadata record. |
| Table Id | Limits the column or filter to one table. Leave it empty to show it in every supported table for the object. |
| Position | Sets the left-to-right order. Lower numbers appear first; the typical range is 0 through 9. |
| Column Title | Overrides the field label in the table header, or the placeholder of a filter's dropdown. Leave it empty to use the Salesforce field label. |
Assign a unique Position to each column for predictable ordering. Fields with the same position can appear in an undefined order.
Use a $custom column
$custom columns are computed or special Employee Hub values that do not exist as Salesforce fields.
| Object | Field API Name | Value |
|---|---|---|
| Absence | $custom.name | Absence name or title. |
| Absence | $custom.absenceCategory | Absence category. |
| Absence | $custom.approver | Approver information. |
| Absence | $custom.comments | Comments. |
| Absence | $custom.employee | Employee information. |
| Absence | $custom.loom | Loom video link. |
| Expense | $custom.comments | Comments. |
For example, to show employees in Manager Absences, configure these values:
| Setting | Value |
|---|---|
| Field API Name | $custom.employee |
| Object API Name | flair__Absence__c |
| Table Id | flair__Absence__c.ManagerAbsences |
Configure a filter above a table
A record with Filter selected becomes a dropdown in the table's Filter by: row instead of a column. Employees then narrow the table by the selected lookup records or picklist values. A $filter. value is a special filter whose options and matching behavior are provided by the Employee Hub.
For a field-backed filter, Field API Name must name a lookup or picklist field. Any lookup field on the object works, including fields that have never had a filter before, as long as the Employee Hub integration user can read the field and the object it looks up. Lookup options come from records used by employees; picklist options come from the field's values. A filter record with a $filter. name does not point to a Salesforce field.
To let employees filter the Directory by manager, create a record with these values:
| Setting | Value |
|---|---|
| Object API Name | flair__Employee__c |
| Field API Name | flair__Manager__c |
| Table Id | flair__Employee__c.Directory |
| Filter | Selected |
| Position | 4 |
Position orders the filter row from left to right, and Column Title renames a dropdown, so Office can replace the Location field label. Clearing Active removes the dropdown, and a hidden filter stops filtering the table even when its record IDs are still in the page URL.
The same field can be both a column and a filter. Create two records: one with Filter selected, one without.
Review the Directory filters
flair ships three filters for the Directory, all active, so the filter row looks unchanged until you edit them:
| Filter | Field API Name |
|---|---|
| Location | flair__Location__c |
| Department | flair__Department__c |
| Team | $filter.team |
Team uses $filter.team because team membership lives on flair__Team_Member__c rather than in a field on flair__Employee__c. flair names filters like this one, so you can hide, reorder, and rename them, but you cannot create new ones. Organizations that do not use teams clear Active on this record.
A dropdown appears whenever its record is active, even when there is nothing to choose from. Clearing Active on every filter of a table removes the whole Filter by: row, including Clear Filters. The table and its search box keep working.
Configure filters for absence tables
Configure My Absences filters
The My Absences table uses two packaged $filter. records. You can edit their Active, Position, and Column Title values, and you can add a lookup or picklist field as another filter on flair__Absence__c.
| Filter | Field API Name | Default label |
|---|---|---|
| Absence category | $filter.absenceCategory | Absence Type |
| Absence status | $filter.status | Status |
The existing type and status URL parameters continue to work when you rename or reorder these filters.

Configure the Absences → Colleagues calendar filters
The Absences → Colleagues calendar uses flair__Employee__c.TeamCalendar. Its shipped filter row is configurable through the same metadata records, so you can hide, rename, or reorder the filters without a Hub release.
| Filter | Field API Name | How it narrows the calendar |
|---|---|---|
| Location | flair__Location__c | Filters colleagues by the lookup field. |
| Department | flair__Department__c | Filters colleagues by the lookup field. |
| Team | $filter.team | Filters by team membership. |
| Reporting line | $filter.reportingLine | Filters by My Team, Direct Reports, or Indirect Reports. |
| Absence Type | $filter.absenceCategory | Filters the absences shown on the calendar. |
| Status | $filter.absentStatus | Filters colleagues absent today or this month. |

To add another filter, create an active Extra Table Field record with Object API Name flair__Employee__c, Table Id flair__Employee__c.TeamCalendar, Filter selected, and the API name of a lookup or picklist field. Use Position to place it in the row and Column Title to override its label. The new field-backed filter narrows the calendar on the server.
The calendar keeps the locations and departments URL parameters for existing calendar subscriptions. Other field-backed filters use their field API names in the page URL.
Configure columns for specific tables
Use Table Id when two tables of the same object need different columns, such as My Absences and Manager Absences, or the employee History & Overtime and manager Time Management timesheets.
For My Absences, create a record with these values:
| Setting | Value |
|---|---|
| Object API Name | flair__Absence__c |
| Field API Name | flair__Amount__c |
| Table Id | flair__Absence__c.MyAbsences |
| Position | 3 |
For Manager Absences, create another record:
| Setting | Value |
|---|---|
| Object API Name | flair__Absence__c |
| Field API Name | flair__Approval_Status__c |
| Table Id | flair__Absence__c.ManagerAbsences |
| Position | 3 |
To show a time-entry field to employees only, and not to managers:
| Setting | Value |
|---|---|
| Object API Name | flair__Time_Entry__c |
| Field API Name | flair__Onsite_or_Home_Office__c |
| Table Id | flair__Time_Entry__c.HistoryEmployee |
| Position | 3 |
Add a standard Salesforce field
Standard Salesforce fields such as CreatedDate can also appear in an Employee Hub table. For example:
| Setting | Value |
|---|---|
| Object API Name | flair__Absence__c |
| Field API Name | CreatedDate |
| Position | 9 |
| Column Title | Created Date or empty |
Troubleshooting
A column does not appear
- Confirm that Active is selected.
- Confirm that Object API Name and Field API Name use API names, not labels.
- Confirm that the Salesforce field exists or that the
$customvalue is supported. - Confirm that Table Id matches the displayed table.
- In a time-entry table, confirm that the column is enabled under Customize columns, and expand a week to see the daily values.
A filter does not appear
- Confirm that the Employee Hub integration user has read access to the field, to the object it looks up, and to that object's Name field. Without it the Employee Hub cannot read any extra field value for the table, so columns can disappear alongside the filter.
- Confirm that Filter and Active are both selected.
- Confirm that Field API Name names a lookup or picklist field, or a supported
$filter.value. - Confirm that Table Id matches the table where you expect the filter, such as
flair__Employee__c.Directory,flair__Absence__c.MyAbsences, orflair__Employee__c.TeamCalendar. - For a lookup filter, confirm that at least one employee references a record through that field. For a picklist or
$filter.filter, confirm that the underlying rows contain values the Employee Hub can offer.