SharePoint Lookup Field Throttling Causes Missing Fields in CSOM Query

A very annoying bug appeared few weeks ago in one of our production environments with SharePoint 2013.

SYMPTOMS

You have a custom list with some lookup columns that refer to other lists. In our case the main list contained news and the lookup columns contained the classification of the news.

You add a new lookup column to the list, due to customer feedback.

Suddenly, you can’t get the list results any more by code. When you do a CSOM query, the lookup fields are lost. Only the non-lookup fields are retrieved.

CAUSE

SharePoint throttling also includes list item maximum lookup references. It is set to eight (8) lookup fields per list, by default.

Resource Throttling

This particular configuration is set on the web application throttling page in Central Administration, under the heading “List View Lookup Threshold”.

SOLUTION

If you don’t need all of the lookups at the same time, you can still make the query by choosing the fields you want to retrieve. However, in our case we needed all of the classification columns.

In this case you have two choices:

  • Increase the list lookup threshold limit to more than 8 (that’s what we did)
  • Establish a large query window, an interval during the day during which you can perform the queries

Las apps de SharePoint 2013 (V): Una app provider-hosted en Azure

En la serie de posts sobre el desarrollo de apps de SharePoint 2013, hemos visto hasta ahora un ejemplo de app de SharePoint 2013 para niños alojada en SharePoint mismo y otro ejemplo de app alojada “automágicamente” en Azure. Ahora falta una vuelta de tuerca más para ver el modelo que nos queda: las llamadas aplicaciones provider-hosted.

Si recordamos los tres modelos de alojamiento de apps que hay en SharePoint 2013, las aplicaciones provider-hosted requieren intervención manual para que SharePoint y la parte servidora se hablen entre ellos. En el caso de Azure esto se reduce bastante porque las herramientas de SharePoint y de Azure nos lo facilitan, pero si hacemos una subida a la nube de Amazon o a nuestro propio datacenter, la cosa se nos hace un poquito más engorrosa, sin llegar a ser difícil en ningún caso.

El punto de partida

Vamos a empezar con la aplicación desarrollada para el modelo autohosted en Azure, para ir más ágiles y para seguir usando ASP.NET MVC (que es lo que mola ahora).

image

La vamos a subir “manualmente” a Azure Web Sites y le vamos a decir a SharePoint que se conecte a ella cuando el usuario clica la app.

Nota: A los que ya conocéis Azure y pensáis que estoy mostrando solo la parte “express”, os comento que estoy dejano para una próxima entrega de la serie de posts una app totalmente “Azure” que use servicios más avanzados como Storage, SQL Azure etc.

Configuración de Azure

El primer paso es ir a nuestro panel de control de Azure (o darnos de alta en la prueba gratis de Azure de 90 días y luego ir al panel de control). Allí crearemos un sitio web de Azure, sencillo, y usaremos los detalles del sitio para configurar el proyecto MVC en Visual Studio.

Iremos a la opción Sitios Web y crearemos uno nuevo con el nombre EdinSpMvc-Provider.

image

Esperamos unos momentos y el sitio se habrá creado correctamente

image

Ahora vamos a clicar la flecha al lado del nombre del sitio web para ver el panel de control del sitio y descargaremos el perfil de publicación (en Vista Rápida) para usarlo en Visual Studio más adelante.

image

Creación de la app en SharePoint

