• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

Course Minimum Time Requirement

New Here ,
Apr 30, 2018 Apr 30, 2018

Copy link to clipboard

Copied

We are creating some online courses for my company.  After working with a course designer for several years, I am now going to do this myself and am a beginner.  

Two of our courses have a minimum time requirement.  The student must spend a certain amount of time taking the course before they can obtain their certificate.  

I have a few questions that I haven't been able to find a current answer to and am hoping someone can help:

1. Will the Timer learning interaction display the total time a student spends in the course?  Is there a better way to do this? Ideally I would like it to say something like 25/120 mins completed or something along those lines.

2. Within Captivate, is there a way to keep the student from course completion until they have studied course materials for the required time?

3. When publishing to SCORM, is this minimum time requirement one of the features?

I am new at all of this so I would appreciate any help!

Views

453

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Apr 30, 2018 Apr 30, 2018

Copy link to clipboard

Copied

Yes, I have done this for a client. Sorry, rather complicated, certainly

not for a newbie.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Apr 30, 2018 Apr 30, 2018

Copy link to clipboard

Copied

OK. maybe I will hire this part out.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
May 01, 2018 May 01, 2018

Copy link to clipboard

Copied

I remember that solution, which took quite a lot of testing. It was a combination of showing the time with the timer interaction, calculating the exact time (timer is not very exact) with tweaking the score, showing a warning when the minimum time was not reached etc.... At the end it worked fine. Sorry that I told you this was not newbie stuff, think it is a wise decision to hire someone for that part.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Enthusiast ,
May 01, 2018 May 01, 2018

Copy link to clipboard

Copied

Lilybiri, your response prompted me to work a little with the cpInfoElapsedTimeMS variable, something I have not used very often since most courses are not timed. I see what you mean by the timer not being very exact. Setting the if test to a specific second did not seem to stop the timer - had to use greater than or less than to have the action work. Is that your experience too?

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
May 01, 2018 May 01, 2018

Copy link to clipboard

Copied

The former timing widget (blogged about is) was more exact. The new ones, although having the possibility to jump to a slide, start only after about 1sec, and when time has elapsed, there is still a delay before the message is shown for another 3 secs before th jump happens.

Do not use the system variable cpInfoElapsedTime but the other one because it gives you an absolute reference point: cpInfoEpochMS.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Guide ,
Apr 30, 2018 Apr 30, 2018

Copy link to clipboard

Copied

Be sure you check what your LMS vendor can support. Some LMS products may allow you to set the minimum time and track it for you (essentially just tracking the total amount of time from when the student launches the piece to the time they close it).

If the LMS doesn't provide that functionality then, yes, you can code it as Lieve suggests.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
People's Champ ,
May 01, 2018 May 01, 2018

Copy link to clipboard

Copied

LATEST

Sounds like you're in California!

SCORM does keep the time in a session and there are function in Captivate's scormdriver.js to track and convert all of the time information.

SCORM_GetPreviouslyAccumulatedTime() returns time in milliseconds

SCORM_SaveTime(milliseconds) sets time using milliseconds as the argument and sets as  0000:00:00 format:

ConvertMilliSecondsToSCORMTime(intTotalMilliseconds, blnIncludeFraction) converts to 0000:00:00 format:

Example ConvertMilliSecondsToSCORMTime(2400000, false) returns 0000:40:00

ConvertCMITimeSpanToMS(SCORM time format), the argument would be  0000:40:00 and returns milliseconds.

There is a Captivate system variable called cpInfoElapsedTimeMS.

To accurately keep track of the time between sessions you need to figure out if this is the first time entering the course and can be done with SCORM_CallLMSGetValue("cmi.core.entry");

If it returns "ab-initio" it is the first time and you'll need to set the time, else you'll need to get the time and add the time of the current session time to it.

All of this can easily be done with JavaScript running behind the scenes keeping track of the time and setting the time to the LMS at specific intervals or when the window is closing.

You need to have script to show a next button to advance to the screen (last slide) that can set the completion criteria or just register completion. Or if they have spent to applicable amount of time, auto advance to that slide.

If you put this script in the head of your html it should of the trick, you have to name the vaiable to show the time on the slides to "showTime" and set the requiredTime variable in the script to the minimum milliseconds. When the time requirement is completed is sets a variable timeComplete to true, so you can read it when you want in JavaScript action with window.timeComplete.

<script>
var interfaceObj, eventEmitterObj, start, elapsed, runningTime, interval, timeComplete, requiredTime = 7200000;
var netConnected = location.protocol.indexOf( 'http:' ) !== -1 ? true : false;

window.addEventListener( 'moduleReadyEvent', function ( e )
{
interfaceObj = e.Data;
eventEmitterObj = interfaceObj.getEventEmitter();
initializeEventListeners();
});

function initializeEventListeners()

if ( interfaceObj )
{
  if ( eventEmitterObj )
  {
  
   if ( netConnected )
   {
    if ( SCORM_CallLMSGetValue("cmi.core.entry") !== 'ab-initio' )
    {
     if ( netConnected )
     {
      SCORM_GetPreviouslyAccumulatedTime();
     }
    }
    else
    {
     start = new Date().getTime();
    }
   }
   else
   {
    start = new Date().getTime();
   }
  
   eventEmitterObj.addEventListener( 'CPAPI_SLIDEENTER', function ( e )
   {   
    clearInterval( interval );
   
    if ( !timeComplete )
    {
     if ( netConnected )
     {
      SCORM_SaveTime( start + window.cpInfoElapsedTimeMS );
     }
    
     checkTime();
    }
   });
  }
}
}

function checkTime()
{
interval = setInterval( function()
{
  var getTimeMS = start + window.cpInfoElapsedTimeMS;
  var minutesSpent = Math.floor(( getTimeMS / 1000 / 60 ) << 0 );
  var minutesRequired = Math.floor(( requiredTime / 1000 / 60 ) << 0 );
  window.showTime = minutesSpent + '/' + minutesRequired;
 
  if ( getTimeMS === requiredTime )
  {
   timeComplete = true;
  
   if ( netConnected )
   {
    SCORM_SaveTime( start + window.cpInfoElapsedTimeMS );
   }
  
   clearInterval( interval );
  }
}, 1000 );
}
</script>

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Resources
Help resources