Skip to content

Follow a calendar through the demo vault

This walks a single meeting through the demo vault, from the sales opportunity it belongs to through to seeing it on three different calendars. It is the fastest way to understand what a calendar is for before configuring one.

Nothing here changes the configuration. The event type configuration behind the demo is at the end, so the same set-up can be reproduced in another vault.

  • The CtrlPortals demo vault, signed in as Tina Smith (TinaS).
  • Nothing else. This example uses what the demo vault already has.
  1. Create an opportunity.

    The story: a promising conversation with Jeff Smith at A&A Consulting, who is interested in the CtrlPortals calendar. Create an Opportunity for it.

    A new opportunity for Jeff Smith at A&A Consulting.

    Open it and look at how the portal presents it — the same object, laid out for reading rather than as a metadata card.

    The opportunity seen through its portal.
  2. Schedule a meeting on it.

    Open the Calendar tab on the opportunity portal, click a day, and choose the Opportunity Event type.

    Fill in the meeting details. The Employee property takes several people, which is what puts the event on each of their calendars as well as on the opportunity’s.

    Creating an opportunity event, with the signed-in user and a colleague on it.
  3. Find the same event from somewhere else.

    Search for Krystian Bialy and open his employee portal, then its Calendar tab. Open the My Calendar dashboard alongside it.

    The event appears on all three — the opportunity’s calendar, the colleague’s calendar, and your own — because each is the same objects filtered differently. Side by side, this is how a free slot gets found.

    The same event on a colleague's calendar and on My Calendar.
  4. Look at how the event type is configured.

    In M-Files Admin, expand the calendar component’s Calendar section, open its Event types list and find the opportunity event.

    The opportunity event type in the CtrlPortals configuration.

    Event title and Event hover decide what an event says on the grid and what appears when somebody points at it. Both take property placeholders, added from the settings icon on the right.

    Adding a property placeholder to the event hover text.

An understanding of what a calendar does before you configure one: several event types on one grid, each a class of object, each filtered by who it belongs to and what it is attached to.

To build one from scratch, work through Add a calendar to a portal. For every setting a calendar has, see the Calendar component reference.

The demo calendar is the My Calendar dashboard below. The whole configuration can be seen as raw JSON by selecting the top of the hierarchy (CtrlPortals - VAF) and choosing the Advanced tab. The JSON here is one entry in the Dashboards list, not a whole configuration: pasted over the Advanced tab as it is, it would replace everything else.

