LH SharePoint SIG

LH SharePoint SIG - Custom
Custom Actions
A custom action represents a Server ribbon, menu, or link customization that
a user can see. Custom actions can be bound to list type, content type, file
type, or programmatic identifier (ProgID).
Possible scopes:
• Farm: Yes
• Web Application: Yes
• Site Collection: Yes
• Web Site: Yes
We will create a custom action associated with the ribbon for a particular
content type at Site scope
Getting Started
• Our action will allow us to copy Wiki Pages from a Wiki Page Library to
another named “Squirrel Wiki Pages”
Create new Visual Studio 2010 Empty SharePoint project
Add New Item – Empty Element – Squirrel Action
Rename Feature to Squirrel Action
Add CustomAction element to elements.xml
Add Layouts folder for image and add image
Deploy and Test
This is a dumb Custom Action since it does not do anything. Lets put some
meat on the bone…
CustomAction Element
• How did I determine RegistrationType and RegistrationId?
– Go To Site Settings/ Site Content Types
– Hover over “Wiki Page” and look at ctype param in the status bar
• How did I determine Locations?
– Default Custom Action Locations and IDs
• How did I determine TemplateAlias?
Smart Custom Action
We will now implement some functionality by specifying some ECMAScript
(javascript) in place of the “Hello Word” stuff that will utilize the
SharePoint Foundation 2010 Managed Client Object Model
The Client Object Model is a set of javascript namespaces and classes that
closely mirror the .NET SharePoint Foundation classes and can be used clientside to interact with the SharePoint Object Model.
This is done by packaging up a series of “commands” and sending them to the
server. The communication is asynchronous and you must specify a
completion routine to capture the “results”.
The tricky part is knowing when to make the asynchronous calls.
Smarter Custom Action
Specifying all of the javascript inline is cumbersome and frankly unappealing
We can specify a javascript file and get it on the page by a “ScriptLink” custom action
One benefit is that it can be modified without reinstalling the feature.
Another is that we can get intellisense for the Client Object Model in Visual Studio. Where
would we be with intellisense and Google!
Intellisense provided by lines
/// <reference path="/_layouts/MicrosoftAjax.js"/>
/// <reference path="/_layouts/SP.debug.js"/>
At top of squirrel.js
A third benefit is that we can debug the script
Smarter Action Steps
• Add Layouts folder and javascript file to folder
• Replace CustomAction element
• Add ScriptSrc Custom Action
Action Handling by Delegate
• The following technique allows handling the command “Server Side”
• We will create a class inherited from WebControl and use it to handle the
• The control will be added to the AdditionalPageHead Delegate control
• The CommandUIHandler will execute a postback that the control will
• Replace the Custom Action element
• Add the SquirrelControl class
• Add reference to Microsoft.SharePoint, System.Web and
• Add a Safe Controls entry
Useful References
Customizing and Extending the SharePoint 2010 Server Ribbon
Server Ribbon XML
Using the SharePoint Foundation 2010 Managed Client Object Model
SPListTemplateType Enumeration