none
Modelo de Objetos y WebPart de Silverlight RRS feed

  • Pregunta

  • Muy buenas,

    Estoy intentando crear columnas en una lista utilizando el modelo de objetos y un webpart de silverlight 4, y cada vez que ejecuto el programa no me crea todas las columnas que necesito (la lista la crea perfectamente). Adjunto el código, a ver si me alguien me puede ayudar:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using MO_Silverlight = Microsoft.SharePoint.Client;

    namespace SilverlightApplication3
    {
        public partial class MainPage : UserControl
        {
            private System.Threading.SynchronizationContext myHilo;
            public static event MO_Silverlight.ClientRequestSucceededEventHandler EscuchadorExitoso;
            public static event MO_Silverlight.ClientRequestFailedEventHandler EscuchadorFallado;
            public delegate void succeedDelegate(object sender, MO_Silverlight.ClientRequestSucceededEventArgs e);
            public delegate void failDelegate(object sender, MO_Silverlight.ClientRequestFailedEventArgs e);

            public MainPage()
            {
                InitializeComponent();
                succeedDelegate sd = new succeedDelegate(ManejadorRequerimientoClienteExitoso);
                failDelegate fd = new failDelegate(ManejadorRequerimientoClienteFallado);

                EscuchadorExitoso += new MO_Silverlight.ClientRequestSucceededEventHandler(sd);
                EscuchadorFallado += new MO_Silverlight.ClientRequestFailedEventHandler(fd);

                myHilo = System.Threading.SynchronizationContext.Current;
                if (myHilo == null)
                    myHilo = new System.Threading.SynchronizationContext();

            }

            public void ManejadorRequerimientoClienteExitoso(object sender, MO_Silverlight.ClientRequestSucceededEventArgs args)
            {
                myHilo.Post(new System.Threading.SendOrPostCallback(delegate(object state)
                {
                    EventHandler myManejador = OperacionExitosa;
                    if (myManejador != null)
                    {
                        myManejador(this, EventArgs.Empty);
                    }
                }), null);
            }

            public void ManejadorRequerimientoClienteFallado(object sender, MO_Silverlight.ClientRequestFailedEventArgs args)
            {
                myHilo.Post(new System.Threading.SendOrPostCallback(delegate(object state)
                {
                    EventHandler myManejador = OperacionFallada;
                    if (myManejador != null)
                        myManejador(this, EventArgs.Empty);
                }), null);
            }

            public void OperacionExitosa(object sender, EventArgs e)
            {
                lblResultEstructura.Content = "Comunicacion realizada con exito";

            }

            public void OperacionFallada(object sender, EventArgs e)
            {
                lblResultEstructura.Content += "Error en la comunicacion";
            }
            private void btnCrearEstructura_Click(object sender, RoutedEventArgs e)
            {
                lblResultEstructura.Content = string.Empty;
                try
                {
                    using (MO_Silverlight.ClientContext ctx = MO_Silverlight.ClientContext.Current)
                     {  //Parámetros para crear una lista de sharepoint
                        MO_Silverlight.ListCreationInformation listaPropietarios = new MO_Silverlight.ListCreationInformation();
                        listaPropietarios.Title = "Propietarios";
                        listaPropietarios.Description = "Listado genérico de propietarios.";
                        listaPropietarios.TemplateType = (int)MO_Silverlight.ListTemplateType.GenericList;
                        listaPropietarios.QuickLaunchOption = MO_Silverlight.QuickLaunchOptions.On;
                        MO_Silverlight.List llList = ctx.Web.Lists.Add(listaPropietarios);
                        ctx.ExecuteQueryAsync(EscuchadorExitoso, EscuchadorFallado);

                        MO_Silverlight.Web myWeb = ctx.Web;
                        MO_Silverlight.List myLista = myWeb.Lists.GetByTitle(listaPropietarios.Title);
                        MO_Silverlight.Field myCampo = myLista.Fields.AddFieldAsXml("<Field DisplayName='PropietariosID' Type='Counter' />", true, MO_Silverlight.AddFieldOptions.DefaultValue);
                        ctx.ExecuteQueryAsync(EscuchadorExitoso, EscuchadorFallado);

                        myCampo = myLista.Fields.AddFieldAsXml("<Field DisplayName='PropietariosNombre' Type='Text' />", true, MO_Silverlight.AddFieldOptions.DefaultValue);
                        ctx.ExecuteQueryAsync(EscuchadorExitoso, EscuchadorFallado);

                        myCampo = myLista.Fields.AddFieldAsXml("<Field DisplayName='PropietariosPiso' Type='Text' />", true, MO_Silverlight.AddFieldOptions.DefaultValue);
                        ctx.ExecuteQueryAsync(EscuchadorExitoso, EscuchadorFallado);

                        myCampo = myLista.Fields.AddFieldAsXml("<Field DisplayName='PropietariosAdministradorDeFincas' Type='Text' />", true, MO_Silverlight.AddFieldOptions.DefaultValue);
                        ctx.ExecuteQueryAsync(EscuchadorExitoso, EscuchadorFallado);

     
                        lblResultEstructura.Content = "¡¡Propietarios Creado con éxito!!";
                    }

                }
                catch (Exception ex)
                {
                    lblResultEstructura.Content = "Se ha producido el siguiente error: " + ex.Message;
                }
            }

     
        }
    }

    martes, 10 de enero de 2012 22:21

Respuestas

  • Finalmente me ha funcionado. He dejado un único ExecuteQueryAsync y en lugar de utilizar un único myCampo he creado uno por cada columna que quería crear.

    De todas formas como he dicho en el comentario anterior lo haré como sugieres.

     

    Un saludo y gracias por la pronta respuesta.


    Alberto J. Ortiz del Aguila
    miércoles, 11 de enero de 2012 9:11

Todas las respuestas

  • Hola,

    ¿Por qué estás haciendo un ExecuteQueryAsync cada vez que añades un campo? Con hacer uno al final debería ser suficiente...el problema posiblemente lo tengas ahí...por otro lado, ¿Por qué estás usando el MO cliente para añadir campos a la lista? Y finalmente, en lugar de hacerlo de esta forma, lo que yo haría es crear columnas de sitio, vincularlas a un tipo de contenido y luego vincular este a la lista.

    Un saludo


    ------------------------------------------------------------
    Juan Carlos González Martín MVP de SharePoint Server
    Director revista CompartiMOSS: http://www.gavd.net/servers/compartimoss/compartimoss_main.aspx
    Blog: http://geeks.ms/blogs/ciin
    Twitter: @jcgm1978
    ------------------------------------------------------------
    miércoles, 11 de enero de 2012 7:08
  • He quitado los ExecuteQueryAsync, dejando uno solo y sigue fallando. Ahora ni tan siquiera me crea la lista. Por otro lado estoy usando el MO Cliente porque es una webpart silverlight que va a ir alojada en sharepoint online.

    No obstante probaré a hacer lo de las columnas del sitio y el tipo de contenido.

     

    Gracias y un saludo.

    miércoles, 11 de enero de 2012 8:22
  • Finalmente me ha funcionado. He dejado un único ExecuteQueryAsync y en lugar de utilizar un único myCampo he creado uno por cada columna que quería crear.

    De todas formas como he dicho en el comentario anterior lo haré como sugieres.

     

    Un saludo y gracias por la pronta respuesta.


    Alberto J. Ortiz del Aguila
    miércoles, 11 de enero de 2012 9:11