SLK 1.7–Assignment List Web Part now works on iPads

I’ve just completed some work ensuring that the Assignment List Web Part works on iPads. Before the work it would only show the results pane as below.


And now it displays both panes:


There’s 2 minor differences to using it in a PC browser.

  1. You need to tap twice to change the query. This is because the first tap is taken as a hover, before the next tap is taken as a click. After the first time, all the other query links work fine. This is slightly annoying, but still usable and I haven’t found a simple way to resolve it.
  2. When there are many assignments returned by a query, e.g. Active above, then the web part expands to show them all rather than adding toolbars as on a PC browser. So on an iPad it is
  3. ipadALWPPostLong

Whereas on a PC it would be


This is due to how iframes are implemented in iOS. There are some complex ways around it, but at the moment I’ll leave it as is to avoid complexity and it at least works for iPads now.

This will be available in SLK 1.7.

Read More

SharePoint Learning Kit 1.7 and the Ribbon

As the final item new feature to go into SLK 1.7 I’ve added SLK controls to the ribbon.


Each of the 3 features which add a command to the drop down control, now also adds the same command to the ribbon, in the Share & Track section.

And here’s the same ribbon with 16×16 icons if the browser window in smaller or there’s too many commands in there for all to be at 32×32.


Read More

SharePoint Learning Kit 1.7 Beta Released

I’ve now released SharePoint Learning Kit 1.7 beta release. There’s lots of changes, but the biggest, and most anticipated one is support for SharePoint 2013. This release support SharePoint 2007, 2010 and 2013, for both the free and server versions.

You can download from CodePlex.

Assuming no show stopper bugs, I’ll be converting to a stable release early in December.

The main changes are:

Support for SharePoint 2013
Many bug fixes
Web Part to play resources directly
Quick Assign – Allow upload resource as part of creating assignment
Allow use of multi-lingual interface
Localization of queries
Welsh translation and new localization build process
Instructors have read access to non-elearning assignment documents before submission
Pluggable architecture for Domain Group Enumerator (for programmers extending SLK)
SLK Members web part
Support for claims based authentication for observer and drop box
Office Web Apps support
Self assign web part
Tool tip on learner on assignment properties page
Site column in ALWP is clickable link
Setting option to automatically version document libraries
Add delegate controls to application pages
SLK stsadm commands instead of slkadm
Configure at web application level as well as site collection

I’ll try to blog some more information on each of these as time allows.

In addition it’s got the functionality of 1.6 in, which never made it out of beta.

Better handling of not quite fully compliant SCORM content
Textual grading as well as numeric (optional) e.g. ABC type grades
Quick assignment type. That is assignments not based on a document. This should make it much easier to use for a homework diary, especially if the assignment is along the lines of "Read chapters 1 & 2 of book y."
Email alerts

Read More

Configure Web Applications in SLK 1.7

As of SLK 1.7 I’ve added the ability to configure the SLK mappings at a web application level as well as at a site collection level. This allows site collections in a single web application to share the same mapping, i.e. the database and permission levels, without having to configure each site collection in turn.

If a web application has been configured, a site collection can override that by having its own mapping configured.

Note that configuring SLK for a web application will not create permission levels in the site collections within that all of its site collections. If required, you will have to script this manually.

A prime example of the use of this would be if you wanted the Assignment List Web Part (ALWP) in the learners’ My Sites. You can configure the My Site web application and the the web part will be usable in every users’ My Site. As the ALWP defaults to learner view if an SLK permission is not set, it works nicely for showing their assignments.

Read More

SLK stsadm commands Added in 1.7

In SLK 1.7 I have deprecated slkadm by adding equivalent stsadm commands. These work in the same way, but have the advantage of not needing a separate executable distributed.

As SLK runs on 2007 & 2010, I’ve so far been trying to keep the codebase the same for both versions which is why I haven’t added any PowerShell commands. I expect that I’ll change this in the next couple of versions.

The commands allow you to configure and list site collections and consist of:


This command allows you to configure, or re-configure a site collections’s SLK mapping. It allows you to set up the SLK database, the permissions used and the slksettings file.

stsadm -o slk-configure

-url <url>

[-databaseserver <database server name*>]

[-databasename <database name>]


[-instructorpermission <instructor permission name>]

[-learnerpermission <learner permission name>]


[-uploadslksettings <SLK Settings XML file name> | -defaultslksettings]


* By default, integrated authentication is used to connect to the database. To use a SQL Server user ID and password instead, append the appropriate connection string information to the database server name — for example, instead of "MyServer", use

"MyServer;user id=myacct;password=mypassword".

For security reasons, integrated authentication is strongly recommended.

Only one of -uploadslksettings and -defaultslksettings can be used

-application must be used when configuring a web application rather than a site collection


This command allows you to delete an SLK mapping for a site collection or web application.

stsadm -o slk-deletemapping

-guid <site-guid>

Not that you must use the site collection ID. The easiest way to get this would be by slk-enummapping.


This command lists of the SLK mappings in the local farm.

stsadm -o slk-enummappings

An example output is:

