none
Microsoft.SharePoint.Client RRS feed

  • Pregunta

  • Buenos Días,

    Como algunos ya saben que esta semana he estado trabajando en generar un log para una lista externa, como las listas externas son muy limitadas me toco crear un Custom list y con un receptor de eventos estoy enviando la edición y adicion a la lista externa. "Agradezco a Santiago Porras Rodríguez y a Juan Carlos González que me guiarón en el proceso de crear el receptor y con los alcances de las listas externas".

    El problema es que estoy usando Microsoft.SharePoint.Client.dll para agregar en la lista externa guiandome de material http://msdn.microsoft.com/es-es/library/ff464376%28v=office.14%29.aspx y funciona bien, sino que cuando modifique la lista con las columnas verdadera ya no me toma el valor del item

    string h = properties.AfterProperties["Title"].ToString(); -----------Este es como se llamaba la columna en un inicio
    string j = properties.AfterProperties["Company"].ToString();-----------Asi se llama ahora.

    Compile mi proyecto, saque la referencia y la importe, pero cuando intento con "company" me trae null si lo hago con "Title" si trae el valor que esta en company.

    Necesito que actualice por que tengo 4 columnas nuevas y no me las referencia.

    No se si Sharepoint actualiza esa dll cada n tiempo o hay algun comando para eso.

    Si alguien sabe al respecto le agradezco me explique como funciona.

    Coordial saludo.

    Alvaro.

                           


    Alvaro Contreras




    miércoles, 6 de marzo de 2013 15:48

Respuestas

  • Hola Álvaro,

    Por lo que veo, estás usando el código en un manejador de eventos...la verdad, no tiene mucho sentido que uses el modelo de objetos en cliente (salvo qué estés trabajando con SharePoint 2013 y estés utilizando manejadores de eventos remotos). Lo que tienes que hacer es usar el modelo de objetos en servidor que no te va a dar ningún problema a la hora de desplegar el manejador en distintos ambientes...el código a crear es similar al que tienes.

    Saludos


    ------------------------------------------------------------
    Juan Carlos González Martín MVP de SharePoint Server
    Director revista CompartiMOSS: http://www.compartimoss.com
    Blog: http://geeks.ms/blogs/ciin
    Twitter: @jcgm1978
    ------------------------------------------------------------

    jueves, 7 de marzo de 2013 8:12

