Sign Up For Time Slots Outlook
Microsoft Bookings is customer-facing online booking & scheduling system for users of Office 365. It is part of the value-add tools targeted at small businesses such as Invoicing MileIQ, Listings, Connections, and Outlook Customer Manager.
Click on the date you want to set the appointment slots for In the event box, click 'Appointment slots' Enter the details of the appointment You can choose to set the time as a single appointment, or divide it up into smaller appointments by changing the setting for 'type'. Outlook has no built-in means of doing this the way you'd like. The closest solution is to send a message out listing the time slots and instructing the recipients to make an appointment with you, or whomever, for the slot of their choice. When they go to schedule the appointment they'll see if the slot is already taken.
Originally, Bookings was only available to customers of Business plans however is now available to Enterprise customers as well – while the others are yet to cross the licensing bridge.
Bookings competes with online scheduling systems such as Calendly.com which are gaining in popularity as they cut down on the back and forth of setting appointments by simply publishing your calendar and allowing external people to find available slots.
Apart from being included in the Office 365 suite I’m not sure what the differentiator is for Bookings, but as I was considering using Calendly.com it made sense for me to use Bookings instead.
There are a number of different ways people can schedule meetings and appointments in the corporate world (I’ll be writing a comparison piece on those options soon), whereas Bookings is aimed more at the ‘customer off the street’ market – in that the calendar is made available publicly and anyone can come along and book an appointment.
While I don’t normally focus on small business customers, I think in this new era of customer-centric business approaches this particular tool can serve even enterprises – and not just in retail or small businesses.
Bookings allows multiple businesses to be set up within a single tenant. This means that external-facing teams can have their own setup, and different users assigned.
Each booking calendar can have different options set such as time increments, lead time (aka notice period) for bookings or cancellations, whether customers can choose specific team members for the booking, language and time zone, business hours, as well as logo and theme.
Once the basics are done staff can be assigned to the booking calendar by selecting their profile from Office 365. Options can be set such as selecting business hours, but also to allow events in their Office 365 calendar to affect availability.
Each calendar can also have different appointments or services set, which can be customised. For myself I don’t expect people to come to me from Facebook or the general web, however have defined a number of different meetings types available for my clients and partners to choose from. In my instance I chose not to put prices in to any of the services as the prices may vary depending on engagement, but also there are plenty of meetings I have with prospective clients or partners where I don’t charge.
When a calendar is published a URL is generated which can be placed on a website, or in my case – added as a link in my email signature:
This has allowed me, my clients and partners to significantly reduce the amount of time we spend trying to organise meetings. It has also allowed them to continue accessing my availability and booking meetings in without even consulting me – which removes myself as a bottleneck.
If Bookings is enabled in Office 365 – anyone can use it. This page explains how users can access it, and then configure the calendars.
While it is aimed at small businesses I feel that it can be better targeted at small teams. Many organisations will have teams that can benefit this that are not necessarily external or public facing.
While this tool cuts down time, it also removes human interactions. Some may say in particular scenarios this is not ideal, however if the expectation is set then nobody’s feathers should be ruffled. When directing someone to use the Bookings page – simply explain in one line how this will help.
My two biggest shortcomings are that there is no integration with Skype for Business, and the bookings are not direct. What I mean by the latter is that when appointments are scheduled in Bookings, it is from the system itself – not between the two people. This means that when the booking appears in my calendar, if I move or delete it there is no effect on the actual booking, nor is anything sent to the user. If I want to go back to the person and change the time, I need to do this via the Bookings app or communicate directly.
The fact it doesn’t integrate with Skype for Business is disappointing, as it would save further time if upon the booking creation a Skype for Business meeting was included so people on both sides of the fence could simply connect straight in at the scheduled time – instead of having to send a separate meeting.
I will be publishing a piece in the coming week comparing a variety of different scheduling tools available to us from Office 365, however why use Bookings specifically:
| Bookings vs. | Reasons |
| Publishing or sharing your calendar | Individual-based only Can’t apply rules to the appointment |
| FindTime | Requires a human to initiate the poll |
| Cortana / calendar.help | Requires a human to initiate the conversation |
| Calendly.com or others | Separate tools that add costs |
Also published on Medium.
There have been many times when a client wanted to use SharePoint in order to allow employees to register for classes or other events. Typically the requirement is to have a certain number of spots before registration is automatically closed. This is how I created a registration system for a client.
Administrators can create new classes/events just by adding them to the calendar and specifying the number of spots available.
The user goes to a page with a list of available classes:
Upon clicking the class name, the user will see an event from a calendar like this:
When they click on Register, the form will look like this:
Confirm Registration will automatically set the Seats Remaining to 1 less (24 in the example above).
NOTE: I am still working on a workflow that will allow a user to cancel their registration and add one back to the Seats Remaining as well as remove them from the Attendees list.
Once all seats have been taken, the Register link will be removed with the text Class is Full. If the class is closed for registration, it will state Closed for registration.
Create the Lists
- Calendar – Just use the out of the box Calendar app and add the following columns
- Required columns
- Seats – Number
- FilledSeats – Number – hidden column
- RemainingSeats – Calculated Column with Formula[code]=Seats-FilledSeats[/code]and data type returned Number
- SeatsIncrement – Calculated Column with Formula[code]=FilledSeats+1[/code]and data type returned Number
- Closed – Yes/No with default value of No
- StaticID – Number – Hidden column NOTE: This is a hack that allows the ID to be used in calculated columns. A workflow will set this field.
- Register – Calculated Column with Formula =IF(Closed=TRUE,”Closed for registration”,IF(RemainingSeats>0,”Register”,”Class is Full”)) and data type returned Single Line of Text
- Optional columns used for stylizing the display form as shown above:
- SeatsRemaining – Calculated Column with Formula
=CONCATENATE([Remaining Seats],” Seats Remaining”) and data type returned Single Line of Text NOTE: This will show how many seats remaining. If you choose not to hide the labels on the display form, then you can leave this column out. - CourseDescription – Multiple Lines of Text with Enhanced rich text. NOTE: In order to stylize the form I had to create a new Multiple lines of text column. The default Description column would not work with the JavaScript used to style the form. I hid the Description column.
- SeatsRemaining – Calculated Column with Formula
- Required columns
- Attendees List – Custom SharePoint list with the following column added
- Meeting – Lookup. Get information from the calendar list created earlier using the Title field
Create the workflows
- SetStaticClassID Workflow
- Open the site in SharePoint Designer
- Select the Calendar list created earlier and create a list workflow
- Add an action – “Set Field in Current Item”
- Click the “field” link and choose StaticID
- Click the Value link and the the fx button. Data source is current item and field from source is ID
- Go to the Settings page for the workflow. Set the Start Options for “Start Workflow automatically when an item is created”
- Save and Publish
The workflow will look like this:
- Registration Workflow – NOTE: This workflow does not add the user to the attendees list of the event. I will update this post later with the info on how to do this.
- Open the site in SharePoint Designer
- Select the Attendees List created earlier and create a list workflow
- Add an Action – “Update List Item”
- Click the “this list” link in the action
- Change the list to the Calendar created earlier
- Click the “Add” button
- Choose “Filled Seats”
- Click the fx button
- Data Source: Calendar
- Field from source: SeatIncrement
- Field: ID
- Value – click the fx button
- Data source: Current Item
- Filed from source: Meeting
- In the Find the list item section
- Field: ID
- Value – click the fx button
- Data Source: Current item
- Field from source: Meeting
- Go to the Settings page for the workflow. Set the Start Options for “Start Workflow automatically when an item is created”
- Save and Publish
Your workflow should look like this:
Nintex Form
- Go to the Attendees list
- In the List ribbon, click Nintex Forms > Customize the Item Form
- Click on Form Variables
- Click Add
- Name: CurrentUser
- Type: Generic
- Connected to: Not connected
- Recalculate formula on view mode: Yes
- Recalculate formula on new mode: Yes
- Recalculate formula on new mode: Yes
- Formula:[code]userProfileLookup({Common:CurrentUser}, “Display name”)[/code]
- Save
- Click on Settings
- Expand Custom JavaScript and enter:
2 4 | varmeetingID=NWF$('#'+ddltxtMeetingID).val(); }); |
Sign Up For Time Slots Outlook Express
will store the meeting ID from the URL parameter used later on.
- Name: txtMeetingID
- Connected to MeetingID
- Default value source: Specify the default value
- Default value: fn-GetQueryString(MeetingID)
- Advanced
- Store Client ID in JavaScript variable: Yes
- Client ID JavaScript variable name: ddltxtMeetingID
- Add a List Lookup control – This is used in the form JavaScript and automatically chooses the correct class/meeting
- Name: Meeting
- ID connected to: Meeting
- Display format: Drop down list
- Filtering:
- Filter available selections: By a control’s value
- Where filed: ID
- Filtered by control: txtMeetingID
- Action when no filter applied: Show None
- Advanced
- Store Client ID in JavaScript variable: Yes
- Client ID JavaScript variable name: ddlMeetingTitle
- Add a Calculate Value form control – This is used to set the title of the item in the Attendees list.
- Enter the formula you would like to use to create a title for the item. The formula below will give the title of: DisplayName-<Class Title> on <Class Date> at <Class Time> in the <Class location>
- userProfileLookup(Current User,”PreferredName”) + “-” + lookup(“Class Registration Calendar”, “ID”, txtMeetingID, “Title”) + ” on ” + formatDate(lookup(“Class Registration Calendar”, “ID”, txtMeetingID, “Start Time”), “D”)+ ” at ” + formatDate(lookup(“Class Registration Calendar”, “ID”, txtMeetingID, “Start Time”), “t”)+”-“+formatDate(lookup(“Class Registration Calendar”, “ID”, txtMeetingID, “End Time”), “t”)+” in the “+lookup(“Class Registration Calendar”, “ID”, txtMeetingID, “Location”)
The following controls will display a message to the user. The meeting/class is selected using a URL Parameter which will be created in the registration link later on using JavaScript.
- Add a Calculate Value form control
- Formula:
userProfileLookup(Current User,”FirstName”) +”,”
- Formula:
- Add a Calculate Value form control – This is the text the user will see when registering (Please confirm your registration for <Class Name> on <Class Date> at <Class Time> in the <Class Location>.)
- Formula:
“Please confirm your registration for ” + lookup(“Class Registration Calendar”, “ID”, txtMeetingID, “Title”) + ” on ” + formatDate(lookup(“Class Registration Calendar”, “ID”, txtMeetingID, “Start Time”), “D”)+ ” at ” + formatDate(lookup(“Class Registration Calendar”, “ID”, txtMeetingID, “Start Time”), “t”)+”-“+formatDate(lookup(“Class Registration Calendar”, “ID”, txtMeetingID, “End Time”), “t”)+” in the “+lookup(“Class Registration Calendar”, “ID”, txtMeetingID, “Location”)+”.”
- Formula:
- Change the Save button label to Confirm Registration
- Change the Cancel button label to Cancel Registration
JavaScript
The JavaScript turns the calculated column into html and changes the look of the Calendar Item form.
Sign Up For Time Slots Outlook Account
- Go to the Calendar list created earlier.
- Click on the List Ribbon. Then Form Web Parts > Default Display Form
- Add a snippet to the bottom of the form. Add the following code:

