クライアント オブジェクトの取得によって全プロパティが取得されるわけではない

最終更新日: 2010年2月9日

適用対象: SharePoint Foundation 2010

SharePoint Online で使用可能

サーバー オブジェクト モデルでは、SPWeb オブジェクトを返すと、そのオブジェクトのすべてのプロパティがコード内で使用できるようになります。しかし、クライアント オブジェクト モデルでパフォーマンスを高めるために、Web オブジェクト (JavaScript: Web) を返す場合、一部のプロパティが含まれないので、それらを明示的に取得する必要があります。たとえば、Web クラス (JavaScript: Web) は、SecurableObject クラス (JavaScript: SecurableObject) から HasUniqueRoleAssignments プロパティ (JavaScript: hasUniqueRoleAssignments) を継承しますが、Web オブジェクト (JavaScript: Web) を返す場合、このプロパティは既定では取得されません。オブジェクトを取得するときに既定では返されないプロパティの詳細については、「データ取得の概要」を参照してください。

次の例は、Web サイトのタイトルと、その Web サイトに独自のロールの割り当てがあるかどうかを表示することが目的ですが、コンソールに書き込むために、2 番目の呼び出しで PropertyOrFieldNotInitializedException を返します。なぜなら、HasUniqueRoleAssignments プロパティ (JavaScript: hasUniqueRoleAssignments) を明示的に取得していないからです。

正しくないコード

using System;
using Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class RetrieveProperties
    {
        static void Main()
        {
            ClientContext clientContext = new ClientContext("http://MyServer/sites/MySiteCollection");
            Web oWebsite = clientContext.Web;

            clientContext.Load(oWebsite);

            clientContext.ExecuteQuery();

            Console.WriteLine(oWebsite.Title);
            Console.WriteLine(oWebsite.HasUniqueRoleAssignments);
        }
    }
}

上の例の修正版は、HasUniqueRoleAssignments プロパティ (JavaScript: hasUniqueRoleAssignments) および Title プロパティ (JavaScript: title) を明示的に取得します。

正しいコード

using System;
using Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class RetrieveProperties
    {
        static void Main()
        {
            ClientContext clientContext = new ClientContext("http://MyServer/sites/MySiteCollection");
            Web oWebsite = clientContext.Web;

           clientContext.Load(
               oWebsite,
               website => website.Title,
               website => website.HasUniqueRoleAssignments);

            clientContext.ExecuteQuery();

            Console.WriteLine("Title: " + oWebsite.Title + 
                "Unique role assignments: " + oWebsite.HasUniqueRoleAssignments);
        }
    }
}
Imports System
Imports Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class RetrieveProperties

        Shared Sub Main()
            Dim clientContext As New ClientContext("http://MyServer/sites/MySiteCollection")
            Dim oWebsite As Web = clientContext.Web

            clientContext.Load(oWebsite, _
                Function(website) website.Title, _
                Function(website) website.HasUniqueRoleAssignments)

            clientContext.ExecuteQuery()

            Console.WriteLine("Title: " & oWebsite.Title & ControlChars.Lf & _
                               "Unique role assignments: " & oWebsite.HasUniqueRoleAssignments)

        End Sub
    End Class
End Namespace
function retrieveProperties () {

    var clientContext = new SP.ClientContext('/sites/TestWebs/TestWeb1');
    this.oWebsite = clientContext.get_web();

    clientContext.load(oWebsite, 'Title', 'HasUniqueRoleAssignments');
        
    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded() {
    alert('Title: ' + oWebsite.get_title() + 
    '\nUnique role assignments: ' + oWebsite.get_hasUniqueRoleAssignments());
}

function onQueryFailed(sender, args) {
    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

関連項目

概念

データ取得の概要

[方法] リスト アイテムを取得する

値プロパティを使用する前に Load と ExecuteQuery を呼び出す

クエリ内のメソッド間で値オブジェクトを使用できない

クライアント オブジェクトをクエリ内でメソッド横断的に使用できる

同じオブジェクト上のグループ データの取得