Showing results for 
Search instead for 
Did you mean: 

I Dare You to Ask Me About My Sub-account Project

Community Member
6 13 1,003

A long, long time ago, in an office somewhere in my building (I'm guessing), a conversation probably nothing like this took place:

vintage secretary

"Okay, it's time to implement the new LMS, Canvas."

"Hooray! Anything special we need to do?"

"Well, we should probably decide if our Canvas instance should be one big bucket of stuff, or if we need sub-accounts for our 5 separately accredited colleges."

"I'd think sub-accounts by college would be smart!"

"Definitely. Oh... wait... We're integrating Banner with Canvas, right?"

"Of course!"

"Well, we have Banner set up to essentially treat our district as a single entity."


"Well, there's no easy way to tell Canvas which sub-account the course should be in."

"Oh. One giant bucket, it is!"

Fast forward a year or two. The transition from Blackboard to Canvas is complete. Faculty adoption is growing rapidly. Online course offerings are expanding. Requests for adding account-level LTIs keep coming. Data and outcomes and analytics are hot topics. People begin to question with more regularity why we don't have sub-accounts to keep these things useful, streamlined, and logical. The answer continues to be "because we don't have Banner set up in a way that makes sub-accounts possible". Fast forward a few more years. People are asking at least weekly why we can't do a thing that can't be done because we don't have college sub-accounts. The requests finally prompt action. The action hits numerous brick walls. There is a script written that seems to solve the problem by moving the courses from the root account to the correct sub-account after the fact. Testing is going well. There is dancing and singing. Then someone performs a section sync in Test Banner, and the course in Test Canvas gets thrown out of its sub-account and back to the root account. Canvas insists that "account" should be sticky. Testing continues to prove that Banner is a jerk and refuses to listen to what Canvas says. Other avenues are considered and defeated. Tears are shed. And here we are, seven long years into our Canvas adventure, without any hierarchy whatsoever. And we've exhausted every reasonable idea, short of demolishing the entire Banner > Middleware > Canvas structure and starting from the ground up.

cartoon guy at computer

So what's the point of my blog post / stream of consciousness rant / discussion prompt / cautionary tale / plea for help? Well, first, my words of advice:

  1. If you are new to Canvas, consider your account/sub-account structure, very very very carefully.
  2. Canvas is a wonderful company full of wonderful people, but they do not have expertise in your SIS of choice, so make sure your SIS of choice is ready and willing to work with you on establishing (and maintaining, and adjusting as needed) a good integration with Canvas.

And my points of discussion:

  1. I know people have created a sub-account structure "after the fact". What makes our situation challenging is the way we set up Banner. We are unable to change how Banner is configured.
  2. We have had various vendors swear they can help us using APIs. This may be true, but they neither understand our Banner setup nor possess actual, practical, deep Canvas knowledge.
  3. We are still using Luminis Message Broker as our middleware. My understanding is that LMB is an outdated tool. But the alternatives (Ethos, ILP) are described to me as not mature enough, not robust enough, and/or possibly not compatible with our current portal (or version of).
  4. We haven't completely ruled out turning off real-time events and doing automated batches. BUT we have a bazillion (actual number) Banner users across our 5 colleges who would need to be re-educated on new processes and that is... daunting.

The plea:

  1. Is there anyone out there that knows Banner really well AND knows Canvas really well AND is not already working full time for a Banner/Canvas institution? We have tried the "hire a consultant" route, and a creature with such expertise (in the land of hire-able consultants) appears to be rarer than a 3-legged unicorn.
  2. Has anyone had a similar situation and come up with a miracle workaround that they'd be willing to share? I will pay you in cookies and a coffee mug that says "You're Awesome!" [side note: don't search Amazon for "You're awesome" coffee mugs. Someone apparently decided not to stop there and made all the mugs NSFW]
  3. Please consider this an open discussion, and throw any ideas into the comments, no matter how wild and insane they might sound. Tag any groups or spaces I missed, or any smart folks who might know something, anything. It's possible there will be points for creativity, but it depends on whether I'm continuing to lose ground in the Community. I once made it to 17th. Those were the days.

Thank you in advance, Canvas friends!


Also tagging Canvas DevelopersInstructional DesignersHigher EducationHigher Education SIS


So I'm K12 and I know nothing about Banner or LMB, but that's never stopped me before! So here is my two cents (actual retail price):

I'm guessing that everything is handled by API calls somehow. That means when a course is created, you have to specify an Account ID. My next assumption is that your system is sending "1" as the account ID which would be the root account (usually). So that brings me to this part of your post:

Then someone performs a section sync in Test Banner, and the course in Test Canvas gets thrown out of its sub-account and back to the root account.

My theory here is that the API call being done here would have to be an update and not creating a new course since you're saying it gets thrown back into the root account. Therefore, it's still the same course and not a new course because it was just moved into the root sub-account. So the API call to update a course has an OPTIONAL setting to also send the account ID with the update. So my guess is that the middleware is specifying an account ID of "1" instead of just leaving it blank. So is that something you can work with? Can they tell you exactly what API calls and data are sent when hitting that sync button? Because if they leave the account ID out of the update call, it won't move it when you sync but it will still make the other changes like course name change or start and end dates.

Again, this is all total guesswork on my part...

Community Member

It might be guesswork but it's damned intriguing. So basically what you're saying is, if there was a way for the initial course creation event to include the account ID, but for the sync event to NOT include the account ID, that might work. I will send this along to my local LMB administrator...


Yep, if the updates are sent through the Canvas API then leaving out the account ID would allow it to stay wherever your scripts move the course. I use the API to make changes to courses and have never had it change accounts unless I specifically told it to.

Learner II

Sure, but if they can modify the LMB connector to do that, they can also tell it to construct the account id differently so the courses are created in the correct locations in the first place. Banner doesn't have a sense of "Canvas account ID" built in; there's a query or view telling it what to send. Once they start mucking around why not just tell it to send sis_account_id instead of account_id, and CONCAT('campus', '_', 'department')--or something similar--instead of "1"? LMB just has to be able to construct the identifier from Banner; it doesn't have to be a 1-1 correlation with a particular Banner field.

If the goal is to keep the *existing* LMB workflow, though, one can always just point the LMB endpoint to some place other than Canvas (say, and sanitize the account ids before passing them along.  can take the LMB output and turn it into whatever you want.


You're not just going to leave us hanging are you? We want updates!

Community Member

Oh  @MattHanes , welcome to my life for the last year! LOL. I forwarded the suggestions you and Jay made along to our programmers and haven't gotten any feedback. They're really more focused on waiting for a better middleware option from Ellucian (ILP, Ethos), although that is a longggggg term solution.


You should just show up in their office and ask in person. Bring gifts like Red Bull and Monster energy drinks.


They are the donut and junk food types (and I know from experience). 


Mountain Dew and Flamin' Hot cheetohs?


Mountain Dew isn't hugely popular here.  I would say Diet Dr. Pepper and some Takis, maybe.  


Explorer II

Just saw a link to this and want to say that we have said SO many times - thank goodness we went to the trouble to create sub accounts in Canvas (our Bb instance did not have them). It has made our life much easier. Great advice to do it at the start, if possible. Even if it takes lots of doughnut and red bull bribes to work with your SIS folks.

Adventurer III

We have banner and are a new Canvas school. We are doing direct sql to the banner database and have set up sub-accounts in Canvas based on the dept code of the course. We are okay with only refreshing data populating into Canvas every two hours. We send the data on a scheduled job to an FTP server that Canvas set up for us. It checks for new files every two hours. Much better than the LMB connector and you have a lot more flexibility. Technically, we could have packaged up all the files as a zip and used the Canvas Api rather than the ftp server but we wanted canvas to do the diffing for us.


So I am totally not sure how Banner does this, but being an Ellucian product (at least in the last few years), I'm wondering if it uses the Integrated Learning Platform (ILP)?  If so, then in theory it should work something similar to the way Colleague (Ellucian's other SIS) does it, where there's an option to say "divide by department" or not.  We're in a similar situation in that we're a system of college, using a single SIS that treats us as one single institution, yet where we want things branded and organized by college.  We smart code things in our SIS, so for example termcodes end up like C19FA (Castleton University 2019 Fall) vs. T19FA (Vermont Technical College 2019 Fall), as do departments, locations, and so on.  Department wasn't going to do what we needed because each school has its own departments, so we would have ended up with dozens and dozens of subaccounts (think: CENG, NENG, TENG, VENG, and then multiply out, all department codes times four).  But, on investigation, the screens in Colleague that configure the connection to the ILP let you specify where to get the department name and department code.  So we cooked up functions in Colleague which, when called, will return the 3-character school code, and the full name of the school, and then set the department code and department name fields to use those.  And it worked, allowing our four separate schools' courses to get populated into the appropriate school-based subaccounts.

Again, I don't know if Banner integrates with the ILP, and if it does, if it has that same flexibility in its configuration pages.  But, since they're both Ellucian products, I thought it was worth mentioning.