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