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 will 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 for 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 will 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 will 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 will be shown on all dimensions. |
isBooker25CustomAction | Boolean | Some GoMeddo actions are not just opening urls for these this property will be set to true and GoMeddoCustomAction will 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 will work. |
booker25CustomAction | String | The custom action this button should run. Currently two different actions are available:
|
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 GoMeddo 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. |
Configure GoMeddo to use your implementation
After you’ve created your class. Let GoMeddo know that it should use that class and where to find it.
Go to Setup > Custom Settings
Find the entry named ‘System Settings’ contained in the B25 package.
Click Manage to the left of the ‘System Settings’ entry.
Create a new Setting named ‘Calendar Context Menu Class’.
Set the String Value to the name of the class you created.
Save the setting.
Example Class
This example 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 GoMeddo’ 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 calendarName = 'customSingleCalendar'; // this must be the uniqueName of an existing calendar record String urlTemplate = Page.B25__SingleResourceCalendarWrapper.getUrl() + '?recordId={dimensionRecordId}&calendar=' + calendarName; menuItem.put('urlTemplate', urlTemplate); } } // remove the 'View in Salesforce' and 'View in GoMeddo' 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; } }