SharePoint Online: Métricas de almacenamiento y datos de uso en planes P!

Como sabéis, dentro de Office 365 de forma general hablamos de planes P (Profesionales y pequeñas empresas) y planes E (mediana y gran empresa) lo que implica una diferencia sustancial no sólo en cuestiones de precio sino también de capacidades disponibles. En los planes P siempre tendremos muchas menos capacidades y funcionalidades comparado con un plan de tipo P…aunque a veces sabiendo dónde buscar nos podemos encontrar conque capacidades a priori no disponibles, están ahí para nuestro uso. Esto sucede por ejemplo:

image image

SharePoint 2010: Depuración de custom sandbox activities!

Como sabéis, a nivel de desarrollo de workflows para SharePoint 2010 y cuando hablamos de soluciones de tipo Sandbox no es posible crear flujos de trabajo con “code behind” sino que estamos limitados a crear flujos de trabajo de tipo declarativo con SharePoint Designer 2010 (SPD 2010). Ahora bien, lo que si podemos crear son acciones y condiciones desplegables como soluciones Sandbox y que luego se puedan usar en SPD 2010:

Por supuesto, y aunque no hay un soporte directo, es posible depurar estas actividades personalizadas adjuntado el depurador de Visual Studio a los procesos adecuados:

SharePoint2010_thumb

SharePoint Online: Trabajo con listas y bibliotecas – Creación de Foros!

