2016-09-12 3 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(); 

매번는 immediatly로드 라인 자체 또는하는 executeQuery에 중 하나에 오류를 던지고있다. 우리는 그 속성이 ListItemAllFields 콜렉션에 있다는 것을 알고 그 이유를 설명합니다.

답변

0

dynamic 키워드를 사용하여 C#을 해킹하여 fileOrFolder 변수를 만들고 관련없는 두 가지 유형 중 하나의 인스턴스를 저장할 수 있습니다.

이상하게 들릴뿐만 아니라 그렇게함으로써 IntelliSense와 컴파일러도 불구가되었습니다. Microsoft.SharePoint.Client.File 또는 Microsoft.SharePoint.Client.Folder도 유형에는 Include 방법이 없기 때문에, 그것은 아마도 런타임에 발생

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

:

는이 라인을 가져 가라. dynamic을 사용하지 않으면 명확한 컴파일러 오류가 발생합니다. 이것은

: _clientContext.LoadMicrosoft.SharePoint.Client.ClientObject의 인스턴스를 필요하기 때문에

_clientContext.Load(fileOrFolder.ListItemAllFields.HasUniqueRoleAssignments); 

은 작동하지 않습니다. 그러나 다시 컴파일러는 동적 객체에서 오는 것이기 때문에 인수가 무엇인지 알지 못합니다. 에디터에서 붉은 색 대신에 런타임 오류가 발생합니다.

즉 작동합니다 :

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; 
관련 문제