I need to setup event calendar which will allow Sales head / manager to authorize selected sales people to book event rooms for a trade show/ event. They could choose time slots needed. Prevent concurrent room bookings. At the end, any booked event room needs to sync to respective sales person calendar.
I am planning to go for custom setup which will involve setting up
- custom objects
- screen flow to collect event details, select customer, timings
- custom lwc for giving execl like screen
Has anyone implemented similar requirement. Checked 'CalendarAnything' app on app exchange, license cost will be expensive.
ThankYou.
#Sales Cloud
A custom build is a sound choice here. Sales Cloud has no native room-booking feature, and a couple of custom objects plus a flow cover this without another license. Here's a design that holds up well:
1) Data model
- Event Room (custom object): one record per room, with capacity, location and an Active checkbox.
- Room Booking (custom object): Room (lookup), Sales Rep (User lookup), Start and End (Date/Time), Status (Requested / Approved / Cancelled), plus the Trade Show and Account.
- Who can book: create a custom permission "Book Event Rooms" inside a permission set that the sales head assigns. Check it in the screen flow with $Permission. If authorization is per trade show, use a small junction object (Event + User) instead.
2) Preventing double bookings
Two bookings for the same room overlap when new Start < existing End AND new End > existing Start (ignore Cancelled ones).
- In the screen flow, run a Get Records with that filter before saving, and show a friendly message if anything comes back.
- Also enforce it on save. A screen-flow check alone can't stop two people saving the same slot at the same second. Use a before-save Apex trigger that locks the room (SELECT Id FROM Event_Room__c WHERE Id IN :roomIds FOR UPDATE), re-checks for overlaps, and calls addError(). A record-triggered flow with a Custom Error element works for the basic check, but the FOR UPDATE lock is what makes it race-proof.
3) Syncing to the rep's calendar
When a booking is Approved, have a record-triggered flow create a standard Event owned by the sales rep: same Start/End, Location = room name, Related To = the booking or account. Calendar sync then picks it up like any other Salesforce event. With Einstein Activity Capture, make sure event sync is turned on in a direction that sends Salesforce events to Outlook/Google. When a booking is cancelled or moved, update or delete that Event from the same flow.
4) The "Excel-like" view
Before building a full LWC, try the standard Lightning Calendar. You can create a calendar from any object with date fields (Calendar > New Calendar > Room Booking, Start/End fields, one list view per room) and share it with the team. If you still want a grid (rooms as rows, time slots as columns), build it as an LWC with lightning-datatable or a calendar library loaded as a static resource. Keep the save logic in the screen flow / Apex so the overlap rule lives in one place.
If you found this answer helpful, please mark it as helpful.