Flows
Control what events are created and how they display on calendars
Overview
Flows control what events are created, what calendars they're synced to, and how events display on those calendars. By creating flows, you can customize synchronization rules and event displays for different audiences—for example, creating separate flows for students and faculty to show different information for the same data source.
How To Create a Flow
- Navigate to Flows and add a new flow
- Select a type by choosing the pipeline you want to create a flow for (e.g., Blackbaud Class Schedules to Google Calendars)
- Give the flow a name (e.g., "Academic Class Schedules")
- Apply desired filters
- Customize the flow template
- Apply desired settings
Filters
Filters let you specify which types of events you would like to sync to your calendaring system and who should be invited to those calendar events. There are two types of filters:
Event-level filters allow you to specify whether all events should be synced to your calendaring system or just some, based on the properties of the event including:
- The school level of the class
- The course type of the class
- The date of the event
Attendee-level filters allow you to specify whether events should be synced for all faculty and students or just for some, based on:
- The grade level of the student
- The faculty role with respect to the class
Templates
The event template allows you to specify the details of how events are added to your calendaring system. You can customize the information that should appear in the event title, location, and description/notes by using merge fields such as class ID, course ID, class description/name, campus, building, room, block, class URL, and more.
You can also specify:
- The event visibility for others when viewing the attendee's calendar
- Whether event attendees should be able to view the entire event guest list
To set up your template, configure how you want the event title, location, description, visibility, and free/busy status to appear. You can always change the template later and re-sync, so feel free to try out different content and settings while you are in pilot mode or after.
Using Merge Fields
The event template allows you to specify the information that should appear in the title, location, and description/notes of each SchoolCal-created event by using merge fields.
For example, you can use merge fields to add the Class ID from your SIS to the event title, or add the class description from the SIS to the event description. You can view all available merge fields you can use as part of this event content.
To add a field from your data source, start with the highest order name (e.g., Section, or SectionMeeting), then add subsequent fields, separated by a period. Each time you change hierarchy, you'll need to add a period.
For example, if you want to use the event's room within an event location, you would use the merge field "SectionMeeting.RoomName" as the room field is listed within SectionMeeting. Each time you change hierarchy (moving to a new depth level), you'll need to add another period and field name. For example: Section.Course.Name
To use a merge field within the title, location, or description of the event, surround it in double curly brackets, such as {{Section.SchoolLevel}}. As you construct your event title, location, and description, a preview of how each should appear in your calendar event is shown below the field.
If there is no value for a field for a particular class, it will appear blank in the event.
Advanced Template Content (Optional)
This section is a bit more technical and can be safely ignored if desired.
In some scenarios, you may want to configure your event title, location, or description using some additional logic based on whether a field is blank. You can do so using combinations of specific characters to define sections of content that should only show if a specified field is blank or that should only show if the field is non-blank.
To specify that a section of content should only show if a specific field is non-blank, use two tags to wrap the section: {{#mergeField}} before the beginning of the section, where mergeField is the name of the merge field that should determine the section's visibility and {{/mergeField}} where mergeField is the same value as the first tag. You can put any content between these tags and the content will only show when mergeField is not blank.
Example 1: Display the block name in parenthesis, if there is one
{{Section.Description}} {{#if SectionMeeting.BlockName}} ({{SectionMeeting.BlockName}}){{/if}}
Result: "Algebra 1" or "Algebra 1 (B)"
But if the Spanish class is not scheduled into a block, it would look like: "Spanish"
Example 2: For Athletics - If there is a title for the athletic event, display it, but if there is not one, show instead the team and whether it is a game or practice:
{{#if AthleticEvent.Title}}{{AthleticEvent.Title}}{{else}}{{Team.Description}} {{AthleticEvent.EventType}}{{/if}}
Flow Template: Merge Syntax Examples
Class Schedules:
Description plus the block name in parenthesis (will not put an empty parenthesis if there is no block name):
{{Section.Description}} {{#if SectionMeeting.BlockName}} ({{SectionMeeting.BlockName}}){{/if}}
Result: "Algebra 1" or "Algebra 1 (B)"
As above but with a dash instead of parenthesis:
{{Section.Description}}{{#if SectionMeeting.BlockName}} - {{SectionMeeting.BlockName}}{{/if}}
Result: "Algebra 1" or "Algebra 1 - B"
Athletic Events:
Athletic events default to the event title. Some schools do not enter an event title for practices or games, creating events with no titles.
Event title, but if that does not exist, team name plus whether a game or practice:
{{#if AthleticEvent.Title}}{{AthleticEvent.Title}}{{else}}{{Team.Description}} {{AthleticEvent.EventType}}{{/if}}
Result: "Triple League Baseball Tournament" or "Boys Baseball Practice" or "Boys Baseball Game"
Event title - home or away (if it was entered):
{{AthleticEvent.Title}} {{#if AthleticEvent.HomeAway}} - {{AthleticEvent.HomeAway}}{{/if}}
Result: "Triple League Cross Country Meet" or "Triple League Cross Country Meet - Away"
Team name and type and, if there is an opponent, include "vs Opponent Name" at the end:
{{Team.Description}} {{AthleticEvent.EventType}} {{#if AthleticEvent.Opponent}} vs {{AthleticEvent.Opponent}}{{/if}}
Result: "Girls Softball Practice" or "Girls Softball Game vs Green School"
Group Events:
Location, if input; otherwise, internal resource:{{#if GroupEvent.Location}}{{GroupEvent.Location}}{{else}}{{GroupEvent.ResourceName}}{{/if}}
Result: "Room 260" or internal resource name (depending on how the location was entered)
Settings
Event Visibility
The event visibility setting allows you to specify how visible SchoolCal-created events should be to others when looking at the attendees' calendars. While there are three options—"public," "default," and "private"—what each means differs slightly based on how the attendee's calendar is configured. See Google's breakdown of what these options mean in different scenarios.
Remember these settings apply ONLY to SchoolCal events and do not affect what the end user has set on their calendar. So if the end user has set all of their events to "Private" and SchoolCal is set to "Public," we could see that they are teaching Algebra from 9-10 am but would only see Free or Busy for other appointments on their calendar.
Guest List Visibility
The "Guests can see other guests" checkbox allows you additional control over whether the guest list for SchoolCal-created events should be available or not. When unchecked, no one can see the event attendees, no matter the event visibility or role of the attendee (teacher vs. student).
When checked, the guest list visibility is determined by the event visibility (above). If you have "guests can see other guests" checked, in order for those guests to be visible, they must be included in the flow.