Templating Courses Tool

Blog Post created by Employee on Nov 13, 2018

Templates are Awesome!  They help create a solid launching point for creating quality courses.

There are a couple of different ways to put a template in a new course shell.

  1. Importing a template course from Commons
  2. Using the Blueprint feature
  3. Copying another course which you have designated as a 'Template'.


Depending on the needs and workflow of your institution any one of these can work very well. This blog will focus on the third method listed "Copying another course which you have designated as a Template."



As a Remote Canvas Admin, I have been asked to apply a course template to all newly created courses for an institution that I serve. This was a daily task, so I decided to automate it using Google Sheets / App Script.  Word got out around the office about my tool and I've had a couple of requests for it, so I decided to make it generic for any institution and share it here in the Community. I chose Google Sheets because it is easily shareable with anyone, uses mostly JavaScript and offers a UI that makes manipulating data more human readable.



This tool is a Google Sheet that uses the App Script language which is mostly JavaScript.  Once it is configured, just click the 'Canvas' menu, then 'Apply Template to Unchanged & New Courses' and all courses that are newly created will be updated with your template course. BAM!

The logic of the tool is essentially this:

  1. Configure your domain and token.
  2. Tell the script the canvas course ID of the most recently created course. Any courses that are created after this one will have the template applied to it, with one exception.
    1.  Exception: The script will check each course to look for existing content.  If content exists in the course, the template will not be applied. There were a couple of requests for this feature. If you prefer not to use it, you can remove the
      if (getCourseChanges(check_course_id) == 0)
      from within the processCSV function.
  3. Tell the script what is the course that you want to use as a template
  4. The script then creates and downloads a courses.csv provisioning report and compares each course to see if it is newer than the  course mentioned in step 2. If a course is newer, then apply the template course using a content_migration API endpoint.


For a better user experience, the script then gets the status of the migration and updates a cell when the migration is complete. I also made the name of each course a link to the course to make it easy to verify content.  


How to Use the Tool:

These instructions are in the 'Instructions' tab in the spreadsheet.

Configuration Instructions - This only needs to be done once

  1. In the 'Canvas Menu' select 'Configure API Settings'
  2. When prompted, Authorize the script by clicking on 'Authorize.'
  3. Select an email address to run the script.
  4. Select Allow
  5. In the 'Canvas Hostname' box, enter the URL of your Canvas instance. For example
  6. In the 'Access Token' box, enter your token. (For help creating the token, click on the ' How do I obtain an API access token for an account?' link right below the box.)
  7. Click 'Submit'
  8. If the Notice box says 'Using <> for your Canvas Hostname.' then click OK. Otherwise click 'Cancel' and repeat steps 5-7.
  9. In the 'Canvas' Menu select 'Don't Apply Template to Courses Created Before This Course ID'. Enter the Canvas course ID of the most recently created course in your instance and click OK. If you want to look at a list of all your courses, select 'Show All My Courses' from the 'Canvas' menu and wait a few minutes for the courses.csv report to create & populate the 'CurrentCourses' tab.
  10. In the 'Canvas' Menu select 'Set Template Course' and enter the Canvas course ID of your template course and click OK. 


Applying the Template Course

  1. In the Canvas menu, select 'Apply Template to Unchanged & New Courses'
    1. The Google sheet will now get a Courses Provisioning report and work it's magic. In a few minutes, you will see list of your courses in the 'Current Courses' tab.
    2. After the courses display on the CurrentCourses Tab, the new courses will appear on the NewCourses tab and automatically apply the template to the new courses.
    3. After another minute or so, the 'Status' and date/time' columns will update when the template course is applied
    4. There are links on the courses for your convenience
    5. Note: Google Scripts have a time limit. If you have a larger institution with hundreds of thousands of courses, this script may time-out. If it does, you can re-start the 'status update' by selecting 'Update Status of Template Copying' from the Canvas menu.
  2. If you wish to automate this and run it on a daily timer, select Tools > Script Editor > Edit > Current project's triggers. Then create a trigger to run updateNewCourses'.



As mentioned above Google App Script have limitations. Depending on the size of your institution, the script may time out. If that happens you're either a HUGE institution or making a LOT of changes. You may want to remove the 'if (getCourseChanges(check_course_id) == 0)' as mentioned above.

Just as a point of reference, I have worked with one institution that has almost 600K courses. That report takes about 12 minutes to create, so I estimate around 50K courses per minute to create the users.csv file. Your milage may vary.

The time required to apply the template course will also vary based on the quantity of material in the template.


What's Next:

  • Frankly, I'm not thrilled with the getMigrationStatus() function. If you feel the desire to help, please see the comments in the code.
  • I know my code isn't always optimized as good as it could be. If/when you find ways to improve it, please let me know. I love to learn and appreciate any help.
  • If you add more feature & functionality to this, please share back to the community. 



James Jones - The Configure API Settings and Forget API Settings come straight from his super work. If you haven't seen his Canvancements, prepare to be amazed!

Jeremy Perkins - Thanks for showing me how to pull reports and put them into sheets! 


Link to Template

I almost forgot... Here is a link to the template

You'll need to make a copy of it in your own drive first.


Video Demo