Tag Archives: SharePoint Design

Using SharePoint Groups

What is a SharePoint group?

A SharePoint group is a group of users which can be used to permission a site. Groups can be re-used around the site collection and can be used to permission, sites, lists, libraries, folders and items. Using SharePoint groups allows the administrator to control access without having to edit individual permissions, only the SharePoint group membership requires editing rather than each permission level.

Creating a SharePoint Group

Select “Site settings” from the SharePoint menu.

SharePoint Group Permissions

Select “People and Groups” from the “Users and Permissions” menu.

SharePoint Group Permissions

Select “Groups” on the left side menu, this will show a list of all the groups on the site collection.

SharePoint Group Permissions

Create a new group by selecting “New Group” from the “New” drop down menu.

SharePoint Group Permissions

Enter a name and description for the new group.

SharePoint Group Permissions

The Group owner has overall control of the group settings and members. This is usually either an administrator or someone you have delegated the running of the group to.

SharePoint Group Permissions

You can decide to keep the membership of the group private to the users in the group or let everyone see the group membership. There is also an option to allow group members to edit the membership of a group. This is great for collaborative sites where members may wish to share with others without having to go to the group owner. It helps remove some of the burden from the group owner and can open up sharing and collaboration without admin intervention.

SharePoint Group Permissions

Membership requests allow users who are not members of the group, the ability to request membership. This can be set to auto-accept which is useful for open groups or the requests can be sent to an email address for approval by the group owner (or members if this option was enabled earlier).

SharePoint Group Permissions

Permission levels can be set when creating the group. Please note that setting permissions here will only apply to the site which you are currently on. It is advised that you create the group without any permissions and then go back into the sites to add relevant permissions to avoid any confusion.

Click “Create” to finish setting up the group.

Adding members to the group

Once the group has been created, you may notice that the only member is the group owner. Additional users can be added by going to the “Add Users” option under the “New” menu.

SharePoint Group Permissions

Enter the name(s) of the members(s) you wish you add to the group. Under advanced options, you will see that the default setting is to send an email to any users added to the group. This is optional and can be deselected. In addition to this, you can customise the personal message in the email invitation for these users.

Note: Active Directory security groups can also be added here if using DirSync (in Office 365)

SharePoint Group Permissions

Click Share to add the users to the group.

Permissioning a site with a SharePoint Group

Once the group has been created, it can be used to permission subsites, lists, libraries, folders and even items. To give the group’s members permissions on a SharePoint site, first navigate to the SharePoint site itself.

Select “Site Settings” from the menu.

SharePoint Group Permissions

Select “Site permissions” from the “Users and Permissions” menu.

SharePoint Group Permissions

Select “Grant Permissions” from the “Permissions” tab.

SharePoint Group Permissions

As you start to type in the name of the group, SharePoint will pick up the group name.

SharePoint Group Permissions

Click “SHOW OPTIONS” to view the permission levels.

Select a permission level from the drop down and decide whether you would like to send an email to the group.

SharePoint Group Permissions

Avoid adding the group to another SharePoint group (this is usually the default option and can over complicate your permissions). Use one of the permission levels available:

  • Read – Can view the site but cannot edit any items or pages
  • Contribute – Can add, edit and delete list items. User cannot create new apps or sites.
  • Design – Users have contribute but in addition, they can also create and delete apps and subsites. Apply themes and designs.
  • Full Control – Users can do anything on the site including change permissions (usually admins only)

There are other permission levels, you can also specify your own. For a full reference of permission levels please see the Microsoft site:

Microsoft Office 365 Support – Permissions

Troubleshooting “this site has not been shared with you”

I’m often asked to solve permission errors in SharePoint. It’s not hard to do with the tools available in SharePoint, you don’t even have to know much about AD especially if you use SharePoint groups.

Ways to permission a SharePoint site:

  • Permission directly against the user – not recommended as a lot of maintenance required when someone joins or leaves the organisation.
  • Use SharePoint Groups – SharePoint groups allow you to manage users within the SharePoint interface, they can be reused all over the site collection
  • Active Directory Security Groups – AD groups might already exist on your domain, these can be used but be aware that SharePoint 2013 caches the membership of these groups for around 2 hours and when using Office 365, DirSync will need to run to replicate these groups in the cloud.

What can be permissioned in SharePoint?

  • Sites – entire subsites
  • Lists – individual lists and libraries such as a document library
  • Folders – folders within a library
  • Items – items within a list or library

SharePoint permissions flow down the site from the root of the site collection unless otherwise changed. If permissions are changed at any level, any items below it will inherit the changed permissions.

