SharePoint 2010: Apertura de ventanas modales y páginas desde acciones personalizadas (III)!

Siguiendo con la serie de posts en torno a la apertura de ventanas modales y páginas desde acciones personalizadas, en este nuevo artículo vamos a ver como podemos crear una acción personalizada de forma programática (que no declarativa) vinculada a una lista en exclusiva (algo que declarativamente no es posible de forma sencilla) y además desplegarla en nuestro sitio de SharePoint como una solución Sandbox lo que nos permitiría su uso en SharePoint Online en Office 365. Pero antes, os recuerdo los dos artículos previos de la serie:

Para abrir una ventana modal mediante una acción personalizada creada de forma programática:

  • En Visual Studio creamos un proyecto de tipo “Empty SharePoint Project”.
  • En el asistente de configuración especificamos como tipo de despliegue Sandbox.
  • Una vez creado el proyecto, a través del explorador de soluciones y situándonos en el nodo Feature añadimos una característica.
image image image
  • Configuramos la característica de forma adecuada, y le añadimos un Feature Event Receiver que es dónde vamos a añadir toda la lógica para la creación de la acción personalizada de forma programática.
  • Configuramos el método FeatureActivated() de la siguiente forma:
       1: public override void FeatureActivated(SPFeatureReceiverProperties properties)

       2: {

       3:     SPWeb spwWeb = (SPWeb)properties.Feature.Parent;        

       4:     SPList splList = spwWeb.Lists.TryGetList("Tareas");

       5:     SPUserCustomAction spucCustomAction = splList.UserCustomActions.Add();

       6:     spucCustomAction.Location = "CommandUI.Ribbon.ListView";

       7:     spucCustomAction.Sequence = 85;

       8:     spucCustomAction.Title = "Ayuda";

       9:     spucCustomAction.CommandUIExtension =

      10:         @"<CommandUIExtension>"Ribbon.ListItem.Actions.Controls._children"">"Ribbon.ListItem.Actions.Controls.HelpButton"" TemplateAlias=""o1"" Command=""HelpCommand"" "http://demo2010a:100/sites/PortalIntranet/Documentos%20compartidos/Logo_Ayuda.gif"" "General"" LabelText=""Ayuda"" />"HelpCommand"" CommandAction=""javascript:SP.UI.ModalDialog.showModalDialog({url:'/_layouts/help.aspx',dialogReturnValueCallback: function(dialogResult, returnValue) { SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK) }})""/>;

      11:             <CommandUIDefinitions>

      12:                 <CommandUIDefinition Location="

      13:                     <Button Id="

      14:                     Image32by32="

      15:                     CommandType="

      16:                 </CommandUIDefinition>

      17:             </CommandUIDefinitions>

      18:             <CommandUIHandlers>

      19:                 <CommandUIHandler Command ="

      20:             </CommandUIHandlers></CommandUIExtension>"

      21:     spucCustomAction.Update();

      22: }

  • Como vemos, la gracia de pode añadir una acción personalizada a una lista en concreta radica en crear una instancia de SPUserCustomAction que nos habilita para:
    • Añadir una acción personalizada a la lista deseada.
    • Especificar la ubicación de la acción a través de la propiedad Location.
    • Especificar el orden de aparición de la acción mediante la propiedad Sequence.
    • Y finalmente, y lo más importante, especificar la definición completa de la acción a través de la propiedad CommandUIExtension. Fijaros que aquí se está indicando la ubicación concreta de la acción (en la Ribbon de lista, en la sección Acciones), la imagen a utilizar (previamente cargada en el sitio o provisionada en el propio proyecto mediante un elemento de tipo módulo), y el comando que en este caso nos permite levantar la ventana modal especificando un bloque JavaScript que hace uso del Framework de ventanas modales.
  • Configuramos el método FeatureDeactivating() para realizar la correspondiente limpieza:
   1: public override void FeatureDeactivating(SPFeatureReceiverProperties properties)

   2: {

   3:     SPWeb spwWeb = (SPWeb)properties.Feature.Parent;                

   4:     SPList splList = spwWeb.Lists.TryGetList("Tareas");

   5:     SPUserCustomActionCollection spuccCustomActionsConllection =

   6:         splList.UserCustomActions;

   7:     foreach (SPUserCustomAction spucCustomAction in spuccCustomActionsConllection)

   8:     {

   9:         if (spucCustomAction.Title == "Ayuda")

  10:         {

  11:             spucCustomAction.Delete();

  12:             break;

  13:         }

  14:     }

  15: }

  • Compilamos el proyecto y lo desplegamos en nuestro sitio de SharePoint. Comprobamos que la acción personalizada se ha añadido correcatamente en la Ribbon.
  • Finalmente comprobamos que la acción funciona como se espera:
image image

Referencias:

Publicado por

Juan Carlos González

Juan Carlos es Ingeniero de Telecomunicaciones por la Universidad de Valladolid y Diplomado en Ciencias Empresariales por la Universidad Oberta de Catalunya (UOC). Cuenta con más de 12 años de experiencia en tecnologías y plataformas de Microsoft diversas (SQL Server, Visual Studio, .NET Framework, etc.), aunque su trabajo diario gira en torno a SharePoint & Office 365. Juan Carlos es MVP de Office Servers & Services desde 2015 (anteriormente fue reconocido por Microsoft como MVP de Office 365 y MVP de SharePoint Server desde 2008 hasta 2015), coordinador del grupo de usuarios .NET de Cantabria (Nuberos.Net, www.nuberos.es), co-fundador y coordinador del Grupo de Usuarios de SharePoint de España (SUGES, www.suges.es), así como co-director de la revista gratuita en castellano sobre SharePoint CompartiMOSS (www.compartimoss.com). Hasta la fecha, ha publicado 8 libros sobre SharePoint & Office 365 y varios artículos en castellano y en inglés sobre ambas plataformas.

2 comentarios en “SharePoint 2010: Apertura de ventanas modales y páginas desde acciones personalizadas (III)!”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *