Why we choose to do custom rostering of Canvas

Community Participant

I get asked often how we use our custom SIS Imports rostering and why we choose to take that path. After writing nearly the same summary over and over again and emailing it to the requester during the last several years I thought I’d write it one final time and post it here for future reference. I hope it’s in some way useful to you all.

Our process is pretty complex when looked at as a whole, so I’ll break it down to as few high-level steps as I can, and then I’ll give a bit of an explanation of how we got here, and how you can too. If interest is there, I can break some of the steps down further in additional posts.

We use PowerShell scripts to manage the process. These scripts run once a day. We originally were running this much more frequently, but as time went by and the amount of data increase, we reduced it. It's not normally necessary to have changes being sent to Canvas more frequently than once a day.

The PowerShell scripts use the Canvas API to get and send the data. The main endpoint is the one for SIS_Imports (/v1/accounts/{account_id}/sis_imports), but others are used as well.

The basic steps in the script are as follows:

  1. Pull a Provisioning report from Canvas. This gets us the ‘starting point’ to compare what’s in Canvas to what’s in our SIS. API endpoint /v1/accounts/{account_id}/reports/{report}.
  2. Load the Provisioning Report CSV files into a database.
  3. Build the expected records from SIS. Users, Sections, Courses, User_Observers, etc.
  4. Compare the expected records from the SIS to the Provisioning report records to determine what needs to be sent. We do not like sending all the records all the time since it takes much longer.
  5. Export and send the CSV SIS Imports files.

How did we get here?

We started with Clever rostering. Canvas was our first Clever system, so we got to learn both sides at the same time. It was FUN!

The first term went well, but we were surprised that at the term change all previous-term classes got removed from Canvas because our rostering process for Clever did not include them. Oops. It was a that point that we decided that, for Canvas, Clever was not the way to go. (I realize there are now configuration options available in Clever to help with this, but I do not believe they existed back then.) By then we’d rolled several other systems onto Clever, and we still us it today. It’s great for what it is, just not what we need for Canvas.

The benefits of custom rostering as we see it

The move to a custom rostering solution meant we were in complete control of what ends up in Canvas and how it looks when it got there. We have added many customizations that would have been more difficult to do with OneRoster or Clever. Here’s some examples:

  • All Students courses at each school, with sections for each grade. These allow global or grade-specific announcements.
  • All Staff courses at each school. Can be a low staff Intranet page
  • Graduation year cohort courses, where counselors can ‘assign’ and track graduation-related forms, orders, etc.
  • For students on modified diplomas, we create an individual section for them so teachers can create assignments and adjust due-dates just for them without affecting the rest of the class.

What’s required to get there

  • Someone who can understand how to program against the API.
  • Thoughtfulness about how your accounts and subaccounts are set up in Canvas. The structure of your accounts will determine how long it takes to sync. For information on our journey with account structure, see my A bit about account structure post.
  • Balancing the needs of users (teachers, staff), students and parents. At one point in the last year or two we had some students that could have 20+ active courses on their dashboard. Pity that parent that has 2 or more (we had one with 7!) such students and uses an observer account! Thankfully Instructure has some new stuff to help with that. See Observer Dashboard Filtered by Student for more info on that.
  • Build flexibility into the process. 3 years ago, we started using Blueprint courses. 2 years ago, we started using some Florida Virtual content at on online school. Both changes meant modifying the code to include the new information. Through that we transformed the process to be more meta-data driven, and now we can make these sort of changes (the blueprint and FV content courses change every year!) without code changes.

That's all for now. Leave me a comment and let me know what you think or what questions you have. I'll respond and/or update the posting to address those. If more details are desired, I can do a spinoff post or two.