2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 | <style><span id='ms-rterangecursor-start'></span><span></span> .ms-formbody { BACKGROUND:nonetransparentscrollrepeat0%0%; }</style> <script src='https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script><script type='text/javascript'> functionOpenLandLRegistration(MeetingID) varoptions={ url:'/Lists/ClassAttendees/NewForm.aspx?MeetingID='+MeetingID, height:600, dialogReturnValueCallback:RefreshOnDialogClose {} // Reformat the url in the calculated column to hyperlink // Format link font size and weight $('td.ms-formlabel:contains('Register')').siblings('.ms-formbody').css('font-size','18px'); $('td.ms-formlabel:contains('Register')').siblings('.ms-formbody').css('font-weight','bold'); $('td.ms-formlabel:contains('Title')').siblings('.ms-formbody').css('font-size','18px'); $('td.ms-formlabel:contains('Title')').siblings('.ms-formbody').css('font-weight','bold'); $('td.ms-formlabel:contains('Location')').siblings('.ms-formbody').css('font-size','16px'); $('td.ms-formlabel:contains('Start')').siblings('.ms-formbody').css('font-size','16px'); $('td.ms-formlabel:contains('End')').siblings('.ms-formbody').css('font-size','16px'); $('td.ms-formlabel:contains('Seats')').siblings('.ms-formbody').css('font-size','16px'); $('td.ms-formlabel:contains('Description')').siblings('.ms-formbody').css('font-size','16px'); $('td.ms-formlabel:contains('Attendees')').siblings('.ms-formbody').css('font-size','16px'); functionreformatCalculatedColumnUrl(){ $('td.ms-formlabel:contains('Register')').siblings('.ms-formbody').each(function(){ }); }); $(function(){ $('a[name$='SeatsIncrement']').closest('tr').hide(); $('a[name$='WorkspaceLink']').closest('tr').hide(); $('a[name$='Closed']').closest('tr').hide(); $('a[name$='RemainingSeats']').closest('tr').hide(); $('a[name$='Title']').closest('td').hide(); $('a[name$='EventDate']').closest('td').hide(); $('a[name$='CourseDescription']').closest('td').hide(); $('a[name$='Register']').closest('td').hide(); $('a[name$='ParticipantsPicker']').closest('td').hide(); $('a[name$='SeatsRemaining']').closest('td').hide(); |
Sign Up For Time Slots Outlook Sign In
Now just create a page with links to the calendar items.