BETT Show 2013

January 30th, 2013 Richard No comments

It’s that time of the year again and the BETT show is upon us. It’s the largest technical education show in the world and this year has moved to new premises in ExCel which I’m looking forward to seeing.

This year, due to birthday conflicts, I’m only down for two days, Wednesday and Friday. So if you want to have a quick chat or coffee, drop me an email, tweet or phone call and we can meet up and have a quick chat about our products, integration or SharePoint.

Hope to see you there.

Richard

Categories: Uncategorized Tags:

SalamanderSoft Is Hiring!–SharePoint, ASP.net or C# Developer

December 17th, 2012 Richard No comments

Job Description

We are looking for an experienced SharePoint, ASP.NET or C# Developer to take over responsibility for our codebase and development procedures. This will be a HOME based role which could be FULL or PART time for the right candidate and with considerable autonomy. Salary will very much depend on the experience of the candidate, but our budget range is likely to be £25,000 to £60,000.

Our product set is written in C# using agile methodologies and has a heavy focus on SharePoint (2007, 2010 and 2013). I am looking for someone who will take responsibility for running the code-base and development process. As well as being a great programmer, I will be expecting you to be able to analyse our current processes, suggest improvements and implement them. You will have significant autonomy and be able to drive best-practices and processes. Preferably you will have experience of test-driven development, agile methodologies, design patterns and refactoring – or a desire to learn them.

The mind-set we are looking for is someone who has a hunger to learn and improve their skills. Although we will provide training time & budget, we are looking for someone whose interest in developing isn’t just a 9-5 job. We will not expect you to work outside your hours, but I would expect you to be the type of person who looks to increase their skills in their own-time e.g. reading blogs, playing with new versions of products etc. These wouldn’t necessarily be directly related to what you are doing day-to-day, just the mind-set we are looking for.

This role could be full-time or part-time for the right candidate – the quality of the candidate is the main factor. I’d rather have an excellent .net developer, than a mediocre SharePoint one. As this is a home-based role, you will need to be comfortable and effective working from home. Although home-working sounds great it is not for everybody!

As SalamanderSoft is a small company, although your main focus will be on development, you will undoubtedly need to perform other tasks as well, especially when other team members are unavailable. You need be able to use your initiative and get things done. It is highly likely that you will need to work with customers so you will need to be personable and happy doing this. The customer is always right! You will also have a history of delivering successful projects as well as be able to juggle several at the same time.

Any open source contributions will be looked on favourably.

Skills & Requirements

.Net Development (C#)
ASP.Net
SharePoint if possible
Test Driven Development

About SalamanderSoft Ltd

SalamanderSoft is a small but growing software house providing integration and SharePoint products and services to the education sector in the UK. We are specialists in integrating systems and enabling SharePoint as a learning tool.

As part of our growth, we are now looking for a .Net developer to design, develop and implement our integration and SharePoint products. To date, I have been responsible for the whole business including all development, installation and support work. I am now looking for someone to take on the development work.

If you are interested in applying please send your CV with covering letter and availability to jobs@salamandersoft.co.uk and include where you saw this job advertised. Benefits and salary will depend on the experience of the candidate. We are looking for UK based applicants and you must be legally entitled to work in the UK. Due to the nature of the sector we work in we require all employees to be CRB checked.
No agents please, any agents applying will be blacklisted.

Categories: Jobs Tags:

How To Enable The SharePoint Learning Kit Feature On All Sites In A Site Collection

November 13th, 2012 Richard 2 comments

Sometimes you want to be able to assign work from anywhere within your site collection. For the E-Learning Actions custom action to be added to a document library you need to enable the SharePoint Learning Kit feature on that site, so to enable it everywhere you need to enable the feature on all sites.

To do this in SharePoint 2010 all you need is a simple PowerShell script which iterates through all the sites and then enables the feature if it is not already enabled. The following script will do that for you. You will need to change the url value to reference your site collection, save in a .ps1 file and then run from the SharePoint 2010 Management Shell.

$url = "http://urlOfSiteCollection"
$site = Get-SPSite $url
$featureId = "00057002-c978-11da-ba52-00042350e42e"
$featureName = "SharePointLearningKit"
$site.Urlforeach ($web in $site.AllWebs)
{
    # Output the site url for debugging purposes
    $web.Url
    # Only enable if not already enabled
    if (!$web.Features[$featureId])
    {
        # Output debugging message
        "Enabling..."
        Enable-SPFeature $featureName -Url $web.Url
    }
}

You can also use this for other features, just by replacing the feature id and name with the appropriate values. To find these look in

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\FEATURES

The feature name is the name of the folder in here and the id is in the feature.xml file in that folder.

SharePoint Conference 2012

November 12th, 2012 Richard No comments

spc2012

I’m currently at the SharePoint Conference 2012 in Las Vegas, which is just getting started. I’m really excited to learn more about the new features and how they can be used in education.

If anyone wants to meet up for a chat about SharePoint Learning Kit or anything else we do in education drop me an email or tweet me (@rpwillis) and we’ll arrange a meeting.

Categories: SharePoint Tags:

Configure Web Applications in SLK 1.7

April 25th, 2012 Richard 4 comments

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.

Categories: SLK Tags: ,

SLK stsadm commands Added in 1.7

April 25th, 2012 Richard 1 comment

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:

slk-configure

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>]

