2016-09-12 2 views
0

Я очень смущен, когда я делаю неправильно. Я делал это много раз раньше, но не уверен, почему его НЕ работает на этот раз. Вот код;SharePoint CSOM - загрузка HasUniqueRoleAssignment завершается с ошибкой все время

dynamic fileOrFolder; 
if (model.IsFolder) 
    fileOrFolder = _clientContext.Web.GetFolderByServerRelativeUrl(serverRelativeUrl); 
else 
    fileOrFolder = _clientContext.Web.GetFileByServerRelativeUrl(serverRelativeUrl); 

Я пробовал ВСЕ, но ничего не работало;

_clientContext.Load(fileOrFolder, item => item.Include(file => file.ListItemAllFields)); 

dynamic blhasUniquePermission = fileOrFolder.ListItemAllFields.HasUniqueRoleAssignments; 

ИЛИ

_clientContext.Load(fileOrFolder.ListItemAllFields.HasUniqueRoleAssignments); 

ИЛИ

_clientContext.Load(fileOrFolder.ListItemAllFields, 
    items => items.Include(
     item => item.Id, 
     item => item.DisplayName, 
     item => item.HasUniqueRoleAssignments)); 

ИЛИ

_clientContext.Load(fileOrFolder.ListItemAllFields, "Include(HasUniqueRoleAssignments)"); 
_clientContext.ExecuteQuery(); 

Каждый раз, когда он немедленно бросали ошибку либо на самой линии нагрузки или на ExecuteQuery. Мы deffo знаем, что свойство находится в коллекции ListItemAllFields, и почему он это делает?

ответ

0

Похоже, вы использовали ключевое слово dynamic, чтобы взломать C#, чтобы создать переменную и сохранить экземпляр одного из двух несвязанных типов внутри.

Не только это странно, но тем самым вы также искалечили IntelliSense и компилятор.

Возьмите эту линию:

_clientContext.Load(fileOrFolder, item => item.Include(file => file.ListItemAllFields)); 

Это, вероятно, кидает во время выполнения, так как нет Include метод на ни Microsoft.SharePoint.Client.File или Microsoft.SharePoint.Client.Folder типа. Если вы не использовали dynamic, вместо этого вы получите ясную ошибку компилятора.

Это один:

_clientContext.Load(fileOrFolder.ListItemAllFields.HasUniqueRoleAssignments); 

не работает, потому что _clientContext.Load принимает экземпляр Microsoft.SharePoint.Client.ClientObject. Но опять же, компилятор не знает, что такое аргумент, потому что он исходит от динамического объекта. Вместо красной squiggly в редакторе вы получаете ошибку времени выполнения.

Это должно работать:

ListItem itemAndOnlyItem = null; 
if (model.IsFolder) 
{ 
    var folder = _clientContext.Web.GetFolderByServerRelativeUrl(serverRelativeUrl); 
    itemAndOnlyItem = folder.ListItemAllFields; 
} 
else 
{ 
    var file = _clientContext.Web.GetFileByServerRelativeUrl(serverRelativeUrl); 
    itemAndOnlyItem = file.ListItemAllFields; 
} 

_clientContext.Load(itemAndOnlyItem, 
    item => item.HasUniqueRoleAssignments); 
_clientContext.ExecuteQuery(); 

var result = itemAndOnlyItem.HasUniqueRoleAssignments; 
Смежные вопросы