2014-11-17 7 views
0

감사합니다.이 책을 읽어 주셔서 감사합니다.SCORM 2004에서 문제가 발생했을 때 문제가 발생했습니다.

SCORM에 대한 경험이 많지 않습니다. 지금까지 SCORM 1.2에서 항상 작업 해 왔지만 SCORM 2004에서 프로젝트를 제공하라는 요청을 받았습니다. Dreamweaver에서 직접 HTML5로 작성된 코스 용이며 외부 파일로 JS를 연결했습니다.

무엇이 도움이 되었습니까? 1) 수업을 종료하고 다시 열 때 내가 떠난 페이지부터 시작하는 것으로 가정합니다. 불행하게도 항상 첫 번째 페이지에서 다시 시작됩니다. 2) 레슨은 레슨의 마지막 페이지에 도달하기 전까지는 "완료"로 표시되어서는 안되지만, 불행히도 레슨을 시작하자마자 자신을 "완료"로 표시합니다.

다음은 세 가지 HTML 샘플 (강의 첫 페이지, 수업의 중간 페이지 및 강의 최종 페이지)부터 시작하여 내 SCORM 기능이있는 두 개의 JS 파일로 시작하는 샘플 코드입니다.

1) HTML : 강의 첫 페이지.

<script type="text/javascript" language="javascript" name="mm_scormRTI" src="SCOfunctions.js"></script> 
<script language="javascript"> 
    var currentScoPage = scoPage[ i ] ; 
    SetValue("cmi.location", currentScoPage); 
    Terminate(); // close out this SCO, we are finished 
</script> 
<script language="javascript"> 
    Initialize(); // initialize the SCO with the LMS 
    var currentScoPage = GetValue("cmi.location"); 
    if (currentScoPage != "") { 
     self.location = currentScoPage; 
    }else{ 
     currentScoPage = scoPage[0]; 
    } 
</script> 
</head> 
<body onLoad="mm_adlOnload()"> 
... 

2) HTML : 수업의 중간 페이지

<script type="text/javascript" language="javascript" name="mm_scormRTI" src="SCOfunctions.js"></script> 
<script language="javascript"> 
    var currentScoPage = scoPage[ i ] ; 
    SetValue("cmi.location", currentScoPage); 
    Terminate(); // close out this SCO, we are finished 
</script> 
</head> 
<body onLoad="mm_adlOnload()"> 
... 

3) HTML : 수업의 마지막 페이지

<script type="text/javascript" language="javascript" name="mm_scormRTI" src="SCOcomplete.js"></script> 
<script language="javascript"> 
    var currentScoPage = scoPage[ i ] ; 
    SetValue("cmi.location", currentScoPage); 
    Terminate(); // close out this SCO, we are finished 
</script> 
</head> 
<body onLoad="mm_adlOnload()" onUnload="mm_adlOnunload()"> 
... 

4) SCORM : 외부 파일 "SCOfunctions.js"

function mm_adlOnload() 
{ 
    if (mm_adl_API != null) 
    { 
    mm_adl_API.Initialize(""); 
    mm_adl_API.SetValue("cmi.completion_status", "incomplete"); 
    } 
} 
function mm_adlOnunload() 
{ 
    if (mm_adl_API != null) 
    { 
    mm_adl_API.SetValue("cmi.completion_status", "incomplete"); 
    mm_adl_API.Commit(""); 
    } 
} 
GetAPI(window); 

var nFindAPITries = 0; 
var API = null; 
var maxTries = 500; 

function ScanForAPI(win) 
{ 
    while ((win.API_1484_11 == null) && (win.parent != null) && (win.parent != win)) 
    { 
     nFindAPITries++; 
     if (nFindAPITries > maxTries) 
     { 
     return null; 
     } 
     win = win.parent; 
    } 
    return win.API_1484_11; 
} 

function GetAPI(win) 
{ 
    if ((win.parent != null) && (win.parent != win)) 
    { 
     API = ScanForAPI(win.parent); 
    } 
    if ((API == null) && (win.opener != null)) 
    { 
     API = ScanForAPI(win.opener); 
    } 
} 

5) SCORM : exte 파일 "SCOcomplete.js"

var nFindAPITries = 0; 
var API = null; 
var maxTries = 500; 