[-createdatabase]

[-instructorpermission <instructor permission name>]

[-learnerpermission <learner permission name>]

[-createpermissions]

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

[-application]

* 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

slk-deletemapping

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.

slk-enummappings

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.

slk-getconfiguration

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

Categories: SLK Tags: ,

SLK 1.7 Has a Pluggable Architecture for Domain Group Enumeration

April 25th, 2012 Richard No comments

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.

Reason

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.

Configuration

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=1.3.1.0, 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.

Categories: SLK Tags: ,

Scripting SharePoint Learning Kit Permissions with PowerShell

March 8th, 2012 Richard No comments

If you are using SLK with more than a few sights then provisioning the permissions becomes either very time consuming or impossible by hand. A typical UK secondary school will have between 700 to 1500 distinct classes, and to use SLK to its fullest extent then each of these will need a site with unique permissions. So once you have finished any trial/prototype you will need to script the setting up of SLK Permissions.

The following is a simple proof of concept script to initially set the SLK permissions on a site. It will add permissions for specified Active Directory users or groups to specified existing sites in SharePoint. You could easily extend it to create sites by checking to see if the site exists first, and if not running New-SPWeb.

The script runs from an input csv in the following format:

Site,User,Role
http://laptop01/sites/slk/class1,demo\learner1,SLK Learner
http://laptop01/sites/slk/class1,demo\learner2,SLK Learner
http://laptop01/sites/slk/class1,demo\teacher,SLK Instructor
http://laptop01/sites/slk/class2,demo\teacher,SLK Instructor

For each line in the input file it adds the user to the given site, with the given permission level.

To use save the following PowerShell as a ps1 file, create an input csv file called sitePermissions.csv in the same directory and run the script.

Add-PSSnapIn Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

function AddPermission($web, $userName, $permission){    # Break inheritance if required. Argument is true if copy existing permissions or false to strip all    # permissions    if ($web.HasUniqueRoleAssignments -eq $false)    {        $web.BreakRoleInheritance($true)    }

    $user = $web.EnsureUser($userName)    $roleAssignment = New-Object Microsoft.SharePoint.SPRoleAssignment($user)    $role = $web.RoleDefinitions[$permission]    $roleAssignment.RoleDefinitionBindings.Add($role);    $web.RoleAssignments.Add($roleAssignment)}

$csvData = import-csv sitePermissions.csvforeach ($line in $csvData){    $web = Get-SPWeb $line.Site    AddPermission $web $line.User $line.Role    $web.Dispose()}

Running this with the sample data above gives the following before and after screenshots on the permissions:

beforeafter

