Blog del CIIN

Blog del Centro de Innovación en Integración de Cantabria

This Blog

Syndication

Search

Tags

Community

Email Notifications

Archives

Enlaces Recomendados

March 2012 - Artículos

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

Publicado 31/3/2012 11:57 por Juan Carlos González Martín | 3 comment(s)

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

Publicado 29/3/2012 22:06 por Juan Carlos González Martín | 1 comment(s)

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

Publicado 29/3/2012 8:02 por Juan Carlos González Martín | 3 comment(s)

Archivado en:

¡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

Publicado 28/3/2012 18:54 por Juan Carlos González Martín | con no comments

Archivado en: ,

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:

Publicado 27/3/2012 17:57 por Juan Carlos González Martín | 4 comment(s)

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

Publicado 26/3/2012 22:48 por Juan Carlos González Martín | 7 comment(s)

Archivado en:

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

Publicado 26/3/2012 9:53 por Juan Carlos González Martín | con no comments

Archivado en:

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.

Publicado 25/3/2012 21:28 por Juan Carlos González Martín | 6 comment(s)

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> por http://localhost y listo.

image image

Publicado 24/3/2012 15:09 por Juan Carlos González Martín | 3 comment(s)

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

Publicado 23/3/2012 12:20 por Juan Carlos González Martín | 1 comment(s)

Visual Studio 11 y SharePoint 2010: Novedades en desarrollo para SharePoint (IV)!

Siguiendo con la serie de posts sobre las novedades en desarrollo para SharePoint 2010 que tenemos en Visual Studio 11 (VS 11) Beta, en esta ocasión vamos a ver que cambios podemos encontrarnos con respecto a la preview de VS 11. Pero antes, os recuerdo los posts previos de la serie:

Para ver las novedades:

  • Iniciamos VS 11 Beta. El primer cambio es el ya conocido de interfaz del que tanto se ha hablado por la red.
  • A continuación procedemos a crear un proyecto para SharePoint 2010. Como veis, disponemos de 5 tipos de proyectos: SharePoint 2010 Project (el equivalente al proyecto vacío para SharePoint en VS 2010), SharePoint 2010 Silverlight Web Part, SharePoint 2010 Visual Web Part, Import SharePoint 2010 Solution Package  e Import Reusable SharePoint 2010 Workflow. Elegimos la plantilla SharePoint 2010 Project.
  • En el asistente de configuración elegimos como tipo de despliegue “Deploy as a sandboxed solution”.
image image image
  • La estructura del proyecto que se crea es la esperada, aunque con el nuevo Look & Feel de VS 11Beta.
  • Añadimos al proyecto un elemento de tipo WebPart (clásico).
  • A continuación se muestra el editor de código para que dotemos de la correspondiente lógica a la WebPart.
image image image
  • Codificamos el método CreateChildControls()…por ejemplo:
   1: protected override void CreateChildControls()
   2: {
   3:     Label lblInformation =
   4:         new Label();
   5:     lblInformation.Text =
   6:         "Hellow world from CloudShare Dev";
   7:     this.Controls.Add(lblInformation);
   8: }
  • Compilamos y depuramos la WebPart en el entorno de desarollo y cuando estemos listos, procedemos a publicarla ya sea en SharePoint On-Premise o en SharePoint Online (SPO) utilizando la opción “Publish”.
  • En mi caso he especificado un sitio de SPO.
  • Cuando se soliciten las credenciales de Office 365, las añadimos.
image image image
  • Por supuesto, el proceso de despliegue de la WebPart en SPO es el mismo que tenemos en nuestro entorno local.
   1: ------ Build started: Project: CloudShareWP, Configuration: Debug Any CPU ------
   2:   CloudShareWP -> c:\users\jgonzalez\documents\visual studio 11\Projects\CloudShareVSDemoProject\CloudShareWP\bin\Debug\CloudShareWP.dll
   3:   Successfully created package at: c:\users\jgonzalez\documents\visual studio 11\Projects\CloudShareVSDemoProject\CloudShareWP\bin\Debug\CloudShareWP.wsp
   4: ========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
   5: ------ Publish started: Project: CloudShareWP.wsp ------
   6: Add Solution:
   7:   Uploading solution 'CloudShareWP.wsp' ...
   8: ========== Publish: 1 succeeded, 0 failed, 0 skipped ==========
  • Concluido el proceso de despliegue, se abre el navegador mostrando la galería de soluciones Sandbox. Localizamos la solución en cuestión y la activamos.
  • En una página de SharePoint, insertamos la WebPart.
  • Comprobamos que la WebPart está operativa en dicha página.
