SharePoint 2013 & SharePoint Online: Guías para registrar aplicaciones “Autohosted” y “Provider-Hosted”!

Si estás pensando en crear aplicaciones tanto para SharePoint 2013 como para SharePoint Online, un concepto que tienes qué tener muy claro es qué si se trata de aplicaciones remotas necesitas hacer uso de OAuth para poder interactuar de vuelta con contenido de SharePoint lo qué implica qué es necesario darle una identidad a la aplicación. Para darle una identidad a una aplicación, es necesario configurar la siguiente información básica:

  • Un ID de aplicación.
  • Una contraseña de aplicación.
  • Un nombre para mostrar.
  • El nombre del dominio remoto dónde la aplicación se hospeda.

(Nota: Opcionalmente, se puede indicar también una Url de redirección a la que dirigir al usuario cuándo se “confia” o no en una aplicación a la hora de añadirla en un sitio de SharePoint).

Y ahora viene la parte relativa a como generar esa información qué depende del tipo de aplicación y de la forma en la qué la despleguemos. Básicamente, las pautas a tener en cuenta son las siguientes:

  • En el caso de depurar una aplicación:
    • Visual Studio se encarga de generar por nosotros tanto el ID de aplicación como la contraseña. En este caso no es necesario especificar ni el nombre para mostrar ni el dominio remoto donde se hospeda la aplicación qué en este caso es nuestro IIS Express local.
  • En el caso de desplegar la aplicación:
    • Si se trata de una aplicación de tipo Autohosted, es Office 365 quién se encarga de forma transparente para el desarrollador de generar ambos parámetros.
    • Si se trata de una aplicación de tipo Provider-Hosted, el abanico de posibilidades se amplia y tenemos las siguientes opciones:
      • A nivel de tenant de Office 365, usar la página de LAYOUTS appregnew.aspx. Esta página también la podemos usar en despliegues On-Premise de SharePoint 2013.
      • Si nuestra aplicación es independiente del Tenant porque queremos qué esté disponible en el Office Store, usaremos el Seller Dashboard.
      • Finalmente, añadido a las opciones anteriores podemos generar los parámetros mediante comandos PowerShell.

Toda la información sobre registro de aplicaciones Autohosted y Provider-Hosted la podéis ver en el siguiente enlace de MSDN: http://msdn.microsoft.com/en-us/library/jj687469.aspx

SharePoint 2013: ¿Está soportado el acceso anónimo a informes de Reporting Services?

Esta es la pregunta qué me hicieron el otro día, y qué con mis dudas sobre la mesa, me llevo a hacer pruebas de si era posible o no acceder de forma anónima a informes de Reporting Services. Ya os adelanto que no está soportado por Microsoft como podéis leer en este enlace en el que se detalla un workaround no soportado que en cualquier caso habría que probar si es válido para una integración de SSRS y SharePoint. Aún así os dejo las pruebas que hice para ver si era posible o no dicho acceso anónimo:

  • En primer lugar, crear una cuenta de ejecución de informes de SQL para no utilizar autenticación Windows. En un escenario de Reporting Services 2012 integrado con SharePoint (por medio de la correspondiente aplicación de servicio), es necesario crear dicha cuenta en cada una de las BDs asociadas a la aplicación de servicio además de en las BDs master y msdb. Por supuesto, la cuenta se tiene que añadir a la BD qué contiene los datos que mostrará el informe.
   1:  exec sp_droplogin @loginame='ReportExecution'
   2:  exec sp_addlogin @loginame='ReportExecution', @passwd='pass@word1'
   3:   
   4:  --En AdventureWorksDW
   5:  use AdventureWorks
   6:  if exists(select * from sysusers where name='ReportExecution')
   7:      exec sp_dropuser @name_in_db='ReportExecution'
   8:  exec sp_adduser @loginame='ReportExecution', @grpname='db_datareader'
   9:   
  10:  --En msdb
  11:  use msdb
  12:  if exists(select * from sysusers where name='ReportExecution')
  13:      exec sp_dropuser @name_in_db='ReportExecution'
  14:  --add the users to the databases and give them permissions
  15:  exec sp_adduser @loginame='ReportExecution', @grpname='db_datareader' 
  16:   
  17:  --En ReportingService_SABD
  18:  use ReportingService_SABD
  19:  if exists(select * from sysusers where name='ReportExecution')
  20:      exec sp_dropuser @name_in_db='ReportExecution'
  21:  --add the users to the databases and give them permissions
  22:  exec sp_adduser @loginame='ReportExecution', @grpname='db_datareader'
  23:   
  24:  --En ReportingService_SABDTempDB
  25:  use ReportingService_SABDTempDB
  26:  if exists(select * from sysusers where name='ReportExecution')
  27:      exec sp_dropuser @name_in_db='ReportExecution'
  28:  --add the users to the databases and give them permissions
  29:  exec sp_adduser @loginame='ReportExecution', @grpname='db_datareader'

