"Out of office" Calendar in Office 365/Outlook - calendar

All,
I was wondering if there is any way that you know of to automatically populate a Calendar in Office 365/Outlook based on what other users enter to their calendar.
The HR manager wants to have a calendar that shows when employees are out of office all in one place. Having a shared out of office calendar people can "invite" makes sense, however he believes people will forget to do this and it wouldn't be effective!
I've so far found no obvious way of doing this.
Thanks in advance.

The closest built-in feature to a global or master calendar is not a single calendar, but the ability to overlay multiple calendars in Outlook's Calendar module. External calendars would of course have to be shared/delegated to you first, but you would at least have a central point to view appointments from multiple people using this method.
However, if you prefer a single Calendar but need appointments from other Calendars in it, then you're definitely looking at synchronization - but you can't synchronize multiple calendars in Outlook natively. For that you'll need to look at a custom solution (such as an add-in) or third-party tools:
http://www.slipstick.com/outlook/sharing/more-tools-and-utilities-for-sharing-data/

You could develop an app or a service that uses Outlook Calendar REST API.
Your service would poll the employees calendars, compare their status with a local database and create new events on your shared calendar using again the Outlook API.

Related

How do you get a URL to a shared O365 calendar?

I have been playing around with the Graph API to access the shared calendars and events within an organization.
I can successfully query my organization users and the calendar/events for any of those users. What I would like to do now is to generate a URL allowing you to jump to an outlook web session (eg - https://outlook.office365.com/calendar/) directly to a particular user's calendar (that you have access to).
I can see that Events have a 'WebLink' property that allows you to do this with a calendar event, but I can't find any documentation that indicates how you could jump to a calendar the same way.
I did find some old stuff implying that the old school OWA used to allow this but those url's don't look like they work anymore.
I also tried to pull apart the URL's provided when you 'share' you calendar with an external email address and it sends them a 'click here to add the calendar, or here to see a web view' etc email. That looked kind of promising because it actually DOES provide a direct link to a web version of the calendar; but it it includes a few fields in the URLthat I can't figure out (more than likely the external user auth) so I can't reverse engineer it to build one with the info I have available in the Graph API.
URL was of the form:
https://outlook.office365.com/owa/calendar/<userid>#<domain>/<52CharacterHex_ProbablyAHashedTokenForTheExternalUsersAuth>/<WindowsUserSID_ProbablyToRepresentTheExternalUserOrProxyAccessEntity>/reachcalendar.html
Anyone else got any ideas on how I can launch a web session of another uses calendar (that I have access to)? Ultimately what I am doing is creating a small management dashboard (using a summary built via Graph API data) that shows an overview of a collection of user's calendars but allows you to jump into the any individual user's full calendar if more info is required.
Publish to the web. follow this:
https://support.microsoft.com/en-us/office/share-your-calendar-in-outlook-on-the-web-7ecef8ae-139c-40d9-bae2-a23977ee58d5
basically
OWA -> Settings
Calendar -> Shared Calendars
Publish a Calendar -> copy HTML

Reviewing iCloud Calendars

Question: Is there a way to either confirm that an iCloud calendar is empty or, alternatively, to list the contents of the calendar?
Background: I have a number of calendars (iCloud, Google and others) that I have created over the years. I now want to manage them down to a smaller number and remove duplicate events and actions.
Currently I am looking at my iCloud calendars. A couple of the calendars appear to be empty because I cannot see anything from them on my calendar when I scroll back and forward through the months. However, it's possible that the calendar my contain something that I have forgotten but don't want to lose.
You can access iCloud calendars using the standard
CalDAV protocol. As a recent complication you need to setup an app-specific-password to access your account.
You fail to mention what programming environment you want to do this in, but:
Building a CalDAV client
is a great resource.
Basic stuff like listing calendars can also be done quite easily using tools like curl and xmlstarlet.

Can I view a colleague's calendar over API for Google Calendar for business? Want to use this for detecting possible times to schedule meetings

I can see their calendars on the web when I sign on, can I retrieve this from API? I hope to be able to build an intelligent meeting assistant.
As seen in the Calendar Resource API docs right now:
The Google Data Calendar Resource API is now deprecated and is scheduled for sunset in January 2017. Apps should instead use the Directory API's Calendar Resource object.
As for the suggested Directory API, I think you could specifically use the resources.calendars.get which is described in the docs as (with parameters):
Retrieves a calendar resource.
Parameters:
calendarResourceId - The unique ID of the calendar resource to retrieve.
customer - The unique ID for the customer's Google account. As an account administrator, you can also use the my_customer alias to represent your account's customer ID.
-- where I think you can specify the user to get that specific calendar from.

Sharing Google Calendar's in an Organization

Question:
Is there a simple way to automatically share a calendar with users in a Google Organization.
Current Technology:
I am looking in to streamlining our calendars within our organization. We are using a Google business account for our calendars, emails, contacts, and we sync it all on to our Mac's.
Current Method:
When we add a new calendar for each office location, (1) we have to create calendar on the super admin account, (2) share it with everyone, (3) each user must accept the calendar, (4) then we use google Sync Select to add the calendar to their list, and (5) finally we sync it with iCal.
Issues with Current Method:
- Too many steps for a large group of users
- Cluttered calendars (since we all share a calendar based off office location)
- Difficult to assign specific events
Thanks in advance. Let me know if you need any more information!
Steps 1-3 can be done automatically through Google Calendar APIv3. You can create a service account, delegate the domain authority to it and then use it to create the new calendars and share them. Take a look into authority delegation here: https://developers.google.com/accounts/docs/OAuth2ServiceAccount#delegatingauthority
The documentation for API v3 is here:
https://developers.google.com/google-apps/calendar/

How do I create an Outlook calendar subscription from my web/app server?

I have a website that is a calendar with all the basic features (ASP.NET MVC and SQL Server). People can enter events, view others events, etc. One person asked me if there was a way they can see these events in their Outlook calendar - as a second calendar.
I have all of the data on the server. Is there a recommended way to have Outlook point to my web server or DB for a calendar? I see there are ways to generate iCal files from C#.
If so, how would this data stay in sync as new events are created, deleted, etc? A one time dump would be ok but the concern would be that the data would get stale. Is there a solution that would keep the reference dynamic to keep them in sync. (it would only need to be a one way transfer, i don't expect the need to create or delete from Outlook, so outlook is just read only)
I think you can create iCalendar file,then publish it ,so let clients subscribe your internet calendar because internet calendar subscription is periodically synchronized with a calendar that is saved on a web server,and any updates to the internet calendar are downloaded automatically into MS Outlook.
You can use DDay.Ical library for creating (.ics) files using C#.
assuming your question is about how to keep the client and server side synched, and since you only mention outlook as client, there is a custom way to control the update frequency: microsoft has a custom calendar property: X-PUBLISHED-TTL (see microsoft msdn calendar)
2.1.3.1.1.15 Property: X-PUBLISHED-TTL
Brief Description: Specifies a suggested iCalendar file download frequency for clients and servers with sync capabilities.
however note that this property being custom will be ignored by other calendars
You could try to keep track of the SEQUENCE of updates to each calendar entry in your database, and add a trigger on your table of calendar events so that it would automatically send event updates when something changes. Each update would have a higher SEQUENCE property than the updates that came before it, but the UID (the event's unique identifier) would remain the same.
For this to work, though, you'd need to be able to send iCalendar events from within your SQL Server, which can be possible using the following CLR project:
github.com/EitanBlumin/sql-clr-ics

Resources