Training Partner Online – Import SCORM Course

There are a few tricks to get a SCORM course properly loaded and configured to ensure the student’s enrolment is completed when the course is completed.

Actually, they are not really tricks but strict adherence to the SCORM standards. Some LMS implementations let your cheat when producing a SCORM course so it is critical that you test the SCORM course on your LMS platform because passing the SCORM Test Suite or running on another LMS does not guarantee it will work on Training Partner Online or another LMS.

Loading the SCORM Course

  1. Copy the course into your elearning folder.
    This folder must on a server with the same domain name as Training Partner Online, this is usually the same server that Training Partner Online is installed on.

    elearnfolder

  2. I recommend that you next test to see if you can reach the course through a web browser without going through the LMS. Make sure you use the TP Online domain name.
    In the example above, I would type: http://localhost/elearn/scormlesson/index.htm into Internet Explorer or Firefox. Save this URL in NotePad, you will need it later.scormtestlaunch

    Don’t worry if you get an error message that the LMS API is not available, you are not launching through the LMS. You are looking for 404, page not found errors.

  3. If the course launches with no page not found errors, proceed to load the course into Training Partner. Otherwise, contact your system admin to help you configure your web server properly to launch the course.
  4. Launch the Training Partner Admin client and log in as an Administrator.
  5. Go to the File/Import menu and select SCORM 1.2/2004 Content Package from the radio buttons.FileImportSCORM
  6. Click the Data Source tab
  7. Click the Select File button and browse to where your SCORM course is located. You are looking for the imsmanifest.xml file to load into Training Partner.FileImportSCORMFile

    Please note that your web server where your elearning course are stored may be on a different server than the TP admin client. Contact your system admin for the proper path to the elearning folder. In this example, they are on the same server.

  8. Click the Open button and you will be prompted to Enter Base URL for the course. Remember above where you tested the course before and saved the URL? Copy and paste it into the Base URL textbox and remove everything after the last slash.SCORMBaseURL
  9. Click OK. You should see a success message for the import.SCORMImportSuccess

    Note that the import course name must be unique within the TP course catalog or you will get an error message that there is a duplicate course.

  10. Close the Import – SCORM 1.2 dialog and open the SCORM Imported Courses course folder. You should see your imported course.SCORMImportedCourses

    Note that if you already have the SCORM Imported Courses folder open, you will need to click into another course folder and back to refresh the contents.

  11. You have successfully imported a SCORM course. Now to configure it.

Configure the SCORM Course

  1. Open the course properties in SCORM Imported Courses folder. In this example, it is called Saltwater Crocodiles.
  2. Click on the Units tabCourseUnitTab

    Note, depending on the course, you may see more than one unit. This example is dealing with only a single unit.

  3. Double click the unit to see the Unit Properties.SCORMUnitProperties
  4. Confirm the Max Score and Weight. The max score is not a percentage but that actual score the student will get when completing the unit.
  5. For Training Partner to set an enrolment to Completed when a SCORM course is completed, a score must be passed back to the LMS.

    It is critical that the Pass Score be filled in.
    If you just want the student to pass the course when they have reach the last page, have the course developer send a score of 1 at the last page. Below is an example if the configuration:

    SCORMUnitPassOf1

  6. Click OK to go back to the Course Properties.
  7. Unlike the Unit, the Pass Score is a percentage.It is critical that the Pass Score be filled in plus the Max Credits.

    In this example, since a 1 is being sent on the last page of the course, the Pass Score would be 100% and the Max Credits is 1.

    CourseUnitPassOf1

  8. Click OK button.
  9. Your course is ready to test!
  10. In the example used here, when the last page of the course is reached, the student will get a score of 1 out of 1 and the enrolment will show completed.SCORMCompleted
Posted in LMS, Training Partner | Tagged , , | Leave a comment

Training Partner Online – Language Tags

Language tags can be a blessing and a curse. If you are using a single language, it sometimes be labour intensive to update them and you probably don’t see the point of them but for multi-lingual sites, they are a must have.

How do you know you have a problem?

You will see something like the following when you bring up a TP Online page:

MissingLanguageTag

