SharePoint Learning Kit Language Packs

I’ve now rebuilt the language packs for SharePoint Learning Kit for use with 1.7 & 1.8. This has involved rewriting the extract and build process so that it’s repeatable.

Most of the languages haven’t been updated since 1.3.1 so any new strings added since then won’t be translated.

To install:

  1. Download the language packs from and unzip onto your SharePoint server.
  2. Open a PowerShell command prompt and navigate into the folder for your language.
  3. Run InstallSolution.ps1. This should add the localized package and deploy it.

The supported languages are:

  • ar-EG
  • ar-SA
  • bg-BG
  • cs-CZ
  • cy-GB
  • da-DK
  • de-DE
  • en-GB
  • en-US
  • es-ES
  • fa-IR
  • fi-FI
  • fr-FR
  • hr-HR
  • hu-HU
  • it-IT
  • ja-JP
  • lt-LT
  • lv-LV
  • nb-NO
  • nl-NL
  • pl-PL
  • pt-PT
  • ro-RO
  • ru-RU
  • sk-SK
  • sl-SL
  • sr-latn-cs
  • sv-SE
  • tr-TR
  • uk-UA


Read More

SLK: Open Office Documents in the Office Apps on iPads

In SharePoint Learning Kit 1.8, I’ve just added beta functionality so that on an iPad, assignments which are office documents are opened in the Office Apps for the iPad. This is transparent to the user, it should just happen.

To enable this, you will need to add a setting to the DropBoxSettings in SlkSettings.xml. You need to set  OpenOfficeInIpadApp to true:


Of course you’ll also need the latest version of 1.8 and the Office Apps installed on any iPad used.

It’s early days for this functionality, but it should work for Word, Excel, PowerPoint and OneNote. Once you’ve finished editing, you will be taken back to the page you were at before, but in a new tab.

Any feedback welcomed.

Read More

Using Grades in SharePoint Learning Kit

The SharePoint Learning Kit (SLK) has had support for marking with grades since version 1.6, but I’ve never got round to documenting it. It’s an optional feature and by default is turned off so you won’t have seen it unless someone has turned it on for you. It’s a nice simple implementation. When turned on, just adds a text field to the grading page which allows you to enter any text you want for the grade. There’s a maximum length of 20 characters which should be more that enough for a grade.

Turning on

To turn on you need to update the SlkSettings.xml file in central administration. All you need to do is add the attribute UseGrades=”true” to the root Settings element.



Once UseGrades is turned on then instructors will see an extra grades column on the grading page. This is a free text field of length 20 so they can put in whatever they want up to 20 characters.


Once the assignment is returned to the learner then they will see the grade value on the lobby page for the assignment.


And that’s basically it, nice and simple, but allows you to add a grade without having to add it in the comments.

Removing the Points Column

On a related note you can also configure SLK to not show the points column for assignments. Typically this would be used in conjunction with grades, but can be used on it’s own if you only want to use comments.

To do this set HidePointsForNonELearning=”true” on the Settings element in SlkSettings.xml similarly to UseGrades above. Once this is done then the Points column will be hidden on the grading page for instructors and the Points row will be hidden for learners on the lobby page.

SalamanderSoft’s GradeBook

Our GradeBook web part also supports grades when they are turned on in SLK.

Read More

SharePoint Learning Kit Macros for Assignment List Web Part

The queries in the Assignment List Web Part support macros in the conditions, e.g. here is the Due This Week Instructor query


