# SCORM Best Practices

NexPort Campus allows content developers to import SCORM 1.2 and SCORM 2004 packages and deliver them as assignments. Below we list a few best practices. Most of these recommendations are technical in nature. These instructions assume that the developer is familiar with the SCORM 1.2 Runtime Specification or the SCORM 2004 Runtime Environment Specification.

{% file src="<https://4166026515-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWkUUsnoCFHCrXLAM3d7e%2Fuploads%2Fuc2jyWp7PQxU9gt6vtq5%2FSCORM-12-RunTimeEnv.pdf?alt=media&token=b04d6678-9aa7-4090-b0e6-ccb91f5a4c06>" %}

{% file src="<https://4166026515-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWkUUsnoCFHCrXLAM3d7e%2Fuploads%2FpPDStROiiluUHAjHKUKB%2FSCORM_2004_4ED_RTE.pdf?alt=media&token=23ac8e1f-857c-4f65-9d68-a819347c223a>" %}

<details>

<summary>All Courseware</summary>

## Set *Lesson Status* Immediately

According to the **SCORM 1.2 specification**, *cmi.core.lesson\_status* will be set to ***completed*** if a Sharable Content Object (SCO) finishes without setting the status on the first launch. NexPort Campus obeys this behavior. If a SCO fails to set the lesson\_status during the initial attempt by a student and the student exits the SCO then NexPort Campus will set the status to completed.

For SCORM 2004 this behavior is less specific. It's still a good idea to set the *cmi.completion\_status* immediately upon launch to in progress.

If this is the desired behavior then the SCO should do nothing. If your SCO intends to set the *cmi.core.lesson\_status* itself you should make sure it is set to "*incomplete*" immediately after the SCO calls LmsInitialize() or Initialize() (SCORM 2004).

## Do Not Try to Close the Window

Many SCORM LMSs will launch a SCORM course in a popup window. NexPort Campus does not use popup windows. NexPort Campus has 2 options for launching a SCORM course.

First, is the "courseware launcher" with opens the courseware separately from the classroom but in the same window/tab. A menu at the top of the courseware launcher has a button that the student can use to "Return to Classroom."

Second, is the "embeded" mode. This mode provides the best experience for students. In this mode the courseware is displayed in the classroom directly. The SCO may call LMSFinish as it likes and the classroom will automatically pickup changes to the grade and status.

## QA Your Courses in NexPort

Curriculum developers frequently QA their course in their authoring environment only to find that it behaves differently in the Learning Management Environment. Small differences in how courses are launched or delivered can change, drastically, the experience for your students. You should always verify the behavior of your courses in NexPort Campus before publishing them.

</details>

<details>

<summary>SCORM 1.2</summary>

##

## Setting cmi.core.lesson\_status to completed can not be reversed

If the lesson status is set to completed and LMSCommit is called the status can no longer be changed. In fact the course automatically goes into review mode and no further updates to any CMI value will be written.

## Call *LMSCommit* Often

According to the SCORM 1.2 specification, CMI data is only required to be persisted when LMSFinish is called OR when LMSCommit is called. To ensure that student progress is properly tracked LMSCommit should be called frequently.

## Manifest Identifiers Should Contain no Special Characters

The manifest identifiers should only contain letter, numbers, dashes and underscores.

```xml
<organization identifier="acme_course_101">
      <title>Acme Course 101</title>
      <item identifier="acme_course_101" isvisible="true" identifierref="__6pvVJupxRfVhiv_RES">
        <title>acme_course_101</title>
      </item>
    </organization>
  </organizations>
```

## Consider Implementing Improved SCORM (iSCORM)

Not all tools support the iSCORM specification.

The IScorm Spec is a Super Set of the ADL SCORM 1.2 Specification. IScorm is designed to provide a few missing features to the SCORM 1.2 API while still mostly supporting the original SCORM 1.2 specification. Here are a few goals:

* Add ASYNC callbacks to LMSInitialize, LMSCommit and LMSFinish
* Expose an alternative to the standard window\.api object instance that is less generic
* Expose versioning

[Click here to learn more about iSCORM](https://app.gitbook.com/o/8jter5exvHg3A0oWSmxn/s/X48Kz2UK6EcOyV7eH5PZ/).

</details>

<details>

<summary>SCORM 2004</summary>

## Using Asynchronous API Calls in Articulate Courses

The async API option allows SCORM 2004 courses, especially those made with Articulate, to use asynchronous API calls. This is particularly useful in review mode.

#### Key Points

* **SCORM 2004 Support**: Async API calls are supported for SCORM 2004 courses.
* **Review Mode**: Improves stability when reviewing completed courses.
* **SCORM 1.2**: This setting is ignored for SCORM 1.2 courses.

#### Enabling Async API Calls

1. Go to course settings.
2. Find API settings.
3. Enable asynchronous API calls.
4. Save and test the course.

#### Default Behavior for Articulate Courses

By default, the **Use Async API** option is enabled when uploading a course created with Articulate. While this does not fully align with the SCORM 2004 specification, it is necessary for proper functionality in review mode. This approach also provides greater flexibility for potential future updates to the specification, ensuring better compatibility with evolving browser behaviors and minimizing interruptions in the learner experience.

This setting enhances compatibility with Articulate-authored SCORM 2004 courses, especially in review mode.

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.nexportsolutions.com/nexport-user-documentation/administrator-documentation/administrator-quick-start/scorm-best-practices.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