To breakdown the “error” message above:

  • Tag = language tag
  • Public_Course_Options_End: CBT Anonymous = missing tag
  • Not Found = error message

The one issue that I have with the above message is that it does not tell you which language the tag is missing from. The above error is actual from the French language. You have to know which language you or the user is in.

To update a language tag, open the Online Designer

  1. Click the Language Tags button on the toolbar. Circled in red below:
    LanguageTagButton
  2. You will see the Language Tags dialog box. Select the Page dropdown and select [All Tags]

    LanguageTagDialog
  3. Copy and paste the missing tag into the Tag: field and press Enter.
    In the example above, it would be:
           Public_Course_Options_End: CBT Anonymous
    Note that any trailing spacing should be removed.
  4. If the tag exists, it will bring you to the entry otherwise, it will create a new entry.
    Public_Course_Options_End_CBT Anonymous
  5. Click in the English Translation column that lines up with the missing tag and enter the text.

    Public_Course_Options_End_CBT Anonymous-E

  6. To enter in another language, just change the Language dropdown to language to French for example.
  7. You will see the English text and you may entry the French in the French Translation column.

    Public_Course_Options_End_CBT Anonymous-F

  8. Remember to stop and start the TP Online Service
  9. The Language Tag is now live

    SetFLanguageTag

Posted in LMS, Training Partner Online | Tagged , | Leave a comment

Training Partner – How to Bill to a Student

Training Partner billing is dependent on how the Address Formats are setup.

By default, TP comes with three Address Formats:

  1. Billing Address

    BillingAddressDefault

  2. Mailing Address

    MailingAddressDefault

  3. Standard Address

    StandardAddressDefault

Any of the above addresses can be used for invoicing purposes. As can be seen above, the Billing Address is set as the default billing address. This means when an Organization is created the Bill To: will be defaulted to Billing Address, therefore there must be a Billing Organization defined in the organization tree.

OSG-OrgPropertiesAddress

So in the example below, if Rod Fage is attached to the OSG Consulting Inc. organization, orders created on enrollments for Rod would be billed to OSG – Accounts Receivable.

OSG-AR

The above scenario allows for the ability to attach students to different organizations for reporting and communication purposes and still have a centralized billing address. This is a big benefit if you are dealing with large corporations or government agencies.

What if you need to bill the student directly, on their personal credit card and send the invoice to them?

An additional Address Format is required.

  1. Go to Tools/Options menu
  2. Click on the Addresses tab
  3. Right click in the grid and select New Address Format
    NewAddressFormat
  4. Give is a Name like Bill Student
  5. Change the Bill To: Personal
    BillStudent
  6. The Format may stay the same. It will use the student’s address information on the invoice.

To use Bill Student:

  1. Create an enrollment as usual
  2. Click on the Bill tab
  3. Select Bill Student in the Bill To: dropdown list
    CreateEnrollmentBillStudent
  4. Create the order as usual. You will notice that the Client is Fage, Rod (student’s name) rather than the organizations name.
    CreateOrderBillStudent
  5. Click OK

If you open the invoice, you will see that the address has been take from the student rather than the organization as well.

Posted in LMS, Training Partner | Tagged , , | Leave a comment

Training Partner – Version Numbers

Those experienced in Training Partner know that the TP Admin Client and the TP database must be in sync.

If the TP Admin Client has a version number higher than the database then the user login in to the client will be prompted to update the database.

Training Partner Upgrade Dialog

Make sure all installations of the TP Admin client and Training Partner Online are upgraded at the same time or you may face the situation below.

If the TP Admin Client version is lower than the database version, the user will get an error message like the one below prompting the user to upgrade their version of the Admin Client.

TPAdminDBErrorMsg

Below, I outline how to find the version numbers for both the Admin and database.

Training Partner Admin Version

To find the Training Partner Admin version number, look in the Help menu and click the About Training Partner… option.

TPHelpAbout

If someone is asking for your TP version, they want both the Version and Build below.

AboutTrainingPartner

In the above example, the version number is 2008.1.1.912.

TP Database Version

The database version number is stored in the ITEMS table.

Run the SQL script below:

