SharePoint 2013: Mejoras en la inserción de videos (II)!

Siguiendo con la serie de artículos sobre mejoras en la inserción y uso de videos en SharePoint 2013, en esta ocasión vamos a ver como insertar un video procedente de una fuente externa como puede ser Youtube:

  • Como siempre, a través de la pestaña “Insertar” de la cinta pulsamos sobre “Audio y video” y en este caso elegimos la opción “Insertar”.
  • A continuación se abre una ventana modal en la que podemos añadir código HTML y/o JavaScript.
  • En este caso, añadimos el HTML relativo al <iFrame> que hemos tomado del video de Youtube que queremos mostrar en la página de SharePoint. Fijaros como, una vez añadido el HTML se muestra una pre_visualización del mismo (del video en este caso).
image image image
  • Pulsamos el botón “Insertar” de forma que se muestra el video en la página sin guardar todavía.
  • Guardamos la página y comprobamos que el video se muestra y reproduce sin problemas.
image image
Anuncios

[Evento]: Disponibles los materiales del WebCast “Creación aplicaciones de negocio con LightSwitch y SharePoint 2013”!

Ya están disponibles para descarga los materiales del primer webcast de SUGES en 2013 en el qué de la mano de Edin Kapic pudimos ver la potencia de LightSwitch para crear rápidamente aplicaciones y hacerlas disponibles en sitios de SharePoint 2013. Agradecer a Edin el genial webcast realizado y a todos los asistentes su participación en el mismo. Podéis descargaros los materiales desde este enlace.

image

SharePoint 2013: Tip para desplegar y probar un manejador de eventos remoto en un despliegue OnPremise (II)!

Siguiendo con la serie de artículos sobre tips para desplegar y probar manejadores de eventos remotos en despliegues On-Premise, en esta ocasión vamos a ver un workaround necesario para que el manejador remoto esté operativo una vez desplegado:

  • Lo primero, os pongo en antecedentes: si creáis un manejador de eventos remoto en una aplicación de tipo SharePoint Hosted, os encontraréis conque al depurar el manejador funciona sin problemas como es esperable. En cambio, si desplegáis la aplicación y probáis el manejador remoto “en real”, pues veréis que no hace nada…¿Qué leches está pasando? Pues sin rascar el detalle, parece qué el servicio WCF con la lógica del manejador no se está registrando de forma correcta con la aplicación.
  • Y ahora a por el workaround para por lo menos conseguir que el manejador esté operativo cuando se despliega la aplicación…si nos vamos al explorador de soluciones de nuestro proyecto, veremos como el proyecto web que contiene la definición del manejador (os recuerdo que es un servicio WCF) tiene Urls de tipo http://localhost:puerto y https://localhost:puerto para las  propiedades Dirección URL y Dirección URL de SSL…lo que nos da una pista de dónde puede estar el problema, ya que la aplicación desplegada en SharePoint va a estar en un dominio aislado que no tiene nada que ver con localhost.

image

  • Esto me lleva de nuevo a qué, por un motivo que todavía no tengo claro, el servicio WCF del manejador no se está registrando de forma correcta con la aplicación…vale, ¿y cómo salimos del paso para probar en real el manejador? Pues de una forma relativamente sencilla: en primer lugar, desde el explorador de soluciones hacemos un “Browse” del servicio WCF para qué esté levantado.

image

  • En segundo lugar, en el proyecto de aplicación para SharePoint editamos el archivo “elements.xml” en el qué están definido el manejador y en particular los eventos a controlar. Si os fijáis en dicha definición, veréis que por cada evento a controlar hay una sección <Receiver> y dentro de la misma se recoge el tipo de evento a manejar utilizando la sección <Type> y la Url dónde está disponible el servicio WCF mediante la sección <Url>. Precisamente es la sección <Url> la clave de todo. Por defecto, el valor de la misma es algo así como ~remoteAppUrl/ServicioWCFManejador.svc…pero, por el motivo qué sea cuando se despliega la aplicación y se añade en un sitio, ese servicio WCF no está disponible en esa Url. Entonces, para qué el manejador esté operativo reemplazamos el valor de <Url> por el valor de la propiedad Dirección URL qué hemos comentado antes, es decir, por un valor de la forma http://localhost:puerto/ServicioWCFManejador.svc. Desplegamos de nuevo la aplicación y al probarla, comprobaremos qué el manejador funciona como debería.
   1:  <?xml version="1.0" encoding="utf-8"?>
   2:  <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
   3:    <Receivers ListTemplateId="10000">
   4:        <Receiver>
   5:          <Name>SPRERSampleItemAdding</Name>
   6:          <Type>ItemAdding</Type>
   7:          <SequenceNumber>10000</SequenceNumber>
   8:          <Url>http://localhost:17083/SPRERSample.svc</Url>
   9:        </Receiver>
  10:        <Receiver>
  11:          <Name>SPRERSampleItemDeleting</Name>
  12:          <Type>ItemDeleting</Type>
  13:          <SequenceNumber>10000</SequenceNumber>
  14:          <Url>~remoteAppUrl/SPRERSample.svc</Url>
  15:        </Receiver>
  16:        <Receiver>
  17:          <Name>SPRERSampleItemAdded</Name>
  18:          <Type>ItemAdded</Type>
  19:          <SequenceNumber>10000</SequenceNumber>
  20:          <Url>~remoteAppUrl/SPRERSample.svc</Url>
  21:        </Receiver>
  22:    </Receivers>
  23:  </Elements>

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

