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

[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.

SharePoint Online: Límites SW en la nueva versión!

Poco a poco sigue aflorando documentación relativa a las nuevas versiones de SharePoint, tanto On-Premise como Online. Para el caso de SharePoint Online, una pregunta muy habitual es la relativa al espacio de almacenamiento que tendremos disponible y que es función del tipo de plan. Esta información la podréis encontrar en este enlace. Algunos comentarios respecto al tema de almacenamiento:

  • Por cada tipo de plan se disponen de 10 GB de base + 500 MB por usuario. La diferencia entre planes la tendremos en el número máximo de usuarios soportados. Así, para un plan de tipo Small Business, tenemos que el número máximo de usuarios es de 50.
  • Podemos adquirir almacenamiento adicional desde planes Small Business con un coste de 0,2 $ / GB por mes.

image

SharePoint: Comparativa de funcionalidades entre versiones!

Dentro del goteo (lento, pero seguro como diría alguno) de información oficial sobre la nueva versión de SharePoint, por fin disponemos de una primera comparativa de capacidades y características tanto para las distintas versiones de SharePoint On-Premise (Foundation, Estándar y Empresarial para SharePoint Online y los distintos planes qué tendremos disponibles. Esta comparativa, la podéis encontrar en este enlace de Microsoft TechNet. Además, Andrew Connell en este artículo se ha tomado la molestia de crear y compartir un estupendo Excel con esa comparativa, qué resulta mucho más fácil de seguir.

Además de estas dos comparativas que son desde luego las referencias a seguir, hay alguna más no oficial y qué hay que mirar con cuidado. Por ejemplo, esta comparativa realizada por fpweb compara ambas versiones de SharePoint y también las ediciones estándar y empresarial de SharePoint 2013. Los detalles de la comparación los tenéis en este enlace. Y la comparativa entre las versiones estándar y empresarial de SharePoint 2013 en este otro enlace.

image

SharePoint 2013: Error al guardar un sitio como plantilla!

Si estás trabajando con SharePoint 2013 y quieres guardar un sitio como plantilla, puede ser que te encuentres conque no puedes y te sale la “mítica página amarilla de la muerte” de ASP.NET…pero tranquilo, no es qué no se pueda guardar un sitio como plantilla, sino que dependiendo de lo que se haya añadido en el sitio pues a SharePoint le hace “pupa” o no:

  • La opción de “Guardar sitio como plantilla” aparece bajo “Acciones del sitio” en la página de configuración".
  • En la página qué se muestra a continuación especificamos el nombre para la plantilla y para el archivo de plantilla.
  • Pulsamos el botón de “Guardar” y toma, pantalla amarilla de la muerte….¿qué coj…leches está pasando?e
image image image
  • Pues si nos vamos a los logs e investigamos un poquito nos encontraremos con esta valiosa información:

01/16/2013 04:55:58.88     w3wp.exe (0x21AC)                           0x3050    SharePoint Foundation             General                           8nca    Medium      Application error when access /_layouts/15/savetmpl.aspx, Error=No se puede guardar el sitio como plantilla porque contiene las siguientes aplicaciones que no funcionan en plantillas:   SPRESTAppDemo     en Microsoft.SharePoint.SPSolutionExporter.ExportWebAsSolution()     en Microsoft.SharePoint.SPSolutionExporter.ExportWebToGallery(SPWeb web, String solutionFileName, String title, String description, ExportMode exportMode, Boolean includeContent, String workflowTemplateName, String destinationListUrl, Action`1 solutionPostProcessor, Boolean activateSolution)     en Microsoft.SharePoint.ApplicationPages.SaveAsTemplatePage.BtnSaveAsTemplate_Click(Object sender, EventArgs e)     en System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)     en System.Web.UI.Page.ProcessRequ…    b059f59b-6f1a-a016-8d56-b75de09ab4d4

  • Vamos, que si en el sitio hemos agregado aplicaciones personalizadas que no sean listas o bibliotecas pues no podremos guardar el sitio como plantilla. En cambio, si esta situación no se da no hay problema en guardar el sitio como plantilla siempre que no sea de publicación-

image