image image image

Publicado 22/3/2012 13:05 por Juan Carlos González Martín | 8 comment(s)

SharePoint 2010: Puertos necesarios para un despliegue en modo granja!

Esta cuestión la planteaban el otro día en los foros de SharePoint en TechNet por lo que para disponer de la referencia a mano, os dejo un par de enlaces en los que se recogen los puertos que se necesitan para un despliegue en modo granja para SharePoint 2010:

clip_image002

Publicado 21/3/2012 8:46 por Juan Carlos González Martín | 2 comment(s)

SharePoint Online: ¿Se pueden desplegar un validador de soluciones Sandbox?

Como sabéis, una de las opciones de despliegue de soluciones en SharePoint 2010 es el denominado despliegue en modo Sandbox que implica cargar el .WSP generado en la galería de soluciones a nivel de colección de sitios. Por defecto, tanto SharePoint 2010 como SharePoint Online disponen en dicha galería de validadores de soluciones cuyo cometido es precisamente ese: validar que la solución cargada y que se quiere activar es correcta para ser usada en los sitios de la colección. Este validador es totalmente dummy en SharePoint On-Premise, y no lo es en SharePoint Online ya que cuenta con cierta inteligencia que controla que la solución Sandbox desplegada no contenga referencias prohibidas por ejemplo. Una pregunta que nos podemos hacer es si es posible desplegar validadores de soluciones en SharePoint Online y la respuesta es que no ya que la clase SPSolutionValidator de la que hereda no está permitida para desplegar en una solución de tipo Sandbox. Finalmente, os dejo un ejemplo de validador personalizado: http://www.zimmergren.net/technical/sp-2010-validate-sandboxed-solutions-using-spsolutionvalidator.

image

Publicado 20/3/2012 17:55 por Juan Carlos González Martín | 2 comment(s)

Archivado en:

SharePoint Online: Como permitir que usuarios anónimos escriban en una lista que requiere autenticación!

Cuando nos encontramos con la necesidad de qué usuarios anónimos puedan escribir datos en una lista de  SharePoint Online, tenemos que recurrir a un pequeño desarrollo que haga posible esto teniendo en cuenta que no es posible hacer elevación de privilegios:

  • En VS 11 Beta, creamos un proyecto de tipo SharePoint 2010 Project.
  • Elegimos como tipo de despliegue “Deploy as a sandboxed solution”.
  • Añadimos una característica al proyecto que configuramos de acuerdo a nuestras necesidades. Añadimos un Feature Event Receiver a la feature.
image image image
  • Codificamos el manejador para el evento FeatureActivated() de forma que configuremos el acceso anónimo a una lista. Lo que tenemos que hacer por una parte romper la herencia de permisos de la lista con respecto al sitio principal para a continuación especificar la secuencia de permisos a aplicar par el caso de acceso anónimo (propiedad AonymousPermMask64).
   1: SPWeb web = properties.Feature.Parent as SPWeb;
   2: SPList list = web.Lists["Productos"];
   3: // Chequear si tiene permisos unicos
   4: if (!list.HasUniqueRoleAssignments)
   5: {
   6:     list.BreakRoleInheritance(true);
   7:     //Aseguramos que cada uno pueda editar sus propios items
   8:     list.WriteSecurity = 2;
   9:  
  10:     // Concedemos permisos a usuarios anonimos
  11:     list.AnonymousPermMask64 =
  12:         (SPBasePermissions.Open |
  13:          SPBasePermissions.OpenItems |
  14:          SPBasePermissions.ViewFormPages |
  15:          SPBasePermissions.ViewListItems |
  16:          SPBasePermissions.AddListItems);
  17:  
  18:     list.Update();
  19: }
  • Lo siguiente simplemente es desplegar la solución Sandbox en SharePoint Online, proceso que con VS 11 Beta se simplifica.
  • Activamos la solución en la galería de soluciones Sandbox del sitio.
  • Activamos la correspondiente característica.