.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; }

  • Las BDs asociadas a la aplicación de servicio de Reporting Services son 3 en total: la que contiene las definiciones de informes, la de alertas y la BD temporal para cuestiones de procesado.
  • Crear con Report Builder 3.0 un informe en el que usemos la cuenta de ejecución de SQL qué hemos creado con el script anterior.
image image image
  • Configurar el origen de datos para que el informe use esas credenciales (pestaña Credenciales) y no las intente usar como credenciales Windows. Por supuesto, a partir de aquí crear el informe de acuerdo a los requerimientos qué tengamos establecidos.
  • Publicar el informe en la Colección de Sitios en concreto.
  • A nivel de SharePoint, configurar el acceso anónimo a nivel de Aplicación Web y del Sitio dónde hemos desplegado el informe.
image image

Tras realizar todos estos cambios, si accedéis al informe publicado:

  • Comprobaréis que no se visualiza y se muestra un error en la ejecución del informe.
  • Si intentáis editar el informe con Report Builder, observaréis que no es posible y qué da un error de acceso al informe dado que identifica que es un usuario anónimo el que quiere acceder a configurar el informe.

Para hacer una vuelta atrás y que el informe se pueda visualizar y editar, es necesario que quitéis el acceso anónimo tanto a nivel de aplicación web como de sitio, es decir, no es suficiente con quitarlo a nivel de sitio (o de colección de sitios).

SharePoint 2013: Como probar una aplicación Provider-Hosted sin desplegarla!

Si el otro día comentaba como depurar una aplicación para SharePoint de tipo Autohosted, en esta ocasión vamos a ver como probar una aplicación de tipo Provider-Hosted sin tener que desplegarla en el proveedor (en Windows Azure por ejemplo). Para ello, vamos a seguir las pautas que podéis ver en este artículo de MSDN. Al lío pues:

  • En Visual Studio 2012, creamos un proyecto de tipo Aplicación para SharePoint 2013.
  • En el asistente de configuración especificamos la Url del sitio de SharePoint 2013 On-Premise u Online qué usaremos para depurar o bien para desplegar la aplicación. En mi caso, he indicado la Url de un sitio de desarrollador de SharePoint Online. Indicamos también el tipo de hosting que en este caso es “Hospedada por el proveedor” (Provider-Hosted).
  • Revisamos la estructura de la solución, veremos que consta de dos proyectos: el de la aplicación de SharePoint y el proyecto web (ASP.NET).
image image image
  • Lo siguiente que tendremos que hacer es programas nuestra aplicación como necesitemos. Por ejemplo, podemos modificar tanto el aspecto gráfico de la página Default.aspx como la lógica de la misma. Por ejemplo, en este caso en el Page_Load() de la página se ha añadido el código necesario para acceder al conjunto de listas del sitio en el qué se está agregando la aplicación.
   1:              var contextToken =
   2:              TokenHelper.GetContextTokenFromRequest(Page.Request);
   3:              var hostWeb = Page.Request["SPHostUrl"];
   4:   
   5:              using (var clientContext =
   6:                    TokenHelper.GetClientContextWithContextToken(hostWeb,
   7:                          contextToken, Request.Url.Authority))
   8:              {
   9:                  clientContext.Load(clientContext.Web.Lists,
  10:                        lists => lists.Include(
  11:                        list => list.Title,
  12:                        list => list.DefaultViewUrl)
  13:                  );
  14:                  clientContext.ExecuteQuery();
  15:                  AppWebLists.DataSource = clientContext.Web.Lists;
  16:                  AppWebLists.DataBind();
  17:              }     

.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; }

  • Y ahora viene lo importante: ¿Cómo depuramos la aplicación? Pues pulsando F5 en Visual Studio :P, de manera que se lanza el navegador y en este caso se muestra en primer lugar el inicio de sesión de Office 365.
  • A continuación, se muestra la aplicación completamente operativa. Fijaros en qué la Url de la misma es https://localhost:<NumeroPuerto&gt;, es decir, la aplicación se está ejecutando en nuestro entorno de desarrollo local…coool!