SharePoint has a very easy way to check permissions of an individual user, check out my video below on how to use it.



How to create a basic content type

I’ve just created a video guide on creating a simple content type and attaching it to a document library.

You can add custom metadata to a SharePoint list by:

  • Adding columns directly onto the list
  • Using Site Columns (can be reused with other lists)
  • Content Types (can be reused and keeps a set of custom columns together in a content type)

If you decide to use a content type, you will also get the benefits of being able to apply a workflow to the content type (rather than to each list individually). If you are thinking of developing search, content types can be a great way to filter and search for specific types of data in a list. You can also use multiple content types in a list (each with different columns), for example an invoice and a receipt.



Create a simple helpdesk in SharePoint

Below is a quick tutorial on how to create a simple helpdesk/support log in SharePoint online (Office 365) or using the on-premises SharePoint 2013 release. It uses out-of-the-box functionality to create a simple system for users to log and track support issues.

The steps required to create the help desk are:

  • Create a custom list
  • Add additional columns
  • Create list views
  • Create a new item form
  • Set list permissions
  • Configure Alerts
  • Create a notify workflow

Create a custom list
Select “Add an App” from the SharePoint menu

Office 365 menu

Select “Custom List”

SharePoint 2013 App

Give the App a Name

SharePoint 2013 App Custom List
Create additional columns
In the list settings, create some additional columns:

Description (multiple lines of text)*

Status (choice with the options: New, In Progress, Resolution Offered, Closed)*+

Resolution (multiple lines of text)

* Set column as required – force users to enter a value

+ Set default value to “New”

SharePoint App Columns
Create list views
On the list page, select “Create View”

SharePoint 2013 list view

Create a new view based on All Items called “My Open Calls”. This is the default end user view to review their open calls.

Select the following columns:

Title (linked to item)

Status

Created

Uncheck any other columns. Add a filter to show items created by the user and items that do not have the status “Closed”.

Filter 365 list view

Create another view called “My Closed Calls”. Display the following columns:

Title

Status

Filter by the user and items that have the status “Closed”.

Filter SharePoint 2013 View

You may also want to sort these items by newest first to make it easier for the end user to see recently closed items.

Create another view called “All Resolved Calls”. Display the following columns:

Title

Description

Resolution

Created By

Created

This time only add a filter to show items with the status “Closed”.

Filter View

Create another view called “All Open Calls”. Display the following columns:

Title

Description

Status

Resolution

Created

Created By

This time only add a filter to show items without the status “Closed”.

Filter 365

The views “All Open Calls” and “All Resolved Calls” will be used by the resolution team to manage logged issues. The other views will be used by the end user to track their own open issues.

Permission List
At this stage, users with contribute access can add and edit all the logged incidents. This needs to be locked down so users can only edit their own items. To do this, select “Advanced Settings” from the List Settings page.

List Settings

Lock down the Item-level Permissions so that users can only read and edit their own items.

Item Level Permission

Users will Full Control on the list will have access to see and edit all of the items despite the settings above.

Create a new form
Open the site in SharePoint Designer 2013. Using the Site Objects Navigation, find the “Lists and Library” category and select the list.

SharePoint Designer 2013

Create a new Form for the list by selecting “New” in the Forms section.

New Form Advanced Mode

Give the form a new name and select the “New item form” type. Set this as the default form for the selected type.

Form Settings

Right click on the new form and select “Edit in Advanced Mode”

Edit in advanced mode

Locate the table rows in the HTML for the Status and Resolution. Remove these including the start and end tr tag. This will remove the columns from the new form. Save the form, this should now apply to any new items added to the list.

New Form

Set up alerts and workflows
The support team should sign up for alerts on the list so that they are notified when a new issue is added or updated. A simple workflow can be added to the list to notify the end user when their issue has been updated. I will write a blog post on how to do this soon.

Design
Adding icons to a SharePoint page to point directly to the views will make it easier to navigate for the end user and much more attractive to use

List subsites using the JavaScript client object model in SharePoint 2013

SharePoint Office 365 Site Creation JavaScript

To do this, use the script editor web part or the page viewer web part (and put the HTML file in a document library).

To start off, setup the HTML to include jQuery and sp.js (see below).

SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function () {
 //alert('loaded');
});

JQuery functions are used to populate HTML containers on the page.

<div id="tonycontent">
	<!-- Dashboard -->
	<div id="tonydashboard" class="tonycontenttable">
	</div>
</div>

The first function loads the current site. The get_current function returns the current context of the user from which the subsites can be retrieved (see below).

