Skip to main content

Add a custom button to Document Library Items

Recently I created a jQuery add-in that was supposed to add a custom button to each document in the document library. I found 2 different approaches for the same.

            1.       Edit XML of the document library in designer.
            2.       Create a J Query add-in that would add a custom button.

I found Approach 1 to be easy to do but it was risky to modify the XML of the Document library. So the only option that I was left with was to create a j Query add-in.

There can be number of requirements for which you may need to add a custom button to document library, lets take an example of adding a custom download a copy button to each item of document library.

Below is the code sample that will add a download a button link to your document library

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script type="text/javascript">
//Declaration
//Position of the button
var buttonPosition = 3; // Value must me greater than 1
var idArray = "";
var siteUrl;
//Executes when document is ready
$(document).ready(function(){
                //Gets Web's absolute url
                siteUrl=_spPageContextInfo.webAbsoluteUrl;
                //Gets url of title link button of item
                idArray = document.getElementsByClassName("ms-listlink");
                //Custom method to add Button to library
                AddCustomButton ();
});
//Add button to each item in library
function AddCustomButton()
{
                var i=0;
                //Fetch Table header row
                $('#onetidDoclibViewTbl0 thead tr').each(function()
                {
                                $(this).find('th').each(function($index){
                               
                                //check position of current th
                                if($index == buttonPosition)
                                {
                                                // Add a blank header so that Headers remain aligned
                                                $(this).after('<th><a unselectable="on"  class="" aria-describedby="Ribbon.Documents.Copies.Download_ToolTip" mscui:controltype="Button" role="button" id="Ribbon.Documents.Copies.Download-Large"></a></th>');
                                }
                                });
                });

                //Try to get library rows
                $('#onetidDoclibViewTbl0 tbody tr').each(function()
                {
                                var isFolder = false;
                {
                                // find column's position
                                $(this).find('td').each(function($index){
                                                var imgTag = $(this).find('img');
                                                if(imgTag != undefined)
                                                {              
                                                                var srcUrl = imgTag.attr('src');
                                                                if(srcUrl != undefined && srcUrl.indexOf("folder.gif") > 0)
                                                                {
                                                                                isFolder=true;
                                                                }
                                                                else
                                                                {
                                                                //if position matches
                                                                                if($index == buttonPosition && isFolder == false)
                                                                                {
                                                                                                //generate "Download a copy" menu option like url
                                                                                                var url = siteUrl + "/_layouts/15/download.aspx?SourceUrl="+idArray[i]
                                                                                               
                                                                                                // set an image button and add above url to it
                                                                                                $(this).after('<td><a unselectable="on" title= Download a Copy href="javascript:;" onclick="window.open(\''+ url + '\')" class="" aria-describedby="Ribbon.Documents.Copies.Download_ToolTip" mscui:controltype="Button" role="button" id="Ribbon.Documents.Copies.Download-Large">Download a Copy'</a></td>');
                                                                                }
                                                                                if($index == buttonPosition && isFolder == true)
                                                                                {
                                                                                                $(this).after('<td><a unselectable="on" title="" href="javascript:;" class="" aria-describedby="Ribbon.Documents.Copies.Download_ToolTip" mscui:controltype="Button" role="button" id="Ribbon.Documents.Copies.Download-Large"></a></td>');
                                                                                }
                                                                }
                                                }
                                });
                }
                // counter to get values from idArray
                i++;
                });
}
</script>


You can use this snippet for number of options that can be added to a document library.

Regards,
Keyur Pandya

Comments

Popular posts from this blog

Business Data Connectivity

I came to a requirement wherein I was supposed to get data from an 3 rd party portal using API’s and then bring them to SharePoint server. The first approach that I finalized was just to make BDC solution that will get data from 3 rd party portal and will deploy it to SharePoint. How to Create BDC solution in SharePoint? I found below link that is having really great description about hot to create and deploy the BDC solution to SharePoint. http://www.c-sharpcorner.com/uploadfile/hung123/creating-business-data-connectivity-service-using-visual-studio-2010/ After creating an POC I came to know that BDC model cannot be deployed on Multi tenant farm. So what can be done next? After some amount of googling I came to know that we can create BDC solution using WCF services also. So I created a WCF service solution that acted as a wrapper that used to fetch data from the portal. We can them publish that service to IIS or Server and use the servic...

Identity client runtime library (IDCRL) did not get a response from the login server.

Recently I was doing some testing with a background PowerShell and encountered a weird error. “Identity client runtime library (IDCRL) did not get a response from the login server”. The error that you might encounter while working with PowerShell. This error is very misleading when it comes to identifying what could go wrong. After doing quite a good amount of research below are the probable causes for the error. Invalid Credentials MFA (Multi-Factor Authentication) Manage security defaults. Solutions Invalid Credentials Check if your credentials are wrong. Especially if you are using variables. MFA (Multi-Factor Authentication) Check if MFA is enabled on the account which you are using. These only affect you badly if you are developing PowerShell for a background Job. Go to Microsoft 365 admin center Users -> Active users -> Select the user -> Manage multifactor authentication -> Select the user -> Disable multi-factor authentication. M...

OneDrive Sharing Report: A Comprehensive Guide

OneDrive Sharing Report Managing and monitoring the sharing permissions of files stored in OneDrive can be a critical task for organizations. This guide provides a step-by-step walkthrough of how to create an Azure AD application with specific permissions, generate a client secret, and use a PowerShell script to retrieve and report the sharing permissions of OneDrive files. By following these steps, you will be able to audit and control file sharing across your organization, ensuring security and compliance. Step 1: Creating an Azure AD Application To get started, you'll need to create an Azure AD application that will allow you to interact with the Microsoft Graph API and retrieve information about users' OneDrive files and sharing settings. Specifically, you need to set the following permissions: Directory.Read.All Directory.ReadWrite.All Files.Read.All ...