1

Windows アプリケーションを作成したい

画面 :

  • すべての Web アプリケーション、

  • 各 Web アプリケーションの Sites コレクション、

  • 各サイト コレクションのサイト、

  • 各サイトのサブサイト、

  • すべてのリスト - ツリー ビューの各サイトとサブサイトのライブラリ

ここでは、SharePoint がそのコンピューターにインストールされている場合、すべての情報がツリー ビューに自動的に入力されるアプリケーションの起動時に、静的 URL を提供したくありません。

これは可能ですか?はいの場合、どのように?

4

2 に答える 2

2

.Net マネージド クライアント オブジェクト モデル: すべての Web、ライブラリ、アイテムをフェッチする

SharePoint 2010 には、3 つのクライアント オブジェクト モデルがあります。

  1. .Net マネージ クライアント オブジェクト モデル
  2. シルバーライト
  3. 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/

それはあなたの幸運を助けるかもしれません:-)

于 2012-09-15T06:45:44.223 に答える
0

私のコード:

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);
                }
            }
        }

リストを取得する方法:

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;
            }
        }

解決策が最善であるとは言いませんが、うまくいきます。幸運を!

于 2012-08-03T05:47:25.247 に答える