我是否应该创建自己的对象模型来处理Sharepoint对象的复杂性?
我正在尝试做一些相当简单的事情,但使用SharePoint API似乎是一项几乎不可能完成的任务 我的SharePoint数据结构如下所示: -文件夹我是否应该创建自己的对象模型来处理Sharepoint对象的复杂性?,sharepoint,Sharepoint,我正在尝试做一些相当简单的事情,但使用SharePoint API似乎是一项几乎不可能完成的任务 我的SharePoint数据结构如下所示: -文件夹 ---子文件夹 --------项目A --------B项 --------项目C --------D项 由于某些奇怪的原因,您无法以您期望的分层方式访问文件夹和子文件夹!当我迭代列表时,它将返回忽略层次结构的所有项目(即,它将返回列表中的所有内容)。更糟糕的是,为了管理代码中的结构,您不知道该项是否为文件夹 现在,我正在编写自定义对象,以使S
---子文件夹
--------项目A
--------B项
--------项目C
--------D项
由于某些奇怪的原因,您无法以您期望的分层方式访问文件夹和子文件夹!当我迭代列表时,它将返回忽略层次结构的所有项目(即,它将返回列表中的所有内容)。更糟糕的是,为了管理代码中的结构,您不知道该项是否为文件夹 现在,我正在编写自定义对象,以使SharePoint对象模型更有意义,并按照我期望的层次结构对数据进行分组。我计划将我的SharePoint项目映射如下:
public class Folder
{
public Folder Parent {get; set;}
public Folder Root {get; set;}
public IList<Item> Items {get; set;}
}
不需要,只需使用该类从单个文件夹获取项目即可。这说明了如何操作。我所做的是检查一个项的父项是否是我当前正在遍历的列表,并从那里开始工作。
SPQuery
类也可能是一个好方法。祝你好运 出于您的特定目的,从列表中获取SPList.RootFolder并从那里开始工作,递归遍历每个文件夹中的子文件夹和项目有什么问题(*)
(*)忽略此处的性能方面…不,您确实不应该创建自己的对象来混淆SharePoint对象模型。从本质上讲,SharePoint OM反映了对象的存储方式。也就是说,列表放在单个数据库表中,而不是像文件系统那样放在文件夹中 前进的最佳方式(基于相当痛苦的经历)是磨牙,按照SharePoint的方式做事 在这种情况下,不能像在文件系统中那样使用文件夹。使用元数据“标记”列表项/文件并使用分组视图向用户显示比使用文件夹结构更容易 通常,文件夹结构(磁盘上)用作元数据的替代项(例如,通过将文件放入BusinessGroups/Marketing文件夹,而不是使用BusinessGroup的“Marketing”值对其进行标记,为其提供隐式元数据)
SharePoint太大、太笨拙,无法按照您提出的方式“战斗”。遵循流程。要添加到Lars的答案(这是正确的答案),如果您觉得需要更改对象模型,请尝试使用扩展方法解决您的问题。我一直在这样做,取得了一些成功,谢谢你的提示。我最终选择了这个根,因为它正是我想要的。我编辑了我的帖子以显示我使用的示例代码。非常感谢
var query = from SPList list in Utils.GetList(webRelativeUrl, listName)
from SPFolder folder in list.RootFolder.SubFolders
where folder.Name.ToLower() != "forms"
select new Folder //Custom Object
{
Name = folder.Name,
Children = (from SPFolder subFolder in folder.SubFolders //Further looping of sub folders
select new Folder
{
Name = subFolder.Name,
Items = (from SPFile file in subFolder.Files
select new Item
{
//Mapping code omitted
} ).ToList()
}
{)
}
return query.ToList();