Notes on the script:

  1. There is no error handling so if your input in incorrect e.g. typos in your site, user name or roles, you will get screens of red error messages.
  2. Line 1, Add-PSSnapIn ensures that the PowerShell comandlets are added into the current session if not already present.
  3. The actual adding of the permissions is put into a function to break up the script and improve readability and maintainability.
  4. Permissions can only be added to sites which have unique permissions, so if the site doesn’t already have permissions it breaks them and can either copy the existing conditions, or start from none depending on the value of the argument passed to BreakRoleInheritance.
  5. EnsureUser is used to make sure that the user is added to SharePoint before trying to give them permissions
  6. To change the name of the input file, just change sitePermissions.csv in the script.
  7. It’s not particularly optimised as it opens a new SPWeb for every line. You could check to see if it’s a different site on each line and only dispose and create a new one if it is different.
  8. The script will still work if the user’s permission already exists.

This is a simple script suitable for initial setting of SLK permissions. It doesn’t attempt to remove any permissions if no longer required, or do anything else to the site apart from breaking inheritance.

For a more comprehensive solution which can completely provision a set of sites, including setting any setting on a site, adding and removing permissions and automatically adding teachers’ sites to their list when assigning permissions, as well as a multitude of other functionality, then please investigate our managed service Salamander SharePoint. This will do all this and more.

Categories: PowerShell, SLK Tags: ,

My Documents Web Part Now Has Option to Remove Delete Item

February 23rd, 2012 Richard No comments

The delete option in the My Documents and My Shared Documents has been causing some users some problems. Because it is accessing the home directories over the network, when a user deletes a file, it is gone. It does NOT go into either their Recycle Bin or SharePoint’s recycle bin.

To counter this there is now an option to show the delete option or not.

propertiesMyDocs

When this is enabled the delete option is present for files and directories.

withDelete

When it is disabled the option is not there.

noDelete

Note that the Show Delete option is only valid if Is Writeable is enabled as well.

By default the Show Delete option is disabled, and so is safe for users by default.

Categories: My Documents Tags:

SharePoint vNext to include Education Component

February 3rd, 2012 Richard 1 comment

Note: This is all based on preliminary documentation and could all change and so the following is pretty much just speculative. The information below is all from publically released sources. It may well be dropped before final release.

Summary

Earlier this week, preliminary documentation was released for the next version of SharePoint. One of the really exciting features from our point of view is a new educational component. Buried away in the mass of documentation is a document about the Client Side Object Model access to the educational features.

This functionality seems to have some concepts similar to SharePoint Learning Kit (SLK), but then expands it and obviously it’s built into to SharePoint as a first class component. Whether this is a core part of SharePoint at one of it’s license levels, or an additional product with or without additional licensing costs is unknown at the moment.

As the document I’m working from is about the Client Side Object Model access to the educational features so it’s all a bit of my guess how it all works. It may well all change of course, or even be dropped.

Core Concepts

Reading between the lines it looks like everything is stored in standard SharePoint lists and sites, rather than a separate database like SLK. There seem to be 2 core concepts:

  1. Academic Document: "An education entity that represents any document stored in a SharePoint library for a course. An academic document includes, but is not limited to, lessons, assignments, submissions, events, and grades."
  2. Education Community: "Represents an academic collaboration site (2) for a course. An education community includes, but is not limited to, courses and study groups, and also includes a collection of education entities."

An education entity is anything to do with the education functionality.

My reading of this is that the teacher and learner roles are going to be controlled by access to SharePoint sites, whether this is custom permission roles as in SLK, or some other mechanism linked to the site is unclear.

Then all the artefacts associated with learning are going to be items in lists and/or document libraries. This makes a lot of sense as it makes transitioning to the cloud and Office 365 vNext, much easier. One of the things which stops SLK working in Office 365 is the necessity for an additional database, and one of the ways I could see round that was to rework it to run off lists rather that a DB, which is obviously a huge amount of work.

Sites

So, just like SLK, it looks like the groupings are based around sites in SharePoint, where these are defined as Education Community and a sub-type of that called Course.

A Course looks like the type of site you would normally use as it has the associated entities you would expect to teach with such as assignments, lessons, grades, events, documents and more.