A raíz de una cuestión en los foros de Office 365, y dado que uno de los grandes problemas (en mi opinión) que está teniendo la adopción de la plataforma es la poca documentación en castellano sobre uso de la misma, me he decidido a ir publicando bajo demanda algunos artículos más de uso de la plataforma para facilitar que aquellas personas que estén comenzando a usarla tengan alguna referencia de la que partir. Por eso, en este primer post vamos a ver como podemos crear un foro de discusión en SharePoint Online en Office 365:

  • Accedemos a nuestro sitio de SharePoint Online y para crear un foro de discusión, nos vamos a Acciones del sitio –> Más opciones.
  • A continuación, en la categoría “Listas” elegimos la opción “Panel de discusión”.
  • Una vez creado, veremos que tenemos acceso a la lista con el panel de discusión. De echo, en un sitio de grupo por defecto disponemos de un foro de discusión (para planes E, para planes P tenemos que crearlo siguiendo este procedimiento.
image image image
  • A partir de aquí, ya podemos empezar a crear nuevos temas de discusión.
  • Una vez añadida una discusión, si pulsamos sobre la misma para ver el contenido ya podremos acceder a una vista de foro más convencional sobre la que ir realizando réplicas y comentarios.
image image

¡Próximos eventos & seminarios en el CIIN…estamos que lo tiramos oiga (II)!

Hace unos días os comentaba que desde el CIIN estamos tirando la casa por la ventana en cuanto a eventos y seminarios que vamos a realizar próximamente y quería realizar una pequeña actualización al respecto ya que hemos optado por separar y dividir los seminarios con el objetivo de facilitar la asistencia a los mismos y complementarlos con WebCasts online. El listado de eventos publicados es el siguiente:

P.D: Si se producen cambios en las fechas, se avisará puntualmente y seguramente iremos añadiendo más eventos y seminarios interesantes a los que ya están publicados.

logoCIIN_GIF

SharePoint Online: Uso del modelo de objetos en cliente desde una aplicación ASP.NET!

A raíz de la última formación sobre Office 365, surgió una cuestión en torno a como a trabajar desde una aplicación ASP.NET con el modelo de objetos en cliente. En su momento comenté “qué igual que con una aplicación de escritorio” y precisamente este post trata de demostrar que esto es así (sin entrar en buenas prácticas de codificación, ya que el código se puede mejorar sin duda, sobre todo la parte de threading en ASP.NET y más después de la genial charla de Luis Guerrero en el Codemotion):

  • En Visual Studio 2010, creamos un proyecto de tipo ASP.NET Web Application.
  • Usando el diseñador de ASP.NET, añadimos referencias a los ensamblados para el modelo de objetos en cliente: Microsoft.SharePoint.Client y Microsoft.SharePoint.Runtime.
  • Añadimos una referencia al proyecto que nos permite conectar a SharePoint Online para obtener un contexto de autenticación vía Claims usando el código creado por Robert Bogue que podéis descargar desde este enlace.
image image image
  • A partir de aquí, toca comenzar a codificar un poco. Comenzando con las directivas using necesarias:
   1: using MO_NET = Microsoft.SharePoint.Client;

   2: using System.Net;

   3: using MSDN.Samples.ClaimsAuth;

   4: using System.Data;

   5: using System.Threading;

  • A continuación, añadimos el siguiente código para el manejador del botón que realiza la conexión a SharePoint Online. Cómo véis es aquí dónde tengo que crear un nuevo Thread motivado porque estoy usando el código de Robert Bogue que implica abrir un control de tipo WebBrowser desde el navegador en este caso para recoger las credenciales de Office 365 que introduzca el usuario.
   1: Thread th = new Thread(ConectSPO);

   2: th.SetApartmentState(ApartmentState.STA);

   3: th.Start();

   4: th.Join();

  • En el thread se ejecuta el siguiente código que nos da el contexto de SharePoint Online que necesitamos para poder comenzar a interactuar con el mismo y trabajar con elementos del sitio usando el modelo de objetos en cliente.
   1: void ConectSPO()

   2: {

   3:     try

   4:     {

   5:         string sTargetSite=

   6:             "https://miccantabria.sharepoint.com/sites/O365Camps";

   7:         using (ctx = ClaimClientContext.GetAuthenticatedContext(sTargetSite))

   8:         {

   9:             ctx.Load(ctx.Web); // Query for Web

  10:             ctx.ExecuteQuery(); // Execute

  11:             this.lblInformation.Text =

  12:                 "Conectado al sitio " + ctx.Web.Title;

  13:         }

  14:     }

  15:     catch (Exception ex)

  16:     {

  17:         this.lblInformation.Text =

  18:             "Error: " + ex.Message;

  19:     }

  20: }

  • El código completo para el botón es el siguiente (qué nos permite acceder a la galería de soluciones del sitio):
   1:  

   2:         protected void btnConectar_Click(object sender, EventArgs e)

   3:         {

   4:             try

   5:             {

   6:                 Thread th = new Thread(ConectSPO);

   7:                 th.SetApartmentState(ApartmentState.STA);

   8:                 th.Start();

   9:                 th.Join();

  10:  

  11:                 using (ctx)

  12:                 {

  13:                     if (ctx != null)

  14:                     {

  15:                         DataTable dtSoluciones =

  16:                             new DataTable();

  17:                         dtSoluciones.Columns.Add("ID");

  18:                         dtSoluciones.Columns.Add("Path");

  19:                         dtSoluciones.Columns.Add("Status");

  20:                         DataRow dtrSolucion;

  21:  

  22:                         //Acceso a la galería de soluciones

  23:                         MO_NET.List solutionList = ctx.Site.GetCatalog(121);

  24:  

  25:                         //Acceso al listado de soluciones

  26:                         MO_NET.ListItemCollection licCollection =

  27:                             solutionList.GetItems(MO_NET.CamlQuery.CreateAllItemsQuery());

  28:  

  29:                         //Definición de operación

  30:                         ctx.Load(licCollection);

  31:  

  32:                         //Realización de operación

  33:                         ctx.ExecuteQuery();

  34:  

  35:                         //Procesado de resultados

  36:                         foreach (MO_NET.ListItem li in licCollection)

  37:                         {

  38:                             dtrSolucion = dtSoluciones.NewRow();

  39:                             MO_NET.FieldLookupValue fl =

  40:                                 (MO_NET.FieldLookupValue)li.FieldValues["Status"];

  41:                             //Solución activada o no

  42:                             if (fl != null)

  43:                             {

  44:                                 dtrSolucion["ID"] = li["ID"];

  45:                                 dtrSolucion["Path"] = li["FileRef"];

  46:                                 dtrSolucion["Status"] = "Activada";

  47:                             }

  48:                             else

  49:                             {

  50:                                 dtrSolucion["ID"] = li["ID"];

  51:                                 dtrSolucion["Path"] = li["FileRef"];

  52:                                 dtrSolucion["Status"] = "Desactivada";

  53:                             }

  54:                             dtSoluciones.Rows.Add(dtrSolucion);

  55:                         }

  56:                         this.grdSoluciones.DataSource =

  57:                             dtSoluciones;

  58:                         this.grdSoluciones.DataBind();

  59:  

  60:                     }

  61:                 }

  62:  

  63:             }

  64:             catch (Exception ex)

  65:             {

  66:                 this.lblInformation.Text =

  67:                     "Error: " + ex.Message;

  68:             }

  69:         }

  70:     }

  • Compilamos y comenzamos a probar que todo funciona como se espera:
    • Se piden las credenciales de Office 365.
    • Se accede a la información del sitio (en este caso a la galería de soluciones del sitio).