image image

Para finalizar, os dejo algunos ejemplos de despliegue de aplicaciones Provider-Hosted en Azure:

Office 365: Preguntas y Respuestas (I)!

Con esta serie inauguro una serie de artículos en los que tratare de reflejar las preguntas más habituales que estoy viendo en los foros de Office 365 y la respuesta a las mismas. Por supuesto, toda sugerencia para complementar dichas respuestas será más que bienvenida para facilitar  que los usuarios de Office 365 puedan resolver sus problemas con la mayor facilidad posible.

Sobre planes y versiones de SW

  • Q: ¿Cómo puedo comenzar a utilizar Office 365?

R: Depende de  si te refieres a la suite ofimática o a los servicios incluidos en Office 365 (Exchange Online, SharePoint Online, Lync y Office 2013).

  • Para la suite ofimática, puedes adquirir una versión de prueba de un mes de Office 365 Home desde este enlace.
  • Para la suite empresarial (servicios de Office 365), puedes acceder a una versión de prueba de un mes desde este enlace.
  • Q: ¿Cuáles son las diferencias entre cada tipo de plan en Office 365?

R: Las diferencias vienen dadas por lo que se incluye en cada tipo de plan. En este enlace puedes ver una comparativa de los distintos planes de Office 365 en relación a capacidades disponibles y a precios por plan.

  • Q: ¿Cómo cancelo mi suscripción de Office 365?

R: Para cancelar una suscripción de Office 365, basta con seguir las indicaciones de los siguientes enlaces:

Es importante en todo caso tener claro que se puede incurrir en penalizaciones al cancelar una subscripción, por lo que es recomendable leer el acuerdo de términos del servicio: http://www.microsoft.com/global/en-us/office365/RenderingAssets/mosa/MOSA2011Agr(NA)(ENG)(Apr2012)(HTML).htm

Finalmente, algunas referencias adicionales a esta cuestión:

R: En este enlace de TechNet se describen claramente las diferencias entre uno y otro tipo de plan: http://technet.microsoft.com/en-us/library/jj819267.aspx

  • Q: ¿En qué tipo de planes de Office 365 puedo crear un sitio de desarrollador?

R: Si se dispone de una subscripción Office 365 Developer o bien una subscripción de tipo empresarial (E1 a E3).

Sobre Configuraciones

  • Q: ¿Cómo puedo usar mi propio dominio en Office 365 en lugar del dominio que se crea por defecto (de tipo <DominioElegido>.onmicrosoft.com?

R: La ayuda de Office 365 dispone de varias referencias relativas a esta cuestión qué sirven de guía para configurar el dominio propio para ser usado en Office 365:

R: Sí, mediante el uso de PowerShell como se indica en este enlace: http://gallery.technet.microsoft.com/office/Set-Email-Signatures-in-792587f5

  • Q: ¿Qué alternativas tengo para desplegar los clientes Office en varios equipos de mi organiación?

R: Las qué se describen en el siguiente post: http://geeks.ms/blogs/ciin/archive/2013/03/28/office-365-opciones-de-despliegue.aspx

  • Q: ¿Cómo configuro Office 365 en mi dispositivo móvil?

R: En el enlace http://office.microsoft.com/en-us/support/set-up-and-use-office-365-on-your-phone-or-tablet-HA102818686.aspx se explica como configurar Office 365 para distintos tipos de dispositivos (Android, iPhone, iPad, …).

Sobre migraciones

  • Q: ¿Cómo migro mi correo de GMail a Office 365?

R: Hay varias posibilidades para hacer esta migración:

Sobre requisitos de sistema

  • Q: ¿Se puede instalar Office 365 (suite de escritorio) en Windows XP?

R: Tal y como se puede ver en este enlace, http://technet.microsoft.com/es-es/library/ee624351.aspx, Windows XP no aparece como sistema operativo soportado para la suite de escritorio de Microsoft.

Sobre SharePoint Online

  • Q: ¿Se puede agregar una aplicación PHP a un sitio de SharePoint Online?

R: Dependiendo de lo que se quiera hacer, tenemos dos posibilidades:

  • Usar una WebPart que permita visualizar las páginas PHP como puede ser la WebPart de visor de páginas o la WebPart de editor de contenido. Lo que estamos haciendo con estas WebParts es mostrar las páginas PHP en un iFrame.
  • Una segunda alternativa disponible para SharePoint Online en Office 365 si estamos actualizados a la última versión de los servicios es la de crear una aplicación de tipo Provider-Hosted dentro del marco proporcionado por el nuevo modelo de aplicaciones de SharePoint Online.

[SUGES]: Disponibles para descarga los materiales del WebCast sobre aplicaciones Autohosted!

Ya tenéis disponible para descarga en SUGES los materiales del WebCast Aplicaciones Autohosted de SharePoint: combinando Azure y Colaboración que impartimos Gustavo Vélez y un servidor ayer por la tarde (Nota: La presentación la puedes ver en lía y descargar desde aquí). Como siempre, agradecer a los asistentes su participación en el mismo y esperamos veros la semana que viene en Madrid, Barcelona y Valencia participando en el Office & SharePoint App Challenge dónde tendréis la oportunidad de formaros en profundidad en el nuevo modelo de aplicaciones de Office y SharePoint además de conseguir alguno de los premios que tenemos para aquellas aplicaciones que se creen durante el Challenge. Si no estás apuntado todavía, no pierdas esta oportunidad para aprender y crear aplicaciones contando con el apoyo de los siguientes mentores:

  • Madrid: Mario Cortés Flores, MVP de Office 365.
  • Valencia: Alberto Día Martín, MVP de SharePoint.
  • Barcelona: Edin Kapic, David Martos y un servidor, los tres MVPs de SharePoint.

Y además contaremos con el apoyo de otros grandes cracks de la creación de aplicaciones como José Quinto, Adrian Díaz, Miguel Tabera y Guillermo Bas. Lo dicho, nos vemos la semana que viene en alguno de los DevCamps…y habrá sorpresas :-).

