Reputation: 157
I want to Create a Windows Application that
Display :
all Web Application,
Sites Collection of Each web Applications,
Sites of Each Site Collection,
Sub-Sites of Each Sites,
All lists-Libraries of Each Site and Sub-Sites in Tree-view
here i don't want to Give any Static URL, on Application Start up That All Information Filled Automatically in Tree-view if SharePoint is Installed on that Computer.
Is this Possible ? if yes then how ?
Upvotes: 1
Views: 10382
Reputation: 157
.Net Managed Client Object Model: Fetch All Webs, Libraries, Items
In SharePoint 2010, we have 3 client object model.
Today, I am presenting .NET Managed Client Object Model to retrieve all webs, libraries, items from SharePoint.
Prerequisites References for your desktop application:
1. Microsoft.SharePoint.Client.dll
2. Microsoft.SharePoint.Client.Runtime.dll
My Custom Classes to feel like we are working on SharePoint Server Object model:
public class SPWeb
{
public string WebGUID { get; set; }
public string Title { get; set; }
public string ServerRelativeUrl { get; set; }
public string ParentType { get; set; }
public SPBase Parent { get; set; }
}
public class SPList
{
public string ListGUID { get; set; }
public string Title { get; set; }
public string ParentWebUrl { get; set; }
public string RootFolderServerRelativeUrl { get; set; }
}
public class SPFolder
{
public string ID { get; set; }
public string UniqueID { get; set; }
public string Name { get; set; }
public string Title { get; set; }
public string ParentWebUrl { get; set; }
public string ListName { get; set; }
public string ServerRelativeUrl { get; set; }
public string ParentFolderServerRelativeUrl { get; set; }
}
public class SPListItem
{
public string ID { get; set; }
public string Name { get; set; }
public string Title { get; set; }
public string ServerRelativeUrl { get; set; }
public string Modified { get; set; }
public string ModifiedBy { get; set; }
public string CreatedBy { get; set; }
public string Size { get; set; }
public string Created { get; set; }
public string UniqueId { get; set; }
public string ListName { get; set; }
}
Methods which is used to fetch Webs / libraries / Items:
public List<SPWeb> GetAllWebs(string webURL)
{
var webColl = new List<SPWeb>();
try
{
var currentWeb = _ctx.Site.OpenWeb(webURL);
var allWebs = currentWeb.Webs;
var webCollection = _ctx.LoadQuery(allWebs.Include(web => web.Title,
web => web.Id, web => web.ServerRelativeUrl));
_ctx.ExecuteQuery();
webColl.AddRange(webCollection.Select(web => new SPWeb
{
Title = web.Title,
WebGUID = web.Id.ToString(),
ServerRelativeUrl = web.ServerRelativeUrl
}));
}
catch (Exception ex)
{
// error log
}
return webColl;
}
public List<SPList> GetAllLibraries(string webURL)
{
var listColl = new List<SPList>();
try
{
var currentWeb = _ctx.Site.OpenWeb(webURL);
var query = from list in currentWeb.Lists
where list.BaseType == BaseType.DocumentLibrary
select list;
var AllLists = currentWeb.Lists;
var listCollection = _ctx.LoadQuery(query.Include(myList => myList.Title,
myList => myList.Id,
myList => myList.RootFolder.ServerRelativeUrl,
myList => myList.ParentWebUrl,
myList => myList.Hidden,
myList => myList.IsApplicationList));
_ctx.ExecuteQuery();
listColl.AddRange(from list in listCollection
where !list.Hidden
select new SPList
{
Title = list.Title,
ListGUID = list.Id.ToString(),
RootFolderServerRelativeUrl = list.RootFolder.ServerRelativeUrl,
ParentWebUrl = list.ParentWebUrl
});
}
catch (Exception ex)
{
// error log
}
return listColl;
}
public List<SPFolder> GetAllFolder(string webURL, string listName, string folderName)
{
var itemColl = new List<SPFolder>();
try
{
var currentWeb = _ctx.Site.OpenWeb(webURL);
var currentList = currentWeb.Lists.GetByTitle(listName);
var query = new CamlQuery();
if (folderName.Length > 0)
query.FolderServerRelativeUrl = folderName;
query.ViewXml = @"<View><Query><Where>
<Or>
<Eq>
<FieldRef Name='ContentType' />
<Value Type='Text'>Document Set</Value>
</Eq>
<Eq>
<FieldRef Name='ContentType' />
<Value Type='Text'>Folder</Value>
</Eq>
</Or>
</Where></Query></View>";
var listitems = currentList.GetItems(query);
_ctx.Load(listitems);
_ctx.ExecuteQuery();
itemColl.AddRange(listitems.ToList().Select(item => new SPFolder()
{
ID = Convert.ToString(item["ID"]),
UniqueID = Convert.ToString(item["GUID"]),
ListName = listName,
ParentWebUrl = webURL,
Title = Convert.ToString(item["FileLeafRef"]),
Name = "folder",
ServerRelativeUrl = Convert.ToString(item["FileRef"])
}).AsEnumerable());
}
catch (Exception ex)
{
// error log
}
return itemColl;
}
public List<SPListItem> GetAllItems(string webURL, string listName, string folderName)
{
var itemColl = new List<SPListItem>();
try
{
var currentWeb = _ctx.Site.OpenWeb(webURL);
var currentList = currentWeb.Lists.GetByTitle(listName);
var query = new CamlQuery();
if (folderName.Length > 0)
query.FolderServerRelativeUrl = folderName;
var myquery = from myitems in currentList.GetItems(query)
select myitems;
var listitems = _ctx.LoadQuery(myquery.Include(myitem => myitem["ID"],
myitem => myitem["FileLeafRef"],
myitem => myitem["Modified"],
myitem => myitem["File_x0020_Size"],
myitem => myitem["Modified_x0020_By"],
myitem => myitem["Created_x0020_By"],
myitem => myitem["FileRef"],
myitem => myitem["UniqueId"],
));
_ctx.ExecuteQuery();
foreach (var nitem in listitems.Select(item => new SPListItem
{
ID = Convert.ToString(item["ID"]),
ParentWebUrl = webURL,
Title = Convert.ToString(item["FileLeafRef"]),
Modified = item["Modified"] != null ? Convert.ToString(item["Modified"]) : string.Empty, Size = item["File_x0020_Size"] != null ? Convert.ToString(item["File_x0020_Size"]) : string.Empty,
CreatedBy = item["Created_x0020_By"] != null ? Convert.ToString(item["Created_x0020_By"]) : string.Empty,
ModifiedBy = item["Modified_x0020_By"] != null ? Convert.ToString(item["Modified_x0020_By"]) : string.Empty,
UniqueId = item["UniqueId"].ToString(),
ServerRelativeUrl = Convert.ToString(item["FileRef"]),
ListName = listName
}))
itemColl.Add(nitem);
}
catch (Exception ex)
{
// error log
}
return itemColl;
}
For this I used following reference,
it may helps you Good Luck :-)
Upvotes: 2
Reputation: 358
my code:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
var service = SPFarm.Local.Services.GetValue<SPWebService>(string.Empty);
foreach (SPWebApplication webApplication in service.WebApplications)
{
ShowSiteCollection(webApplication.Sites);
}
}
}
private void ShowSiteCollection(IEnumerable<SPSite> sites)
{
foreach (SPSite site in sites)
{
using (site)
{
var rootWeb = site.RootWeb;
var node = new TreeNode(rootWeb.Title, rootWeb.Url);
if (rootWeb.Webs.Count > 0)
{
ShowWebCollection(rootWeb.Webs, (title, url) => node.ChildNodes.Add(new TreeNode(title, url)));
}
siteCollectionTree.Nodes.Add(node);
}
}
}
private static void ShowWebCollection(SPWebCollection collection, Action<string, string> func)
{
for (var i = 0; i < collection.Count; i++)
{
var info = collection.WebsInfo[i];
func.Invoke(info.Title, info.ServerRelativeUrl);
if (collection[i].Webs.Count > 0)
{
ShowWebCollection(collection[i].Webs, func);
}
}
}
And method for getting list:
private static IEnumerable<List> GetSiteLists(string siteUrl)
{
using (var context = new ClientContext(siteUrl))
{
var query = from lists in context.Web.Lists
where !lists.Hidden
select lists;
var siteLists = context.LoadQuery(query);
context.ExecuteQuery();
return siteLists;
}
}
I don't claim, that the solution is the best, but it works. Good luck!
Upvotes: 0