function getSubWebs(){
	clientContext = new SP.ClientContext.get_current();
	web = clientContext.get_web();
    	webCollection = web.getSubwebsForCurrentUser(null);
    	clientContext.load(webCollection);
    	clientContext.executeQueryAsync(onGetSubwebsSuccess, onGetSubwebsFail);
}

If the query is successful it will load the onGetSubwebsSuccess function, otherwise it will run onGetSubwebsFail function.

In the success function, the webCollection variable is looped through to retrieve the URL and the title of each subsite. JQuery functions are then used to append the HTML containers.

function onGetSubwebsSuccess(sender, args){
	jQuery("#tonydashboard").empty();
	var html4 ="<div class='tonycontenttablerow'><div class='tonycontenttabletitle'>Site Name</div><div class='tonycontenttabletitle'>Site URL</div></div>";
	jQuery("#tonydashboard").append(html4);
    var webEnumerator = webCollection.getEnumerator();	
    while (webEnumerator.moveNext()){
        var web = webEnumerator.get_current();
		var webtitle = web.get_title();
		var weburl = web.get_serverRelativeUrl();
        var html3="<div class='tonycontenttablerow'><div class='tonycontenttablecolumn'>" + webtitle + "</div><div class='tonycontenttablecolumn'>" + weburl + "</div></div>";
		jQuery("#tonydashboard").append(html3);
    }
}

Download the full code here

The client object model can also be used to create subsites from templates, permission sites, create lists and much more! This method works on both 365 SharePoint Online and SharePoint 2010 and SharePoint 2013 on-premises.

SharePoint 2013 JavaScript Client Object Model

Client-side RSS feed viewer using JavaScript

There are plenty of server-side RSS feed viewers out there but very little in the case of client-side JavaScript based viewers. Below I will go through the steps of creating a simple JavaScript based RSS feed viewer. Please note that this will only work with RSS feeds on the same domain. JavaScript does not allow cross domain scripting. You may find ways round this by using some of the Google API.

RSS Viewer
Create HTML Container

First begin by creating a HTML div container with a unique ID.

<div id="myDiv"></div>

Make a XML HTTP Request

The following function returns the data from an RSS (XML) page. As far as I am aware there is no way to use this cross domain, so you will have to look for a server-side script to work cross domains.

function httpGet(theUrl) {
			var xmlHttp = null;
			xmlHttp = new XMLHttpRequest();
			xmlHttp.open("GET", theUrl, false);
			xmlHttp.send();
			return xmlHttp.responseXML;
		}
var rssFeedData = httpGet('http://www.tonyishere.co.uk/RSSExample/rss.xml');

Loop through the data and retrieve tags by name

Once this data has been stored in the variable as an object, we can use the “getElementsByTagName” function to pull out a particular tag (title in this case). Looping through all the tags called “title” will go through all of the XML from top to bottom. While looping through the tags, we can store the title and description in arrays to use later.

			var i=0;
			var allTitles = [];
		var allDescriptions = [];
			// loop through all of the items and put them in arrays
			while (rssFeedData.getElementsByTagName("title")[i])
			{
					allTitles[i] = rssFeedData.getElementsByTagName("title")[i];
					allDescriptions[i] = rssFeedData.getElementsByTagName("description")[i];
					flag=i;
					i=i+1;
			}

Loop through the arrays and render the data

Looking at the structure of the XML, you should be able to pick out the child nodes. In this case, each item is the first node (numbering starts from 0).

This can then be rendered as HTML and inserted into the div created earlier. In the example below I have decided to store the description and call an onclick function to show the description.

for (i=0;i<flag;i++){
				titles[i]=allTitles[i].childNodes[0].nodeValue;
				descriptions[i]=allDescriptions[i].childNodes[0].nodeValue;
				document.getElementById('myDiv').innerHTML = newHTML;
				newHTML = document.getElementById('myDiv').innerHTML;
				newHTML = newHTML + "<div class=\"titlearea\" id=\"title" + i + "\" onclick=\"showdesc('" + i + "');\">" + titles[i] +"</div><div id=\"desc" + i + "\"></div>";
				document.getElementById('myDiv').innerHTML = newHTML;
			}

Show the description

When the onclick function to display the description is run, the function below inserts the description stored in the array into the desc div. The array position was called as an argument to the function. This enables us to display the correct description in the div.

function showdesc(idc){
			var idcdesc = "desc" + idc;
			document.getElementById(idcdesc).innerHTML = descriptions[(idc-1)];
		}

Starting point for RSS feed viewer