image image image
  • Comprobamos que efectivamente la rotura de permisos se ha realizado a través de las opciones de administración de la lista y en concreto la relativa a la gestión de permisos. Vemos como además los usuarios anónimos aparecen con permisos en la lista.
  • Finalmente, simplemente navegamos a la lista de forma anónima y comprobamos que podemos interactuar con ella.
image image
  • Por supuesto, cuando se desactive la característica deberíamos deshacer la rotura de permisos de forma que la lista vuelva a heredarlos. Para ello codificamos el manejador de FeatureDeactivating() de la siguiente forma:
   1: public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
   2: {
   3:     SPWeb web = properties.Feature.Parent as SPWeb;
   4:     SPList list = web.Lists["Productos"];
   5:     // Chequear si tiene permisos unicos
   6:     if (list.HasUniqueRoleAssignments)
   7:     {
   8:         list.ResetRoleInheritance();
   9:         list.Update();
  10:     }
  11: }

Publicado 19/3/2012 21:20 por Juan Carlos González Martín | 8 comment(s)

Office 365: Virtual Labs en MSDN!

Si el otro día os hablaba de la disponibilidad de una serie de virtual labs sobre SharePoint 2010, en esta ocasión os dejo las referencias a una serie de Virtual Labs de Office 365 y otros contenidos sobre la plataforma de productividad de Microsoft en la nube:

Publicado 18/3/2012 23:04 por Juan Carlos González Martín | 3 comment(s)

Archivado en:

SUGES: Disponibles los materiales de los últimos WebCasts realizados!

Ya están disponibles para descarga los materiales de los dos últimos WebCasts que hemos realizado en SUGES. De nuevo agradecer a los asistentes y a los ponentes su participación en los mismos. Os dejo las Urls de descarga:

  • Búsquedas en SharePoint, para desarrolladores, descarga los materiales desde: 20120314_ChatExpertos.
  • Charla con los expertos: Todo lo que siempre quisiste saber sobre SharePoint, pero no te atreviste a preguntar!, descarga los materiales desde: 2012022_Busquedas.

image

Publicado 18/3/2012 10:04 por Juan Carlos González Martín | con no comments

Archivado en:

SQL Azure & SQL Server 2012: BDs de ejemplo listas para ser desplegadas!

Si necesitas disponer de BD’s de ejemplo tanto para SQL Server 2012 como para SQL Azure (basado en SQL Server 2012), dispones de una serie de BD de datos de ejemplo listas para descargar y utilizar:

image

Publicado 17/3/2012 9:45 por Juan Carlos González Martín | con no comments

SharePoint Online: Cómo abrir ventanas modales desde WebParts!

Hace un tiempo escribía como nos las podemos ingeniar para abrir una ventana modal, aprovechando el framework de ventanas modales de SharePoint 2010, desde una WebPart visual. La solución pasaba por registrar el correspondiente JavaScript en el servidor de manera que luego pudiese ser utilizado en la página devuelta por el mismo….¿y esto funciona con soluciones Sandbox? Pues sí, pero no de la misma forma (sorprendentemente):

  • Creamos un proyecto de tipo vacío para SharePoint 2010 y elegimos como tipo de despliegue Sandbox.
  • Creamos una pequeña WebPart visual (preparada para el Sandbox) que cuente con un botón por ejemplo.

image

  • Codificamos la WebPart de manera que al evento OnClientClick del botón le añadamos la llamada a la función JavaScript responsable de abrir la ventana modal.
   1: protected void Page_Load(object sender, EventArgs e)
   2: {
   3:     //Añadimos el manejador para Control.PreRender
   4:     if (!Page.IsPostBack)
   5:     {
   6:         string sTargetuRl =
   7:             "http://www.ciin.es";
   8:         this.btnRequest.OnClientClick =
   9:             @"OpenDialog('" +
  10:             sTargetuRl +
  11:             "'); return false;";
  12:     }
  13: }
  • Y es aquí donde llega la diferencia con respecto al caso de la WebPart visual ya que aparentemente añadir un evento PreRender() no es suficiente para registrar el código JavaScript correspondiente.
  • ¿Y qué hacemos? Pues añadir el código JavaScript en la página de otra forma…por ejemplo en una WebPart editor de contenido.
   1: <script language='javascript'>
   2:     function OpenDialog(formURL) 
   3:     {
   4:         var options = SP.UI.$create_DialogOptions();
   5:         options.url = formURL;
   6:         SP.UI.ModalDialog.showModalDialog(options); 
   7:     }
   8: </script>
  • Y a partir de aquí, simplemente añadimos el código anterior en la WebPart de tipo Editor de contenido.
  • Guardamos los cambios.
  • Comprobamos que la ventana modal se muestra.
