Wednesday, February 28, 2007

Elective program modules in EKP 4.7

In EKP 4.7, it's possible to specify that some modules in a learning program session are elective, meaning that the learner is not required to complete the module in order to complete the program session.

Selecting elective modules in a learning program session

It's also possible to specify the number of credit hours the learner needs to earn from elective modules before the program is considered to be completed. (That is, in order to complete the program, the learner needs to complete all the required modules, and also sufficient elective modules to earn the required number of credit hours.)

Specifying the number of required credit hours

EKP can display three new columns on the Enrolled Learning Modules tab. These show, respectively, whether a program module is required or elective, the number of training/credit hours available for a module, and the percentage of a program that has been completed. (An administrator can choose whether to show each of these individual columns by going to Manage > System Administration Manager > System Configuration > System Configuration.)

New columns on the Enrolled Learning Modules tab

The required/elective and training hours columns are also available in program Knowledge Centers.

(Note that, in order for EKP to automatically mark programs as completed when the appropriate requirements are met, the option Enable Automatic Completion of Learning Programs must be enabled under System Configuration.)

Improvements to bulk courseware import tool

We just made some improvements to the bulk courseware import tool. This tool makes it easy to import many AICC-conformant courses in a single step. To use it, simply package the course structure files for the courses in a single zip file, then go to Manage > Catalog Manager > Import Content Package and upload the zip file. (Each course should have a set of four files, with the same base file name, and file name extensions .au, .crs, .cst and .des respectively. Some tools and vendors provide extra files, but EKP doesn't need them.)

Perhaps the most useful change is that EKP now shows the full titles and IDs of several of the courses in the package on the import options screen right after you select the package and the character encoding. That lets you see what courses are available in the package before running the import. It's also helpful if you're not sure what character encoding to use, since you can check that the course titles look correct before running the import, and if not you can return to the previous step and choose a different encoding.

Bulk courseware import preview

EKP also now shows full course titles in addition to IDs on the summary page once the bulk import is complete.

We've also simplified the process in the case where the package contains only a single set of course structure files. In this case, the process is almost identical to importing a SCORM content package, and EKP will provide a detailed error report if it finds any problems with the files.

These changes will be available in versions and

Why does my SCORM course display an "Unable to find an API adapter" message?

When a SCORM course is packaged in a zip file (sometimes called a PIF, which stands for Package Interchange Format), the package needs to contain a manifest file named imsmanifest.xml. This file is used by delivery systems such as EKP to understand the contents of the package.

A SCORM course contains one or more resources (roughly speaking, the "lessons" in the course). In SCORM 1.2, each resource is either a sharable content object (SCO) or an asset. A SCO is specially designed to communicate with a learning management system (LMS)—for example by informing the LMS about the learner's test scores or other progress information—which it does using JavaScript calls. On the other hand, an asset is not specially designed to communicate with an LMS—essentially, it is just regular web content.

The manifest file contains information about each resource, together with an indication of whether each resource is a SCO or an asset. A typical XML element for a resource might look as shown below.

<resource identifier="R1" type="webcontent"
        adlcp:scormtype="sco" href="sco01.html">

Note the adlcp:scormtype attribute. There are two possible values for this attribute, sco and asset, corresponding with the two resource types described above. If the type is specified as sco, EKP will provide a JavaScript object called the API adapter, which the SCO can use to communicate with EKP. If the type is specified as asset, EKP assumes that the resource is not designed to communicate with an LMS using JavaScript, and therefore does not provide the API adapter. (Instead, EKP provides a button labeled Mark As Completed, which the learner can use to indicate that they have completed the activity.)

In particular, note that if the adlcp:scormtype attribute is omitted, EKP assumes that the resource is an asset, and therefore does not provide the API adapter.

If you see an error message that reads Unable to find an API adapter or similar when launching a course that has been imported from a content package, it might be that either the resource has incorrectly been tagged as an asset, or the adlcp:scormtype attribute is missing entirely. In this case, the problem can be fixed by manually editing the imsmanifest.xml file to include the correct attribute values for each resource.

There's one final XML technicality to be aware of. In order ensure that the attribute name adlcp:scormtype can be understood without ambiguity by an XML processor, it's necessary to ensure that the XML file contains a namespace declaration that corresponds with the namespace prefix adlcp. This declaration takes the form of an XML attribute that is usually placed on the root element of the file. The attribute is as shown below.


The initial opening tag of a manifest file that contains this attribute might look as shown below.

<manifest identifier="M1" version="1.1"

How can I link directly to a page in EKP without losing the navigation frames?

Sometimes it's convenient to link directly to pages in EKP from external systems. For example, if you have a course with ID MY_COURSE, you could link to the course catalog page from a page on your company intranet by using a URL like the one below.


However, if you create a link in this way then the visitor will see only the course catalog page, not the usual EKP navigation frames, so she will not be able to explore EKP, or even log out.

With a little more work, it's possible to create a URL that will let you link to the same page in such a way that it's displayed with the standard navigation frames. You do this by using a URL that follows the pattern shown below.


You need to replace {URL-of-target-page} with the actual URL of the target page. However, this URL needs to be URL-encoded. It's beyond the scope of this blog post to fully explain how URL-encoding works, but basically it involves replacing special characters with an encoded form that consists of a percentage symbol (%) followed by two letters or digits. For example, the slash character (/) is replaced by the percentage symbol followed by the digit 2 and the letter F. Here is a more detailed explanation of URL-encoding.

To return to our original catalog page example, the URL-encoded form of the target URL is as shown below.


Once this is substituted into the URL that displays the navigation frames, the final full URL is as shown below.


The same technique can be used for any internal EKP page that can be linked to directly.

Monday, February 19, 2007

Why doesn't the Exit button in my course work?

This is an area where the courseware standards (SCORM, AICC) don't really correspond with real-world usage.

According to SCORM, exiting a course is considered a navigation event and so should not be invoked by the course itself—only the run-time environment (typically LMS) is supposed to control navigation. This is related to the SCORM philosophy of "reusable objects"—if an content object (SCO) contains a button that closes the window then it's making strong assumptions about where it will run (i.e. in a separate window rather than as part of a larger course) and hence is less reusable. So if one were to follow SCORM to the letter then the course should not have an Exit button at all.

In reality almost nobody does it that way—having an Exit button is a very common requirement.

EKP typically launches courses inside a frameset—frames are used for navigation, and a "hidden" frame is used for the SCORM API adapter. That's why window.close() won't work—it tries to close the frame rather than the top level window. If you use instead it should work in EKP. (Note: the name of the window object in JavaScript might be misleading, as it can refer to either a frame or a top-level window.) But there's no single method that's guaranteed to be 100% portable across LMSs, even if they are SCORM- and/or AICC-conformant.

Sunday, February 18, 2007

How do I enable Java tracing on a client machine?

When investigating issues related to SCORM courseware tracking, NetDimensions support staff might sometimes ask you to enable Java tracing on the client machine. Enabling Java tracing causes information about API calls made by the course to be written to a trace file on the client. The steps below describe how to enable Java logging when using Sun Microsystems' Java Runtime Environment (RTE).

  1. Open the Java Control Panel. (On Windows, this can be done by going to Start > Control Panel, and double-clicking the Java icon.)
  2. In the Java Control Panel window, click on the Advanced tab.
  3. On the Advanced tab, expand the Debugging item by clicking on the plus sign icon.
  4. Ensure the checkbox labeled Enable tracing is checked.
  5. Click OK.

By default, the trace file is written to the <user>\Sun\Java\Deployment\log directory on Windows. Sun Microsystems' web site has more information on Java tracing and logging.

Note that the information written to the log file is generally the same as is available in the Java console. However, unlike the console, the information in the log file is still available after a browser restart or browser crash.

How do I enable HACP tracing?

When investigating issues related to courseware tracking, NetDimensions support staff might sometimes ask you to enable HACP tracing. Enabling HACP tracing causes detailed course tracking information to be written to the server log file. (HACP is the HTTP AICC CMI Protocol, which is what most AICC-conformant courses use to communicate with EKP.)

  • To enable HACP tracing temporarily (until next system restart), go to Manage > System Administration Manager > System Support Functions > Debug/Tracing Options. Ensure ON is selected in the drop-down list labeled HACP Tracing, then click Save.
  • To enable HACP tracing permanently, ensure the value of the system.aicctrace property is set to true in the configuration file (which is located in the WEB-INF/conf/ directory). That is, the file should contain the line below.
    This change to the file will take effect the next time EKP is reloaded.

It will often be desirable to make both of the changes described above.

Tuesday, February 13, 2007

What is PENS, and when should I use it?

Starting from version 4.5, EKP supports Package Exchange Notification Services (PENS). PENS enables one-click publishing of courses from a PENS-conformant authoring tool or LCMS to EKP. Note that PENS is not a format for learning content like SCORM or AICC CMI001. That is, by itself it does not define any formats or protocols for course catalog metadata, course structure, course/LMS communication, or sequencing. PENS simply defines a way for a publishing tool to notify a delivery system (LMS) that new content is available for collection. The relevant content is still transferred using an establish format such as SCORM or AICC packages (most commonly the former).

So PENS is not an alternative to, say, SCORM content packages. Rather, it simply eliminates the step of manually exporting a content package from the publishing system and then importing it into EKP. Note that if your workflow requires you to make use of the packages (e.g. you need to manually modify the packages, or wish to archive them outside of EKP) then it's probably not appropriate to use PENS.

How can I use PENS to enable one-click publishing from an authoring tool or LCMS to EKP?

Starting from version 4.5, EKP supports the Package Exchange Notification Services (PENS). PENS enables one-click publishing of courses from a PENS-conformant authoring tool or LCMS to EKP.

To configure the authoring tool or LCMS to publish courses to EKP using PENS, you will need three pieces of information: a URL, a user name, and a password.

The URL is simply the base URL for the site, followed by pens. A typical URL is shown below; if you have changed the default protocol or path for your site, you'll need to modify this URL as appropriate.

(N.B. If you encounter problems, check that you can access the PENS URL directly in a browser. You should get a response similar to the one below. If you see a 404 Not Found message or similar, there might be a configuration problem with your web server; see I get a 404 Not Found page when accessing EKP's PENS URL, what should I do? for an explanation of how to resolve it.)

error-text=collect command received and understood

The user name and password should correspond to an EKP user in a role that allows them to import courses.

Thursday, February 8, 2007

What are learning program sessions for?

A learning program is a co-ordinated sequence of modules designed to meet a particular learning objective or objectives. Programs can be "blended" in that they can combine both synchronous and asynchronous modules, and both online and offline modules.

Typically, you would create multiple sessions for a particular program if you have essentially the same sequence of modules taking place at different times, or in different geographical locations. For example, you might have a Spring 2007 session and a Fall 2007 session for a particular program. Usually an individual learner would be enrolled in at most one session of a particular program.

Note that this applies mainly to programs that include at least one instructor-led module. There's typically no reason to have more than one session for a program that contains only "asynchronous" online modules.

If you need to have multiple sequences of modules with different learning objectives, it's generally more appropriate to create multiple programs, rather than having multiple sessions of a single program.

Tuesday, February 6, 2007

Can I create a custom Table of Contents for a multi-SCO SCORM course?

A SCORM-conformant course contains one or more Sharable Content Objects (SCOs). A SCO is defined as the smallest unit of content that can be independently tracked by a SCORM-conformant run-time environment (i.e. an LMS). Although it's quite common for courses to be built using only a single SCO, this post concerns courses that are built using more than one SCO.

Where a course contains multiple SCOs, it needs to be set up in EKP in such a way that EKP is aware of the individual SCOs. Normally this happens automatically if the course is imported from a SCORM content package, as the imsmanifest.xml file in the package tells EKP what it needs to know about the individual SCOs. (If necessary, the same thing can also be accomplished manually using the Courseware Manager, by creating a separate lesson for each SCO and setting the Run-Time Environment for each lesson to "JavaScript API".) When the course is set up in this way, EKP provides navigation controls that learners can use to navigate between the SCOs. (If the course is built using only one SCO, these navigation controls are redundant and do not appear.) In this way, EKP can keep track of which SCO the learner is currently attempting, and can ensure that any progress information communicated by a SCO is associated with the appropriate SCO in EKP's records. EKP can also "roll-up" progress information from each lesson to provide overall progress information for the course.

However, this only works if EKP's own navigation controls are used to launch the SCOs; it won't work if you attempt to create a custom Table of Contents page and link to the individual SCOs from there. This is because EKP is unable to keep track of which SCO the learner is currently attempting—and, in fact, EKP is unaware that the course contains multiple SCOs. Any progress information communicated by an individual SCO will therefore be interpreted as course-level progress information; so, for example, when an individual SCO reports that it is completed this will be interpreted as completion of the course as a whole.

The solution is to avoid using a custom Tables of Contents for multi-SCO courses. Instead, import the course using the original content package, and ensure that the learner navigates between the SCOs using the navigation controls provided by EKP. (On the Navigation Setup page in the Catalog Editor, you can configure for each individual multi-SCO course whether EKP displays the top navigation frame only, the left navigation frame only, or both frames. You can also customize the look-and-feel of EKP's navigation controls by creating a courseware template and uploading it under Manage > Courseware Manager > Courseware Template Editor.)

Monday, February 5, 2007

I get a 404 Not Found page when accessing EKP's PENS URL, what should I do?

Starting from version 4.5, EKP supports the Package Exchange Notification Services (PENS). The URL used for notifications is typically /ekp/pens.

If you see a 404 Not Found error when attempting to access this URL, it's likely that your web server (e.g. Apache HTTPD) is not configured to forward requests for this URL to your application server (e.g. Apache Tomcat).

If your web server is Apache, you can fix this by editing the httpd.conf configuration file, which is in the conf/ directory under the Apache installation directory. If you open this file in a text editor, you will find a series of "directives" such as the following:

JkMount /ekp/tx/* ajp13
JkMount /ekp/servlet/* ajp13
JkMount /ekp/*.jsp ajp13
JkMount /ekp/servlet/ekp/* ajp13
JkMount /ekp/*.tx ajp13
JkMount /ekp/xml/* ajp13

(Note: in some installations, the above directives might be in a file named mod_jk.conf under the directory conf/jk/, instead of in httpd.conf itself.)

To enable PENS support, you should add one more directive as follows:

JkMount /ekp/pens ajp13

You'll need to restart Apache for that change to take effect. Note also that if the prefix for your site is something other than /ekp, you'll need to modify the directive above as appropriate.

Thursday, February 1, 2007

How do I find out what build of EKP I'm running?

When you report a bug, it's really important that you let us know the exact build of EKP you're running. This isn't just the major version number (like EKP 4.6), but includes four numbers separated by dots, for example With this information, along with relevant messages from the log file, we'll be able to investigate your problem much more quickly.

To find out what build you're using, go to Manage > System Administration Manager > System Statistics > System Activity Statistics. On the System Activity Statistics page, look for the value labeled EKP Version in the System Environment section. The value will be something like Release STANDARD. The four numbers in the middle (e.g. in this example) are what we need.