Sunday, March 4, 2007

Can I hide the headlines that appear on the News tab?

By default, EKP displays summary headlines above the full text of the news articles on the News tab of the Home Page.

Summary headlines above the full text of news articles on the News tab of the Home Page

These can be disabled for individual skins by adding a Cascading Style Sheet (CSS) rule to the main style sheet for the skin. The rule is as shown below.

.headlines {display: none;}

This rule should be added to the file named main.css inside the skin directory. For example, for the EKP46-Tab skin, the rule would be added to the file named main.css inside the ekp/nd/fresco/styles/EKP46-Tab/ directory.

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 4.6.0.83 and 4.5.1.197.

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.

xmlns:adlcp="http://www.adlnet.org/xsd/adlcp_rootv1p2"

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

<manifest identifier="M1" version="1.1"
    xmlns="http://www.imsproject.org/xsd/imscp_rootv1p1p2"
    xmlns:adlcp="http://www.adlnet.org/xsd/adlcp_rootv1p2">

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.

/ekp/servlet/ekp?TX=FORMAT1&CID=MY_COURSE

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.

/ekp/servlet/ekp/pageLayout?mainSrc={URL-of-target-page}

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.

%2Fekp%2Fservlet%2Fekp%3FTX%3DFORMAT1%26CID%3DMY_COURSE

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

/ekp/servlet/ekp/pageLayout?mainSrc=%2Fekp%2Fservlet%2Fekp%3FTX%3DFORMAT1%26CID%3DMY_COURSE

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 window.top.close() 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.