Tuesday, July 22, 2014

Execute server side code on Custom Action: 1.Ribbon click using JavaScript submit 2.Open UrlAction in Modal Dialog

Execute server side code on Custom Action: 1.Ribbon click using JavaScript submit



Ribbon->RibbonServerCode->Elements.xml
--------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <CustomAction
    Id="RibbonServerCode"
    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 Server Code"
            Sequence="999"
            Image16by16="/_layouts/Images/Ribbon/Image32x32.jpg"
            Image32by32="/_layouts/Images/Ribbon/Image32x32.jpg"
            Command="RibbonCallServerCode"
            LabelText="Ribbon Server Code"
            TemplateAlias="o1"
            ToolTipTitle="Ribbon Server Code"
            ToolTipDescription="Ribbon server code example."/>
        </CommandUIDefinition>
      </CommandUIDefinitions>
      <CommandUIHandlers>
        <CommandUIHandler
         Command="RibbonCallServerCode"
         CommandAction="javascript:RibbonCallServerCode();"
         EnabledScript="javascript:RibbonEnable();"/>
      </CommandUIHandlers>
    </CommandUIExtension>
  </CustomAction>
  <CustomAction Id="RibbonServerCode.Scripts"
                Location="ScriptLink"
                ScriptSrc="/_Layouts/Ribbon/RibbonServerCode.js" />
</Elements>

Ribbon->Layouts->Ribbon->RibbonServerCode.js
---------------------------------------------------------------
function RibbonCallServerCode() {
    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(
    '/Ribbon/RibbonExecuteServerCode.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() {
}

function Failed(sender, args) {
    alert('request failed ' + args.get_message() + 'n' + args.get_stackTrace());
}

function RibbonEnable() {
    var context = SP.ClientContext.get_current();
    return SP.ListOperation.Selection.getSelectedItems(context).length >= 1;
}

Ribbon->Layouts->Ribbon->RibbonExecuteServerCode.aspx
-------------------------------------------------------------------------------
<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Import Namespace="Microsoft.SharePoint.ApplicationPages" %>
<%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls"
    Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="RibbonExecuteServerCode.aspx.cs"
    Inherits="Ribbon.Layouts.Ribbon.RibbonExecuteServerCode" DynamicMasterPageFile="~masterurl/default.master" %>

<asp:Content ID="PageHead" ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">
    <script type="text/javascript">
        function showAlert(redirect_url) {           
            window.location.replace(redirect_url);
        }
    </script>
</asp:Content>
<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
</asp:Content>
<asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">
    Application Page
</asp:Content>
<asp:Content ID="PageTitleInTitleArea" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea"
    runat="server">
    My Application Page
</asp:Content>


Ribbon->Layouts->Ribbon->RibbonExecuteServerCode.aspx.cs
----------------------------------------------------------------------------------
using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using System.Web;

namespace Ribbon.Layouts.Ribbon
{
    public partial class RibbonExecuteServerCode : LayoutsPageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string listID = HttpContext.Current.Request.QueryString["listId"].ToString();
            String[] itemIdArray = HttpContext.Current.Request.QueryString["ids"].ToString().Split(new Char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

            string redirect_url = SPContext.Current.Web.ServerRelativeUrl + "/lists/" + "ImportDataList";

            Page.ClientScript.RegisterStartupScript(this.GetType(), "Call alert function", "javascript: alert('List Id is " + listID + "');", true);

            Page.ClientScript.RegisterStartupScript(this.GetType(), "Call showAlert function", "showAlert('" + redirect_url + "');", true);
        }
    }
}
====================================================================================
Execute server side code on Custom Action: 2.Open UrlAction in Modal Dialog



