Paul
Paul
Hi Paul
Each of those 1s and 0s represents a 'block' in the course. The index of each particular 1 or 0 is matched to a block via the block's _trackingId
.
If it helps, the code to write that data to/read it from the LMS is here.
The reason we only track to block level and do so in this fashion is so that we need the smallest amount of data for storing the course's state: you only get 4KB of storage to work with in SCORM 1.2, which isn't a lot.
If you've ever used Articulate/Storyline you'll know it's relatively easy to create a course that exceeds the storage capacity of SCORM 1.2 because the tracking data it writes out is pretty verbose. We decided on a more minimalist implementation so as to allow for larger courses.
This raised an issue for me:
Let us say I have a block with two media components and I complete the first one, leave the course and resumes later.
If completion is tracked at the block level, then I would need to complete the first one again and then the second, before the block is completed?
This is not a problem as such - it is just nice to know the inner workings of these things.
I would need to complete the first one again and then the second, before the block is completed?
Yes, that's exactly right. Naturally it's not ideal but it's a good compromise between data usage and tracking detail - and rarely seems to be a problem for anyone.
Thanks Matt
And you are right: Not really an issue (but good to know, so you don't come to rely on anything else).
One final question:
Let us say I upload a couse to an LMS and completes a number of blocks.
If I make a new version of the course in the AT, where I have switched the order of two blocks (or maybe deleted or inserted a block) - how would this affect the completion tracking?
If I make a new version of the course in the AT, where I have switched the order of two blocks (or maybe deleted or inserted a block) - how would this affect the completion tracking?
That's why we have the _trackingId
property associated with each block... so long as you don't mess with the _trackingId
of any block once the course has gone live you'll be fine. It can cope with a block being deleted, just don't 'recycle' that _trackingId
.
That makes sense, but if you create a course in the AT with 3 blocks, their id will be numbered 1, 2 and 3.
If you delete the middle block in a new edition, the remaining two blocks will be numbered 1 and 2, and that means that the former third block has changed its id.
If I wanted to changed the way the completion is tracked in the suspend data field, would it be a question of just replacing/subclassing the "default.js" serializer?
If you delete the middle block in a new edition, the remaining two blocks will be numbered 1 and 2, and that means that the former third block has changed its id.
No, that's not how it works. Each block is assigned a unique, 0-based _trackingId
, so the first block will have a _trackingId
of 0
, the second 1
and the third 2
.
If you delete the second block, the _trackingId
of the other two does not change, you simply no longer have any block with a _trackingId
of 1
. In the suspend_data this will be represented by -
instead of 1
or 0
.
If I wanted to changed the way the completion is tracked in the suspend data field, would it be a question of just replacing/subclassing the "default.js" serializer?
Mostly, yes.
I did a test where I created a course with 3 blocks on a page in the AT, exported it, deleted the middle block and exported it again.
When I compare the "blocks.json" files, I get this result (with some fields removed for clarity):
First version exported from AT:[
{
"_id": "5b7283d6706dee577a81019f",
"_trackingId": 1,
},
{
"_id": "5b7283e3706dee577a8101a1",
"_trackingId": 2,
},
{
"_id": "5b7283fe706dee577a8101a3",
"_trackingId": 3,
}
]
Second version exported from AT (with block 5b7283e3706dee577a8101a1 removed):[
{
"_id": "5b7283d6706dee577a81019f",
"_trackingId": 1,
},
{
"_id": "5b7283fe706dee577a8101a3",
"_trackingId": 2,
}
]
The 5b7283fe706dee577a8101a3
block has changed its _trackingId.
Then that's a bug in the authoring tool, please could you log a ticket?