<Query Name="DueThisWeekInstructor" Title="$Resources:SlkDll,QueryTitleDueThisWeek" ViewName="AssignmentListForInstructors" CountViewColumnName="AssignmentId">
  <Column Title="$Resources:SlkDll,QueryColumnTitleSite" RenderAs="SPWebName" ViewColumnName="AssignmentSPWebGuid" ViewColumnName2="AssignmentSPSiteGuid" />
  <Column Title="$Resources:SlkDll,QueryColumnTitleAssignment" RenderAs="Link" ViewColumnName="AssignmentTitle" ViewColumnName2="AssignmentId" NullDisplayString="$Resources:SlkDll,QueryColumnNullDisplayUntitled" />
  <Column Title="$Resources:SlkDll,QueryColumnTitleDue" RenderAs="UtcAsLocalDateTime" ViewColumnName="AssignmentDueDate" CellFormat="d" NullDisplayString="$Resources:SlkDll,QueryColumnNullDisplayDash" ToolTipFormat="$Resources:SlkDll,QueryColumnToolTipDue" Wrap="false" />
  <Column Title="$Resources:SlkDll,QueryColumnTitleSubmitted" RenderAs="Submitted" ViewColumnName="CountCompletedOrFinal" ViewColumnName2="CountTotal" Wrap="false" />
  <Condition ViewColumnName="AssignmentSPWebGuid" Operator="Equal" MacroName="SPWebScope" NoConditionOnNull="true" />
  <Condition ViewColumnName="AssignmentDueDate" Operator="IsNotNull" />
  <Condition ViewColumnName="AssignmentDueDate" Operator="GreaterThanEqual" MacroName="StartOfThisWeek"/>
  <Condition ViewColumnName="AssignmentDueDate" Operator="LessThan" MacroName="StartOfNextWeek"/>
  <Sort ViewColumnName="AssignmentDueDate" Ascending="true"/>
  <Sort ViewColumnName="AssignmentTitle" Ascending="true"/>

The list of macros is:

Name Type Description
SPWebScope Array of site IDs. The ID of the sites that the ALWP is limited to depending on its properties: Will be the current site, null (for all) or an array of IDs.
CurrentUserKey Guid string The key of the current user in the SlkUser table. Not generally needed as the views are normally limited to current user.
Now DateTime The current date and time
StartOfToday DateTime Midnight of today
StartOfTomorrow DateTime Midnight of tomorrow
StartOfThisWeek DateTime Midnight of the start of the week as defined by the current user’s culture.
StartOfNextWeek DateTime Similar to StartOfThisWeek, but the subsequent week.
StartOfWeekAfterNext DateTime Similar to StartOfNextWeek, but the subsequent week.


As of version 1.8, you can now add a day modifier to the DateTime macros, to give you more flexibility over the date ranges. The format is:


Where macroName is the name of the macro above, and dayModifier is an integer value of days to add to the normal value. This can be negative to take away days. So if you wanted a query for assignemnts due tomorrow, you could have

<Condition ViewColumnName="AssignmentDueDate" Operator="GreaterThanEqual" MacroName="StartOfToday:1"/>
  <Condition ViewColumnName="AssignmentDueDate" Operator="LessThan" MacroName="StartOfToday:2"/>

Read More

Send Reminder Emails with SLK 1.6 and above

SLK has the built in ability to send reminder emails to learners for assignments, but, there is no built in a way to run this. However, there is a sample project in SLK\Samples\ReminderEmails which will run the functionality. The usage of this is

ReminderEmails.exe <site collection url>

This will then send reminder emails for a site collection using the email settings in slksettings.xml. This is implemented as a console project so needs to run on one of your SharePoint servers and you’ll need to schedule it using Task Scheduler or similar.

I have compiled this for SharePoint 2007, 2010 and 2013 at

The default emails settings of SlkSettings are:

  <EmailSettings ReminderDays="1,7" EmailOnSubmitOff="true">
      <NewAssignment Subject="New Assignment: %title%">
          <slk:Body xmlns=""><p>You have been assigned a new piece of work: <strong>%title%</strong>.</p>
<p><a href=’%url%’>%url%</a></p></slk:Body>
      <CancelAssignment Subject="Assignment Cancelled: %title%">
          <slk:Body xmlns=""><p>Assignment <strong>%title%</strong> has been cancelled.</p></slk:Body>

The ReminderDays attribute controls when the reminders are sent. They are sent those number of days before the assignment is due. So if you wanted an email on every day for the 3 days preceding the assignment it would be ReminderDays="1,2,3".

You can also have a AssignmentReminder section to set the subject and body of the email as in NewAssignment and CancelAssignment above. Otherwise the default email settings will be used which are

    Assignment Reminder : %title%
  <p>Assignment <strong>%title%</strong> is due on %due%.</p>
<p><a href=’%url%’>%url%</a></p>

For anyone interested the code in the console application is very simple, it literally just calls the ReminderEmails object within the SLK project.

        public static void Main(string[] arguments)
            if (arguments == null || arguments.Length == 0 || string.IsNullOrEmpty(arguments[0]))
                Console.WriteLine("You must pass a url of a site collection.");
                    ReminderEmails reminder = new ReminderEmails();
                catch (Exception e)

It would be pretty easy to convert this to a SharePoint timer job.

Read More