image image image

Siempre me queda la duda de si alguna vez SharePoint no me sorprenderá y la verdad, creo que siempre me sorprenderá…todos los días se aprende algo nuevo.

Publicado 16/3/2012 17:28 por Juan Carlos González Martín | 4 comment(s)

SharePoint Online: Cómo leer información relativa a las soluciones Sandbox cargadas!

En este artículo os comentaba como activar soluciones Sandbox, y por ende características, utilizando el modelo de objetos en cliente (CSOM). Pero, ¿Cómo puedo trabajar con la galería de soluciones Sandbox desde el CSOM? Pues de la misma forma como se trabajaría con una lista o biblioteca convencional de un sitio. Al fin y al cabo, la galería de soluciones no es más que una biblioteca de SharePoint:

  • En el ejemplo en cuestión, y para acceder a la galería de soluciones en SharePoint Online, necesitamos necesariamente hacer uso de nuevo de un ClaimClientContext gracias al ejemplo de Rober Bogue y que nos permitirá especificar las credenciales para Office 365.
  • A partir de aquí, trabajar con la galería de soluciones pasa por acceder a la misma mediante el método GetCatalog y el identificador de la misma (121) para posteriormente acceder a las soluciones almacenadas y mostrar la correspondiente información por pantalla.
   1: static void LeerSoluciones()
   2: {
   3:     try
   4:     {
   5:         string targetSite =
   6:             "https://miccantabria.sharepoint.com/sites/O365Camps";
   7:         using (MO_NET.ClientContext ctx = ClaimClientContext.GetAuthenticatedContext(targetSite))
   8:         {
   9:             if (ctx != null)
  10:             {
  11:                 //Acceso a la galería de soluciones
  12:                 MO_NET.List solutionList = ctx.Site.GetCatalog(121);
  13:                 
  14:                 //Acceso al listado de soluciones
  15:                 MO_NET.ListItemCollection licCollection = 
  16:                     solutionList.GetItems(MO_NET.CamlQuery.CreateAllItemsQuery());
  17:  
  18:                 //Definición de operación
  19:                 ctx.Load(licCollection);                            
  20:  
  21:                 //Realización de operación
  22:                 ctx.ExecuteQuery();
  23:  
  24:                 //Procesado de resultados
  25:                 foreach (MO_NET.ListItem li in licCollection)
  26:                 {   
  27:                     MO_NET.FieldLookupValue fl= (MO_NET.FieldLookupValue)li.FieldValues["Status"];
  28:                     //Solución activada o no
  29:                     if (fl!=null)
  30:                     {
  31:                         Console.WriteLine(li["ID"] + " - " + li["FileRef"] + " - " + fl.LookupValue);
  32:                     }
  33:                     else
  34:                     {
  35:                         Console.WriteLine(li["ID"] + " - " + li["FileRef"] + " - 0");
  36:                     }                            
  37:                 }
  38:             }
  39:         }
  40:     }
  41:     catch (Exception ex)
  42:     {
  43:         Console.WriteLine("Error: {0}", ex.Message);
  44:     }
  45: }
  • Sin más, comprobamos que soluciones tenemos disponibles en la galería.
  • Y por supuesto, nuestra salida por pantalla muestra las mismas soluciones.
image image

Referencias:

Publicado 15/3/2012 22:38 por Juan Carlos González Martín | 4 comment(s)

Office 365: Ahora más barato…los precios bajan un 20 %!

Buena noticia sin duda para todos aquellos que actualmente están usando Office 365 y para los que quieren comenzar a usarlo y tenían sus dudas por cuestiones de precio. Microsoft acaba de realizar una bajada de un 20 % en los precios de los distintos planes y offerings de Office 365 tal y como podéis ver en este enlace. Dicha rebaja ya está actualmente disponible en el sitio de Office 365.

image

Publicado 14/3/2012 21:21 por Juan Carlos González Martín | 3 comment(s)

Archivado en:

Más artículos Página siguiente >