http://laptop01 (1c8288b8-ec84-4912-bc55-3569e7626b3a) –> Server=LAPTOP01;Database=slktest

http://laptop01/sites/gsdt (1eb7c24c-e7cf-4dea-9c3d-c49c7478f359) –> Server=LAPTOP01;Database=slktest

http://laptop01/sites/slk (25ac1434-a59c-4c78-8cf3-d343f0c79e92) –> Server=LAPTOP01;Database=SharePointLearningKit

http://laptop01/sites/gdst (e0ee8d39-7076-4d30-bc8f-601850f49ac7) –> Server=LAPTOP01;Database=SharePointLearningKit2

In this output the first line describes a mapping for a web application, while the other 3 are for individual site collections.


This command returns the details of a mapping for a site collection or a web application.

stsadm -o slk-getconfiguration

-url <url>

-guid <guid>

Returns the configuration for a site or web application.

Use either url or guid.

An example output is:

Database server: LAPTOP01

Database name: SharePointLearningKit

Create Database : False

Instructor Permission: SLK Instructor

Learner Permission: SLK Learner

Create Permissions: False

Read More

SLK 1.7 Has a Pluggable Architecture for Domain Group Enumeration

I’ve just finished adding a new feature to SLK 1.7 which allows the Domain Group Enumeration of members to be swapped out for an alternative implementation. This is pretty much an edge case, which isn’t going to be needed by the vast majority of SLK users, but it has allowed me to add an implementation which prevents domain groups being used to assign to.


The reason I added this functionality is that a customer had a need, was willing to pay to get it developed in the timescale they needed and I decided it wouldn’t negatively impact the project. They needed it as they were using Active Directory Federation Services and had implemented some custom functionality in their projects which allowed them to associate users in the federated domains, with local Active Directory groups. Of course, SLK didn’t understand this, and couldn’t link the membership of the groups with the federated users. As SLK is a key part of their SharePoint implementation this was a problem.

They could have used the federated users in SharePoint groups which would have worked out of the box with SLK, but decided that it didn’t fit in with their architecture. So we figured out a pluggable method of enumerating the group members would work best. They can write a class which understands their architecture and just plug it into SLK.

Do Not User Active Directory Groups Implementation

As part of the implementation I’ve created a plug in which prevents the use of Active Directory groups for assigning work through SLK. This was mainly as a test case for the pluggable architecture, but I choose this as it is a potentially useful functionality rather than just a random test. When this plug in is chosen no active directory groups are displayed when choosing SLK Members. The two main areas where SLK Members are displayed are the assignment properties page when creating or editing an assignment and the SLK Members web part.

I don’t expect this to be used very often, but I can see the occasional use of it.


This is configured in the SlkSettings.xml file i.e. at the site collection + level. To configure it you add a DomainGroupEnumerator element just before any Query elements.

The DomainGroupEnumerator has two attributes:

  1. Type. This is the fully qualified type name of the class which is being plugged in.
  2. Assembly. This is the strong name of the assembly containing the type.
    So for the Do Not Use AD Groups implementation the configuration entry would be:

<DomainGroupEnumerator Type="Microsoft.SharePointLearningKit.DomainGroupEnumeratorNoGroups" Assembly="Microsoft.SharePointLearningKit, Version=, Culture=neutral, PublicKeyToken=24e5ae139825747e"/>

As this is part of the SLK project there is a short version of it which is

<DomainGroupEnumerator Type="None"/>

To use the default implementation, which enumerates AD groups just leave out the DomainGroupEnumerator element or have an empty Type.

Implementing Your Own Domain Group Enumerator

To implement your own version of a Domain Group Enumerator, all you need to do is:

  1. Be using a version of SLK which supports this functionality. i.e. 1.7 onwards, or source code change set 683742a29967 onwards (24 March 2012).
  2. Create a class inheriting from DomainGroupEnumerator.
  3. Override the method EnumerateGroup. The method signature is:

public abstract DomainGroupEnumeratorResults EnumerateGroup(SPUser
domainGroup, SPWeb web, TimeSpan timeRemaining, bool hideDisabledUsers);

The parameters are:

  1. SPuser domainGroup.
  2. SPWeb web: The SPWeb the permission is for. This may be needed to add users to SharePoint if they aren’t already added. Used by the default implementation as not all group members may have accessed SharePoint before. May not be needed for other implementation.
  3. TimeSpan timeRemaining: The time remaining to enumerate all groups. This can be ignored as SLK will check it before enumerating any more groups if there are any. Used by the default implementation to check time elapsed before enumerating nested groups.
  4. bool hideDisabledUsers: Whether to hide disabled members of the group. Primarily used by the default implementation.

The return value is a DomainGroupEnumeratorResults. This has 3 properties which must be set by the implementation:

  1. IncludeGroup. bool. Whether to include the group in the SLK membership. Defaults to true.
  2. Users. List<SPUser>. Add the group members to this list.
  3. Errors. List<string>. Add any errors to this list.

If you want to look at the two included implementation, all the domain group enumerator classes are in the source code in Slk\Dll\enumerateDomainGroups.

Read More