The base community site really just has memberships so is probably just used as a building block in the object model to build other types of communities off. Although study groups are mentioned above, that’s the only mention of it I could find. Maybe you would use a base site for storing content for self directed learning.

Finally, an education community can have a status of Planning, Active, InActive or Archived. It looks like the students only get permissions when the status changes to Active, and the site turns read only when changed to InActive.

Archived is an interesting concept for classes/courses from previous years, but there’s no more mention of it.

Notes on Academic Documents

Assignment

This is a similar concept to an assignment in SLK.

  • You can assign to all members of a community or a subset of them.
  • It has a start and a due date. No clue as to whether the assignment is available after the due date or not.
  • It has a format which is one of None, Document, Quiz and NonDigital. Does this mean that there will be a quiz creation tool built in? My guess is that it does and that packaged content such as SCORM packages will be a document type.
  • The assignment result can be numeric or a grade which are separate objects.
  • There is a property to show if they need submitting or not, which would handle assignments such as read chapter 3 of your book.
  • There is a sequence property which specifies the order in which it is used for content delivery. Presumably this allows you to chain assignments together to create a course delivery structure.
  • Status. An assignment has various statuses it goes through: Unassigned, Assigned, Grading Started, Grading Published. This seems very similar to how SLK handles it, just more explicit. Category.
  • An assignment can have a category. These look to be specific to a community (site) and have a weighting, which must be used in giving an overall grade for the course.
  • CourseMaterials. A collection of documents associated with the assignment. Looks like you can have multiple supporting documents.
  • Events. A collection of associated events.
  • Lesson. The associated lesson for the assignment.
  • AssignedAssignments. The assignations to students.

AssignedAssignment

This represents an assignment as assigned to an individual. The concept and most of the properties are similar to SLK. Differences are:

  • Documents. These are of type PersonalMaterials which are presumably documents personal to the student and no one else can access, except potentially the teadher. Must be a similar concept to the SLK drop box.
  • Submissions. What the student has actually submitted. There’s not much information on what this actually is, but when submitted it becomes read only to both students and teachers.
  • Status. One of Unsubmitted, Submitted or Graded.

Lesson

This looks fairly self explanatory. It basically has a name, description and sequence. It can have assignments, documents, events, child lessons and a parent lesson.

I imagine that it will be based around a core document, although what format that is and how it displays is anybody’s guess.

Grade

Assignments can either be marked as a numerical value or be assigned a grade.This have a name and a score – the score presumably for giving a score across the course. A grade is associated with a course (site). I don’t know if they can be shared across courses.

Event

Represents a scheduled event. I’m not entirely clear what role this plays.

That was a short summary of the core types in the education component. There are many more, but hopefully it’s enough to give us an insight a feel for how the component is going to work.

Package Formats

The object model has methods for importing Common Cartridge packages. The precise text is "Application-layer request to initiate import of a common cartridge or content packaging file". So potentially other formats can be used as well.

The import looks like it will import it into a specific Course (site) and create lessons based on the content, which makes sense to me as that’s basically what Common Cartridge is designed to model.

There is no mention of SCORM in the entire document. However, the object model doesn’t seem to cover actually performing the assignment as such, so any package player would seem to be out of scope of the Client Object Model. I would be highly surprised if SCORM packages were not supported given that it’s the most common assignment format (of packaged formats of course) and the entire US military electronic training runs on them.

Overview

This looks like a fantastic addition to SharePoint for educators. First class support for a learning environment built in to SharePoint with features above and beyond what SLK delivers.

I’m really looking forward to getting my hands on it when it’s released to Beta.

However, where does this leave SLK?

Well that all depends on the licensing model. If it’s free in all versions, then SLK will be pointless for anyone on SharePoint vNext. If there’s a cost to it, even if it’s just because it’s in a higher edition to that which you have licensed, then SLK may well continue to be a useful tool, especially if you need to play SCORM packages.

Of course, as the concepts seem to be very similar, there’s a great argument for using SLK now to get used to this type of functionality. After all it’s not going to be available until late 2012 at best, probably more like 2013.