Share via


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

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

Hace referencia a: SharePoint Foundation 2010

Disponible en SharePoint Online

Para obtener acceso a las propiedades del valor de un objeto de cliente, debe llamar al método Load<T>(T, []) (JavaScript: load(clientObject)) y al método ExecuteQuery() o ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler) (JavaScript: executeQueryAsync(succeededCallback, failedCallback)) en el objeto ClientContext (JavaScript: ClientContext).

Si ya conoce el modelo de objetos servidor de Microsoft SharePoint Foundation 2010, es posible que desee escribir código que usa la biblioteca cliente del mismo modo en que escribe código que usa la biblioteca de servidor. Por ejemplo, si desea mostrar el título de un sitio web, es posible que piense que puede escribir código como el siguiente en el ejemplo de C# que usa la biblioteca cliente.

Código incorrecto

using System;
using Microsoft.SharePoint.Client;

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

La compilación del código devuelve PropertyOrFieldNotInitializedException debido a que el valor de la propiedad no se recuperó del servidor. El ejemplo devuelve una excepción porque la biblioteca cliente usa un modelo de programación parecido al de SQL. Al usar SQL, debe realizar lo siguiente:

  1. Crear una consulta SQL por medio de una consulta SQL ad-hoc o un procedimiento almacenado.

  2. Ejecutar la consulta SQL.

  3. Leer los resultados de SQL.

El modelo de objetos cliente usa el mismo modelo que SQL. Al llamar a un método, se crea una consulta con la biblioteca cliente. Puede crear consultas y éstas pueden acumularse antes de ejecutarse, pero no se enviarán al servidor hasta que cargue el objeto o propiedad adecuados mediante el método Load<T>(T, []) (JavaScript: load(clientObject)) y hasta que, posteriormente, llame al método ExecuteQuery() o ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler) (JavaScript: executeQueryAsync(succeededCallback, failedCallback)). Para que el código anterior funcione, debe realizar los siguientes cambios.

Código correcto

using System;
using Microsoft.SharePoint.Client;

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

            clientContext.Load(oWebsite,
                w=>w.Title);

            clientContext.ExecuteQuery();

            Console.WriteLine(oWebsite.Title);
        }
    }
}
Imports System
Imports Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class WebSiteTitle
      
        Shared Sub Main()
            Dim clientContext As New ClientContext("http://MyServer/sites/MySiteCollection")
             Dim oWebsite As Web = clientContext.Web
         
             clientContext.Load(oWebsite, Function(w) w.Title)
         
             clientContext.ExecuteQuery()
         
             Console.WriteLine(oWebsite.Title)
        End Sub
    End Class
End Namespace
function retrieveWebSite() {
    var clientContext = new SP.ClientContext('/sites/MySiteCollection');
    this.oWebsite = clientContext.get_web();

    clientContext.load(oWebsite, 'Title');

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded() {
    alert('Title: ' + this.oWebsite.get_title());
}
    
function onQueryFailed(sender, args) {
    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

Para mejorar el rendimiento, la primera llamada de método agregada al ejemplo anterior usa una expresión de consulta LINQ para pedir explícitamente la propiedad Title (JavaScript: title) del sitio web. Posteriormente, la segunda llamada de método ejecuta la consulta. La especificación del título del sitio web por medio del modelo de objetos cliente funciona, de esta manera, de modo similar al comando de SQL SELECT Title FROM Webs. Si desea recuperar todas las propiedades del sitio web, puede usar clientContext.Load(oWebsite);, que es similar al comando de SQL SELECT * FROM Webs.

Vea también

Conceptos

Introducción a la recuperación de datos

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

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