none
Mostrar elementos de Listas SharePoint 2010 desde proyecto SilverLight RRS feed

  • Pregunta

  • Por favor tengo el siguiente problema:

    He creado un proyecto en SilverLight4.0 desde .NET 2010, he agregado la referencia a Microsoft.SharePoint.Client.Silverlight.dll y Microsoft.SharePoint.Client.Silverlight.Runtime.dll, hasta ahi todo bien. Agregue la referencia a un WebServices de SharePoint2010 que me devuelve las listas de mi coleccion de sitios todo bien, en el visual arrastro la lista que deseo y la suelto en el UserControl y aparece mi lista con los campos vacios, como puedo hacer para que el DataGrid muestre los Items de la lista.

    jueves, 17 de marzo de 2011 23:28

Respuestas

  • Hola casiofernan,

    Cuando trabajas con Silverlight y añades las referencias que comentas, se trata de que uses el modelo de objetos en cliente Silverlight en lugar de usar WebServices de SharePoint 2010 (que también es una opción válida). Para acceder a los elementos de una lista mediante el MO Silverlight, tienes que usar un código como el siguiente:

        private ListItemCollection _employees; 
    
        public MainPage()
        {
          InitializeComponent();
    
          ClientContext context = new ClientContext(ApplicationContext.Current.Url);
          context.Load(context.Web);
          List employees = context.Web.Lists.GetByTitle("Employees");
          context.Load(employees);
    
          CamlQuery query = new CamlQuery();
          string camlQueryXml = null;
    
          query.ViewXml = camlQueryXml;
          _employees = employees.GetItems(query);
          context.Load(_employees);
          context.ExecuteQueryAsync(new ClientRequestSucceededEventHandler(OnRequestSucceeded), null);
        }
    
        private void OnRequestSucceeded(Object sender, ClientRequestSucceededEventArgs args)
        {      
          Dispatcher.BeginInvoke(BindData);
        }
    
        private void BindData()
        {
          List<EmployeeContributions> employees = new List<EmployeeContributions>();
    
          foreach (ListItem li in _employees)
          {
            employees.Add(new EmployeeContributions
            {
              Name = li["Title"].ToString(),
              TeamName = li["Team"].ToString(),
              Contributions = Convert.ToDecimal(li["Contribution_x0020__x0028_in_x00"])
            });
          }
    
          List<TeamContributions> teams = employees
            .GroupBy(e => e.TeamName)
            .Select(t => new TeamContributions
            {
              Name = t.Key,
              Contributions = t.Sum(e => e.Contributions)
            }).ToList();
    
          chart.DataContext = teams;
        }
    

    Saludos!

    • Marcado como respuesta casiofernan viernes, 18 de marzo de 2011 14:38
    viernes, 18 de marzo de 2011 7:14
  • Hola casiofernan,

    Realmente la idea del modelo de objetos en cliente Silverlight tiene las siguientes ventajas con respecto a los servicios web de SharePoint:

    • Lo primero, que te permiten hacer cualquier interacción con el sitio de SharePoint sin necesidad de tener que crearte nuevos servicios web si los existentes no nos suficientes.
    • Lo segundo, a nivel de desarrollo es más productivo trabajar con el modelo de objetos que con lo que te devuelve el servicio web.

    Respecto al tema del Datagrid, ¿no te vale con configurarlo de forma programática?

    Un saludo!

    • Marcado como respuesta casiofernan viernes, 18 de marzo de 2011 21:48
    viernes, 18 de marzo de 2011 21:40

Todas las respuestas

  • Hola casiofernan,

    Cuando trabajas con Silverlight y añades las referencias que comentas, se trata de que uses el modelo de objetos en cliente Silverlight en lugar de usar WebServices de SharePoint 2010 (que también es una opción válida). Para acceder a los elementos de una lista mediante el MO Silverlight, tienes que usar un código como el siguiente:

        private ListItemCollection _employees; 
    
        public MainPage()
        {
          InitializeComponent();
    
          ClientContext context = new ClientContext(ApplicationContext.Current.Url);
          context.Load(context.Web);
          List employees = context.Web.Lists.GetByTitle("Employees");
          context.Load(employees);
    
          CamlQuery query = new CamlQuery();
          string camlQueryXml = null;
    
          query.ViewXml = camlQueryXml;
          _employees = employees.GetItems(query);
          context.Load(_employees);
          context.ExecuteQueryAsync(new ClientRequestSucceededEventHandler(OnRequestSucceeded), null);
        }
    
        private void OnRequestSucceeded(Object sender, ClientRequestSucceededEventArgs args)
        {      
          Dispatcher.BeginInvoke(BindData);
        }
    
        private void BindData()
        {
          List<EmployeeContributions> employees = new List<EmployeeContributions>();
    
          foreach (ListItem li in _employees)
          {
            employees.Add(new EmployeeContributions
            {
              Name = li["Title"].ToString(),
              TeamName = li["Team"].ToString(),
              Contributions = Convert.ToDecimal(li["Contribution_x0020__x0028_in_x00"])
            });
          }
    
          List<TeamContributions> teams = employees
            .GroupBy(e => e.TeamName)
            .Select(t => new TeamContributions
            {
              Name = t.Key,
              Contributions = t.Sum(e => e.Contributions)
            }).ToList();
    
          chart.DataContext = teams;
        }
    

    Saludos!

    • Marcado como respuesta casiofernan viernes, 18 de marzo de 2011 14:38
    viernes, 18 de marzo de 2011 7:14
  • Juan Carlos

    Muy buena tu aclaracion y gracias por el codigo, pero porque no usar los WebServis si creo que es mas eficiente trabajar con estos, por favor si me pudieras comentar algo sobre esto. Gracias


    Como puedo trabajar con el DataGrid que al arrastrar en el visual me muestra todos los campos de mi lista solo que no se pobla el DataGrid.
    viernes, 18 de marzo de 2011 13:39
  • Hola casiofernan,

    Realmente la idea del modelo de objetos en cliente Silverlight tiene las siguientes ventajas con respecto a los servicios web de SharePoint:

    • Lo primero, que te permiten hacer cualquier interacción con el sitio de SharePoint sin necesidad de tener que crearte nuevos servicios web si los existentes no nos suficientes.
    • Lo segundo, a nivel de desarrollo es más productivo trabajar con el modelo de objetos que con lo que te devuelve el servicio web.

    Respecto al tema del Datagrid, ¿no te vale con configurarlo de forma programática?

    Un saludo!

    • Marcado como respuesta casiofernan viernes, 18 de marzo de 2011 21:48
    viernes, 18 de marzo de 2011 21:40
  • Ademas alguien me puede decir como trabajar con los webservice en proyectos Silverlight.

    Gracias Juan Carlos pero me parecia mejor trabajar solo con los WebService de SharePoint con vistas a ahorrar codigo y ademas tenia la idea que serian mas eficientes.


    casio
    viernes, 18 de marzo de 2011 21:50