The My Calendar dashboard and its nine event types in the configuration tree. The JSON below is this dashboard.
{
"Title": "My Calendar",
"Components": [
{
"Type": "Segment",
"Components": [
{
"Type": "Calendar",
"EventTypes": [
{
"Name": "Meeting",
"BackgroundColor": "#5e5cb2",
"TextColor": "#ffffff",
"Hours": "PD.Hours",
"AllDay": "PD.Allday",
"ToDate": "PD.EndTime",
"FromDate": "PD.StartTime",
"Class": "CL.Meeting",
"ObjType": "OT.Event",
"Personal": true,
"PersonalProperty": "{B428C1AD-172D-45C0-A30E-2BFE0799DE27}",
"PersonalType": "EmployeeObject",
"EventHoverText": "%PROPERTY_{PD.MeetingAgenda}%",
"EventTitle": "%PROPERTY_{PD.EventType}% - %PROPERTY_{6F185E79-FC77-4FD3-ACC8-97630E10058B}%"
},
{
"Name": "Internal Meeting",
"BackgroundColor": "#5C85B2",
"TextColor": "#ffffff",
"Hours": "PD.Hours",
"AllDay": "PD.Allday",
"ToDate": "PD.EndTime",
"FromDate": "PD.StartTime",
"Class": "CL.InternalMeeting",
"ObjType": "OT.Event",
"Personal": true,
"PersonalProperty": "{B428C1AD-172D-45C0-A30E-2BFE0799DE27}",
"PersonalType": "EmployeeObject",
"EventHoverText": "%PROPERTY_{PD.MeetingAgenda}%\n",
"EventTitle": "%PROPERTY_{3E2BB7EB-C49E-4C8C-825C-CAE0AEBA9A06}%"
},
{
"Name": "Project Event",
"ObjType": "OT.Event",
"Class": "CL.ProjectEvent",
"FromDate": "PD.StartTime",
"ToDate": "PD.EndTime",
"AllDay": "PD.Allday",
"Hours": "PD.Hours",
"BackgroundColor": "#01796f",
"TextColor": "#ffffff",
"Personal": true,
"PersonalProperty": "{B428C1AD-172D-45C0-A30E-2BFE0799DE27}",
"PersonalType": "EmployeeObject",
"EventHoverText": "%PROPERTY_{D317AF75-ED3B-4EF4-ADB0-ECB706E26F83}%",
"EventTitle": "%PROPERTY_{8EE4E8A6-157F-4A5B-8A8E-D716444BCC5D}%"
},
{
"Name": "Opportunity Event",
"ObjType": "OT.Event",
"Class": "CL.OpportunityEvent",
"FromDate": "PD.StartTime",
"ToDate": "PD.EndTime",
"AllDay": "PD.Allday",
"Hours": "PD.Hours",
"BackgroundColor": "#00a86a",
"TextColor": "#ffffff",
"Personal": true,
"PersonalProperty": "{B428C1AD-172D-45C0-A30E-2BFE0799DE27}",
"EventTitle": "%PROPERTY_{402F87FE-5223-4E44-9E84-11CD3A055094}%",
"EventHoverText": "%PROPERTY_{6F185E79-FC77-4FD3-ACC8-97630E10058B}% / %PROPERTY_{PD.MeetingAgenda}%",
"PersonalType": "EmployeeObject"
},
{
"Name": "Sales Event",
"ObjType": "OT.Event",
"Class": "CL.SalesEvent",
"FromDate": "PD.StartTime",
"ToDate": "PD.EndTime",
"AllDay": "PD.Allday",
"Hours": "PD.Hours",
"BackgroundColor": "#3498db",
"TextColor": "#ffffff",
"Personal": true,
"PersonalProperty": "{B428C1AD-172D-45C0-A30E-2BFE0799DE27}",
"PersonalType": "EmployeeObject",
"EventTitle": "%PROPERTY_{PD.Purpose}%",
"EventHoverText": "%PROPERTY_{D317AF75-ED3B-4EF4-ADB0-ECB706E26F83}%"
},
{
"Name": "Unavailable",
"BackgroundColor": "#ff6961",
"TextColor": "#d1d1d1",
"Hours": "PD.Hours",
"AllDay": "PD.Allday",
"ToDate": "PD.EndTime",
"FromDate": "PD.StartTime",
"Class": "CL.Unavailable",
"ObjType": "OT.Event",
"Personal": true,
"PersonalProperty": "{B428C1AD-172D-45C0-A30E-2BFE0799DE27}",
"PersonalType": "EmployeeObject",
"EventTitle": "%PROPERTY_{CEBF9AC9-C60C-4240-9F50-723DBF3A5CA7}%",
"EventHoverText": "%PROPERTY_{PD.StartTime}% - %PROPERTY_{PD.EndTime}%",
"NoCollision": true
},
{
"Name": "Working Hours",
"BackgroundColor": "#ff61a8",
"TextColor": "#ffffff",
"Hours": "PD.Hours",
"AllDay": "PD.Allday",
"ToDate": "PD.EndTime",
"FromDate": "PD.StartTime",
"Class": "CL.WorkingHours",
"ObjType": "OT.Event",
"Personal": true,
"PersonalProperty": "{B428C1AD-172D-45C0-A30E-2BFE0799DE27}",
"PersonalType": "EmployeeObject",
"EventTitle": "%PROPERTY_{CEBF9AC9-C60C-4240-9F50-723DBF3A5CA7}% ",
"EventHoverText": "%PROPERTY_{PD.EventStart}% %PROPERTY_{PD.EventEnd}%",
"NoCollision": false,
"IsBackgroundEvent": true
},
{
"Name": "Work Block",
"BackgroundColor": "#FFBC6A",
"TextColor": "#ffffff",
"Hours": "PD.Hours",
"AllDay": "PD.Allday",
"ToDate": "PD.EndTime",
"FromDate": "PD.StartTime",
"Class": "CL.WorkBlock",
"ObjType": "OT.Event",
"Personal": true,
"PersonalProperty": "{B428C1AD-172D-45C0-A30E-2BFE0799DE27}",
"PersonalType": "EmployeeObject",
"EventTitle": "%PROPERTY_{3E2BB7EB-C49E-4C8C-825C-CAE0AEBA9A06}%",
"EventHoverText": "%PROPERTY_{D317AF75-ED3B-4EF4-ADB0-ECB706E26F83}%",
"NoCollision": false
},
{
"Name": "Work from Home",
"BackgroundColor": "#6affbc",
"TextColor": "#c9c9c9",
"Hours": "PD.Hours",
"AllDay": "PD.Allday",
"ToDate": "PD.EndTime",
"FromDate": "PD.StartTime",
"ObjType": "OT.Event",
"Personal": true,
"PersonalProperty": "{B428C1AD-172D-45C0-A30E-2BFE0799DE27}",
"PersonalType": "EmployeeObject",
"EventTitle": "%PROPERTY_{3E2BB7EB-C49E-4C8C-825C-CAE0AEBA9A06}%",
"EventHoverText": "%PROPERTY_{D317AF75-ED3B-4EF4-ADB0-ECB706E26F83}%",
"NoCollision": false,
"Class": "CL.WorkFromHome"
}
],
"Height": 1000
}
]
}
]
}