字段或属性\“ListItemAllFields \”不存在exception
下面的代码归功于Vadim Gremyachev。 我的目标是使用CSOM
授予用户对某些SharePoint
文件夹的访问权限。 我试图实现的目标是访问名为JZhu
的库,在JZhu
库中,我有两个文件夹folder1
和folder2
。 我正在尝试向folder1
授予Reader
权限。 到目前为止代码没有工作,因为我在第6行得到例外说:
字段或属性\“ListItemAllFields \”不存在
ClientContext context = new ClientContext("http://myRealUrl"); Principal user = context.Web.EnsureUser(@"myLoginAccout"); var folder = context.Web.GetFolderByServerRelativeUrl("JZhu/folder1"); var roleDefinition = context.Site.RootWeb.RoleDefinitions.GetByType(RoleType.Reader); //get Reader role var roleBindings = new RoleDefinitionBindingCollection(context) { roleDefinition }; folder.ListItemAllFields.BreakRoleInheritance(true, false); //line 6 folder.ListItemAllFields.RoleAssignments.Add(user, roleBindings); context.ExecuteQuery();
最有可能是错误:
字段或属性\“ListItemAllFields \”不存在
因为您使用的CSOM SDK与SharePoint服务器版本不兼容 ,特别是您使用的是针对SharePoint 2010的SDK 15或16版本。
关键是每个SharePoint版本都已发布了一个单独的SDK:
- SharePoint Foundation 2010客户端对象模型可再发行目标目标SharePoint 2010 Foundation / Server(版本14)
- SharePoint Server 2013客户端组件SDK以SharePoint 2013(版本15)为目标
- SharePoint Online Client组件SDK以SharePoint Online为目标(版本16)
如何在SharePoint 2010中通过CSOM获取与文件夹关联的列表项
因此,如果我的假设是正确的,那么您首先需要安装SharePoint Foundation 2010客户端对象模型可再发行组件 。
其次,由于Folder类不公开SharePoint 2010 CSOM API中的ListItemAllFields
属性,因此可以使用以下方法获取与Folder
关联的ListItem
:
static class ListExtensions { /// /// Load List Item by Url /// /// /// /// public static ListItem LoadItemByUrl(this List list, string url) { var context = list.Context; var query = new CamlQuery { ViewXml = String.Format("1 {0} ", url), }; var items = list.GetItems(query); context.Load(items); context.ExecuteQuery(); return items.Count > 0 ? items[0] : null; } }
然后,您可以为Folder
设置唯一权限,如下所示:
Principal user = ctx.Web.EnsureUser(accountName); var list = ctx.Web.Lists.GetByTitle(listTitle); var folderItem = list.LoadItemByUrl(folderUrl); var roleDefinition = ctx.Site.RootWeb.RoleDefinitions.GetByType(RoleType.Reader); //get Reader role var roleBindings = new RoleDefinitionBindingCollection(ctx) { roleDefinition }; folderItem.BreakRoleInheritance(true, false); //line 6 folderItem.RoleAssignments.Add(user, roleBindings); ctx.ExecuteQuery();
如何在SharePoint 2013中通过CSOM获取与文件夹关联的列表项
由于Folder.ListItemAllFields属性在SharePoint 2013 CSOM中可用,因此以下示例演示如何获取与Folder
关联的List Item
:
var folder = context.Web.GetFolderByServerRelativeUrl(folderUrl); var folderItem = folder.ListItemAllFields;
- 在Windows Store App的.mp3文件中获取Albumart
- 将常见的razor助手移动到另一个文件
- 从麦克风实时播放音频。 C#
- 如何循环类的字段名称
- 需要.NET WinForms IP地址控件
- 如何使用Newtonsoft.Json包在C#(4.0)中解析我的json字符串?
- 为什么Entity Framework Code-First(使用现有数据库)继续尝试从EdmMetadata表中获取数据?
- WPF / EntityFramework上下文生命周期
- 在WPF中,Windows Forms中的Suspend / ResumeLayout()和BackgroundWorker()相当于什么