Booker25 multi dimension calendars have a context menu when the user clicks on a dimension record
This menu can be customised by following the following steps.
Create an Apex class that implement the System.Callable interface. For an example, see the code below.
Click on Setup and search for Custom Settings
Click on Manage next to System_Settings
Click New
For the name specify Calendar Context Menu Class
Fill in the name of the apex class in the String value field
Click Save
Callable class parameters and return type
The callable class has two parameters a String specifying the action and a Map<String, Object> with parameters
For the custom context menu the action wil be contextMenu.
The parameter map will contain one entry defaultContextMenu this entry is a List of context menu items.
A single context menu item is a Map<String, Object> with the following keys
Key name | Type | Description |
---|---|---|
uniqueId | String | Unique id not required but provided by the default items so they can be identified. |
label | String | The label shown in the context menu |
urlTemplate | String | The url that should be opened if the user clicks this item. This template can include a merge field {dimensionRecordId} this wil be replaced with the id of the dimension record the user selected. |
hideIfNotReservable | Boolean | If true the entry will not be shown on non reservable dimension objects. |
booker25AdminsOnly | Boolean | If true the entry wil only be visible if the user has the B25_Admin permission set. |
availableForDimensions | List<String> | The names of the dimensions where this entry should be show. If left empty it wil be shown on all dimensions. |
isBooker25CustomAction | Boolean | Some booker25 actions are not just opening urls for these this property wil be set to true and booker25CustomAction wil be set to specify the custom action. You can not add additional custom actions but any context entries with this property set to true and an existing custom action selected wil work. |
booker25CustomAction | String | The custom action this button should run. Currently two difference actions are available. expandReservationGroups and collapseReservationGroups. expandReservationGroups wil expand any groups of reservations that are collapsed and wil only be visible if there are any collapsed groups. collapseReservationGroups wil collapse any expanded reservation groups and wil only be visible if there are any expanded groups. |
Default context menu
The default context menu consists of the following items
unique id | Type | Additional conditions | Description |
---|---|---|---|
SingleCalendarLink | Url | hideIfNotReservable | Opens the single calendar for the selected dimension record. |
ViewInSalesforce | Url | None | Opens the dimension record in salesforce |
ViewInBooker25 | Url | Dimension B25__Resource__c and booker25AdminsOnly | Opens the dimension record in the booker25 UI |
ExpandReservationGroups | Action | Only visible if there are collapsed groups in the dimension record row | Expands any reservation groups in the selected dimension record. |
CollapseReservationGroups | Action | Only visible if there are expanded groups in the dimension record row | Collapses any reservation groups in the selected dimension record. |
Custom Context menu implementation example
This example implementation updates the view calendar link to go to a specific calendar implementation with uniqueName customSingleCalendar
It also removes the View in salesforce and View in Booker25 links
global with sharing class CustomContextMenu implements System.Callable { global Object call(String action, Map<String, Object> parameters) { if (action != 'contextMenu') { return null; } List<Map<String, Object>> defaultMenu = (List<Map<String, Object>>) parameters.get('defaultContextMenu'); // Update the single resource calendar link for (Map<String, Object> menuItem : defaultMenu) { if(menuItem.get('uniqueId') == 'SingleCalendarLink') { String urlTemplate = Page.B25__SingleResourceCalendarWrapper.getUrl() + '?recordId={dimensionRecordId}&calendar=customSingleCalendar'; menuItem.put('urlTemplate', urlTemplate); } } // remove the view in salesforce and view in booker25 links Integer i = 0; while (i < defaultMenu.size()) { String uniqueId = (String) defaultMenu[i].get('uniqueId'); if (uniqueId == 'ViewInSalesforce' || uniqueId == 'ViewInBooker25') { defaultMenu.remove(i); } else { i += 1; } } return defaultMenu; } }