SharePoint 2013 Check-in / Check-out PDF files using Adobe Acrobat Reader

I get this request once in a while where users wants to checkout PDF document hosted in SharePoint from within Adobe Acrobat Reader or once check-out from SharePoint they want to check that document back in (or save the document) to SharePoint from Adobe Acrobat Reader.

Now if you are using SharePoint 2013 out of the box you may not get this feature. Fortunately there is simple configuration change that you would need to make to have this feature.

On all your SharePoint web front-end servers you would need to edit your DOCICON.xml file and update the PDF mapping to the following.

<Mapping Key=”pdf” Value=”icpdf.png” EditText=”Acrobat Reader” OpenControl=”AdobeAcrobat.OpenDocuments” OpenApp=”AcroRd32″/>

When changing this entry I was reading that it was recommended to perform IISRESET but that is only needed if you need this change to kick in right away. If you can wait then this change does not even require app pool recycle. In my case I had to wait roughly couple of hours (not 100% sure).

Nick Patel also have blogged about this in details if you are looking for additional information.

SharePoint Saturday – New York 2016

Last week, I was at New York speaking at SharePoint Saturday NYC. It was pretty exciting to see more than 600 user attending SharePoint Saturday NYC and also gave me chance to meet many of my speaker friends. The event was at Microsoft office in New York.


I would like to thank everyone who attended my session. I presented on creating SharePoint 2016 farm on Microsoft Azure using Azure Resource Manager (ARM).

http://lanyrd.com/2016/spsnyc/sfbzpz/
It is always amazing to speak at SharePoint Saturday New York since it is one of the biggest SharePoint community event with over 500 attendees every year.

Kudos to all the organisors, sponsors and volunteers for successful event!!!

I look forward to speaking in next year’s SharePoint Saturday NYC.

PowerShell – Querying User Profile Service Application – SharePoint Server 2013

This blog is quick way to show you how you can query your user profile service application for specific user. It is always easy to find user by using the UserName but in case where you do not have username available but the display name available e.g. someone giving you excel file to load data in SharePoint list.

In that case you can use the following script to query the user profile service application using the display name.

Here is the script.

 

Add-PSSnapin microsoft.sharepoint.powershell

$site = Get-SPSite "http://intranet.contoso.com/"

$web = $site.OpenWeb();

$context = Get-SPServiceContext $site;

$profileManager = New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager($context);   

$searchPattern = “USER DISPLAY NAME”;   

$searchResults = $profileManager.Search($searchPattern);

foreach($result in $searchResults)
{
    write-host $result.AccountName;
}

 

Search Results web part not showing all results

Many SharePoint projects uses Search Result Web Part to display data and provide refiners to further filter the result.

As usual to configure that you will drop the Search Result Web Part and provide the query to pull your data. When you test your query you will see that data is returned (if your query is correct) and you will see the result count i.e. number of results.

But when you view the result in real time you will see that the result count does not match. Search Result web part displayed less results than you were expecting.

This is because if search result web part thinks that there are some duplicate data in the results being displayed then it will automatically supress those results.

There are couple of fixes to this.

1) Search result web part settings

When providing the query you can click the Settings tab and select “Don’t remove duplicate option”.

2) Search Result Web Part Export and Import

You can also export your search result web part and find “TrimDuplicates”:true and change it with “TrimDuplicates”:false.

I hope you find this helpful.

Enable ECB menu on non-default column – SharePoint Server 2013

Once in a while you will get this requirement where users want to enable ECB menu on a column which is not default column. E.g. in case of Custom list you want to display ECB menu option on say your own column and not on Title column.

One way to achieve this is by using the following PowerShell script.

One word of caution please make sure you do not enable ECB menu on person or group field type.  For some reason SharePoint does not like that. In case you ran this script on Person or Group field type then simply revert  it and you would get your field data back,.

Here is the script.

Add-PSSnapin Microsoft.SharePoint.PowerShell

$web = Get-SPWeb "http://intranet.contoso.com/";

$list = $web.Lists["LISTTITLE"];

$field = $list.Fields["COLUMN"];

$field.ListItemMenu = $true;

$field.LinkToItemAllowed = [Microsoft.SharePoint.SPField+ListItemMenuState]::Required;

$field.ListItemMenuAllowed = [Microsoft.SharePoint.SPField+ListItemMenuState]::Required;

$field.Update();

$list.Update();

PowerShell to check document library versioning setting

I had this requirement where I had to loop through all the Webs and create a report on how many document libraries do not have versioning enabled.

I found this blog post which actually does something similar but it checks the version size.

http://www.sharepointdiary.com/2013/01/document-versions-size-report-powershell.html

I have updated the script for my requirements and I am sharing with you guys in case if someone had the same requirements.

Add-PSSnapin Microsoft.SharePoint.PowerShell

#Replace the URL with your Web Application

 $WebAppURL = "http://intranet.contoso.com";

 #Get the Web Application

    $WebApp=Get-SPWebApplication($WebAppURL);

    #Write the CSV Header - Tab Separated

 "Site Name`t Site URL `t Library `t Versioning Enabled" | out-file C:\temp\DocLibVersioningReport.csv ;

 #Loop through each site collection

  foreach($Site in $WebApp.Sites)

   {

    #Loop through each site in the site collection

     foreach($Web in $Site.AllWebs)

        {

            #write-host $Web.Title;

            #Loop through  each List

            foreach ($List in $Web.Lists)

            {

                #Get only Document Libraries & Exclude Hidden System libraries

                if ( ($List.BaseType -eq "DocumentLibrary") -and ($List.Hidden -eq $false) )

                {   

                     "$($Web.Title) `t $($Web.Url) `t $($List.Title) `t $($List.EnableVersioning)" | Out-File C:\temp\DocLibVersioningReport.csv -Append ;                    

                }

            }

       $Web.Dispose() ;        

        }

 $Site.Dispose() ;        

    } 

    write-host "Report Generated Successfully!" ;