.Net マネージド クライアント オブジェクト モデル: すべての Web、ライブラリ、アイテムをフェッチする
SharePoint 2010 には、3 つのクライアント オブジェクト モデルがあります。
- .Net マネージ クライアント オブジェクト モデル
- シルバーライト
- ECMA スクリプト / JavaScript
今日は、SharePoint からすべての Web、ライブラリ、アイテムを取得する .NET マネージ クライアント オブジェクト モデルを紹介します。
デスクトップ アプリケーションの前提条件リファレンス:
1. Microsoft.SharePoint.Client.dll
2. Microsoft.SharePoint.Client.Runtime.dll
SharePoint サーバー オブジェクト モデルに取り組んでいるように感じるためのカスタム クラス:
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; }
}
Web / ライブラリ / アイテムの取得に使用されるメソッド:
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;
}
このために、次の参照を使用しました。
http://shahjinesh11.wordpress.com/2012/06/14/net-managed-client-object-model-fetch-all-webs-libraries-items/
それはあなたの幸運を助けるかもしれません:-)