2016-09-12 1 views
0

Ich bin viel verwirrt, als wo ich falsch mache. Ich habe es schon oft gemacht, aber ich weiß nicht, warum es dieses Mal nicht funktioniert. Hier ist ein Code;SharePoint CSOM - Laden HasUniqueRoleAssignment schlägt alle Zeit

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

Ich habe alle unten versucht, aber nichts hat funktioniert;

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

dynamic blhasUniquePermission = fileOrFolder.ListItemAllFields.HasUniqueRoleAssignments; 

OR

_clientContext.Load(fileOrFolder.ListItemAllFields.HasUniqueRoleAssignments); 

OR

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

OR

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

Jedesmal es sofort auf Fehler werfen entweder der Lastleitung selbst oder auf ExecuteQuery. Wir wissen nicht, ob die Eigenschaft in der ListItemAllFields-Auflistung vorhanden ist. Warum macht sie das?

Antwort

0

Es sieht so aus, als ob Sie dynamic Schlüsselwort verwendet haben, um C# zu hacken, damit Sie fileOrFolder Variable erstellen und Instanz von einem von zwei nicht verwandten Typen darin speichern können.

Nicht nur ist es komisch, aber dadurch haben Sie auch IntelliSense und Compiler verkrüppelt.

Nehmen Sie diese Zeile:

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

Wahrscheinlich in Runtime löst, weil es keine Include Methode weder Microsoft.SharePoint.Client.File oder Microsoft.SharePoint.Client.Folder Typ. Wenn Sie dynamic nicht verwenden, erhalten Sie stattdessen einen klaren Compilerfehler.

Dieses:

_clientContext.Load(fileOrFolder.ListItemAllFields.HasUniqueRoleAssignments); 

nicht funktioniert, weil _clientContext.Load Instanz von Microsoft.SharePoint.Client.ClientObject nimmt. Aber noch einmal, der Compiler weiß nicht, was das Argument ist, weil es vom dynamischen Objekt kommt. Anstatt rot im Editor quickly, erhalten Sie Laufzeitfehler.

Das sollte funktionieren:

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; 
Verwandte Themen