<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">

<channel>
	<title>Richard Willis - SharePoint Learning Kit Coordinator, SalamanderSoft Owner</title>
	
	<link>http://blog.salamandersoft.co.uk</link>
	<description>SalamanderSoft, SharePoint Learning Kit, Microsoft Learning Gateway &amp; SharePoint Development</description>
	<lastBuildDate>Tue, 24 Apr 2012 23:31:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/RichardWillis" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="richardwillis" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Configure Web Applications in SLK 1.7</title>
		<link>http://blog.salamandersoft.co.uk/index.php/2012/04/configure-web-applications-in-slk-1-7/</link>
		<comments>http://blog.salamandersoft.co.uk/index.php/2012/04/configure-web-applications-in-slk-1-7/#comments</comments>
		<pubDate>Tue, 24 Apr 2012 23:31:51 +0000</pubDate>
		<dc:creator>Richard</dc:creator>
				<category><![CDATA[SLK]]></category>
		<category><![CDATA[1.7]]></category>

		<guid isPermaLink="false">http://blog.salamandersoft.co.uk/index.php/2012/04/configure-web-applications-in-slk-1-7/</guid>
		<description><![CDATA[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. [...]]]></description>
			<content:encoded><![CDATA[<p>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.</p>
<p>If a web application has been configured, a site collection can override that by having its own mapping configured.</p>
<p>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.</p>
<p>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.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salamandersoft.co.uk/index.php/2012/04/configure-web-applications-in-slk-1-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SLK stsadm commands Added in 1.7</title>
		<link>http://blog.salamandersoft.co.uk/index.php/2012/04/slk-stsadm-commands-added-in-1-7/</link>
		<comments>http://blog.salamandersoft.co.uk/index.php/2012/04/slk-stsadm-commands-added-in-1-7/#comments</comments>
		<pubDate>Tue, 24 Apr 2012 23:31:11 +0000</pubDate>
		<dc:creator>Richard</dc:creator>
				<category><![CDATA[SLK]]></category>
		<category><![CDATA[1.7]]></category>

		<guid isPermaLink="false">http://blog.salamandersoft.co.uk/index.php/2012/04/slk-stsadm-commands-added-in-1-7/</guid>
		<description><![CDATA[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 &#38; 2010, I’ve so far been trying to keep the codebase the same for both versions which is why I haven’t [...]]]></description>
			<content:encoded><![CDATA[<p>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.</p>
<p>As SLK runs on 2007 &amp; 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.</p>
<p>The commands allow you to configure and list site collections and consist of:</p>
<p><b>slk-configure</b></p>
<p>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.</p>
<p>stsadm -o slk-configure</p>
<p>-url &lt;url&gt;</p>
<p>[-databaseserver &lt;database server name*&gt;]</p>
<p>[-databasename &lt;database name&gt;]</p>
<p>[-createdatabase]</p>
<p>[-instructorpermission &lt;instructor permission name&gt;]</p>
<p>[-learnerpermission &lt;learner permission name&gt;]</p>
<p>[-createpermissions]</p>
<p>[-uploadslksettings &lt;SLK Settings XML file name&gt; | -defaultslksettings]</p>
<p>[-application]</p>
<p>* 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 &#8212; for example, instead of &quot;MyServer&quot;, use </p>
<p>&quot;MyServer;user id=myacct;password=mypassword&quot;.</p>
<p>For security reasons, integrated authentication is strongly recommended.</p>
<p>Only one of -uploadslksettings and -defaultslksettings can be used</p>
<p>-application must be used when configuring a web application rather than a site collection</p>
<p><b></b></p>
<p><b>slk-deletemapping</b></p>
<p>This command allows you to delete an SLK mapping for a site collection or web application. </p>
<p>stsadm -o slk-deletemapping</p>
<p>-guid &lt;site-guid&gt;</p>
<p>Not that you must use the site collection ID. The easiest way to get this would be by slk-enummapping.</p>
<p><b>slk-enummappings</b></p>
<p>This command lists of the SLK mappings in the local farm.</p>
<p>stsadm -o slk-enummappings</p>
<p>An example output is:</p>
<p>http://laptop01 (1c8288b8-ec84-4912-bc55-3569e7626b3a) &#8211;&gt; Server=LAPTOP01;Database=slktest</p>
<p>http://laptop01/sites/gsdt (1eb7c24c-e7cf-4dea-9c3d-c49c7478f359) &#8211;&gt; Server=LAPTOP01;Database=slktest</p>
<p>http://laptop01/sites/slk (25ac1434-a59c-4c78-8cf3-d343f0c79e92) &#8211;&gt; Server=LAPTOP01;Database=SharePointLearningKit</p>
<p>http://laptop01/sites/gdst (e0ee8d39-7076-4d30-bc8f-601850f49ac7) &#8211;&gt; Server=LAPTOP01;Database=SharePointLearningKit2</p>
<p>In this output the first line describes a mapping for a web application, while the other 3 are for individual site collections.</p>
<p><b>slk-getconfiguration</b></p>
<p>This command returns the details of a mapping for a site collection or a web application.</p>
<p>stsadm -o slk-getconfiguration</p>
<p>-url &lt;url&gt;</p>
<p>-guid &lt;guid&gt;</p>
<p>Returns the configuration for a site or web application. </p>
<p>Use either url or guid.</p>
<p>An example output is:</p>
<p>Database server: LAPTOP01</p>
<p>Database name: SharePointLearningKit</p>
<p>Create Database : False</p>
<p>Instructor Permission: SLK Instructor</p>
<p>Learner Permission: SLK Learner</p>
<p>Create Permissions: False</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salamandersoft.co.uk/index.php/2012/04/slk-stsadm-commands-added-in-1-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SLK 1.7 Has a Pluggable Architecture for Domain Group Enumeration</title>
		<link>http://blog.salamandersoft.co.uk/index.php/2012/04/slk-1-7-has-a-pluggable-architecture-for-domain-group-enumeration/</link>
		<comments>http://blog.salamandersoft.co.uk/index.php/2012/04/slk-1-7-has-a-pluggable-architecture-for-domain-group-enumeration/#comments</comments>
		<pubDate>Tue, 24 Apr 2012 23:27:36 +0000</pubDate>
		<dc:creator>Richard</dc:creator>
				<category><![CDATA[SLK]]></category>
		<category><![CDATA[1.7]]></category>

		<guid isPermaLink="false">http://blog.salamandersoft.co.uk/index.php/2012/04/slk-1-7-has-a-pluggable-architecture-for-domain-group-enumeration/</guid>
		<description><![CDATA[I&#8217;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&#8217;t going to be needed by the vast majority of SLK users, but it has allowed me to add an implementation [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;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&#8217;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.</p>
<h2>Reason</h2>
<p>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&#8217;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&#8217;t understand this, and couldn&#8217;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.</p>
<p>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&#8217;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.</p>
<h2>Do Not User Active Directory Groups Implementation</h2>
<p>As part of the implementation I&#8217;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.</p>
<p>I don&#8217;t expect this to be used very often, but I can see the occasional use of it.</p>
<h2>Configuration</h2>
<p>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.</p>
<p>The DomainGroupEnumerator has two attributes:</p>
<ol>
<li>Type. This is the fully qualified type name of the class which is being plugged in.</li>
<li>Assembly. This is the strong name of the assembly containing the type.</li>
</ol>
<ol>So for the Do Not Use AD Groups implementation the configuration entry would be:</ol>
<p>&lt;DomainGroupEnumerator Type=&quot;Microsoft.SharePointLearningKit.DomainGroupEnumeratorNoGroups&quot; Assembly=&quot;Microsoft.SharePointLearningKit, Version=1.3.1.0, Culture=neutral, PublicKeyToken=24e5ae139825747e&quot;/&gt; </p>
<p>As this is part of the SLK project there is a short version of it which is</p>
<p>&lt;DomainGroupEnumerator Type=&quot;None&quot;/&gt;</p>
<p>To use the default implementation, which enumerates AD groups just leave out the DomainGroupEnumerator element or have an empty Type.</p>
<h2>Implementing Your Own Domain Group Enumerator</h2>
<p>To implement your own version of a Domain Group Enumerator, all you need to do is:</p>
<ol>
<li>Be using a version of SLK which supports this functionality. i.e. 1.7 onwards, or source code change set <a href="http://slk.codeplex.com/SourceControl/changeset/changes/683742a29967">683742a29967</a> onwards (24 March 2012).</li>
<li>Create a class inheriting from <a href="http://slk.codeplex.com/SourceControl/changeset/view/2e79640bd77e#Slk%2fDll%2fenumerateDomainGroups%2fdomainGroupEnumerator.cs">DomainGroupEnumerator</a>. </li>
<li>Override the method EnumerateGroup. The method signature is:</li>
</ol>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">abstract</span> DomainGroupEnumeratorResults EnumerateGroup(SPUser domainGroup, SPWeb web, TimeSpan timeRemaining, <span class="kwrd">bool</span> hideDisabledUsers); </pre>
<p></div>
<p>The parameters are:</p>
<ol>
<li>SPuser domainGroup.</li>
<li>SPWeb web: The SPWeb the permission is for. This may be needed to add users to SharePoint if they aren&#8217;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.</li>
<li>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.</li>
<li>bool hideDisabledUsers: Whether to hide disabled members of the group. Primarily used by the default implementation.</li>
</ol>
<p>The return value is a <a href="http://slk.codeplex.com/SourceControl/changeset/view/2e79640bd77e#Slk%2fDll%2fenumerateDomainGroups%2fdomainGroupEnumeratorResults.cs">DomainGroupEnumeratorResults</a>. This has 3 properties which must be set by the implementation:</p>
<ol>
<li>IncludeGroup. bool. Whether to include the group in the SLK membership. Defaults to true.</li>
<li>Users. List&lt;SPUser&gt;. Add the group members to this list.</li>
<li>Errors. List&lt;string&gt;. Add any errors to this list.</li>
</ol>
<p>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.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salamandersoft.co.uk/index.php/2012/04/slk-1-7-has-a-pluggable-architecture-for-domain-group-enumeration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scripting SharePoint Learning Kit Permissions with PowerShell</title>
		<link>http://blog.salamandersoft.co.uk/index.php/2012/03/scripting-sharepoint-learning-kit-permissions-with-powershell/</link>
		<comments>http://blog.salamandersoft.co.uk/index.php/2012/03/scripting-sharepoint-learning-kit-permissions-with-powershell/#comments</comments>
		<pubDate>Thu, 08 Mar 2012 07:28:59 +0000</pubDate>
		<dc:creator>Richard</dc:creator>
				<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[SLK]]></category>

		<guid isPermaLink="false">http://blog.salamandersoft.co.uk/index.php/2012/03/scripting-sharepoint-learning-kit-permissions-with-powershell/</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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. </p>
<p>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. </p>
<p>The script runs from an input csv in the following format:</p>
<p>Site,User,Role    <br />http://laptop01/sites/slk/class1,demo\learner1,SLK Learner     <br />http://laptop01/sites/slk/class1,demo\learner2,SLK Learner     <br />http://laptop01/sites/slk/class1,demo\teacher,SLK Instructor     <br />http://laptop01/sites/slk/class2,demo\teacher,SLK Instructor</p>
<p>For each line in the input file it adds the user to the given site, with the given permission level. </p>
<p>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.</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" class="csharpcode">Add-PSSnapIn Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

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

    $user = $web.EnsureUser($userName)    $roleAssignment = New-Object Microsoft.SharePoint.SPRoleAssignment($user)    $role = $web.RoleDefinitions[$permission]    $roleAssignment.RoleDefinitionBindings.Add($role)<span class="rem">;</span><span class="rem">    $web.RoleAssignments.Add($roleAssignment)</span>}

$csvData = import-csv sitePermissions.csvforeach ($line <span class="kwrd">in</span> $csvData){    $web = Get-SPWeb $line.Site    AddPermission $web $line.User $line.Role    $web.Dispose()}</pre>
<p></div>
</p>
<p>Running this with the sample data above gives the following before and after screenshots on the permissions:</p>
<p><a href="http://blog.salamandersoft.co.uk/images/ScriptingSharePointLearningKitPermission_629A/before.png"><img style="border-right-width: 0px; margin: 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="before" border="0" alt="before" align="left" src="http://blog.salamandersoft.co.uk/images/ScriptingSharePointLearningKitPermission_629A/before_thumb.png" width="244" height="131" /></a><a href="http://blog.salamandersoft.co.uk/images/ScriptingSharePointLearningKitPermission_629A/after.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="after" border="0" alt="after" src="http://blog.salamandersoft.co.uk/images/ScriptingSharePointLearningKitPermission_629A/after_thumb.png" width="244" height="156" /></a> </p>
<p style="clear: both">Notes on the script:</p>
<ol>
<li>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. </li>
<li>Line 1, Add-PSSnapIn ensures that the PowerShell comandlets are added into the current session if not already present. </li>
<li>The actual adding of the permissions is put into a function to break up the script and improve readability and maintainability. </li>
<li>Permissions can only be added to sites which have unique permissions, so if the site doesn&#8217;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. </li>
<li>EnsureUser is used to make sure that the user is added to SharePoint before trying to give them permissions </li>
<li>To change the name of the input file, just change sitePermissions.csv in the script. </li>
<li>It&#8217;s not particularly optimised as it opens a new SPWeb for every line. You could check to see if it&#8217;s a different site on each line and only dispose and create a new one if it is different. </li>
<li>The script will still work if the user&#8217;s permission already exists. </li>
</ol>
<p>This is a simple script suitable for initial setting of SLK permissions. It doesn&#8217;t attempt to remove any permissions if no longer required, or do anything else to the site apart from breaking inheritance. </p>
<p>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&#8217; 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.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salamandersoft.co.uk/index.php/2012/03/scripting-sharepoint-learning-kit-permissions-with-powershell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Documents Web Part Now Has Option to Remove Delete Item</title>
		<link>http://blog.salamandersoft.co.uk/index.php/2012/02/my-documents-web-part-now-has-option-to-remove-delete-item/</link>
		<comments>http://blog.salamandersoft.co.uk/index.php/2012/02/my-documents-web-part-now-has-option-to-remove-delete-item/#comments</comments>
		<pubDate>Thu, 23 Feb 2012 10:56:14 +0000</pubDate>
		<dc:creator>Richard</dc:creator>
				<category><![CDATA[My Documents]]></category>

		<guid isPermaLink="false">http://blog.salamandersoft.co.uk/index.php/2012/02/my-documents-web-part-now-has-option-to-remove-delete-item/</guid>
		<description><![CDATA[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&#8217;s recycle bin. To counter this there is [...]]]></description>
			<content:encoded><![CDATA[<p>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&#8217;s recycle bin.</p>
<p>To counter this there is now an option to show the delete option or not.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/MyDocumentsWebPartCanNowRemoveDeleteOpti_81BD/propertiesMyDocs.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="propertiesMyDocs" border="0" alt="propertiesMyDocs" src="http://blog.salamandersoft.co.uk/images/MyDocumentsWebPartCanNowRemoveDeleteOpti_81BD/propertiesMyDocs_thumb.png" width="238" height="277" /></a> </p>
<p>When this is enabled the delete option is present for files and directories.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/MyDocumentsWebPartCanNowRemoveDeleteOpti_81BD/withDelete.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="withDelete" border="0" alt="withDelete" src="http://blog.salamandersoft.co.uk/images/MyDocumentsWebPartCanNowRemoveDeleteOpti_81BD/withDelete_thumb.png" width="230" height="107" /></a> </p>
<p>When it is disabled the option is not there.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/MyDocumentsWebPartCanNowRemoveDeleteOpti_81BD/noDelete.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="noDelete" border="0" alt="noDelete" src="http://blog.salamandersoft.co.uk/images/MyDocumentsWebPartCanNowRemoveDeleteOpti_81BD/noDelete_thumb.png" width="254" height="90" /></a> </p>
<p>Note that the Show Delete option is only valid if Is Writeable is enabled as well.</p>
<p>By default the Show Delete option is disabled, and so is safe for users by default.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salamandersoft.co.uk/index.php/2012/02/my-documents-web-part-now-has-option-to-remove-delete-item/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint vNext to include Education Component</title>
		<link>http://blog.salamandersoft.co.uk/index.php/2012/02/sharepoint-vnext-to-include-education-component/</link>
		<comments>http://blog.salamandersoft.co.uk/index.php/2012/02/sharepoint-vnext-to-include-education-component/#comments</comments>
		<pubDate>Fri, 03 Feb 2012 11:46:52 +0000</pubDate>
		<dc:creator>Richard</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[SharePoint in Education]]></category>
		<category><![CDATA[SharePoint vNext]]></category>

		<guid isPermaLink="false">http://blog.salamandersoft.co.uk/index.php/2012/02/sharepoint-vnext-to-include-education-component/</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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. </p>
<h2>Summary</h2>
<p>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. </p>
<p>This functionality seems to have some concepts similar to SharePoint Learning Kit (SLK), but then expands it and obviously it&#8217;s built into to SharePoint as a first class component. Whether this is a core part of SharePoint at one of it&#8217;s license levels, or an additional product with or without additional licensing costs is unknown at the moment. </p>
<p>As the document I&#8217;m working from is about the Client Side Object Model access to the educational features so it&#8217;s all a bit of my guess how it all works. It may well all change of course, or even be dropped. </p>
<h2>Core Concepts</h2>
<p>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: </p>
<ol>
<li>Academic Document: &quot;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.&quot; </li>
<li>Education Community: &quot;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.&quot; </li>
</ol>
<p>An education entity is anything to do with the education functionality. </p>
<p>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. </p>
<p>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. </p>
</p>
<h3>Sites </h3>
<p>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. </p>
<p>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. </p>
<p>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&#8217;s the only mention of it I could find. Maybe you would use a base site for storing content for self directed learning. </p>
<p>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. </p>
<p>Archived is an interesting concept for classes/courses from previous years, but there&#8217;s no more mention of it. </p>
</p>
<h2>Notes on Academic Documents</h2>
</p>
<h3>Assignment</h3>
<p>This is a similar concept to an assignment in SLK. </p>
<ul>
<li>You can assign to all members of a community or a subset of them. </li>
<li>It has a start and a due date. No clue as to whether the assignment is available after the due date or not. </li>
<li>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. </li>
<li>The assignment result can be numeric or a grade which are separate objects. </li>
<li>There is a property to show if they need submitting or not, which would handle assignments such as read chapter 3 of your book. </li>
<li>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. </li>
<li>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. </li>
<li>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. </li>
<li>CourseMaterials. A collection of documents associated with the assignment. Looks like you can have multiple supporting documents. </li>
<li>Events. A collection of associated events. </li>
<li>Lesson. The associated lesson for the assignment. </li>
<li>AssignedAssignments. The assignations to students. </li>
</ul>
<h3>AssignedAssignment</h3>
<p>This represents an assignment as assigned to an individual. The concept and most of the properties are similar to SLK. Differences are: </p>
<ul>
<li>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. </li>
<li>Submissions. What the student has actually submitted. There&#8217;s not much information on what this actually is, but when submitted it becomes read only to both students and teachers. </li>
<li>Status. One of Unsubmitted, Submitted or Graded. </li>
</ul>
<h3>Lesson</h3>
<p>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. </p>
<p>I imagine that it will be based around a core document, although what format that is and how it displays is anybody&#8217;s guess. </p>
<h3>Grade</h3>
<p>Assignments can either be marked as a numerical value or be assigned a grade.This have a name and a score &#8211; the score presumably for giving a score across the course. A grade is associated with a course (site). I don&#8217;t know if they can be shared across courses. </p>
<h3>Event</h3>
<p>Represents a scheduled event. I&#8217;m not entirely clear what role this plays. </p>
<p>That was a short summary of the core types in the education component. There are many more, but hopefully it&#8217;s enough to give us an insight a feel for how the component is going to work. </p>
<h2>Package Formats</h2>
<p>The object model has methods for importing Common Cartridge packages. The precise text is &quot;Application-layer request to initiate import of a common cartridge or content packaging file&quot;. So potentially other formats can be used as well. </p>
<p>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&#8217;s basically what Common Cartridge is designed to model. </p>
<p>There is no mention of SCORM in the entire document. However, the object model doesn&#8217;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&#8217;s the most common assignment format (of packaged formats of course) and the entire US military electronic training runs on them. </p>
<h2>Overview</h2>
<p>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. </p>
<p>I&#8217;m really looking forward to getting my hands on it when it&#8217;s released to Beta. </p>
<h3>However, where does this leave SLK? </h3>
<p>Well that all depends on the licensing model. If it&#8217;s free in all versions, then SLK will be pointless for anyone on SharePoint vNext. If there&#8217;s a cost to it, even if it&#8217;s just because it&#8217;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. </p>
<p>Of course, as the concepts seem to be very similar, there&#8217;s a great argument for using SLK now to get used to this type of functionality. After all it&#8217;s not going to be available until late 2012 at best, probably more like 2013. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salamandersoft.co.uk/index.php/2012/02/sharepoint-vnext-to-include-education-component/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Implement Cascading Drop Down For Forms in SharePoint 2010</title>
		<link>http://blog.salamandersoft.co.uk/index.php/2011/11/implement-cascading-drop-down-for-forms-in-sharepoint-2010/</link>
		<comments>http://blog.salamandersoft.co.uk/index.php/2011/11/implement-cascading-drop-down-for-forms-in-sharepoint-2010/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 13:12:37 +0000</pubDate>
		<dc:creator>Richard</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[InfoPath]]></category>

		<guid isPermaLink="false">http://blog.salamandersoft.co.uk/index.php/2011/11/implement-cascading-drop-down-for-forms-in-sharepoint-2010/</guid>
		<description><![CDATA[What are Cascading Drop Downs and why do we want them? Cascading drop downs are where you have linked drop down boxes where the contents of the second drop down depends on the selection of the first one. They are used to target selections and make choosing them much easier. The canonical example is choosing [...]]]></description>
			<content:encoded><![CDATA[<h2>What are Cascading Drop Downs and why do we want them?</h2>
<p>Cascading drop downs are where you have linked drop down boxes where the contents of the second drop down depends on the selection of the first one. They are used to target selections and make choosing them much easier. The canonical example is choosing a city where in the first drop down you choose the county/state and the second drop down is then filtered to the list of cities actually in that county/state.</p>
<h2>SharePoint Support</h2>
<p>SharePoint 2007 didn&#8217;t natively support cascading drop downs in list forms. There were a couple of workarounds which either involve adding a solution onto the server or building a JavaScript version using the SharePoint web services.</p>
<p>However, in SharePoint 2010 Enterprise version, you can implement Cascading Drop Downs out of the box with no code. The 2 features which make this possible are:</p>
<ol>
<li>InfoPath list forms.</li>
<li>Browser based support for the cascading drop downs in InfoPath 2010. </li>
<h2>Background</h2>
<p> In this example I&#8217;m going to implement a system for listing after school activities. The school is split over 3 sites and as part of creating the activity the teacher needs to choose the site the activity is on, which will then allow them to choose the room the activity is in. In addition to this, we&#8217;ll add some finishing touches so that the room value is cleared when the site changes and the room drop down shouldn&#8217;t be enabled until a site has been selected.</ol>
<h2>How to Implement Cascading Drop Downs</h2>
<p>&#160;</p>
<p>Before you begin make sure that the site collection feature &quot;SharePoint Server Enterprise Site Collection features&quot; is activated or you won&#8217;t have support for InfoPath forms.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/enterpriseFeature.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="enterpriseFeature" border="0" alt="enterpriseFeature" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/enterpriseFeature_thumb.png" width="644" height="56" /></a> </p>
<h3>&#160;</h3>
<h3>1. Create the Lists</h3>
<p>&#160;</p>
<p>Firstly you need to create 2 lists to store the sites and the room. So create a custom list called Site and add some values to it, in this case I chosen Centre, East and West. No additional columns are required.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/sites.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="sites" border="0" alt="sites" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/sites_thumb.png" width="237" height="158" /></a> </p>
<p>Next create a custom list called Room and add a lookup column to the Site list. This column should be required and link to the Title column in the site list.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/createSiteColumn.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="createSiteColumn" border="0" alt="createSiteColumn" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/createSiteColumn_thumb.png" width="176" height="244" /></a> </p>
</p>
<p>Next add some rooms to the Room list.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/Room.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="Room" border="0" alt="Room" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/Room_thumb.png" width="244" height="105" /></a> </p>
<p>Now we need to create the actual after school activities list. This can contain whatever columns you require for its use, but also a site a room column which are lookups to the Site and Room lists. Here&#8217;s the list with a couple of entries in.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/activities.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="activities" border="0" alt="activities" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/activities_thumb.png" width="610" height="168" /></a> </p>
<p>Now when we Add a new item you can see that the room drop down contains all the possible values, no matter what the site selection is.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/newActivity.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="newActivity" border="0" alt="newActivity" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/newActivity_thumb.png" width="244" height="181" /></a> </p>
<h3>2. Link the Room Drop Down to the Site Drop Down</h3>
<p>&#160;</p>
<p>Now we need to modify the form so the the room drop down depends on the site drop down. To enable this select the list tab in the ribbon and click Customize Form. For this you need InfoPath 2010 installed on your machine to edit the form. Once the form is published your users do not need InfoPath installed locally.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/customizeForm.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="customizeForm" border="0" alt="customizeForm" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/customizeForm_thumb.png" width="644" height="95" /></a> </p>
<p>Once you click on Customize Form it will open up in InfoPath.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/form.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="form" border="0" alt="form" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/form_thumb.png" width="244" height="164" /></a> </p>
<p>There&#8217;s now several steps to go through to enable the cascading drop downs. In a nutshell you create a new data source pulling from the room list, then add a filter on the Room drop down to only show items from the room list with the same site as that in the Site drop down.</p>
<h4>Create the Data Source</h4>
<p>First of all right click on the Room drop down and select Drop-Down List Properties to bring up the properties for the drop down.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/InitialDropDownProperties.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="InitialDropDownProperties" border="0" alt="InitialDropDownProperties" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/InitialDropDownProperties_thumb.png" width="201" height="244" /></a> </p>
<p>First we need to add a new data source so click on Add next to Data Source,<a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/AddDropDownProperties.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="AddDropDownProperties" border="0" alt="AddDropDownProperties" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/AddDropDownProperties_thumb.png" width="201" height="244" /></a> </p>
<p>and step through the wizard. You want to create a new connection to receive data i.e. the defaults, and select the source of the data to be SharePoint library of list. </p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/ddwizard1.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="ddwizard1" border="0" alt="ddwizard1" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/ddwizard1_thumb.png" width="244" height="172" /></a> <a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/ddwizard2.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="ddwizard2" border="0" alt="ddwizard2" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/ddwizard2_thumb.png" width="244" height="172" /></a></p>
</p>
<p>Next you select the location of the site which as we opened from within SharePoint should be already correctly prefilled, and in the next step select the Room list.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/ddwizard3.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="ddwizard3" border="0" alt="ddwizard3" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/ddwizard3_thumb.png" width="244" height="172" /></a> <a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/ddwizard4.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="ddwizard4" border="0" alt="ddwizard4" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/ddwizard4_thumb.png" width="244" height="172" /></a> </p>
<p>In the next step you need to select the fields you want from the data source. You need to select the ID field as that is the actual value written to the activity room column, the Title column to display and the Site column for the data to filter on. You can sort on any column you want, but in this case only Title makes any sense. You can then choose to store the data in the form template for offline mode, but this generally isn&#8217;t required.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/ddwizard5.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="ddwizard5" border="0" alt="ddwizard5" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/ddwizard5_thumb.png" width="244" height="172" /></a> <a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/ddwizard6.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="ddwizard6" border="0" alt="ddwizard6" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/ddwizard6_thumb.png" width="244" height="172" /></a> </p>
</p>
</p>
<p>Finally you need to choose a name for the data connection. As long as it&#8217;s descriptive and unique it doesn&#8217;t matter what you choose. The default name is the name of the list with a 1 on the end. When you finish you&#8217;ll be taken back to the properties form where the name of the data source will have been changed to the new one you have just created.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/ddwizard7.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="ddwizard7" border="0" alt="ddwizard7" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/ddwizard7_thumb.png" width="244" height="172" /></a> </p>
<h4>Filter the Values</h4>
<p>Next we need to filter the values in the Room drop down based on the selected Site. To start this we click on the button next to the Entries value, then on the Select a Field or Group window click on Filter Data at the bottom.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/filter1.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="filter1" border="0" alt="filter1" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/filter1_thumb.png" width="201" height="244" /></a> <a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/filter2.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="filter2" border="0" alt="filter2" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/filter2_thumb.png" width="213" height="244" /></a> </p>
</p>
<p>To add a filter click the Add button and then select the Filter Conditions. </p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/filter3.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="filter3" border="0" alt="filter3" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/filter3_thumb.png" width="244" height="133" /></a></p>
<p>For the filter we are looking to create one which limits the data to only those rows which have the Site value equal to the selected Site i.e. the site from the main data in the form. To generate this the filter needs to be &quot;Site&quot; &quot;is equal to&quot; &quot;Select a field or Group&quot;. </p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/filter4.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="filter4" border="0" alt="filter4" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/filter4_thumb.png" width="644" height="149" /></a> </p>
</p>
<p>This will pop up another window to Select a Field or Group. You need to change the Fields drop down to Main and then select the data field Site. Finally click OK and the result will display Site in the third drop down in the Specify Filter Conditions window. </p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/filter5.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="filter5" border="0" alt="filter5" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/filter5_thumb.png" width="213" height="244" /></a> <a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/filter6.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="filter6" border="0" alt="filter6" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/filter6_thumb.png" width="244" height="58" /></a> </p>
<p>Click OK to go back to the Filter Data window, OK to go back to the Select a Field or Group window and then OK again to go back to the Drop Down Properties Window.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/filter7.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="filter7" border="0" alt="filter7" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/filter7_thumb.png" width="244" height="133" /></a> </p>
</p>
<p>Finally in the drop down List Box Properties you need to change the Value to d:ID by selecting it via the button to the right. This is because internally the lookup value stored is actually the ID in the lookup table. If you leave it as d:Title you will get an error when you try to save the list item. Once this is done click OK.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/ddFinal.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="ddFinal" border="0" alt="ddFinal" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/ddFinal_thumb.png" width="201" height="244" /></a> </p>
<p>&#160;</p>
<h4>Final Touches</h4>
<p>At this point you can publish the form and you will have a working cascading drop down. When you select a site the room drop down will be populated with the appropriate rooms. However, there are a couple of problems with it. Firstly, the Room value is not cleared when changing the Site. As the room value will not be in the filter for the new site value it will get changed to the id value which will be confusing for your users. Secondly if the Site is not a required field the Room Drop Down is still enabled if there is no Site chosen.</p>
<p>Both of these can be resolved with rules.</p>
<h5>Clear Room Value When Site Changes</h5>
<p>To clear the room value when the site changes you need to add a rule to the site field. In InfoPath select the site field then, from the ribbon use Add Rule | This Field Changes | Set a field&#8217;s Value.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/clear1.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="clear1" border="0" alt="clear1" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/clear1_thumb.png" width="244" height="157" /></a> </p>
<p>Then it&#8217;s simply a case of selecting Room for the Field and leaving the Value blank.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/clear2.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="clear2" border="0" alt="clear2" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/clear2_thumb.png" width="244" height="150" /></a> </p>
<p>Publish the form and test &#8211; It&#8217;s as simple as that.</p>
<h5>Disable Room Drop Down When No Site Selected</h5>
<p>To disable the Room Drop Down again add a rule, but this time you need to add a conditional formatting rule. To add this select the Room field and then from the ribbon select Manage Rules. This will open the Rules side bar. From this side bar select New | Formatting. This will then add the formatting options to the side bar.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/disable1.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="disable1" border="0" alt="disable1" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/disable1_thumb.png" width="244" height="164" /></a> <a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/disable2.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="disable2" border="0" alt="disable2" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/disable2_thumb.png" width="244" height="184" /></a> </p>
<p>Choose a suitable name for the rule then click on the &quot;None&quot; under condition. This will open the Condition window which is very similar to the Filter Condition one before. This time we choose &quot;Site&quot; &quot;is equal to&quot; and &quot;Use a Formula&quot;. The Insert Formula windows pops up and just enter &quot;&quot; for an empty string. </p>
<p><a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/disable3.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="disable3" border="0" alt="disable3" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/disable3_thumb.png" width="244" height="107" /></a> <a href="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/disable4.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="disable4" border="0" alt="disable4" src="http://blog.salamandersoft.co.uk/images/ImplementCascadingDropDownForFormsinShar_D296/disable4_thumb.png" width="244" height="50" /></a> </p>
</p>
<p>Once you click OK to save the condition, just select &quot;Disable this control&quot; in the side bar and we are done. Publish the form and test, this time the room drop down will be disabled when no site has been selected.</p>
</p>
<h2>Conclusion</h2>
<p>SharePoint 2010 Enterprise Edition allows us to easily create powerful InfoPath forms incorporating cascading drop downs without any code or installing any additional solutions onto the server.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salamandersoft.co.uk/index.php/2011/11/implement-cascading-drop-down-for-forms-in-sharepoint-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint Saturday UK 12 Nov 2011</title>
		<link>http://blog.salamandersoft.co.uk/index.php/2011/10/sharepoint-saturday-uk-12-nov-2011/</link>
		<comments>http://blog.salamandersoft.co.uk/index.php/2011/10/sharepoint-saturday-uk-12-nov-2011/#comments</comments>
		<pubDate>Thu, 27 Oct 2011 05:55:51 +0000</pubDate>
		<dc:creator>Richard</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Community]]></category>

		<guid isPermaLink="false">http://blog.salamandersoft.co.uk/index.php/2011/10/sharepoint-saturday-uk-12-nov-2011/</guid>
		<description><![CDATA[There are currently still places available for SharePoint Saturday in November. SharePoint Saturday is a free community event devoted to SharePoint, and this year is being held in Nottingham. There&#8217;s more information at Home &#8211; SharePoint Saturday UK. It&#8217;s got a fantastic line up of speakers and well worth attending if you have any interest [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.salamandersoft.co.uk/images/SharePointSaturdayUK12Nov2011_6101/ImattendingUK11_thumb.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 15px 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="Im-attending-UK11_thumb" border="0" alt="Im-attending-UK11_thumb" align="left" src="http://blog.salamandersoft.co.uk/images/SharePointSaturdayUK12Nov2011_6101/ImattendingUK11_thumb_thumb.png" width="186" height="129" /></a> There are currently still places available for SharePoint Saturday in November. </p>
<p>SharePoint Saturday is a <strong>free</strong> community event devoted to SharePoint, and this year is being held in Nottingham. There&#8217;s more information at <a href="http://www.sharepointsaturday.org/uk/default.aspx">Home &#8211; SharePoint Saturday UK</a>. It&#8217;s got a fantastic line up of speakers and well worth attending if you have any interest in SharePoint, whether an IT Pro, Dev or End User.</p>
<p>I&#8217;m attending so if anyone wants to talk SLK or SharePoint in education, I&#8217;d be happy to meet up.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salamandersoft.co.uk/index.php/2011/10/sharepoint-saturday-uk-12-nov-2011/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SharePoint Learning Kit 1.6 Beta Released</title>
		<link>http://blog.salamandersoft.co.uk/index.php/2011/10/sharepoint-learning-kit-1-6-beta-released/</link>
		<comments>http://blog.salamandersoft.co.uk/index.php/2011/10/sharepoint-learning-kit-1-6-beta-released/#comments</comments>
		<pubDate>Tue, 25 Oct 2011 15:49:28 +0000</pubDate>
		<dc:creator>Richard</dc:creator>
				<category><![CDATA[SLK]]></category>
		<category><![CDATA[1.6]]></category>
		<category><![CDATA[SharePoint Learning Kit]]></category>

		<guid isPermaLink="false">http://blog.salamandersoft.co.uk/index.php/2011/10/sharepoint-learning-kit-1-6-beta-released/</guid>
		<description><![CDATA[I&#8217;ve just released SLK 1.6 to Beta on the CodePlex site. This has actually been ready to go for a while, several months in fact, but I haven&#8217;t managed to find the time for documentation of the new functionality. I&#8217;ve now taken the decision to release it without the documentation so that people can at [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.salamandersoft.co.uk/images/SharePointLearningKit1.6BetaReleased_E8F8/slkIcon.png"><img style="border-right-width: 0px; margin: 10px 10px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="slkIcon" border="0" alt="slkIcon" align="left" src="http://blog.salamandersoft.co.uk/images/SharePointLearningKit1.6BetaReleased_E8F8/slkIcon_thumb.png" width="64" height="64" /></a></p>
<p>I&#8217;ve just released <a href="http://slk.codeplex.com/releases/view/75705">SLK 1.6 to Beta on the CodePlex site</a>. This has actually been ready to go for a while, several months in fact, but I haven&#8217;t managed to find the time for documentation of the new functionality. I&#8217;ve now taken the decision to release it without the documentation so that people can at least start using it and feeding back any problems.</p>
<p>The main changes are:</p>
<ul>
<li>Better handling of not quite fully compliant SCORM content </li>
<li>Textual grading as well as numeric (optional) e.g. ABC type grades </li>
<li>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 &quot;Read chapters 1 &amp; 2 of book y.&quot; </li>
<li>Email alerts. The most requested extra functionality. </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.salamandersoft.co.uk/index.php/2011/10/sharepoint-learning-kit-1-6-beta-released/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Hiding Unexpected Response from Server Error when using SharePoint 2010 Calendar Overlays</title>
		<link>http://blog.salamandersoft.co.uk/index.php/2011/10/hiding-unexpected-response-from-server-error-when-using-sharepoint-2010-calendar-overlays/</link>
		<comments>http://blog.salamandersoft.co.uk/index.php/2011/10/hiding-unexpected-response-from-server-error-when-using-sharepoint-2010-calendar-overlays/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 08:24:07 +0000</pubDate>
		<dc:creator>Richard</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[SharePoint;SharePoint Calendar]]></category>

		<guid isPermaLink="false">http://blog.salamandersoft.co.uk/index.php/2011/10/hiding-unexpected-response-from-server-error-when-using-sharepoint-2010-calendar-overlays/</guid>
		<description><![CDATA[The Calendar Overlays in SharePoint 2010 is a fantastic feature which allows you to display multiple calendars in the same view. This allows you to logically partition your calendar events into separate calendars and view them all together without having to lump them all in one calendar. This makes maintaining the calendars far simpler, especially [...]]]></description>
			<content:encoded><![CDATA[<p>The Calendar Overlays in SharePoint 2010 is a fantastic feature which allows you to display multiple calendars in the same view. This allows you to logically partition your calendar events into separate calendars and view them all together without having to lump them all in one calendar. This makes maintaining the calendars far simpler, especially as each calendar can have it&#8217;s own permissions limiting read and write access to the events. </p>
<p>An example from a school might be:</p>
<table border="0" cellspacing="0" cellpadding="2" width="499">
<tbody>
<tr>
<td valign="top" width="133"><strong>Calendar Name</strong></td>
<td valign="top" width="133"><strong>Read Permissions</strong></td>
<td valign="top" width="231"><strong>Write Permissions</strong></td>
</tr>
<tr>
<td valign="top" width="133">Whole School</td>
<td valign="top" width="133">All</td>
<td valign="top" width="231">Calendar Editors Group</td>
</tr>
<tr>
<td valign="top" width="133">Exams</td>
<td valign="top" width="133">All</td>
<td valign="top" width="231">Calendar Editors Group</td>
</tr>
<tr>
<td valign="top" width="133">Staff</td>
<td valign="top" width="133">Staff</td>
<td valign="top" width="231">Calendar Editors Group</td>
</tr>
</tbody>
</table>
<p>Here&#8217;s a sceenshot of the calendar&#8217;s overlayed in month view. The Whole School events are in green, the Exams in yellow and the staff in blue.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/HidingPermissionsErrorwhenusingSharePoin_64D8/calendarOverlay.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="calendarOverlay" border="0" alt="calendarOverlay" src="http://blog.salamandersoft.co.uk/images/HidingPermissionsErrorwhenusingSharePoin_64D8/calendarOverlay_thumb.png" width="644" height="372" /></a>&#160; This all works great out of the box. The problem comes when you don&#8217;t have permission to one of the calendars. So when a student views this they can see all the events from the Whole School and Exams calendar, but also get the error message &quot;Unexpected response from server&quot;.</p>
<p><a href="http://blog.salamandersoft.co.uk/images/HidingPermissionsErrorwhenusingSharePoin_64D8/unexpectedResponse.png"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="unexpectedResponse" border="0" alt="unexpectedResponse" src="http://blog.salamandersoft.co.uk/images/HidingPermissionsErrorwhenusingSharePoin_64D8/unexpectedResponse_thumb.png" width="309" height="122" /></a> </p>
</p>
<p>This doesn&#8217;t look very good. </p>
<p>Luckily there&#8217;s an easy solution to this. You just need to add the following css to the page. The easiest way is through a content editor web part, either directly in it, or my preferred method is to link to a text file with it in so it can be reused.</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" class="csharpcode"><span class="kwrd">&lt;</span><span class="html">style</span> <span class="attr">type</span><span class="kwrd">=&quot;text/css&quot;</span><span class="kwrd">&gt;</span>.ms-acal-error{    display:none !important;}<span class="kwrd">&lt;/</span><span class="html">style</span><span class="kwrd">&gt;</span></pre>
<p></div>
</p>
<p>This will hide the text and error image from showing so they won&#8217;t know that anything is amiss, or that there is a calendar they don&#8217;t have access to unless they look at the page source.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salamandersoft.co.uk/index.php/2011/10/hiding-unexpected-response-from-server-error-when-using-sharepoint-2010-calendar-overlays/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