image image

Referencias:

SharePoint Online: Creación de un centro de búsquedas personalizado!

A la hora de realizar búsquedas, en SharePoint Online (SPO) como ocurre con un despliegue On-Premise, podemos optar por usar un centro de búsqueda que viene definido por defecto para nuestro tenant o bien crear un centro de búsquedas personalizado para una cierta colección de sitios. En este caso los pasos a seguir son los siguientes:

  • Crear una página de WebParts en nuestro sitio.
  • Elegir para dicha página de WebParts una plantilla con las zonas de WebParts adecuadas.
  • Agregar a la página al menos las siguientes WebParts:
    • Cuadro de búsqueda.
    • Panel de refinamiento.
    • Estadísticas de búsqueda.
    • Resultados principales de la búsqueda
    • Paginación de búsqueda.
image image image
  • El aspecto final de nuestra página de WebParts en modo edición es el que podéis ver más abajo.
  • A continuación para que todo funcione y las búsquedas que realicemos se recojan en la página creada, tendremos que configurar la WebPart de Cuadro de búsqueda para que use dicha página. Para ello, editamos las propiedades de la WebPart y en la propiedad Dirección Url de la página de resultados indicamos la Url de nuestro centro de búsquedas personalizado.
image image image
  • Lo siguiente que tenemos que hacer es configurar nuestra colección de sitios para que se “entere” que tiene que usar esta página de búsquedas. Para ello nos vamos a la página de configuración de la colección y luego a Configuración fe búsqueda.
  • En la página que se abre, simplemente especificamos la Url de dicha página en Página de resultados de la colección de sitios.
  • Desde la página principal del sitio realizamos una búsqueda.
image image image
  • Comprobamos que los resultados se recogen en el centro de búsqueda personalizado.

image

Eventos: Materiales de la charla “Colaboración y las nubes: integrando SharePoint & Azure” en el Codemotion!

El pasado sábado 24 de marzo tuve el placer de participar en la primera edición del Codemotion que tiene lugar en España. La verdad es que da gusto ver como, desde primera hora de la mañana de un sábado, se ha podido movilizar a más de 1.200 personas con hambre de tecnología, de aprender y de ver cosas nuevas. En mi caso, realicé una sesión sobre las posibilidades  de integración de SharePoint & Azure y podéis descargaros la ppt desde este enlace de SUGES. Agradecer a la organización la invitación a participar en el Codemotion y a los asistentes su participación en nuestra sesión que tuvo que competir con una de desarrollo sobre Windows 8 en la sala de al lado.

CodeMotion2 CodeMotion1

SharePoint Online: Error al acceder a los ámbitos de búsqueda!

Simplemente comentar que desde hace varias semanas resulta imposible acceder a la gestión de los ámbitos de búsqueda de nuestros sitos de SharePoint Online debido a un problema conocido por parte de Microsoft y en el que parece, y espero, que estén trabajando en solucionarlo. La referencia a dicho problema la he encontrado en este post del foro de Office 365 de la comunidad inglesa y este es el error de marras:

image image

Lógicamente en SharePoint Online no tenemos posibilidad de saber que está pasando y no queda otra que o abrir un caso de soporte o bien postear el problema en los foros. El problema lo podéis encontrar tanto en planes de tipo P y de tipo E y condiciona la creación de nuevos ámbitos de búsqueda, no afectando a los creados anteriormente.

SharePoint 2010: Problemas al desplegar artefactos desde VS 11 Beta!

Si como en mi caso, estáis empezando a usar VS 11 Beta (cada vez me gusta más) para crear y desplegar artefactos para SharePoint 2010, puede ser que os encontréis con algún que otro error relativo a la URl especificada para el despliegue en el asistente inicial de configuraicón del proyecto. Para solucionarlo simplemente reemplazar la url de la forma http://<NombreMaquina&gt; por http://localhost y listo.

image image

SharePoint 2010: Como crear external content types a partir de procedimientos almacenados!

Como sabéis, a la hora de integrar sistemas externos en SharePoint 2010 contamos con los denominados tipos de contenido externos o ECTs que son parte de los Business Connectivity Services y que nos permiten modelar la conexión a un sistema externo, las entidades que se van a consumir y las operaciones a realizar. En el caso de que nos estemos conectando a una base de datos, podemos definir esas operaciones a través de llamadas a procedimientos almacenados como podréis ver en los siguientes ejemplos:

SharePoint2010_thumb