Ribbon->RibbonServerCode->Element.xml
-----------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <CustomAction
    Id="RibbonServerCode"
    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 Server Code"
            Sequence="999"
            Image16by16="/_layouts/Images/Ribbon/Image32x32.jpg"
            Image32by32="/_layouts/Images/Ribbon/Image32x32.jpg"
            Command="RibbonCallServerCode"
            LabelText="Ribbon Server Code"
            TemplateAlias="o1"
            ToolTipTitle="Ribbon Server Code"
            ToolTipDescription="Ribbon server code example."/>
        </CommandUIDefinition>
      </CommandUIDefinitions>
      <CommandUIHandlers>
        <CommandUIHandler
         Command="RibbonCallServerCode"
         CommandAction="javascript:OpenPopUpPageWithTitle('{SiteUrl}/_layouts/Ribbon/RibbonExecuteServerCode.aspx?listId={ListId}&amp;ids={ItemId}', RefreshOnDialogClose, 600, 400,'My Custom Action')"
         EnabledScript="javascript:RibbonEnable();"/>
      </CommandUIHandlers>
    </CommandUIExtension>
  </CustomAction>

  <CustomAction Id="RibbonServerCode.Scripts"
                Location="ScriptLink"
                ScriptSrc="/_Layouts/Ribbon/RibbonServerCode.js" />

  <CustomAction Id="Custom.ProvisionGroup"
                  Location="EditControlBlock"
                  Title="My Custom Action"
                  RegistrationType="List"
                  RegistrationId="100"
                 ImageUrl="/_layouts/images/editicon.gif">
    <UrlAction Url="javascript:OpenPopUpPageWithTitle('{SiteUrl}/_layouts/Ribbon/RibbonExecuteServerCode.aspx?listId={ListId}&amp;ids={ItemId}', RefreshOnDialogClose, 600, 400,'My Custom Action')"/>
  </CustomAction>

</Elements>

Ribbon->Layouts->Ribbon->RibbonServerCode.js
--------------------------------------------------------------------
function RibbonEnable() {
    var context = SP.ClientContext.get_current();
    return SP.ListOperation.Selection.getSelectedItems(context).length >= 1;
}

Ribbon->Layouts->Ribbon->RibbonExecuteServerCode.aspx
--------------------------------------------------------------------------------------
<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Import Namespace="Microsoft.SharePoint.ApplicationPages" %>
<%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls"
    Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="RibbonExecuteServerCode.aspx.cs"
    Inherits="Ribbon.Layouts.Ribbon.RibbonExecuteServerCode" DynamicMasterPageFile="~masterurl/default.master" %>

<asp:Content ID="PageHead" ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">
    <%-- <script type="text/javascript">
     function showAlert(redirect_url) {
         window.location.replace(redirect_url);
     }
    </script>--%>
</asp:Content>
<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
    <asp:Button ID="btnClose" runat="server" Text="Close" OnClick="btnClose_Click" />
</asp:Content>
<asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">
    Application Page
</asp:Content>
<asp:Content ID="PageTitleInTitleArea" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea"
    runat="server">
    My Application Page
</asp:Content>

Ribbon->Layouts->Ribbon->RibbonExecuteServerCode.aspx.cs
----------------------------------------------------------------------------------------
using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using System.Web;

namespace Ribbon.Layouts.Ribbon
{
    public partial class RibbonExecuteServerCode : LayoutsPageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string listID = HttpContext.Current.Request.QueryString["listId"].ToString();
            String[] itemIdArray = HttpContext.Current.Request.QueryString["ids"].ToString().Split(new Char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
            string redirect_url = SPContext.Current.Web.ServerRelativeUrl + "/lists/" + "ImportDataList";
            Page.ClientScript.RegisterStartupScript(this.GetType(), "Call alert function", "javascript: alert('List Id is " + listID + "');", true);
            //Page.ClientScript.RegisterStartupScript(this.GetType(), "Call showAlert function", "showAlert('" + redirect_url + "');", true);
        }

        protected void btnClose_Click(object sender, EventArgs e)
        {
            ClosePopUp();
        }

        //Close popup windows
        private void ClosePopUp()
        {
            this.Context.Response.Write("<script type='text/javascript'>window.frameElement.commitPopup();</script>");
            this.Context.Response.Flush();
            this.Context.Response.End();
        }
    }
}

8 comments:

  1. Information was good,i like your post.
    Looking forward for more on this topic
    Lahir

    ReplyDelete
  2. Wooh this is very informative article. Thank you so much..!
    Rakesh

    ReplyDelete
  3. It is incredible and informative knowledge. Impressive.
    Kiran

    ReplyDelete
  4. This article is very good.informative style.. brilliant piece of advice.
    Manideep

    ReplyDelete
  5. Wonderful illustrated information. I thank you about that. No doubt it will be very useful for my future projects. Would like to see some other posts on the same subject! offshore software outsourcing

    ReplyDelete
  6. Wow i can say that this is another great article as expected of this blog.Bookmarked this site.. http://45.77.41.36/

    ReplyDelete
  7. Thanks for taking the time to discuss that, I feel strongly about this and so really like getting to know more on this kind of field. Do you mind updating your blog post with additional insight? It should be really useful for all of us. realistic robot cat

    ReplyDelete
  8. Your work here on this blog has been top notch from day 1. You've been continously providing amazing articles for us all to read and I just hope that you keep it going on in the future as well. Cheers! https://serverbrowse.com/

    ReplyDelete