SharePoint 2013: Retrieve Popular items Programmatically In SharePoint using SOM
Introduction
In this article, we’ll see how to retrieve popular items based on view counts programmatically using SOM.
Prerequisite
Make sure that you have enabled the reporting feature under site collection features in the site to see the popular documents.
Code
The following lines of code retrieve the data and update the results in a Data table.
using System;
using System.Linq;
using Microsoft.SharePoint;
using Microsoft.Office.Server.Search.Query;
using System.Data;
namespace GetPopularItems
{
class Program
{
static void Main(string[] args)
{
DataTable table = new DataTable();
table.Columns.Add("ItemID", typeof(Int32));
table.Columns.Add("Name", typeof(String));
table.Columns.Add("Recent", typeof(Int32));
table.Columns.Add("Views", typeof(Int32));
string siteurl = "http://SiteURL/";
string docLibURL = "http://SiteURL/Shared%20Documents";
using (SPSite siteCollection = new SPSite(siteurl))
{
using (SPWeb rootWeb = siteCollection.OpenWeb())
{
KeywordQuery keywordQuery = new KeywordQuery(siteCollection);
var properties = keywordQuery.SelectProperties;
properties.Add("ListItemID");
keywordQuery.QueryText = "Path:"+ docLibURL;
SearchExecutor searchExecutor = new SearchExecutor();
ResultTableCollection resultTableCollection = searchExecutor.ExecuteQuery(keywordQuery);
var resultTables = resultTableCollection.Filter("TableType", KnownTableTypes.RelevantResults);
ResultTable resultTable = resultTables.FirstOrDefault();
DataRowCollection dataTable = resultTable.Table.Rows;
for (var i = 1; i < dataTable.Count; i++)
{
DataRow datarowObj = table.NewRow();
datarowObj["ItemID"] = resultTable.Table.Rows[i][(resultTable.Table.Columns["ListItemID"]).Ordinal];
datarowObj["Name"] = resultTable.Table.Rows[i][(resultTable.Table.Columns["Path"]).Ordinal];
datarowObj["Recent"] = resultTable.Table.Rows[i][(resultTable.Table.Columns["ViewsRecent"]).Ordinal];
datarowObj["Views"] = resultTable.Table.Rows[i][(resultTable.Table.Columns["ViewsLifeTime"]).Ordinal];
table.Rows.Add(datarowObj);
}
}
}
}
}
}