2016-09-12 1 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; 

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(); 

それはすぐに負荷線自体のいずれかまたはのexecuteQueryにエラーをスローして毎回。私たちは、そのプロパティがListItemAllFieldsコレクションにあることを知っています。

答えて

0

dynamicキーワードを使ってC#をハックして、fileOrFolder変数を作成し、2つの無関係な型のインスタンスを内部に格納するように見えます。

それだけではありませんが、そうすることでIntelliSenseとコンパイラも不自由になりました。 Microsoft.SharePoint.Client.FileまたはMicrosoft.SharePoint.Client.FolderどちらのタイプにはInclude方法がないので、それはおそらく、実行時にスロー

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

は、この行を取ります。 dynamicを使用しなかった場合は、代わりに明確なコンパイラエラーが発生します。

この1つは:_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; 
関連する問題