SELECT * FROM ITEMS
WHERE ITEMTYPE = ‘DEFAULT’
AND ITEMKEY = ‘TP2000VERSION’

The version number is stored in the NAME field.

In the example below, the database version is 2008.1.1.912.

TPDBVersionNumber

On a side note, the UID of the the version number in the database is stored in the ITEM_NO column and is ITEM1999112517382603929944. I have not seen it change in the last 7 years but I use the ITEMTYPE and ITEMKEY fields in the query above, just in case it does.

Posted in LMS, Training Partner | Tagged , | Leave a comment

Training Partner – Invoice Print

A Training Partner invoice has a Print button. The question is, what report is associated with that button?

ARInvoicePrint

The documentation is not clear. Look for the report name “Invoices (Individual)” in your report folders.

To find the report:

  1. Open your Reports inventory windows
  2. Click in the field beside the word Search:
  3. Type “Invoices (Individual)” without the quotesInvoices (Individual)
  4. Press the Enter key to jump to the report.
  5. If there is more than one “Invoices (Individual)”, you want the one that only has ““Invoices (Individual)” as its name.

If the report does not exist, you can add the report:

  1. Open your Reports inventory windows
  2. Find a report, you wish to base the new report on and click it.
    It is important that you left click on the base report first before right clicking.
  3. Then right click the existing report, select New/New Report/New Quick Report (assuming you wish to format your invoice) Adding Invoices (Individual)
  4. You will be presented with a blank report to customize with the existing report’s data already populated expect for the General tab
  5. Type “Invoices (Individual)” without the quotes in the Name field.BlankReportProperties

Alternatively, you can rename the original “Invoices (Individual)” and create a new report as above.

Posted in LMS, Training Partner | Tagged , | Leave a comment

Macro DTS import of Excel spreadsheet failing

Quite a few years ago, I did an automated upload of pricing information from an Excel spreadsheet into a MS SQL database table.

The VBA macro created a new spreadsheet with the required data from the Excel worksheet and saved it in a transfer folder. The macro then fired off a DTS package to upload the data into the table. More magic happens afterward but is not relevant.

Everything was working perfectly for a few years until the client upgraded from Excel 2003 to Excel 2007.  The new worksheet was being saved just fine but the client was now getting the following error message on the DTS job:

DTS Error

I couldn’t figure it out. The Excel spreadsheet exported and looked fine but the job was still failing. Clearly, the DTS job was being triggered, what gives?

The key is in the new file format of Excel 2007. The ActiveWorkbook.SaveAs was not respecting the .xls extension.

Below is the relevant code fragment:

LFilename = LPath & LDate & "_PriceList.xls"
If Dir(LFilename) <> "" Then Kill LFilename
ActiveWorkbook.SaveAs Filename:=LFilename

With Excel 2007 and up, you need to set another parameter when saving a file otherwise, it will assume you would like the default Excel 2007 xlsx file format regardless of the extension.

Below is the fixed code:

LFilename = LPath & LDate & "_PriceList.xls"
If Dir(LFilename) <> "" Then Kill LFilename
ActiveWorkbook.SaveAs Filename:=LFilename,FileFormat:=56

File Formats in Excel 2007/2010:

51 = xlOpenXMLWorkbook (without macro’s in 2007-2010, xlsx)
52 = xlOpenXMLWorkbookMacroEnabled (with or without macro’s in 2007-2010, xlsm)
50 = xlExcel12 (Excel Binary Workbook in 2007-2010 with or without macro’s, xlsb)
56 = xlExcel8 (97-2003 format in Excel 2007-2010, xls)

Problem solved.

BTW, before anyone asks “did I try to change the DTS job to support Excel 2007/2010 xlsx format?” The answer is yes but my MS SQL server did not have the driver.

Warning: The FileFormat throws an error when used on Excel 2003.

If you need to support both 2003 and 2007/2010 then you must modify the SaveAs code to detect which version of Excel you are using:

If Val(Application.Version) < 12 Then
      ActiveWorkbook.SaveAs Filename:=LFilename
 Else
     ActiveWorkbook.SaveAs Filename:=LFilename, FileFormat:=56
 End If