function ScanForAPI(win) 
{ 
    while ((win.API_1484_11 == null) && (win.parent != null) && (win.parent != win)) 
    { 
     nFindAPITries++; 
     if (nFindAPITries > maxTries) 
     { 
     return null; 
     } 
     win = win.parent; 
    } 
    return win.API_1484_11; 
} 

function GetAPI(win) 
{ 
    if ((win.parent != null) && (win.parent != win)) 
    { 
     API = ScanForAPI(win.parent); 
    } 
    if ((API == null) && (win.opener != null)) 
    { 
     API = ScanForAPI(win.opener); 
    } 
} 
function mm_adlOnload() 
{ 
    if (mm_adl_API != null) 
    { 
    mm_adl_API.SetValue("cmi.completion_status", "incomplete"); 
    } 
} 
function mm_adlOnunload() 
{ 
    if (mm_adl_API != null) 
    { 
    mm_adl_API.SetValue("cmi.completion_status", "completed"); 
    mm_adl_API.Commit(""); 
    mm_adl_API.Terminate(""); 
    } 
} 
GetAPI(); 

내가 뭘 잘못하고 있니? SCORM 2004 프로젝트의 실제 사례가 있거나 적어도 내가 잘못했을 수도있는 것을 볼 수 있다면 크게 환영 할 것입니다.

미리 감사드립니다.

답변

0

바로 뒤에 Terminate()이 표시됩니다. 데이터베이스에 데이터를 지속 (저장)하려면 SetValue() 뒤에 Commit()을 호출해야합니다. 그렇지 않으면 아무 것도 저장하지 않고 SCO를 종료합니다.

또한 scoPage[i]의 값이 정확한지 확인 했습니까?

+0

의견을 보내 주셔서 감사합니다! 저는 SCORM에서 일반적으로 아마추어입니다 만, SCORM 2004에 관해서는 초보자 일뿐입니다. 아마 맞을 것 같습니다. 현재 SCO 페이지의 값을 올바르게 얻지 못하고 있다고 생각합니다. 어떻게 그걸 보통 하시겠습니까? 아마도 나는 currentScoPahe = GetValue (cmi.location, something else)와 같은 것을 놓치고 있습니다; –

+0

나는 당신 자신의 코스 안에서 - 당신이 scoPage [i]에 정확한 값을 전달하고 있음을 확인 했습니까? 그런 다음 과정을 다시 시작할 때 cmi.location의 값을 확인하여 과정을 종료하기 직전에 scoPage [i]에 전달한 것과 일치하는지 확인하십시오. – pipwerks

0

예를 몇 가지 다른 것들을 건물.

  1. "(cmi.exit", "suspend") 세트가 표시되지 않습니다. 이 설정을 제대로하지 않으면 LMS가 일반적으로 새 시도 (다시 시작)를 다시 시작합니다.
  2. 단일 페이지 SCO 대 일반적으로 IFRAME/프레임 셋 또는 AJAX로드 설정 'cmi.location'내에 포함 된 다중 페이지 SCO는 사용자가 달성하려는 동작을 초래하지 않을 수 있습니다. 당신이 교훈/단위/장 (imsmanifest.xml로) 각 페이지 개별 페이지로 구성이있는 경우

그래서 그들은 당신이 할 것입니다 볼을 자동으로 점수를하거나 상호 작용하는 뭔가를 기반으로.

  • cmi.location '2'(또는 어떤 페이지 온) - 당신의 여러 페이지 SCO
  • cmi.success_status에서이 "통과"경우에만 또는 "완료"
  • cmi.completion_status을 "실패"또는 "불완전"
  • cmi.session_time은 -
  • 가 1 또는 0 cmi.score.scaled ISO8601 기간 (최소, 최대, 당신도 원하는 원시 경우)
  • cmi.exit ('정상'또는 '중단'을 요구한다)
  • commi t()
  • 이 (종료)

    • cmi.total_time -

모든 대 당신의 하나에 따라 (그들은 마지막 세션 시간 + 현재 세션 시간을 추가) LMS에서 관리 멀티 페이지. 한 페이지를 정상적으로 종료하면 책갈피가 필요하지 않습니다. LMS는 진행하면서 완료되고 채점 된 목차의 각 항목을 표시합니다.

굿 럭