Symptom
Click to go back to the main page |
LMS SCORM 1.2. KNOWLEDGE SESSION FOR CUSTOMERS, PARTNERS AND SAP PRODUCT SUPPORT
2. Why do Scorm Content and LMS need to be on the same domain?
4. How does content find Scorm API when it is well-designed?
5. Scorm data tracking from Button Click to Database
6. What functions and values are used by Scorm1.2 course?
Sharable Content Object Reference Model (Scorm) is a collection of standards and specifications for web-based electronic educational technology (also called e-learning). It defines communications between client side content and a host system (called "the run-time environment"), which is commonly supported by a learning management system. Scorm also defines how content may be packaged into a transferable ZIP file called "Package Interchange Format.
Scorm 1.2 was the first version that was widely used. It is still widely used and is supported by most Learning Management Systems.
https://en.wikipedia.org/wiki/Sharable_Content_Object_Reference_Model
http://Scorm.com/Scorm-explained/
When loading web pages, Browsers don’t not allow a JavaScript code to access JavaScript API from a code that belongs to a different domain. It is intentional on the part of the browser makers because it’s a security risk.
For more info: http://Scorm.com/blog/2013/04/solving-the-Scorm-cross-domain-issue/
In SF LMS scenario:
LMS exposes the JavaScript Scorm API on its Structure page when launching the content, this Structure page is on domain ‘https://customer.plateau.com’ and so is the SF Scorm API. If the content launch in the popup is from a different domain (ex: domain A), JavaScript Code of this domain will not be able to find the API on LMS JavaScript code. It will lead to ‘LMS API Not Found’ types of errors.
Scorm communication is processed by a client-side API provided by the LMS. The content object (SCO - sharable content object) communicates with the API through a series of Scorm-defined JavaScript function calls. The API processes the functions and handles the communication with the LMS. Scorm 2004 introduced some additional functionality which moved beyond the original AICC communication model.
The basic idea is any Scorm compliant LMS will provide an API that understands a set of Scorm-defined JavaScript functions. All the messy details of communicating with the LMS are handled by the API, thus allowing Scorm content to communicate with any Scorm compliant LMS simply by using the predefined API functions.
In SF LMS, The API is exposed by The Structure page, then the content find this API and initialize the Scorm connection.
If the course is well-designed by vendor, the code will scroll all windows hierarchy (course window is self-window and LMS window is the parent window) to find the Scorm API. The window exposing Scorm API should contains object ‘API’. All following test have been made with Scorm Test content
In the example below, the content code tries to get the API object from course window (1st attempt) then to parent window (=LMS window on 2nd attempt).
1st loop: try to get API from content popup page -> fail
2nd loop: try to get API from Parent window=LMS Structure page -> OK
Many troubleshooting tools are available to track the Scorm mechanism, from content ‘button click’ to values requested and stored in the database, the chain of events can be followed in below diagram. In below example, Scorm value ‘lesson_status=completed’ has been committed/posted to LMS server.
VENDOR CONTENT LEVEL
Script Debugger tools can be used to capture the ButtonClick event, how the Scorm API is identified (see previous chapter) or how Scorm Functions are called. Using Breakpoint can help to identify values and functions stacks. Each browsers as its debugging tools: On Firefox, with add-on Firebug (see previous chapter) or Debugger (F12), On IE->IE Developer Tools (F12), On Chrome->Debugging Tools (F12). Note that the content code is developed by the vendor, SF is not responsible for this code.
SCORM API LEVEL
It displays in the JavaScript console all the actions performed by the Scorm API, to enable it, see KBA 2278621 - Learning - How to collect JavaScript Scorm API logs
API functions can be identified with all cmi values (lesson_status, score, lesson_locations..) involved.
NETWORK TRACES LEVEL
Many tools can be used (HTTPWatch, Fiddler, IE Dev Tools, Firefox Dev Tool, Chrome Debugging Tool). Scorm communication can be identified and see values posted to LMS and requested from LMS. All the example of this guide are done with IE Dev Tools(F12) as most of customers are restricted to IE browser and cannot install any software (HTTPWatch or Fiddler), For sniffer tools, see KBAs:
2272657 - How to collect Network traces with Chrome Network Tool
2269682 - How To collect Network traces with Firefox Network Tool
Scorm communication is identified with URL ‘/learning/PwsAicc’
Scorm values posted within the Scorm communication
LMS response
Cookie section to identify JSESSIONID
DATABASE LEVEL
Only for Customer Support
Scorm value sent by Content to LMS can be identified in the Database:
PA_CBT_STUD_CPNT_MOD column AICC_DATA
Using this query:
--Object Details--
select md.*,st.* from my_schema.PA_CBT_STUD_CPNT st,my_schema.PA_CBT_STUD_CPNT_MOD md where st.stud_cpnt_id = md.stud_cpnt_id and st.stud_id='my_stud_id'and st.cpnt_id='my_cpnt_id';
6. What functions and values are used by Scorm 1.2 course?
Scorm1.2 API has a limited number of functions, those function can process Scorm values called CMI ("Computer Managed Instruction"), KBA:
2154063 - Scorm 1.2 API Calls - Learning Management System
Once the API has been found, the content can use functions included in Scorm API:
LMSInitialize( )
The content must call this function before calling any other API function. It indicates to the LMS that the content is going to communicate.
This function trigger a GetParam command to LMS, then LMS returns all Scorm values stored in DB
-> SCORM API:
-> NETWORK TRACES:
SCORM COMMUNICATION OCCURRED:
REQUEST VALUE TO LMS:
RESPONSE FROM LMS:
LMSGetValue( )
This function is used to pass data from the CMI to the content. Only one value is returned for each call. The category and/or element is named in the parameter.
This function returnes value stored locally (not in LMS DB), it does not perform any GET_PARAM from LMS. There is no network interaction.
Example: GetValue(‘cmi.core.student_name’)
LMSSetValue()
This function set the scorm values locally, this function does not send any data to LMS, the data will be send to LMS when Commit() function is called.
Ex: set a score of 88
API LOGS:
LMSCommit()
Commit Function send all values previously set (with LMSSetValue function) to LMS
API LOGS
NETWORK TRACES
7. Major Scorm values
Major Scorm values
The most important Scorm values (also causing the most of issues) are the ones in charge of the course completion, they can be tracked tin the database, see AICC_DATA Colum Analysis section:
- Lesson_status -> Completed/Passed value to trigger completion
- Score -> needs to be over Mastery Score set at the item level
- Session_time -> sent to LMS, it increments TOTAL_TIME value on LMS Database
The main steps are defined in this guide: 2293373 - SCORM & AICC Content Troubleshooting Guide
Establish a Diagnostics
There can be various root causes for an issue and difficult to identify especially if the issue is intermittent. So first, patterns need to be identified, keep all those questions in mind during the troubleshooting. If you open a CS incident, please answer as much as possible bellow questions.
LMS patterns
Is it happening to all users with one specific item?
Is the issue happening to only one or few users with a specific item?
Is there a Mastery Score set on the content object (admin side: Item record->Online Content, click on Content object) that affected users could have potential not reached?
Do you see an ‘API not Found’ or equivalent error when affected user launch the course?
Was this course working before and suddenly all users are not able to complete the course?
Are the affected users spend a long period of time (~2h) on the course compared to successful users?
Did the affected users closed or navigate away from the Launch page (Online structure page with yellow rectangle) before closing the course window?
If the course is not hosted on SF Icontent server and the issue is replicable by all users, did you implement a cross-domain solution (Proxlet or Reverse-Proxy)?
Has SF Icontent server been implemented recently?
Environment patterns
Is it happening on all browsers (Internet Explorer, Firefox, Chrome)?
Is it happening only on Internet Explorer?
Is the issue happen to users of a specific region?
Is the issue happen for students connected to a specific network?
Content patterns
Is the issue happening with courses from the same vendor?
Is the course has several Exit buttons (Red-Cross on popup top-right + exit button within the content)? Do they have the exact same behaviour? Are affected users using a particular way to exit the content comparing to successful users?
Did affected users exit the course on final slide after completing the quiz? Or did they navigate back to table of content (or back to previous chapters/slides) before exiting?
Did the affected user provide you a screenshot that show quiz was successful?
Do you know exactly the completion criteria of the course (min score, chapter/final quiz, 100% slides coverage)?
If the content contains quiz at the end of each chapters and a final chapter, would you know from the vendor if the completion criteria is based only on final chapter?
Is the completion criteria also based on slides/chapter viewed in addition of final quiz?
Is the completion criteria based on the order of viewed chapter? Order of completed quizzes?
Student completed the quiz but item still in Learning Plan
2 main scenarios:
Content related:
Content never sent ‘lesson_status=completed/lesson_status=passed’ (with score if a mastery score is set),
Actions:
Check in the database if any ‘Completed/passed’ value (see Query to see Object Details in previous chapter)
Ask student to replicate with network traces, then identify ‘learning/pwsaicc’ traces and lesson_status/score values sent
Check the Completion condition of the Item on admin side, see if Scorm value sent to LMS fullfill the LMS Item->Online Content setting.
Reassign the item (the item completion condition could have been changed by an admin since the item assignment)
See above Content patterns which could help to identify why content is not sending completion value.
Environment related: Scorm content never found the Scorm API and failed silently (Environment)
Make sure ‘*.plateau.com’ domain is in IR Trusted Sites (Internet Options->Securitry Tab->Sites button)
Track user session with splunk logs, see if any Scorm connection ‘learning/pwsaicc’
Ask user to collect logs see if any ‘learning/pwsaicc’
Bookmarks are not working, student need to start from the start when re-launching
- Possibility that the content never connect to Scorm API (some vendor does not show any error message so silently fails), need to troubleshoot environment.
- The content does not sent any bookmarks (Scorm suspend_data):
check on DB if any bookmarks saved (table pa_cbt_stud_cpnt_mod_bkmrk columm bookmark, see DB query ‘Object Details with Bookmarks’)
Student completed the course but no score displayed
Check in the Database if Scorm score was sent to LMS (table pa_cbt_spnt_mod:SCORE, see DB query ‘Object Details with Bookmarks’)
Student completed the course but no time displayed
Check in the Database if Scorm score was sent to LMS (table pa_cbt_spnt_mod:TOTAL_TIME, see DB query ‘Object Details with Bookmarks’), note that each time the course is launched, the content sends SESSION_TIME (assuming the conten is well designe and send cmi.core_session_time value), LMS increments TOTAL_TIME with received SESSION_TIME. SESSION_TIME is not stored in DB.
AICC_DATA column Analysis
A way to track Scorm completion for CS agent is to check the value of PA_CBT_STUD_CPNT_MOD column AICC_DATA (see DB query ‘Object Details’)
Item assigned then launched with no Scorm communication:
•Scorm Connection initialized
AICC_DATA gets value ‘[PLATEAU_CONTROL] FIRSTTIME=0’
In the DB PA_CBT_STUD_CPNT_MOD column AICC_DATA does not always reflect what the content was sending. LMS modify LESSON_STATUS value with below logic. An Item Object has been setup with MASTERY SCORE = 80 :
Image/data in this KBA is from SAP internal systems, sample data, or demo systems. Any resemblance to real data is purely coincidental.
Environment
SAP SuccessFactors Learning
Keywords
Scorm, Scorm 1.2, LMS Content , KBA , LOD-SF-LMS-CNT , Content , LOD-SF-LMS , Learning Management System , How To