Click on the link below to see the full code working. This is a very simple example of what can be done with RSS feeds using client-side scripting only. Hope this is of interest, please contact me on twitter for feedback and questions.

RSS Viewer Example

Fixing SharePoint 2010 dynamic menus on the iPad

When using an iPad with the default v4 Master Page in SharePoint 2010, the dynamic drop down menus do not function as expected. When using a mouse, a simple hover over the menu item will drop down the dynamic menu child items (as shown below).

SharePoint 2010 menu on ipad

When using an iPad, iPhone and most other smart phone/tablets device, there is no mouse and no hover over action. When clicking on the parent menu item, the user is taken to that link instead of showing the child items.

To solve this issue (partially), I created some jQuery code to allow the first tap to drop down the menu items and the second tap to take the user to the chosen page.

First I use the jQuery ready function to load my script when the page has fully loaded.

jQuery(document).ready(function() {
});

When the page has finished loading, the type of device needs to be detected. In the example below I have used the iPhone, iPad and iPod devices. There are alternative devices!

if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) || (navigator.userAgent.match(/iPad/i))) {
}

This solution involves using a counter to detect the first tap of a dynamic menu item as a hover over and the second tap as the actual click. First, set the counter to 0.

var countipad=0;

Another handy jQuery function is used to detect when a dynamic menu item is clicked. Using this class “dynamic-children” ensures that only the first click of a drop down menu is cancelled.

jQuery("a.dynamic-children").click(function() {
}

If the click is the first click, the default action (redirect) is prevented. The counter is then incremented ready for the next click.

if(countipad==0){
	event.preventDefault();
	countipad=countipad+1;
}

The full solution is as follows:

jQuery(document).ready(function() {
	if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) || (navigator.userAgent.match(/iPad/i))) {
		var countipad=0;
 		jQuery("a.dynamic-children").click(function() {
			if(countipad==0){
				event.preventDefault();
				countipad=countipad+1;
			}
		});
	}
});

This isn’t a great solution as the second click will always take you to the link. A better solution would detect which link is selected and only redirect on the second click of that particular menu item.

ipad menu SharePoint 2010

Design Manager in SharePoint 2013

There are a number of options available for visual designers and information architects. One of the great new features in SharePoint 2013 is the Design Manager. You can locate this by going to the settings menu and selecting “Design Manager”

Screen 1

Design Manager is a series of pages and links to take you to the design libraries similar to those found in SharePoint 2010. From welcome page you can import wsp packaged designs or pick from a pre-installed master page.

Screen 3

“Manage Device Channels” is a new feature which allows you to change the look and feel of a site based on the client’s device or browser. This is great for optimising the rendering of the page in mobile devices.

Screen 4

The “Upload Design Files” is a link to the _catalogs folder which was also used in SharePoint 2010 and MOSS to store the Master Pages. It recommends that this is mapped as a network drive.

Screen 5

“Editing Master Pages” is a link to the _catalogs folder which was also used in SharePoint 2010 and MOSS to store the Master Pages.

screen 6

“Edit Design Templates” is another new feature in SharePoint 2013. It allows customisation of the way content is displayed. This might be used to customise search results by defining fields but also presentation. More information can be found here http://msdn.microsoft.com/en-us/library/jj163942%28v=office.15%29.aspx

screen 7

“Edit Page Layouts” is another shortcut to a library which was also used in SharePoint 2010 and MOSS. It displays the page layout content types from the master page gallery.

screen 8

The page shown below reminds the designer to publish all of the files before applying the design to the site. A handy link to apply the Master Page is provided.

Create design package allows the design to be exported and used on other sites. This is really useful for taking a design from a development environment to the live site. To create this package previously would have required creating a solution or feature in Visual Studio and deploying it to the server or site collection. This is a handy tool to do this for you.

All of the features below are described in more detail on Microsoft’s site.
http://msdn.microsoft.com/en-us/library/jj163942%28v=office.15%29.aspx

While the design manager is more of a guide than somewhere an experienced designer will actually upload there designs to (SharePoint Designer will be the main tool), it does make the design process clearer and provides some neat tools for the new functionality about to be released in Microsoft SharePoint 2013.

SharePoint 2013 Design Manager

BETT 2012 – Olympia, London

BETT show 2012 Olympia
I will again be attending the BETT 2012 show at Olympia, London on 11th-14th January 2012.

I will be demonstrating SharePoint customisation and integration into schools systems (SIMS, Exchange, Moodle, VLEs, etc..) on Stand H9 in the National Hall.

For more information please visit the following websites: