@nschutz ,
Let me see if I have this right. You want to
- Create a new rubric B at the account level, but this can be done through the web UI, it doesn't have to be done through the API.
- Use the API to find every assignment that rubric A is used in all courses in an account.
- Use the API to download all of the existing rubric data, including comments, from those assignments
- Use the API to unlink rubric A from those assignments
- Use the API to link rubric B to those assignments
- Translate the scoring on rubric A into an equivalent rating on rubric B
- Use the API to fill out rubric B information for each of those assignments
Did I miss anything or put extra things in there?
Here are some questions I have
- Why?
- Are outcomes or learning mastery tied to these rubrics? That might add extra considerations.
- Are you sure that the rubrics all tie back to the same rubric ID and that you can match it off that rather than matching off of text of the questions? This doesn't change the overall answer, but I have found several places that the same rubric occurs with different IDs, but these were generally course rubrics that were copied from term to term. Consider it a warning to be careful.
My initial reaction, based on experience but without checking each step is that this is a bad idea and the wrong approach to take.
Generally speaking, it is a bad idea to go back and change the data from the way it was at the time it was collected. That might be a part of the reason why Canvas doesn't allow people to edit rubrics.
You didn't go into the cause, but maybe there was a typo in a rubric that you want to fix. You don't go back and change it in old rubrics. Instead, you do the translation at the analysis time. Or you download the data, clean it up, then make it available to other people for analysis, but the original data is kept intact.
If you have to fix a rubric once, you may have to fix it again. If it's a global evaluation rubric, that might change over time. At some point, you might add questions or take questions away. When this happens, you don't mess with the original data, you find some way to combine the data together for analysis. It may be that you have a question that was asked in 2016 and 2017 and then no more while another one didn't appear until 2018. You don't want your rubric to have rows that hold historical data but are no longer used and you don't want your rubric to delete criteria that are no longer used and then throw away that data.
I don't know what this rubric uses, so what I write here may not apply in your particular case.
The Submissions API allows you to grade or comment on a submission, which would allow you to supply the new rubric information, but it is likely to update the graded_at and graded_at values for the submission. This may or may not be an issue, but if I want to go through and do some analysis of how long it takes instructors to grade their work, I've just blown that possibility for anything using this rubric. If there's any kind of question about who completed the rubric in the first place (example: a course has multiple graders) that has been replaced with the ID of the user who ran the script.
You may not think that changing existing rubrics is what you wanted to do. If you have blueprint courses or master courses and are not concerned with updating the rubrics in existing courses but only new ones, that's a different issue. I'm not sure from the original post whether that's what you're after.
However, if anyone copies a course from one term to another, then they're copying the old rubric. You would then have to go through and link to the new rubric after the course is copied. If you change the rubric link in the old course, then there is a good chance that some of the existing rubric information becomes unavailable.
For example, I went in to SpeedGrader and graded a person using a rubric. Then I changed the rubric, reloaded SpeedGrader. and graded a different person. SpeedGrader only uses the single rubric -- the most current one. Even when I went to a user that was already graded with the old rubric, SpeedGrader showed the new rubric with nothing marked and the student getting 0 points. The API for the assignment only returns the second rubric, which is probably why SpeedGrader shows just the one rubric. If I pull up the submissions for an assignment and include[]=rubric_assessment, the original rubric is still there for the first student, but there is no tie back to the rubric the IDs are associated with. I can fetch every single rubric in an account and a course and go through and get the full rubric for each one of them and look for the criterion_id, so I was able to find it, but it was more prolonged.
The short version of that is that by going through and updating the assignment to refer to a new rubric when the rubric has been used for grading is that you will likely be unable to retrieve that information through the web interface. If you go into a previous course and look at that assignment and pull it up in SpeedGrader to look at something for a grade appeal, it would appear blank.
If you change the rubric in existing rubrics and don't fill out the new rubric, you lose the ability to pull up the rubric information within Canvas. If you do fill out the new rubric, then you lose information about when it was completed and who completed it.
The only way I see to do it reliably without causing some potential problems is to only make the change for assignments that have not been used. This can be in master courses, in blueprint courses, or in courses that haven't used that rubric yet.
Even this is not simple. At our school, we don't use master courses or blueprint courses much, so our faculty are very likely, at any given time, to copy information from an old course over and that point, they're back to using the old rubric. This may happen before the start of the semester or it may be that they selected content and did a partial copy before the course began and then decided to copy that one over later, so it could happen at week 12. There's no easy way to know that, although you can go through the course audit log and look for when things were copied_from another course. That API can be limited by date, so you can get the things that have recently happened since the last time you checked, but it's still time consuming.
In a perfect world, rubrics would never change. Alas, our world is not perfect.