La recuperación de un objeto de cliente no recupera todas las propiedades

Última modificación: martes, 09 de febrero de 2010

Hace referencia a: SharePoint Foundation 2010

Disponible en SharePoint Online

En el modelo de objetos de servidor, al devolver un objeto SPWeb, todas sus propiedades pasan a estar disponibles para usarlas en el código. No obstante, para mejorar el rendimiento en el modelo de objetos de cliente, al devolver un objeto Web (JavaScript: Web), ciertas propiedades no se incluyen y deben recuperarse explícitamente. Por ejemplo, la clase Web (JavaScript: Web) hereda la propiedad HasUniqueRoleAssignments (JavaScript: hasUniqueRoleAssignments) de la clase SecurableObject (JavaScript: SecurableObject), pero al devolver un objeto Web (JavaScript: Web), esta propiedad no se recupera de forma predeterminada. Para obtener más información acerca de las propiedades que no se devuelven de forma predeterminada al recuperar un objeto, vea Introducción a la recuperación de datos.

En el siguiente ejemplo, cuyo objetivo es mostrar el título de un sitio web y si ese sitio web tiene asignaciones de roles exclusivas, se devuelve PropertyOrFieldNotInitializedException en la segunda llamada de escritura en la consola debido a que la propiedad HasUniqueRoleAssignments (JavaScript: hasUniqueRoleAssignments) no se recuperó explícitamente.

Código incorrecto

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

La siguiente revisión del ejemplo anterior recupera explícitamente las propiedades HasUniqueRoleAssignments (JavaScript: hasUniqueRoleAssignments) y Title (JavaScript: title).

Código correcto

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

Vea también

Conceptos

Introducción a la recuperación de datos

Procedimiento para recuperar elementos de lista

Llamada a Load y ExecuteQuery antes de obtener acceso a las propiedades del valor

Los objetos valor no se pueden usar entre métodos en una consulta

Los objetos de cliente pueden usarse en métodos en una consulta

Recuperación de datos de grupo en el mismo objeto