Ahora iremos a nuestro sitio en SharePoint 365 Developer Site (en mi caso es https://edinkapic.sharepoint.com/sites/dev). Tenemos que hacer un “truquillo” para registrar una app manualmente: añadiremos a la URL del sitio el sufijo /_layouts/15/appregnew.aspx.

Se nos abre la ventana de registro de una nueva app.

image

Esta es “la madre del cordero” que enlaza SharePoint con nuestra app. Explicaré los conceptos que tenemos que introducir (para más detalles está la MSDN):

  • App Id: esto es un Guid que identifica la app de manera única. Generaremos uno al azar dándole al botón Generar.
  • App Secret: esto la parte pública de una clave asimétrica que usa SharePoint para validar que nuestra app tiene permisos para conectarse. Nuestra app en MVC se conectará a SharePoint pasándole la este secreto junto con más parámetros y SharePoint comprobará que es efectivamente la app que él autorizó. Generaremos una al azar dándole al botón Generar.
  • Title: El título de la app. Pondremos App Provider-Hosted en Azure y MVC
  • App Domain: aquí irá el dominio de nuestro hosting (Azure Web Sites). Pondremos edinspmvc-provider.azurewebsites.net
  • Redirect URL: aquí pondremos la página de inicio de nuestra aplicación MVC, en nuestro caso https://edinspmvc-provider.azurewebsites.net/Home. Es imprescindible poner HTTPS (en Azure no tenemos que preocuparnos porque automáticamente tenemos HTTPS en Web Sites, pero si lo subimos a otro hosting tenemos que asegurarnos de que disponga de HTTPS habilitado).

image

Le damos a Create y nos aparecerán los detalles una app que lamentablemente no será funcional porque todavía no hemos subido nada a Azure. Apuntamos estos detalles para más adelante.

image

Intercambio de cromos

Ahora nos toca retocar un poco nuestra solución en Visual Studio para pasar estos datos de la app manualmente a nuestros proyectos.

En el proyecto de SharePoint App (EdinSpMvc)

Primero vamos a cambiar el tipo del proyecto de app de SharePoint 2013 de Autohosted a Provider-hosted. No hay ninguna UI para hacerlo, pero afortunadamente editando el AppManifest.xml lo podemos conseguir. Sólo hay que:

  • Eliminar la sección AppPrerequisites
  • Reemplazar el elemento AutoDeployedWebApplication dentro de AppPrincipal por <RemoteWebApplication ClientId="508e1afa-40d8-4e2b-99dc-7604460cf864" />. Si habéis prestado atención, es el AppId que nos ha generado SharePoint para la app.
  • Sustituir la URL en el elemento StartPage por la URL completa del sitio, quedando así: https://edinspmvc-provider.azurewebsites.net/Home?{StandardTokens}

image

En el proyecto web MVC (EdinSpMvc4Web)

Aquí tenemos que añadir los valores reales de AppId y AppSecret dentro del fichero web.config (en los elementos ClientId y ClientSecret):

image

Ahora procederemos a subir el proyecto web a Azure. Para ello haremos botón derecho en el proyecto web, clicar Publish y en la pantalla que se nos abre elegir el fichero que previamente descargamos de Azure.

imageimage

Le damos a Publish y veremos que Visual Studio sube nuestra app a Azure y la abre. No os preocupéis que esté dando errores al abrirse, es normal porque le falta el contexto de app de SharePoint.

image

Aún nos queda un pequeño paso: meter el AppId y AppSecret otra vez en Azure ya que al subir la web se “pierde” el valor de los appSettings. Para ello hay que ir a la pantalla de gestión de Sitios Web de Azure y en el enlace Configuración de nuestro sitio añadir las dos entradas idénticas a las del web.config. ¡No os olvidéis de darle a Guardar en la botonera inferior!

image 

Pasos finales y el resultado

Ahora podemos hacer un Deploy de la solución desde Visual Studio 2012 y ocurrirá la magia, esta vez con un poco más de preparativos que la última vez.

imageimage

Como es habitual, os dejo el código de esta aplicación en mi cuenta de SkyDrive.

¡Hasta la próxima entrega!

Las apps de SharePoint 2013 (IV): Una app en MVC y en Azure

En la serie de posts sobre el desarrollo de apps de SharePoint 2013, hasta ahora hemos visto como se desarrolla una app sencilla y alojada en SharePoint (es decir, las “SharePoint-hosted” apps). Ahora vamos a subir un poco la dificultad (no mucho, os lo prometo) y vamos a hacer una app que se ejecuta fuera de SharePoint.

Para que el ejemplo sea más interesante, vamos a hacerlo en un “sabor” de ASP.NET al que no estamos tan acostumbrados los SharePointeros: ASP.NET MVC 4. Como la app fuera de SharePoint puede estar escrita en cualquier lenguaje que se nos antoje, usaremos MVC 4 para aprovecharnos de la librería de modelo de objetos de cliente de SharePoint 2013 (CSOM) y ahorrarnos trabajo.

SharePoint 2013 y Azure

En estos momentos Microsoft ofrece una cuenta de desarrollador de Office (incluyendo SharePoint) gratis si nos apuntamos en este enlace. Con ello se nos dará un sitio en Office 365 Preview (es decir la versión 2013) ya preparado para alojar apps de SharePoint 2013. Además, se nos dará una cuenta “invisible” en Azure para nuestras apps. Digo que es invisible porque no hay manera (de momento) de gestionar la suscripción para estas apps.

image

Para las apps que se consideran “Autohosted”, Visual Studio 2012 con las herramientas de SharePoint va a hacer una doble función:

  • Si estamos desarrollando y le damos a F5, VS2012 va a subir el descriptor de nuestra app a la cuenta de Office 365 de desarrollador (esto lo configuramos nosotros en el proyecto de app) pero la apuntará a nuestro localhost donde se ejecutará el proyecto web de ASP.NET que contiene la lógica de la app.
  • Si hacemos un Deploy de la solución, VS2012 subirá el descriptor de la app a Office 365 (como antes) pero además subirá el proyecto web a un subdominio de o365apps.net, que es una suscripción especial de Azure Web Sites disponible a nosotros como desarrolladores de la app. El subdominio será un GUID creado de manera automática al deployar la app. Además, va a cambiar el descriptor de la app para que apunte a Azure y no a nuestro localhost.

Vale la pena recalcar que la suscripción “invisible” de Azure para apps de Office/SharePoint sólo incluye Web Sites (un hosting de IIS, vamos) y SQL Azure (mediante scripts), sin incluir nada de Media Services, Mobile Services, Storage, Compute y otras maravillas de Azure.

La app en Azure y MVC, paso a paso

Para que todo esto resulte más fácil de digerir, vamos a hacer un pequeño ejemplo que muestre las listas y bibliotecas que hay en el SharePoint donde está alojada la app. Lo codificaremos en MVC 4 y lo “subiremos automágicamente” a Azure. El prerrequisito es, como siempre, tener instaladas las herramientas de desarrollo de SharePoint 2013 con Visual Studio 2012 y tener la suscripción de desarrollador de Office 365.

Abrimos Visual Studio 2012 como Administrador y creamos un proyecto nuevo de Aplicación de SharePoint 2013. Le decimos a VS2012 que la app es de tipo Autohosted y le pasamos la URL de nuestro Developer Site de Office 365.

imageimage

Visual Studio creará dos proyectos: el de la app (EdinSpMvc, poco más que un manifest) y el proyecto ASP.NET WebForms (EdinSpMvcWeb) con la parte de la app que se ejecuta fuera de SharePoint. Como podéis ver, contiene una página Default.aspx de toda la vida.

image

Como esta basura tecnología no nos interesa, vamos a agregar otro proyecto web, esta vez una aplicación web de MVC 4. Es importante seleccionar NET Framework 4 en vez de 4.5 que nos sale por defecto, ya que el Azure que nos da Office Developer no tiene todavía soporte para NET 4.5. A continuación, elegimos Basic como plantilla por defecto de la aplicación MVC.

imageimage

Ya tenemos 3 proyectos: el de la app, el de web ASP.NET y el de web MVC 4.

image

Vamos a configurar el proyecto web MVC con algunos detallitos para que funcione bien con SharePoint 2013. Tenemos la suerte de que las herramientas de VS2012 ya lo hacen automáticamente por nosotros.

Primero, vamos a las propiedades del proyecto de app de SharePoint para asociar el proyecto web MVC en la propiedad Web Project. En este momento VS2012 nos preguntará si queremos que nos adjunte las referencias de SharePoint y que quite la página por defecto, a lo de que vamos a contestar que sí.

imageimage

Fijaos que el proyecto MVC ahora tiene las referencias de SharePoint 2013 y de Identity Framework, así como el fichero auxiliar TokenHelper.cs que nos ayudará a hacer la autenticación contra SharePoint. Además, la propiedad SSL Enabled del proyecto MVC está puesta a True porque es necesario HTTPS para que funcione el paso de credenciales.

Por último, hay que corregir la Start URL de la app (que apunta ahora a EdinSpMvc4Web/Pages/Default.aspx) editando el fichero AppManifest.xml del proyecto de app de SharePoint. Ponemos EdinSpMvc4Web/Home para apuntar al controller Home.

image

Podemos eliminar el proyecto de ASP.NET WebForms, porque ya no lo necesitamos.

Ahora vamos a agregar la “chicha”, la lógica de negocio en nuestra aplicación MVC. Para ello crearemos un controller nuevo llamado HomeController y una vista asociada llamada Index en su carpeta ViewsHome.

imageimageimageimage

En la acción Index del HomeController, vamos a ponerle el siguiente código, sin olvidarnos de poner la clausula using Microsoft.SharePoint.Client:

var contextToken = TokenHelper.GetContextTokenFromRequest(System.Web.HttpContext.Current.Request);
var hostWeb = System.Web.HttpContext.Current.Request["SPHostUrl"];

using (var clientContext = TokenHelper.GetClientContextWithContextToken(hostWeb, contextToken, Request.Url.Authority))
{
    var web = clientContext.Web;

    clientContext.Load(web, w => w.Lists.Include(l => l.Title).Where(l => !l.Hidden));
    clientContext.ExecuteQuery();
    clientContext.Dispose();

    return View(web.Lists);
}

En este ejemplo lo que hacemos es obtener el token de contexto (proporcionado por SharePoint 2013 al redireccionar a la app en Azure) y con este token de contexto abrimos un contexto de cliente (lo que necesitamos para usar el modelo de objetos de cliente de SharePoint 2013). Fijaos que no estamos proporcionando ninguna credencial de cliente, sino que la propia app se autentica contra SharePoint.

Ahora nos falta hacer que la vista muestre las listas que le hemos pasado en la acción. Abrimos la vista y le añadimos:

@{
    ViewBag.Title = "App de SharePoint con MVC";
}

<div>
    <ul>
        @foreach (var list in Model)
        {
            <li>@list.Title</li>
        }
    </ul>
</div>

Con este código conseguimos que la vista muestra las listas que le pasa el controlador. Le damos a F5 y nuestra app se ejecuta en SharePoint 2013 pero apuntando a nuestro localhost:

image

Confirmamos que nuestra app es de confianza…y vemos la app ejecutándose en MVC (en nuestra máquina):

image

Para los curiosos: el VS2012 ha agregado un ClientId y ClientSecret a nuestro web.config automáticamente (y también los ha registrado en el servidor de SharePoint). De esta manera la llamada de nuestra aplicación MVC a SharePoint está autorizada porque se basa en un ID y secreto conocidos por SharePoint.

image

El último paso que nos queda es darle un poco de aspecto de SharePoint a la app, cambiando la “master” (la vista _layout.cshtml) para incluir la barra de herramientas de SharePoint 2013.

En la sección BODY añadiremos un DIV a modo de “placeholder” donde insertaremos la barra de herramientas.

<div id="barraSharePoint"></div>

En la sección HEAD, debajo de la referencia a @Scripts.Render("~/bundles/modernizr"), agregaremos el código siguiente:

<script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js"></script>
<script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js"></script>     
    
<script type="text/javascript">
  var hostweburl;
  $(document).ready(function () {
      hostweburl = decodeURIComponent(getQueryStringParameter("SPHostUrl"));
      var scriptbase = hostweburl + "/_layouts/15/";
      $.getScript(scriptbase + "SP.UI.Controls.js", renderChrome)
  });
  function renderChrome() {
      var options = {
          "appIconUrl": "/Content/Images/user-logo.png",
          "appTitle": "@ViewBag.Title",
          "settingsLinks": [
              {
                  "linkUrl": "http://spblogedin.blogspot.com",
                  "displayName": "Blog de Edin"
              }
          ]
      };
      var nav = new SP.UI.Controls.Navigation("barraSharePoint", options);
      nav.setVisible(true);
  }
  function getQueryStringParameter(paramToRetrieve) {
      var params =
          document.URL.split("?")[1].split("&");
      var strParams = "";
      for (var i = 0; i < params.length; i = i + 1) {
          var singleParam = params[i].split("=");
          if (singleParam[0] == paramToRetrieve)
              return singleParam[1];
      }
  }
</script>

Lo que hace este código es obtener la URL del SharePoint (el parámetro SPHostUrl)  y llamar a su script SP.UI.Controls.js que se encarga de dibujar la UI. Lo llamamos desde SharePoint mediante una llamada a $.getScript (para evitar el problema de JS cross-domain) y en la función de callback pintamos una barra (un control SP.UI.Controls.Navigation). Para construir este control le pasamos un objeto JS con las propiedades que van a controlar la manera en la que se va a dibujar. He aprovechado también para agregar un pequeño logo para la aplicación, creando una carpeta Images dentro de Content en el proyecto MVC y subiendo el logo por defecto de una aplicación de LightSwitch.

Ahora ya estamos preparados para hacer un Deploy Solution en vez de un F5. Se nos vuelve a abrir una instancia del navegador pidiendo autorización para la app. La sorpresa es que esta vez nuestra aplicación de MVC está en el sitio web de Azure para Office Developers (dominio o365apps.net), como podéis observar:

image

Además, la aplicación ahora tiene una pinta más “SharePointera” y con un menú de control que tiene el enlace a este blog Winking smile

image

Os dejo el código fuente en mi SkyDrive, por si no tenéis ganas de escribir código, jeje.

En la próxima entrega de esta serie veremos como hacer una aplicación Provider-hosted en Azure, con lo que podemos aprovechar todos los servicios que nos ofrece Azure para construir nuestra app.

Las Apps de SharePoint 2013 (III): La primera app

Despúes de ver la introducción al modelo de las aplicaciones de SharePoint 2013 y de repasar los conceptos básicos de la infraestructura, vamos a profundizar en nuestro viaje creando una aplicación sencilla alojada en SharePoint.

La aplicación de ejemplo mostrará la ocupación en MB de un sitio de SharePoint y se actualizará mediante un botón “Refrescar”. El cálculo del espacio se hará sumando los tamaños de los ficheros alojados en las bibliotecas de ese sitio.

Crear la aplicación en Visual Studio 2012

Para empezar, abriremos Visual Studio 2012 y crearemos una nueva app de SharePoint 2013 con el nombre SpaceCounter.

New SharePoint 2013 app project

Acto seguido, completaremos los detalles del nombre (SpaceCounter) y la URL de prueba de la aplicación (http://sp2013). Es muy importante que elijamos la opción “SharePoint-hosted” en el último cuadro desplegable. Clicamos “Finish” y esperamos que Visual Studio cree la aplicación.

image

Echemos un vistazo a lo que ha generado VS2012. Veremos que hay un fichero llamado AppManifest.xml y una estructura de carpetas dentro del proyecto. El AppManifest.xml es el descriptor de la app para SharePoint: aquí está su ID (Guid), su nombre, el logo y la enumeración de recursos que necesita (permisos, tokens etc).

SharePoint app project open in VS2012

Para poder acceder al sitio host (el sitio desde el cual accedemos a la app), hay que editar el manifiesto en la parte de “Permission requests” y dar permisos de lectura al objeto Web, editando el grid que hay en ese apartado.

image

La solución está empaquetada junto con una feature (característica) de SharePoint, (auto)llamada SpaceCounter Feature1. En ella están definidas los módulos auxiliares y los ficheros que estos modulos contienen:

image

La carpeta Scripts contiene el fichero JS de la lógica de nuestra aplicación (App.js) junto con jQuery y otros ficheros JS auxiliares. Cabe recordar que no podemos usar código de servidor de SharePoint en nuestra app, aunque esté alojada en SharePoint.

La carpeta Content tiene el fichero CSS de la app y la carpeta Images las imágenes.

La carpeta Pages contienen las vistas (páginas HTML o ASPX de SharePoint, sin código de servidor). En nuestro caso tenemos la página Default.aspx que contiene un ejemplo de app que muestra el nombre del usuario.

image

Nuestro trabajo consistirá en modificar el fichero JS y el ASPX para introducir nuestra lógica y la vista HTML adecuada.

Crear la vista

Primero eliminaremos los restos de la app de ejemplo, concretamente el elemento p con el id ”message”. En su lugar pondremos el código siguiente:

La vista también tiene un pequeño script que invoca la función sharePointReady() al acabar de cargar. Allí cambiaremos el tag script para cargar el contexto del sitio host (en vez del contexto del sitio de la aplicación) y para volver a invocar la función mediante el botón Refresh. Aquí añadimos una función auxiliar llamada getParameterByName que nos sacará los parámetros de la URL de la aplicación. (Si a estas alturas tenemos dudas sobre que es el sitio host y que es el sitio de la aplicación, repasemos el post anterior donde explico estos conceptos).

<script type=”text/javascript”>
var hostweburl;
var appweburl;

$(document).ready(function () {
hostweburl = getParameterByName(“SPHostUrl”);
appweburl = getParameterByName(“SPAppWebUrl”);
var scriptbase = hostweburl + “/_layouts/15/”;
$.getScript(scriptbase + “SP.Runtime.js”,
function () {
$.getScript(scriptbase + “SP.js”,
function () { $.getScript(scriptbase + “SP.RequestExecutor.js”, sharePointReady); }
);
}
);
$(“#btnRefresh”).click(function () { sharePointReady(); });
});

function getParameterByName(name) {
name = name.replace(/[[]/, “\[“).replace(/[]]/, “\]”);
var regexS = “[\?&]” + name + “=([^&#]*)”;
var regex = new RegExp(regexS);
var results = regex.exec(window.location.search);
if (results === null)
return “”;
else
return decodeURIComponent(results[1].replace(/+/g, ” “));
}
</script>

Crear la lógica

Reemplazaremos el contenido del fichero App.js con este código en JS:

var context;
var lists;

// This function is executed after the DOM is ready and SharePoint scripts are loaded
// Place any code you want to run when Default.aspx is loaded in this function
// The code creates a context object which is needed to use the SharePoint object model
function sharePointReady() {
context = new SP.ClientContext(appweburl);
var factory = new SP.ProxyWebRequestExecutorFactory(appweburl);
context.set_webRequestExecutorFactory(factory);
var appContextSite = new SP.AppContextSite(context, hostweburl);
var web = appContextSite.get_web();
lists = web.get_lists();
context.load(lists);
context.executeQueryAsync(onGetListsSuccess, onGetListsFail);
}

function onGetListsSuccess(sender, args) {
var listsEnumerator = lists.getEnumerator();
var listItemsArray = [];
var i = 0;
var size = 0;
// — Agrupamos todas las query en un solo objeto cliente
var query = SP.CamlQuery.createAllItemsQuery();
while (listsEnumerator.moveNext()) {
var list = listsEnumerator.get_current();
// — Miramos si la lista es una biblioteca
if (list.get_baseType() === 1) {
listItemsArray[i] = list.getItems(query);
context.load(listItemsArray[i], ‘Include(File, FileSystemObjectType, File.Length)’);
i++;
}
}
// — Ejecutamos la query con todas las listas de golpe
context.executeQueryAsync(function (sender, args) {
// — Recogemos el resultado para cada una de las listas
for (j = 0; j < i; j++) {
items = listItemsArray[j];
var itemEnumerator = items.getEnumerator();
while (itemEnumerator.moveNext()) {
var item = itemEnumerator.get_current();
// — Solo nos interesan ficheros (fsoType = 0)
if (item.get_file() !== null) {
if (item.get_fileSystemObjectType() === 0) {
size = size + item.get_file().get_length();
}
}
}
}
var totalSizeInKB = size / 1024;
totalSizeInKB = totalSizeInKB.toFixed(2);
$(“#spaceInKB”).text(totalSizeInKB + ” KB”);
}, onGetListsFail);
}

function onGetListsFail(sender, args) {
alert(‘Failed to get list data. Error:’ + args.get_message());
}

La función sharePointReady() será el punto de entrada. Aquí listaremos las todas las listas de nuestro sitio de host (pasado como parámetro appWebUrl desde Default.aspx) mediante el método get_lists(). En el callback de la ejecución de esta consulta, llamaremos a la función onGetListsSucccess().

En esta función ya tenemos las listas del sitio host y haremos una consulta recursiva por cada lista. Para no hacer N llamadas a SharePoint, agruparemos todas las consultas en un array y haremos la consulta CAML de todos los elementos a SharePoint con todas las listas a la vez. Al volver de la consulta, sumaremos los tamaños en bytes de cada elemento de tipo documento.

Para evitar los errores, sólo haremos la consulta de aquellas listas que tengan como tipo base la biblioteca de documentos (list.get_baseType() === 1).

Nota: para poder acceder a la propiedad File de un elemento, donde tenemos el tamaño en bytes, hay que cargar previamente estas propiedades mediante esta linea: context.load(listItemsArray[i], ‘Include(File, FileSystemObjectType, File.Length)’);

Al final, escribiremos el tamaño de la suma (redondeado a 2 decimales) en el espacio previsto en la vista.

Desplegar y probar

Para desplegar la app, haremos una ejecución apretando F5. Visual Studio empaquetará la solución y la subirá a SharePoint, quitando antes la versión anterior, si la hubiera.

image

Al proyecto le he añadido una imagen como logo de la aplicación, de tamaño 96×96 pixeles.

Una vez desplegada la app, se nos mostrará la pantalla de confirmación de permisos para la aplicación. Aquí se nos pide acceder en modo lectura a las listas y bibliotecas del sitio host. Confirmamos la elección clicando el botón “Trust”.

image

Ahora, nuestra app sale en la lista de contenidos del sitio.

image

Clicando en nuestra app, se abre una nueva ventana con la app en ejecución.

image

Nota: si os pica la curiosidad, podéis examinar la URL que se lanza al abrir la aplicación.

http://app-6855013c35bdd3.app.sharepoint.local/SpaceCounter/Pages/Default.aspx?SPHostUrl=http%3A%2F%2Fsp2013&SPLanguage=en%2DUS&SPAppWebUrl=http%3A%2F%2Fapp%2D6855013c35bdd3%2Eapp%2Esharepoint%2Elocal%2FSpaceCounter

Aquí podemos ver la URL del sitio de la app, la URL de inicio de la app y los tres parámetros que se pasan por defecto: la URL del sitio host (SPHostWebUrl), la URL del sitio web de la app (SPAppWebUrl) y el idioma (SPLanguage).

Podéis descargar el código fuente de esta aplicación en mi cuenta de SkyDrive.

En el próximo post vamos a ver como mejorar la app y como incrustarla en el sitio host.

Las Apps de SharePoint 2013 (II): La infraestructura

Después de la introducción del post anterior, vamos a ver la arquitectura física de una App de SharePoint 2013. Para ello, no hay nada mejor que destripar una app de ejemplo para ver los detalles. Pero, antes tenemos que configurar correctamente la infraestructura para las apps.

Los tres sabores de las apps

Las apps se componen de un fichero descriptor o App Manifest (lo veremos más adelante) y otros componentes (la lógica, estructuras de datos, CSS, imágenes etc). Dependiendo del alojamiento físico que tengan esos componentes, las apps de SharePoint 2013 pueden ser de tres tipos:

  • SharePoint-hosted: la app está físicamente ubicada en nuestro SharePoint. La creación de componentes adicionales está restringida a componentes declarativos de SharePoint.
  • Auto-hosted: la app está ubicada en Azure. La creación de componentes SQL Azure y Web Workers es automática.
  • Provider-hosted: la app está ubicada en otros servidores. La creación de los componentes web y de datos no es automática y la tenemos que programar o configurar.

En el principio de esta serie de posts nos vamos a ceñir a las apps SharePoint-hosted, que son las más sencillas. Más adelante nos iremos adentrando en los otros dos modelos de las apps.

Los conceptos clave

Una de las dificultades que he tenido con el modelo de las apps es entender correctamente los conceptos clave de la infraestructura de las apps. Resumiré aquí los tres conceptos claves para seguir adelante, para ahorraros trabajo:

  • Sitio host (host web): este es el sitio desde el que se accederá a nuestra app. Las apps puede acceder a sitios host y a otros sitios, si se les autoriza, pero siempre hay que recordar que el sitio host es pasivo (el código y la estructura de las apps está en los otros sitios).
  • Sitio de la app (app web): este es un sitio creado automáticamente por SharePoint para cada app, con la dirección dentro del subdominio de las apps y que contendrá las piezas declarativas de SharePoint que componen nuestra app. Recordemos que la app puede tener código cliente (JS), listas, bibliotecas, custom actions….pero no puede contener código de servidor (compilado). Este sitio de la app es opcional para las aplicaciones que no sean SharePoint-hosted.
  • Sitio remoto (remote web): este es el sitio web fuera de SharePoint (en Azure o en cualquier otro servidor) que alberga la app. En este caso, se puede disponer también de una app web por si necesitamos alguna estructura auxiliar en SharePoint para nuestra app (por ejemplo una lista de usuarios autorizados) y no queremos usar SQL Azure u otro tipo de almacenamiento remoto. La ventaja es que en los sitios remotos podemos usar código de servidor (ASP.NET o lo que sea), porque no se ejecuta dentro de SharePoint. Para que podemos acceder desde el sitio remoto a SharePoint, usaremos OAuth para dar que nos autorice a entrar.

Para ilustrar las diferentes configuraciones, adjunto unos diagramas explicativos (perdonen mi Visio, jeje):

image

image

En resumen, desde el host siempre hay un IFRAME apuntando a la app, y ésta puede estar en SharePoint o fuera de SharePoint. La app siempre consume datos de SharePoint via REST o modelo de objetos de cliente (CSOM).

Preparando el terreno: el dominio de las apps

Para empezar a desarrollar las apps, tenemos que preparar la máquina de SharePoint y eso consiste en crear un dominio para las apps, tal como explica el siguiente artículo de Microsoft. Lo que pasa es que los pasos de este artículo son bastante exhaustivos, y yo intentaré simplicar los pasos al máximo (para unos pasos más gráficos y simplificados también podéis mirar el excelente post de Mirjam Van Olst). Aprovecharé la infraestructura que he ido documentando en la serie de artículos sobre la configuración del entorno de desarrollo de SharePoint 2013.

El dominio creado tiene que ser de tipo comodín (*) porque cada app tendrá un subdominio único dentro de ese dominio. Además, el dominio de la app tendrá un prefijo añadido automáticamente por SharePoint. (p.ej. una app tendrá la URL del tipo http://app-XXXX.appdomain.com donde XXX es un Guid y appdomain.com es el dominio de la app).

La primera elección que tenemos que hacer es si nuestro dominio de las apps será un dominio independiente del dominio de SharePoint (p.ej. sharepointapps.local) o bien un subdominio del mismo (p.ej. apps.sharepoint.local).

La opción del dominio independiente implica más trabajo, pero es más segura desde el punto de vista de código de cliente malicioso. La opción del subdominio es más sencilla de configurar pero los cookies del dominio de SharePoint se pueden leer desde las apps de subdominio, lo que podría dar acceso a datos potencialmente privados a apps del subdominio. Para ilustrar el ejemplo de la app, yo usaré el subdominio app del dominio ya creado, sharepoint.local.

Crearemos el subdominio en el controlador de dominio (dc.sharepoint.local) y lo redireccionamos hacia la máquina de SharePoint (sp2013.sharepoint.local). Para seguir con la idea manía de configurar el controlador de dominio con PowerShell, usaremos dos lineas de script en la línea de comandos de PowerShell:

Básicamente, estamos creando un registro DNS en la máquina de controlador de dominio (dc) de tipo comodín que cuelgue de app.sharepoint.local (parámetros *.app y sharepoint.local) y que apunte a la IP del servidor SharePoint (parámetro sp2013.sharepoint.local).

Hecho esto, tenemos que decirle a SharePoint que éste es nuestro dominio de apps. Para ello iremos a la Administración Central, elegiremos "Apps" y allí la opción "Configure App URLs".

App Domain:  app.sharepoint.local

App prefix: app (lo podemos cambiar por cualquier prefijo)

image

Con esto, ya tenemos listo el entorno para crear nuestra primera app, en el próximo post.

Material del artículo de SharePoint y KnockoutJS de la revista CompartiMOSS #13

Aquí os dejo el ejemplo completo de mi artículo “SharePoint por KO: KnockoutJS” de la revista CompartiMOSS #13.

ACTUALIZACIÓN 21/09/2012: He detectado que hay un pequeño error en el código JavaScript del artículo. La versión corregida ya está subida al SkyDrive y se puede descargar en el enlace inferior.

Si se quiere realizar la modificación manualmente, en el fichero Tasks.js hay que descomentar la línea 90 y cambiar la línea 111 para que diga:

Descargar ejemplo

Montar un entorno de SharePoint 2013: Visual Studio

  1. El controlador de dominio
  2. El servidor de SharePoint: Windows Server
  3. El servidor de SharePoint: SQL Server
  4. El servidor de SharePoint: SharePoint 2013
  5. El servidor de SharePoint: Visual Studio 2012

En esta serie de posts ilustraré como montar un entorno de SharePoint 2013 con Windows Server 2012 RC y dos máquinas: un controlador de dominio y una máquina de SharePoint y SQL Server Express.

Instalar Visual Studio 2012 RC

Sólo un paso más nos separa de tener el entorno de desarrollo totalmente funcional: Visual Studio 2012 RC y las herramientas de desarrollo de SharePoint 2013 Preview.

Empezaremos bajándonos el instalador de Visual Studio desde Microsoft.

SharePoint 2013 Preview-2012-08-04-09-38-48SharePoint 2013 Preview-2012-08-04-09-39-01SharePoint 2013 Preview-2012-08-04-09-39-15

Al ejecutarlo sale el nuevo look del instalador, oscuro y con alto contraste.

SharePoint 2013 Preview-2012-08-04-09-40-04

Aceptamos el contrato de licencia y elegimos los siguientes componentes:

  • Microsoft Office Developer Tools
  • Microsoft SharePoint Developer Tools (ojo, estas son las herramientas del SharePoint 2010)
  • Web Developer Tools (se supone que algo de ASP.NET, HTML y JS tocaremos, no?)

SharePoint 2013 Preview-2012-08-04-10-07-57

Esperamos que el instalador se lo baje todo y lo instale

SharePoint 2013 Preview-2012-08-04-09-40-56SharePoint 2013 Preview-2012-08-04-10-02-36

Al lanzar Visual Studio, elegimos la configuración que queremos.

SharePoint 2013 Preview-2012-08-04-10-03-15

Instalar las herramientas de desarrollo de SharePoint 2013 Preview

Ahora tenemos Visual Studio instalado, pero nos faltan las herramientas de desarrollo sobre SharePoint 2013 Preview. Las bajaremos de la página de Microsoft y arrancaremos la instalación.

SharePoint 2013 Preview-2012-08-04-10-04-26SharePoint 2013 Preview-2012-08-04-10-04-37

Os saldrá que se está instalando la “Web Platform”, pero no os preocupeis, sólo está instalando las herramientas de VS.

SharePoint 2013 Preview-2012-08-04-10-05-32

Elegimos “Microsoft Office Developer Tools for Visual Studio 2012 RC – Preview”

SharePoint 2013 Preview-2012-08-04-10-06-02

Aceptamos la licencia de usuario

SharePoint 2013 Preview-2012-08-04-10-15-17

Esperamos que se instalen las piezas

SharePoint 2013 Preview-2012-08-04-10-15-24

¡Y ya está!

SharePoint 2013 Preview-2012-08-04-10-36-41

Comprobación: abrimos VS2012 y hacemos una App de SharePoint 2013

SharePoint 2013 Preview-2012-08-04-10-39-36SharePoint 2013 Preview-2012-08-04-11-11-04

Instalar SharePoint Designer 2013

Nos falta una pieza opcional, pero importante: SharePoint Designer 2013. La bajaremos de Microsoft y arrancaremos el instalador.

SharePoint 2013 Preview-2012-08-05-09-07-16SharePoint 2013 Preview-2012-08-05-09-07-35

Aceptamos los términos de licencia y le damos a “Install Now”.

SharePoint 2013 Preview-2012-08-05-09-12-46SharePoint 2013 Preview-2012-08-05-09-12-52

Esperamos un ratito

SharePoint 2013 Preview-2012-08-05-09-13-05

Y ya tenemos SharePoint Designer 2013 Preview listo.

SharePoint 2013 Preview-2012-08-05-09-18-50

Lo probamos para asegurarnos:

SharePoint 2013 Preview-2012-08-05-09-19-29SharePoint 2013 Preview-2012-08-05-09-19-57SharePoint 2013 Preview-2012-08-05-09-20-04

Con este post se acaba la serie de montar un entorno virtual de SharePoint 2013. Estoy preparando una serie de posts sobre el desarrollo de Apps de SharePoint 2013 para los próximos días.

Montar un entorno de SharePoint 2013 (IV): SharePoint

  1. El controlador de dominio
  2. El servidor de SharePoint: Windows Server
  3. El servidor de SharePoint: SQL Server
  4. El servidor de SharePoint: SharePoint 2013
  5. El servidor de SharePoint: Visual Studio 2012

En esta serie de posts ilustraré como montar un entorno de SharePoint 2013 con Windows Server 2012 RC y dos máquinas: un controlador de dominio y una máquina de SharePoint y SQL Server Express.

Preparar la máquina para instalar SharePoint

Ya ha llegado el momento de instalar “su majestad el Servidor de SharePoint”. Para ello, primero tenemos que agregar al usuario SPSETUP al grupo de administradores locales de la máquina SP2013 (si no lo hemos hecho ya), y luego iniciar sesión como SPSETUP.

SharePoint 2013 Preview-2012-08-02-18-17-19

Aprovecharemos para deshabilitar la comprobación de loopback que hace Windows Server al referirse por el nombre completo de dominio a sí mismo. Esto sólo se recomienda en las máquinas de desarrollo, por ser un potencial agujero de seguridad.

Lo haremos a lo cool, con PowerShell y permisos de administrador:

New-ItemProperty HKLM:SystemCurrentControlSetControlLsa -Name "DisableLoopbackCheck" -Value "1" -PropertyType dword

SharePoint 2013 Preview-2012-08-02-19-04-34

Reiniciamos y volvemos a entrar a Windows Server.

Instalación de prerrequisitos

Una vez dentro de Windows Server, cargamos la ISO de SharePoint Server 2013 Preview y ejecutamos el programa de instalación. La pantalla habitual desde la versión 2010 nos dará la bienvenida:

SharePoint 2013 Preview-2012-08-02-18-21-50

Clicamos “Install software prerequisites” y el programa nos avisará sobre lo que se instalará a continuación.

SharePoint 2013 Preview-2012-08-02-18-22-57

Le damos a “Next” y aceptamos la licencia de usuario. El programa de instalación se estará bajando los prerequisitos desde la web de Microsoft y los irá instalando uno por uno.

SharePoint 2013 Preview-2012-08-02-18-23-54SharePoint 2013 Preview-2012-08-02-18-24-02

Puede ser que el programa os pida reiniciar para seguir. Ningún problema, entramos con el mismo usuario y se reanuda la instalación.

SharePoint 2013 Preview-2012-08-02-18-26-11

Al final de la instalación de prerrequisitos, tenemos la pantalla de “Installation Complete” y una media sonrisa en la cara.

SharePoint 2013 Preview-2012-08-02-18-33-06

Instalar SharePoint Server 2013 Preview

Ahora ya podemos iniciar la instalación de los binarios de SharePoint 2013. Desde el programa de instalación elegimos “Install SharePoint Server”. Nos saludará la pantalla de “pasen por caja, por favor” la introducción de la clave del producto. Pondremos la clave del Preview y le daremos a “Continue”.

SharePoint 2013 Preview-2012-08-02-18-40-04

Nos sale la pantalla de aceptación de licencia.

SharePoint 2013 Preview-2012-08-02-18-42-19

Después de ella, la instalación nos pregunta si queremos la instalación “standalone” (para niños) o la completa. Evidentemente, iremos a por la completa.

SharePoint 2013 Preview-2012-08-02-18-42-34

Esperaremos un ratito y SharePoint se instalará.

SharePoint 2013 Preview-2012-08-02-18-44-41SharePoint 2013 Preview-2012-08-02-18-53-42

Configurar la granja de SharePoint

Ejecutaremos el asistente de configuración de SharePoint como el último paso de la instalación, dejando la casilla marcada en el instalador de prerrequisitos. Se abre el asistente:

SharePoint 2013 Preview-2012-08-02-18-55-14

Le damos a “Next” y nos aparece el aviso de que se cerrarán ciertos servicios durante la ejecución del asistente. Le damos a “Yes”.

SharePoint 2013 Preview-2012-08-02-18-56-06

En la nueva pantalla que aparece, elegiremos “Create a new server farm” porque estamos montando una nueva granja.

SharePoint 2013 Preview-2012-08-02-18-56-54

En la pantalla de configuración de base de datos le diremos a SharePoint donde está instalado el SQL Server (en sp2013) y con que usuario se conectará a SQL Server (con SPSERVICE). Este usuario será la cuenta de servicio de SharePoint. La pongo más grande para que se vea bien:

SharePoint 2013 Preview-2012-08-02-19-15-41

Nota: es recomendable no poner el nombre completo del SQL Server (sp2013.sharepoint.local), porque podría dar problemas de conexión con ciertos componentes de SharePoint.

El programa nos pide una contraseña de granja, para poder incluir futuros servidores. La ponemos y le demos a “Next”.

SharePoint 2013 Preview-2012-08-02-19-18-28

Dejamos la configuración de la Administración Central y autenticación tal como están.

SharePoint 2013 Preview-2012-08-02-19-20-00

Revisamos que no se colado nada extraño…

SharePoint 2013 Preview-2012-08-02-19-19-56

Y a cruzar los dedos…

SharePoint 2013 Preview-2012-08-02-19-20-50

¡Voilá!

SharePoint 2013 Preview-2012-08-02-19-37-28

Últimos retoques

Clicamos “Finish” en la pantalla anterior, lo que nos abrirá la Administración Central de SharePoint 2013.

SharePoint 2013 Preview-2012-08-02-19-40-05

Elegimos participar (o no) en el feedback de esta versión Preview, y elegimos la opción “Yes, walk me through the configuration…” para iniciar el asistente de configuración de SharePoint en la Administración Central.

SharePoint 2013 Preview-2012-08-02-19-41-03

Clicamos “Start the Wizard” y nos aparece la pantalla de configuración de los servicios. Elegiremos (como es desarrollo y no pasa nada) la misma cuenta de servicio de SharePoint para todos los servicios.

SharePoint 2013 Preview-2012-08-02-19-42-36

SharePoint se queda tan simpático diciendo aquello tan fino de “Estamos trabajando en ello” y hasta se disculpa.

SharePoint 2013 Preview-2012-08-02-19-44-16

Ahora SharePoint nos pide la colección de sitios que queramos crear. Elegiremos la plantilla “Team Site” y la raíz de la instalación (/) como ubicación. Le damos a “OK”.

SharePoint 2013 Preview-2012-08-02-19-54-57

Y ya tenemos nuestro SharePoint 2013 instalado y con la primera colección de sitios en marcha:

SharePoint 2013 Preview-2012-08-02-20-00-33

SharePoint 2013 Preview-2012-08-02-20-21-25

En el último post de esta serie continuaremos con la instalación de Visual Studio 2012 y las herramientas de desarrollo de SharePoint.

Montar un entorno de SharePoint 2013 (III): SQL Server

  1. El controlador de dominio
  2. El servidor de SharePoint: Windows Server
  3. El servidor de SharePoint: SQL Server
  4. El servidor de SharePoint: SharePoint 2013
  5. El servidor de SharePoint: Visual Studio 2012

En esta serie de posts ilustraré como montar un entorno de SharePoint 2013 con Windows Server 2012 RC y dos máquinas: un controlador de dominio y una máquina de SharePoint y SQL Server Express.

Crear las cuentas de servicios necesarias

Para poder instalar y configurar SharePoint 2013 y SQL Server, necesitaremos como mínimo 3 cuentas de servicio: la de SharePoint, la de SQL Server y la de instalación de SharePoint.

En mi entorno de desarrollo las llamo así:

  • SPSETUP (instalación, tiene que ser el administrador local de la máquina sp2013)
  • SPSERVICE (servicio de SharePoint)
  • SQLSERVICE (servicio de SQL Server)

Para crearlas en el dominio sharepoint.local, hay que abrir la máquina virtual de controlador de dominio (dc.sharepoint.local) y desde PowerShell ejecutar:

New-ADUser –CannotChangePassword $true –ChangePasswordAtLogon $false –PasswordNeverExpires $true –Name “spsetup” –DisplayName “SharePoint Setup” –AccountPassword (Read-Host –AsSecureString “Password”) –Enabled $true

PowerShell nos preguntará por la contraseña, de manera segura (con asteriscos) y creará el usuario, con una contraseña que no caduca nunca. Repetiremos la operación para las demás cuentas (cambiando el parámetro Name y DisplayName, obviamente.

SharePoint 2013 Domain Controller-2012-07-31-17-41-21

Ya tenemos las cuentas preparadas y procederemos a instalar SQL Server Express 2012.

Instalar SQL Server Express 2012

Nos bajaremos la versión de 64 bits de SQL Server Express 2012 desde Microsoft. Yo recomiendo la versión SQLEXPRWT_x64_ENU (la Express con herramientas de gestión, alias Management Studio).

Abrimos el EXE que se ha descargado y comenzamos la instalación. Elegimos “New SQL Standalone installation…” y aceptamos la licencia de usuario.

SharePoint 2013 Preview-2012-07-31-17-22-02SharePoint 2013 Preview-2012-07-31-17-26-20

Elegimos “Database Engine” y “Management Tools – Basic”.

SharePoint 2013 Preview-2012-07-31-17-29-51

Cambiamos la instancia SQLEXPRESS por la instancia por defecto (Default instance).

SharePoint 2013 Preview-2012-07-31-17-30-37

Ahora le especificamos la cuenta de servicio, que será la SHAREPOINTsqlservice y ponemos la contraseña.

SharePoint 2013 Preview-2012-07-31-17-32-04

Como es una máquina de desarrollo, podemos poner a SPSetup como administrador de la base de datos y ahorrarnos el paso de asignar permisos de servidor una vez instalado. Importante: no hacer esto en un servidor de producción.

SharePoint 2013 Preview-2012-07-31-17-38-13

Unos cuantos “Next” y tenemos el SQL Server listo para aguantar a SharePoint 2013.

SharePoint 2013 Preview-2012-07-31-17-48-47

Montar un entorno de SharePoint 2013 (II): Windows Server

  1. El controlador de dominio
  2. El servidor de SharePoint: Windows Server
  3. El servidor de SharePoint: SQL Server
  4. El servidor de SharePoint: SharePoint 2013
  5. El servidor de SharePoint: Visual Studio 2012

En esta serie de posts ilustraré como montar un entorno de SharePoint 2013 con Windows Server 2012 RC y dos máquinas: un controlador de dominio y una máquina de SharePoint y SQL Server Express.

Instalar Windows Server 2012 RC en el nuevo dominio

Después de arrancar la máquina virtual previamente creada con el controlador de dominio(dc.sharepoint.local), vamos a crear otra máquina virtual con 6 GB de RAM donde instalar SharePoint. En este post enseñaré como montar el servidor de Windows con sus requisitos.

Importante: configuraremos la máquina virtual con 2 tarjetas de red:

  • una con la dirección IP fija, establenciendo el enlace con el controlador de dominio
  • otra con la dirección IP automática asignada por NAT (o Bridged), para la salida a Internet (necesaria para que el instalador de SharePoint se baje los prerrequisitos)

Configuramos la unidad de CD-ROM de la VM para que apunte a la ISO de Windows Server 2012 RC, previamente bajada de Microsoft y arrancamos la máquina.

Lo primero que tenemos que hacer es seleccionar el idioma del Windows Server y la configuración regional. Yo voy a usar la máquina en inglés pero con teclado español.

SharePoint-2013-Domain-Controller-20[11]

Clicamos en “Install Now”

SharePoint-2013-Domain-Controller-20[8]

A diferencia del controlador de dominio, ahora elegimos “Server Installation” para instalar todo el entorno gráfico de Windows.

SharePoint 2013 Preview-2012-07-30-20-50-18

Aceptamos la licencia de usuario

SharePoint 2013 Preview-2012-07-30-20-51-04

Elegimos “Custom: Install Windows only”

SharePoint 2013 Preview-2012-07-30-20-51-19

Seleccionamos la unidad de disco donde instalar Windows Server 2012 RC

SharePoint 2013 Preview-2012-07-30-20-51-36

Esperamos que la instalación acabe

SharePoint 2013 Preview-2012-07-30-20-51-41

La máquina nos avisa que hay que cambiar la contraseña del administrador. La ponemos y clicamos “Finish”.

SharePoint 2013 Preview-2012-07-30-21-05-49

Entramos con las nuevas credenciales del administrador local y ya tenemos instalado Windows Server 2012 RC . Nos falta preparar la máquina para instalar el resto de los componentes.

SharePoint 2013 Preview-2012-07-30-21-07-20SharePoint 2013 Preview-2012-07-30-21-09-14

Unir la máquina al dominio

Primero, configuraremos la tarjeta de red con una IP fija con el valor 192.168.1.202 y la puerta de enlace y el servidor DNS 192.168.1.201 (nuestro controlador de dominio).

SharePoint 2013 Preview-2012-07-30-21-14-14

Renombraremos la máquina como SP2013 y la uniremos al dominio sharepoint.local. Al pedir las credenciales de usuario, pondremos las del administrador del dominio (SHAREPOINTAdministrator).

Vamos a “Local Server” dentro del Server Manager.

SharePoint 2013 Preview-2012-07-30-21-16-54

Clicamos en “Computer name” y luego a “Change

SharePoint 2013 Preview-2012-07-30-21-17-24

Introducimos los datos del dominio y el nuevo nombre de la máquina

SharePoint 2013 Preview-2012-07-30-21-17-42

Nos pide las credenciales del usuario autorizado del dominio, pondremos las del administrador. Reiniciamos, tal como nos pide Windows y ¡listos!

SharePoint 2013 Preview-2012-07-30-21-19-47

Configurar los roles y las características

Ahora, aunque no sea estrictamente necesario, instalaremos los componentes de Windows que SharePoint necesita. Si no lo hacemos, lo hará el instalador de prerrequisitos, aunque a mí personalmente me gusta saber lo que estoy trasteando en cada momento.

En el Server Manager vamos a “Add Roles and Features” y después de clicar “Next” en la pantalla de bienvenida, elegimos “Role-based or Feature-based installation

SharePoint 2013 Preview-2012-07-31-10-14-40SharePoint 2013 Preview-2012-07-31-10-14-49SharePoint 2013 Preview-2012-07-31-10-15-01

Seleccionamos el servidor (sólo habrá uno) y elegimos el rol de “Application Server” y de “Web Server (IIS)”, un poco más abajo.

Nota: Al activar IIS se mostrará una pantalla diciendo que hay que instalar otras características para IIS, la aceptamos directamente.

SharePoint 2013 Preview-2012-07-31-10-16-21SharePoint 2013 Preview-2012-07-31-10-17-49

Clicamos “Next” tres veces hasta que llegamos a la pantalla de selección de servicios de roles (“Select Role Services”).

Aquí seleccionamos los servicios de roles siguientes para el rol de Application Server (y sus requisitos, si nos los pide):

  • NET Framework 4.5
  • TCP Port Sharing
  • Web Server (IIS) Support
  • Windows Process Activation Service Support
    • HTTP Activation
    • Message Queuing Activation
    • Named Pipes Activation
    • TCP Activation

Al final, le damos dos veces a “Next”.

SharePoint 2013 Preview-2012-07-31-10-22-52SharePoint 2013 Preview-2012-07-31-10-22-28

Ahora seleccionamos los servicios del rol Web Server (IIS) (y sus requisitos):

  • Web Server
    • Common HTTP Features
      • Default Document
      • Directory Browsing
      • HTTP Errors
      • Static Contents
      • HTTP Redirection
    • Health and Diagnostics
      • HTTP Logging
      • Logging Tools
      • Request Monitor
    • Performance
      • Static Content Compression
      • Dynamic Content Compression
    • Security
      • Request Filtering
      • Basic Authentication
      • Client Certifiate Mapping Authentication
      • Digest Authentication
      • IIS Client Certificate Mapping Authentication
      • IP and Domain Restrictions
      • URL Authorization
      • Windows Authentication
    • Application Development
      • .NET Extensibility 3.5
      • .NET Extensibility 4.5
      • ASP.NET 3.5
      • ASP.NET 4.5
      • ISAPI Extensions
      • ISAPI Filters
    • Management Tools
      • IIS Management Console
      • IIS 6 Management Compatibility (con todas las opciones dependientes)
      • IIS Management Scripts and Tools
      • Management Service

SharePoint 2013 Preview-2012-07-31-10-30-39

Le damos a “Next” y revisamos que no nos hayamos dejado nada por el camino. Clicamos “Install” y esperamos que acabe.

SharePoint 2013 Preview-2012-07-31-10-31-14SharePoint 2013 Preview-2012-07-31-10-33-02

Desactivar el modo de seguridad mejorada de Internet Explorer

Como vamos a usar esta máquina para desarrollar, desactivamos el modo de protección de Internet Explorer para que no nos dé problemas al abrir las páginas con JavaScript. Para ello vamos al Server Manager, la opción “Local Server”, “IE Enhanced Security Configuration” y lo ponemos en Off para todos. Importante: esto no lo hagáis NUNCA en producción, porque es un agujero de seguridad potencial.

SharePoint 2013 Preview-2012-07-31-10-42-31SharePoint 2013 Preview-2012-07-31-10-43-50

¡Voilá! Ya tenemos un servidor listo para instalarle SQL Server, SharePoint y Visual Studio, en los próximos posts.