In this series we will look at three different ways of achieving this.
1. Invoke server side code on SharePoint ribbon click using javascript submit
Solution:
Invoke server side code on SharePoint ribbon click using javascript submit
Create a SharePoint 2010 Empty project and an empty element to it. Then add Layouts mapped folder and add application page and javascript file inside it as shown in the following project snapshot.
Paste the following in the elements file:
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<CustomAction
Id="RibbonDemo"
RegistrationType="List"
RegistrationId="100"
Location="CommandUI.Ribbon.ListView">
<CommandUIExtension>
<CommandUIDefinitions>
<CommandUIDefinition
Location="Ribbon.ListItem.Manage.Controls._children">
<Button
Id="Ribbon.ListItem.Manage.Controls.RibbonDemo"
Alt="Ribbon Demo"
Sequence="999"
Image16by16="/_layouts/images/placeholder32x32.png"
Image32by32="/_layouts/images/placeholder32x32.png"
Command="RibbonDemo"
LabelText="Ribbon Demo"
TemplateAlias="o1"
ToolTipTitle="Ribbon Demo"
ToolTipDescription="Ribbon Demo example."/>
</CommandUIDefinition>
</CommandUIDefinitions>
<CommandUIHandlers>
<CommandUIHandler
Command="RibbonDemo"
CommandAction="javascript:RibbonDemo();"
EnabledScript="javascript:RibbonDemoEnable();"/>
</CommandUIHandlers>
</CommandUIExtension>
</CustomAction>
<CustomAction Id="RibbonDemo.Scripts"
Location="ScriptLink"
ScriptSrc="/_Layouts/SharePointRibbonDemo/RibbonDemoScript.js" />
</Elements>
Add the following code in the javascript file:
function RibbonDemo() {
var context = SP.ClientContext.get_current();
var selectedItems = SP.ListOperation.Selection.getSelectedItems(context);
var listId = SP.ListOperation.Selection.getSelectedList();
var itemIds = "";
for (var i = 0; i < selectedItems.length; i++) {
itemIds += selectedItems[i].id + ",";
}
var pageUrl = SP.Utilities.Utility.getLayoutsPageUrl(
'/SharePointRibbonDemo/RibbonDemo.aspx?ids=' + itemIds + '&listId=' + listId);
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", pageUrl);
document.body.appendChild(form);
form.submit();
context.executeQueryAsync(Function.createDelegate(this, this.Success), Function.createDelegate(this, this.Failed));
}
function Success() {
// Specify success statement
}
function Failed(sender, args) {
alert('request failed ' + args.get_message() + 'n' + args.get_stackTrace());
}
function RibbonDemoEnable() {
var context = SP.ClientContext.get_current();
return SP.ListOperation.Selection.getSelectedItems(context).length >= 1;
}
var pageUrl = SP.Utilities.Utility.getLayoutsPageUrl(
'/SharePointRibbonDemo/RibbonDemo.aspx?ids=' + itemIds + '&listId=' + listId);
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", pageUrl);
document.body.appendChild(form);
form.submit();
Finally in the code behind of the aspx page, we can write the server side code:
protected void Page_Load(object sender, EventArgs e)
{
// Get Selected List ID and Item IDs
string listID = Request["listId"].ToString();
String[] itemIdArray = Request["ids"].ToString().Split(new Char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
// Perform some code action here...
}