The above will work on both old and new version of Excel.

Props to:

http://www.rondebruin.nl/saveas.htm

Posted in MS Office | Tagged , , | Leave a comment

Flaky Wireless Solved

I have been struggling for a solid wireless signal for years. When I moved into my house, I could never get a good signal or rather it would drop and I would have to reset the router to reestablish it.

I had assumed it was due to the i-beam running down the centre of the house. I tried everything. Boosters, firmware upgrades, a different wireless router, Wi-Fi extenders, moving it above the i-beam but nothing worked.

Then one of my portable ghz phones died and the signal was there. I found the problem (Not!). The signal was great for about 3 months and then it started all over again. Solid for a while then just dropping out.

But that did give me the idea to monitor the wireless status when it was working. It turns out, I have a very “noisy” neighborhood. Some channels work better than others. I believe the portable phone failing was just a coincidence and that the router just happen to pick the right channel for me.

I have reconfigured the router to use a signal channel and the signal has been solid ever since. I also removed BG-Mixed support since I did not need it.

WirelessStatus

I hope this helps someone! Years of frustration gone!

Posted in Networking | Tagged , | Leave a comment

SSIS Data Task Failure Not Executing Error Control Item

Another simple solution that took me about 1 hour to figure out.

I have a simple SSIS package that imports a flat file to a database table, performs a stored procedure on the imported data and moves the processed file into an archive folder. If the import failed, I wanted the file to be moved to an error folder for later manual processing.

The problem is that the failure branch was never executed and the failed files were never moved, stopping the entire control flow on the first bad file.

Control Flow:

SSISPackageControlFlowPreFix

Data Flow:

SSISPackageDataFlow

Seems very straight-forward. The failure constraint was created through the interface.

FailureConstraintAND

Notice the Multiple constraints is set to Logical AND.  It seems logical (pun intended) that this setting would not be important since there was only one constraint. Not true.

It must be set to Logical OR.

MultipleConstraints

You will notice that your failure line is now dotted and all of them are affected.

SSISPackageControlFlow

Now, my failed import file is properly moved to the errors folder and the rest of the files are processed appropriately.

Posted in SQL | Tagged , | 2 Comments

IIS 6 .net Framework 4 ASPX Pages Not Found

Recently ran into this again! 

One of my .Net Framework 3.5 web app projects got converted to 4.0.  I was not part of the conversion but I had been asked to do some simple updates. 

The web app published just fine on my Windows 7 dev box but it when I went to install it on the Windows Server 2003 with IIS 6, I was getting “The Page Cannot Be Found” errors on all .aspx pages.

PageNotFound

Normal .html pages were displayed just fine. The ASP .net Properties were set to the 4.0 .Net Framework.

IIS6dotNetConfig

So what was causing the issue? .Net 4.0 not enabled properly. 

I did two steps to fix this but I am unsure if the first one was required as it did not fix the issue by itself.

  1. Reinstalled ASP .Net 4.0. From Run:
    C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
  2. Enabled .Net 4.0 on IIS 6. From the command line in the C:\Windows\System32 folder:
    cscript iisext.vbs /EnFile C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll

The first step is easy to find through Google.

Full kudos to Johan’s blog for the enable instructions: http://johan.driessen.se/archive/2010/04/13/getting-an-asp.net-4-application-to-work-on-iis6.aspx

Posted in .NET | Tagged , , | 2 Comments

Regsvr32.exe error 0x8002801c Windows 7

This is one of those I should have known better errors but since I could not find a direct reference to the error code on Google, I thought I would write it up for others.

I was trying to register the Crystal Reports 10 ocx component:

regsvr32  .exe c:\windows\system32\crystl32.ocx

When I got the error:

regsvr32Error

The module “crystl32.ocx” was loaded but the call to DllRegisterServer failed with the error code 0x8002801c.

It is hard to believe (but then again for those of us doing this for a while, not so hard) that this error message is actually a permission problem. I had forgotten to Run as administrator when I opened the command prompt.

Once again, a more relevant error would have saved me some time plus remembering that registry updates always require admin rights.

Posted in Registry, Visual Basic | Tagged , , | 2 Comments