En el próximo post de la serie, espero contaros como registrar de forma correcta el manejador remoto en SharePoint 2013 OnPremise para evitar tener que realizar estos workaround.

SharePoint 2013: Cómo añadir propiedades personalizadas en la ToolPart de una WebPart (I)!

Si queremos añadir propiedades personalizadas en el ToolPart de una WebPart para SharePoint 2013 creada con Visual Studio 2012 podemos seguir una aproximación similar a las ya conocida para versiones previas de SharePoint:

  • En Visual Studio 2012 creamos un proyecto de tipo “SharePoint 2013 – Proyecto vacío”, elegimos como tipo de despliegue “Granja”.
  • A continuación, añadimos un elemento de tipo “Elemento web visual”.
  • En el diseñador de la WebPart añadimos un simple control de tipo Label.

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }image

  • Nos vamos a la vista de código de la WebPart y modificamos la clase parcial correspondiente de la siguiente forma:
   1:  using System;
   2:  using System.ComponentModel;
   3:  using System.Web.UI.WebControls.WebParts;
   4:   
   5:  namespace SPCustomWPProperties.SPCustomPropertiesWPSample
   6:  {
   7:      [ToolboxItemAttribute(false)]
   8:      public partial class SPCustomPropertiesWPSample : WebPart
   9:      {
  10:          private String _intranetUrl = null;
  11:        
  12:          [Personalizable(), WebBrowsable]
  13:          public String IntranetUrl
  14:          {
  15:              get { return _intranetUrl; }
  16:              set { _intranetUrl = value; }
  17:          }
  18:   
  19:          public SPCustomPropertiesWPSample()
  20:          {
  21:          }
  22:   
  23:          protected override void OnInit(EventArgs e)
  24:          {
  25:              base.OnInit(e);
  26:              InitializeControl();
  27:          }
  28:   
  29:          protected void Page_Load(object sender, EventArgs e)
  30:          {
  31:              this.Label1.Text = this.IntranetUrl; 
  32:          }
  33:      }
  34:  }

Como se puede comprobar en el código anterior:

  • Hemos añadido una propiedad de tipo String a la clase que decoramos con los atributos Personalizale() y WebBrowsable que son los que permiten que aparezca en el panel de control de la WebPart lista para su uso.
  • A continuación en el método CreateChildControls() simplemente inicializamos el valor del miembro añadido en la clase del control de usuario con el valor de la propiedad personalizada.

Una vez añadida la propiedad, sólo nos queda probar la funcionalidad de la misma:

  • Desplegamos la WebPart desde Visual Studio utilizando la opción “Implementar”.
  • Añadimos la WebPart en una página del sitio y a través del menú de edición comprobamos que en la sección “Miscellaneous” o “Varios” en función del idioma aparece la propiedad creada y lista para su uso.

image

SharePoint: Causas y posibles soluciones del error HRESULT: 0x80131904 (I)!

Si estás trabajando con SharePoint y de repente te empiezas a encontrar con errores de tipo “error HRESULT: 0x80131904” cuando haces operaciones típicas como visualizar elementos de lista, actualizar elementos existentes, crear elementos nuevos, …muy probablemente tengas problemas de espacio en el SQL Server utilizado en el despliegue de SharePoint. En concreto, este error se puede producir porque:

En cuanto a soluciones para el problema:

  • Si nos hemos quedado sin espacio en disco, dotar de más espacio para solucionar el problema.
  • Si es la versión de SQL (versiones Express) quien está dando el problema, actualizar a una versión de SQL Server que lo solucione (versiones Estándar o Empresarial)

SharePoint 2010: Como cambiar algunas páginas de aplicación mediante el modelo de objetos!