Office_Application_Challenge.png

SharePoint 2013: ¿Quieres ejemplos de Apps? Pues toma + de 125!

Tal y como podéis leer en el blog de Apps para SharePoint & Office, Microsoft acaba de liberar un buen “montón” de ejemplos de aplicaciones para Office & SharePoint de cara a facilitar la creación de aplicaciones para ambas plataformas. Se trata de + de 125 ejemplos que podemos descargar y en el que se tratan temas variados:

  • Create your first app
  • Persist custom settings
  • Work with client identity tokens
  • Authenticate your app
  • Insert content from online services
  • Use VoIP dialing
  • Visualize data in Office clients
  • Enable offline apps
  • Handle errors
  • Access data
  • Store data
  • Overcome cross-domain scenarios
  • Customize the UX
  • Use workflows
  • Handle events
  • A lot more…

Podéis descargaros los ejemplos desdelos siguientes enlaces:

SharePoint Online: Como llamar a un servicio remoto usando WebProxy en una aplicación creada con NAPA!

Si queremos realizar llamadas a servicios remotos desde aplicaciones de SharePoint (sean del tipo qué sean), una de las posibilidades qué tenemos para poder lidiar con los típicos escenarios de cross-domain que se presentan cuando desde un dominio remoto llamas a otro dominio remoto (en este caso a un servicio) es la de usar el objeto WebProxy expuesto por las APIs de cliente de SharePoint 2013. En este How-To se explica muy bien como llamar a un servicio OData desde una Aplicación SharePoint-Hosted creada en Visual Studio 2012. Una pregunta qué se me vino a la mente al revisar el artículo es si el ejemplo es válido para una aplicación creada con NAPA…la respuesta es qué sí como vamos a ver a continuación:

  • Desde nuestro sitio de desarrollo de SharePoint Online en Office 365 iniciamos NAPA y procedemos a crear un nuevo proyecto.
  • Entre las opciones de creación de aplicaciones, elegimos aplicación para SharePoint.
  • Una vez estamos en el entorno de desarrollo de NAPA, simplemente copiamos el código del ejemplo qué os he comentado.
image image image
  • Y ahora la parte importante, ¿cómo añadimos el EndPoint del servicio remoto? Pues a través de las opciones de configuración de la aplicación que tenemos en NAPA (o sea “behind the scenes”, tocando el manifiesto. En concreto, la sección “Rempote Endpoints” es la que nos permite agregar aquellos extremos de servicios remotos confiables y para los que se va a permitir llamadas cross-domain. Añadimos la Url del domino remoto qué en este caso es http://services.odata.org.
  • Ejecutamos la aplicación y listo, funcionando la llamada al servicio remoto :-).
image image