Todas las respuestas

  • Hola,

    ¿Puedes pegar el código qué estás usando? Tienes que tener cuidado con el modelo de objetos en cliente qué es el qué estás usando...si intentas acceder a una propiedad no inicializada, te devolverá un nulo...¿Por qué estás usando el modelo de objetos en cliente en lugar del modelo de objetos en servidor?

    Saludos


    ------------------------------------------------------------
    Juan Carlos González Martín MVP de SharePoint Server
    Director revista CompartiMOSS: http://www.compartimoss.com
    Blog: http://geeks.ms/blogs/ciin
    Twitter: @jcgm1978
    ------------------------------------------------------------

    miércoles, 6 de marzo de 2013 21:39
  • Gracias mira el codigo es:

      public override void ItemAdding(SPItemEventProperties properties)
           {
    
               SPUser privilegedAccount = properties.Web.AllUsers[@"SHAREPOINT\SYSTEM"];
               SPUserToken privilegedToken = privilegedAccount.UserToken;
    
               try
               {
                   using (SPSite elevatedSite = new SPSite(properties.Web.Url, privilegedToken))
                   {
                       using (SPWeb elevatedWeb = elevatedSite.OpenWeb())
                       {
                           SPWeb jobDefWeb = null;
                           SPList jobDefList;
    
                          // jobDefWeb = elevatedWeb.Webs[0];
                           jobDefList = properties.Web.Lists["Company"];
    
                           if (properties.List.ID.ToString().Equals(jobDefList.ID.ToString()))
                           {
                               ClientContext clientContext = new ClientContext(TargetSiteUrl);
                               List externalList = clientContext.Web.Lists.GetByTitle(
                               TargetListName);
                               ListItem li = externalList.AddItem(
                               new ListItemCreationInformation());
                               li["CompanyId"] = properties.AfterProperties["Title"].ToString();
                               li["StockDisplayType"] = properties.AfterProperties["StockDisplayType"];
                               li["StockDisplayLimit"] = properties.AfterProperties["StockDisplayLimit"];
    
    
      // Set all required fields.
                               li.Update();
                               clientContext.ExecuteQuery();
                           }
    
    
                       }
                   }
    
               }
               finally
               {
    
               }

    Cree un nuevo proyecto y volvi a agregar la referencia y esta vez ya me coje las columnas nuevas , de lo que me doy cuenta es que sienpre la dll toma el nombre con el que se creo por primera vez la columna si cambias el nombre el sigue tomando el anterior.

    Sin embargo me gustaria saber un poco mas ya que me toca pasar el aplicativo a otro ambiente, en ese caso me toca halr la dlll del nuevo ambiente cierto?     Gracias por la ayuda.



    Alvaro Contreras

    miércoles, 6 de marzo de 2013 22:14
  • Hola Álvaro,

    Por lo que veo, estás usando el código en un manejador de eventos...la verdad, no tiene mucho sentido que uses el modelo de objetos en cliente (salvo qué estés trabajando con SharePoint 2013 y estés utilizando manejadores de eventos remotos). Lo que tienes que hacer es usar el modelo de objetos en servidor que no te va a dar ningún problema a la hora de desplegar el manejador en distintos ambientes...el código a crear es similar al que tienes.

    Saludos


    ------------------------------------------------------------
    Juan Carlos González Martín MVP de SharePoint Server
    Director revista CompartiMOSS: http://www.compartimoss.com
    Blog: http://geeks.ms/blogs/ciin
    Twitter: @jcgm1978
    ------------------------------------------------------------

    jueves, 7 de marzo de 2013 8:12
  •  

    La verdad es que no conozco muy bien el desarrollo api de SharePoint.

    Por lo cual me guie en http://msdn.microsoft.com/es-es/library/ff464376%28v=office.14%29.aspx sobre todo por el código de búsqueda que maneja muchas colecciones y no se que objetos se utilizan en modelo de objetos de servidor para la inserción , actualización y búsqueda en listas externas lo único que encontré fue esos fragmentos de código del link.

     

    Si sabes con que objetos se manejan este tipo de listas te lo agradezco así cambio mi código.

     

    Como siempre gracias por la ayuda, espero quemar esta etapa de novato rápido para no molestar tanto.

    Coordial Saludo


    Alvaro Contreras

    jueves, 7 de marzo de 2013 13:47
  • Gracias buscando en la referencia de objetos de server encontre este link

    http://msdn.microsoft.com/es-es/library/ff464340%28v=office.14%29.aspx

    y utilice esos metodos y ya me funciona sin a referncia al cliente.

    Lo unico que no me funcionaba eran estas dos lineas de codigo

    SPServiceContext context = SPServiceContext.GetContext(site); SPServiceContextScope contextScope = new SPServiceContextScope(context);

    pero las quite.

    adjunto elcodigo de insercion y actualizacion en la lista externa con objetos de servidor en el eventreciver tal como me funciono

      public override void ItemAdding(SPItemEventProperties properties)
            {
                SPUser privilegedAccount = properties.Web.AllUsers[@"SHAREPOINT\SYSTEM"];
                SPUserToken privilegedToken = privilegedAccount.UserToken;
                try
                {
                    using (SPSite elevatedSite = new SPSite(properties.Web.Url, privilegedToken))
                    {
                        using (SPWeb elevatedWeb = elevatedSite.OpenWeb())
                        {
                            SPWeb jobDefWeb = null;
                            SPList jobDefList;
                            // jobDefWeb = elevatedWeb.Webs[0];
                            jobDefList = properties.Web.Lists["Company"];
                            if (properties.List.ID.ToString().Equals(jobDefList.ID.ToString()))
                            {
                                using (SPSite site = new SPSite(TargetSiteUrl))
                                {
                                    
                                    SPWeb web = site.OpenWeb();
                                    SPList list = web.Lists[TargetListName];
                                    SPListItem item = list.Items.Add();
                                    item["CompanyId"] = "xx";
                                   
                                    // Set all fields.
                                    item.Update();
                                }
                            }
                        }
                    }
                }
                finally
                {
                }
            }
           /// <summary>
           /// An item is being updated.
           /// </summary>
           public override void ItemUpdating(SPItemEventProperties properties)
           {
               SPUser privilegedAccount = properties.Web.AllUsers[@"SHAREPOINT\SYSTEM"];
               SPUserToken privilegedToken = privilegedAccount.UserToken;
               try
               {
                   using (SPSite elevatedSite = new SPSite(properties.Web.Url, privilegedToken))
                   {
                       using (SPWeb elevatedWeb = elevatedSite.OpenWeb())
                       {
                           SPList jobDefList;
                           // jobDefWeb = elevatedWeb.Webs[0];
                           jobDefList = properties.Web.Lists["Company"];
                           if (properties.List.ID.ToString().Equals(jobDefList.ID.ToString()))
                           {
                               using (SPSite site = new SPSite(TargetSiteUrl))
                               {
                                  
                                   SPWeb web = site.OpenWeb();
                                   SPList list = web.Lists[TargetListName];
                                   SPListItem item = GetItemByBdcId(list, properties.AfterProperties["Title"].ToString());
                                   item["StockDisplayType"] = properties.AfterProperties["StockDisplayType"];
                                   item["StockDisplayLimit"] = properties.AfterProperties["StockDisplayLimit"];
                                   //Set all fields.
                                   item.Update();
                               }
                           }
                       }
                   }
               }
               finally
               {
               }
           }
           public static SPListItem GetItemByBdcId(SPList list, string bdcIdentity)
           {
               SPListItem myitem = null;
               foreach (SPListItem item in list.Items)
               {
                   if (item["CompanyId"].ToString() == bdcIdentity)
                   {
                       myitem = item;
                   }
               }
               return myitem;
           }


    Alvaro Contreras

    jueves, 7 de marzo de 2013 14:53