En esta ocasión os dejo un tip rápido relativo a como cambiar, en SharePoint 2010, algunas de las páginas de aplicación típicas como Login.aspx, Error.aspx, etc por nuestras propias páginas. En este artículo podéis encontrar una posibilidad para realizar dicho cambio mediante PowerShell, lo qué es equivalente a hacerlo mediante el modelo de objetos. Como veréis, el truco pasa por:

  • Crear una instancia de la Colección de Sitios (SPSite) donde queremos hacer el cambio.
  • Acceder a la propiedad WebApplication de la colección, lo qué nos permite obtener la correspondiente aplicación web.
  • Cambiar, mediante el método UpdateMappedPage del objeto SPWebApplication la página de aplicación deseada.
  • Actualizar la aplicación web en cuestión.

SharePoint 2013: Tip para desplegar y probar un manejador de eventos remoto en un despliegue OnPremise (I)!

Cuando estás tratando de desplegar un manejador de eventos remoto en SharePoint 2013 OnPremise, te puedes encontrar con ciertos comportamientos no esperados que por suerte tienen remedio. El primero de ellos es qué despliegues la aplicación asociada al manejador y te encuentres qué al ir a agregarla a un sitio:

  • Te encuentras conque la aplicación aparece deshabilitada, lo que impide qué se pueda agregar.
  • Si pulsas el enlace “Descubra por qué” bajo el icono de la aplicación, se muestra una página de detalle de la aplicación en la que se informa que no se puede agregar al sitio debido a qué la aplicación no es compatible con el servidor…es entonces cuando tras quedarte unos segundos perplejo ya qué el tipo de aplicación en este caso es de tipo “SharePoint Hosted”, te das cuenta qué a pesar de qué la aplicación se creó en este modo, es necesario realizar ciertas configuraciones adicionales relativas al manejador de eventos remoto para qué una vez desplegada se pueda agregar en el sitio.
  • En concreto, es necesario configurar adecuadamente los archivos “web.config” del manejador de eventos y manifiesto de la aplicación.
image image image
  • En el archivo “web.config”, es necesario comentar las propiedades que aparecen dentro de <appSettings> relativas a ClientId y ClientSecret qué para aplicaciones de tipo SharePoint Hosted no son necesarias.
   1:  <?xml version="1.0" encoding="utf-8"?>
   2:   
   3:  <!--
   4:    Para obtener más información sobre cómo configurar la aplicación de ASP.NET, visite
   5:    http://go.microsoft.com/fwlink/?LinkId=169433
   6:    -->
   7:   
   8:  <configuration>
   9:      <system.web>
  10:        <compilation debug="true" targetFramework="4.0" />
  11:      </system.web>
  12:    <appSettings>
  13:      <!--
  14:      <add key="ClientId" value="" />
  15:      <add key="ClientSecret" value="09I97+iEkkGT+NgQF9KJu7G/2712iNSmM7Moc+KQD3M=" />-->
  16:    </appSettings>
  17:    <system.serviceModel>
  18:      <bindings>
  19:        <basicHttpBinding>
  20:          <!--Usado por aplicación para SharePoint-->
  21:          <binding name="secureBinding">
  22:            <security mode="Transport" />
  23:          </binding>
  24:        </basicHttpBinding>
  25:      </bindings>
  26:      <protocolMapping>
  27:        <add binding="basicHttpBinding" scheme="https" bindingConfiguration="secureBinding" />
  28:      </protocolMapping>
  29:    </system.serviceModel>
  30:  </configuration>

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

  • En el manifiesto de la aplicación, en la etiqueta <AppPrincipal> comentamos la etiqueta que viene por defecto y añadimos <Internal/>.
   1:  <?xml version="1.0" encoding="utf-8" ?>
   2:  <!--Created:cb85b80c-f585-40ff-8bfc-12ff4d0e34a9-->
   3:  <App xmlns="http://schemas.microsoft.com/sharepoint/2012/app/manifest"
   4:       Name="SPRemoteEventReceiverApp"
   5:       ProductID="{f8f39e90-7b8b-4f23-b1ca-ae72aefe9195}"
   6:       Version="1.0.0.1"
   7:       SharePointMinVersion="15.0.0.0">
   8:    <Properties>
   9:      <Title>SP Remote Event Receiver App</Title>
  10:      <StartPage>~appWebUrl/Pages/Default.aspx?{StandardTokens}</StartPage>
  11:    </Properties>
  12:   
  13:    <AppPrincipal>
  14:      <!--<AutoDeployedWebApplication />
  15:      <Internal/>-->
  16:      <Internal/>
  17:    </AppPrincipal>
  18:  </App>

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

  • Si desplegamos de nuevo la aplicación, veremos que ya está disponible para agregar en nuestro sitio y que por lo tanto podemos empear a probar el manejador de eventos remoto.

image

Finalmente, si queremos desplegar la aplicación con el manejador de eventos remoto en SharePoint Online, tenemos que descomentar lo que se ha comentado en los archivos “web.config” y manifiesto de la aplicación.