[Evento] Potencia tus desarrollos de SharePoint con Azure

Muy buenas a todos, y antes de nada Feliz Navidad a todos los que habitualmente entran a “El blog del programador”.

Hoy os quiero hablar del próximo evento que se va a celebrar, organizado por la comunidad de usuarios de SharePoint de Madrid, MadPoint, y que tendrá lugar el próximo 15 de Enero en Wayra en la calla Gran Via, 28.

En dicho evento, tendremos la oportunidad de profundizar en las oportunidades que nos ofrece Azure para usarla en nuestros desarrollos de SharePoint, tanto OnLine como OnPremise. Os dejo el enlace de la página de madpoint donde encontraréis toda la información sobre el evento

http://www.madpoint.net/2015/12/23/evento-potencia-tus-desarrollos-de-sharepoint-con-azure/

La agenda del evento, en donde tendré la oportunidad de aportar mi granito de arena, es la siguiente:

  • 16.00 – 16.15: Bienvenida e introducción
  • 16.15-16.50: Diseña tu propio Office 365 con Azure IaaS y PaaS
    • En esta sesión teórica, Miguel Tabera (MVP de Office Servers and Services) nos enseñará, desde el punto de vista de arquitectura, cómo es posible utilizar máquinas virtuales y servicios como las web apps, Azure Search, Media Services y Application Insights para diseñar nuestro propio servicio similar a Office 365 en el que proporcionemos SharePoint, Exchange, Office Vídeo, etc.
  • 17.00-17.50: Logic apps o el futuro de los flujos de trabajo
    • ¿Qué son las logic apps? ¿Cómo las podemos utilizar? ¿Se convertirá en el motor para desarrollar nuestras lógicas de negocio y flujos de trabajo en el futuro? En esta sesión, Jose Carlos Rodríguez Avilés, nos enseñará qué podemos hacer con este servicio de Azure y cómo podemos usarlo para implementar lógicas de negocio interconectando entre si la amplia gama de herramientas que usamos hoy en día.
  • 18.00-18.50: Timerjobs y eventos en SharePoint Online usando Hangfire
    • Cristian Ruiz nos mostrará un ejemplo práctico de cómo crear timerjobs y eventos remotos (evitando los límites de tiempo de SharePoint online) utilizando el motor de tareas programadas.

Como podéis ver, las ponencias son muy interesantes, os animo a seguir de cerca la información del evento, y a que participéis en el mismo. Poco a poco, desde MadPoint iréis recibiendo más información, desde twitter, linkedin y la página de web, para todos aquellos que podáis estar interesado.

Un saludo, y por si acaso que tengáis una muy buena entrada del año 2016.

 

Anuncios

Paginando en SharePoint 2013 con API REST

Muy buenas a todos,

Hoy quería contaros un tema con el que me he estado peleando hoy en mi proyecto con el que estoy haciendo un uso bastante intensivo de la API REST de SharePoint con AngularJS. Una experiencia que os debo decir, me está encantando.

El tema ha venido a la hora de “paginar” una consulta en SharePoint que estaba haciendo vía API REST. Según pensaba, usando las opciones $top y $skip se podría hacer la paginación sin problemas. Para ello pensaba usar el endpoint que habitualmente uso para trabajar con las listas de SharePoint

http://<misitio>/_api/web/lists/getbytitle(‘lista&#8217;)/items

Mi sorpresa ha sido darme cuenta que con este endpoint la opción $skip no funciona. Indagando un poco he descubierto que efectivamente, esta opción no funciona para lista de elementos, solo funciona para colecciones de datos como colecciones de listas.

http://sharepoint.stackexchange.com/questions/45719/paging-using-rest-odata-with-sp-2013

https://msdn.microsoft.com/en-us/library/office/fp142385.aspx

Para hacer la paginación via API REST podemos usar el antiguo endpoint OData V2 listdata.svc. Con esta versión si funciona la opción $skip correctamente:

http://<misitio>/_vti_bin/ListData.svc/<lista&gt;

Ejemplo: http://<misitio>/_vti_bin/ListData.svc/<lista&gt;?$top=2&$skip=2

Salvando este inconveniente sobre el endpoint que debemos usar, usando estas dos opciones $top y $skip, podremos paginar nuestras consultas de una forma muy sencilla.

Y esto es todo por hoy, espero que os resulte útil, como siempre, y que si os habéis encontrado con esta problemática, tardéis menos tiempo en resolverlo.

Saludos.

[OffTopic]

No suelo acostumbrar a hacer nada de esto. Pero hoy ha nacido mi sobrino, del que tendré la oportunidad además de ser su padrino. Así que esta entrada de hoy va dedicada a él y a sus padres. Aunque no lo podré conocer hasta dentro de 15 días porque me ha salido “conejero” y está en Lanzarote, que ilusión más grande.

Usando el nuevo modelo de desarrollo para SharePoint con PowerShell

Muy buenas a todos,

Hace unos meses, escribí acerca del nuevo modelo de desarrollo para SharePoint OnLine y SharePoint OnPremises propuesto por Microsoft e incluso una de mis colaboraciones en CompartiMOSS giró en torno a este tema.

Nuevo modelo de desarrollo de Sharepoint. Adaptando nuestras soluciones de granja

Número #24 de CompartiMOSS y nueva colaboración con la revista

Como ya decía en aquella ocasión, trabajar con las API cliente se podría hacer tanto por medio de la API REST, con la API CSOM o JSOM o incluso PowerShell. Tenía muchas ganas de ver cómo se podría trabajar con éste último y para un proyecto en el que estoy trabajando recientemente decidí que ya era el momento.

La primera intención, fue desarrollar mis propios Cmdlets o mis propios Scripts con funciones para realizar las distintas operaciones que fuese necesitando. Finalmente decidí previamente indagar por la cuenta de GitHub de OfficeDev/Pnp, donde encontré un gran trabajo especifico sobre PowerShell, proporcionando una gran cantidad de Cmdlets desarrollados que permiten trabajar con las API Cliente, concretamente CSOM, y PowerShell. Por supuesto, trabajo que decidí utilizar, y que os recomiendo a todos.

https://github.com/OfficeDev/PnP-powershell

En el artículo de hoy, os quiero mostrar cómo instalar y configurar en nuestro servidor estos Cmdlets y cómo se pueden usar algunos de ellos a modo de ejemplo. No obstante, en la página de Pnp hay una documentación muy buena sobre todas las opciones de que disponemos.

Instalando los Cmdlets en el servidor

Para poder tener disponibles todos los Cmdlets de PowerShell tendremos que seguir los siguientes pasos:

1.- En primer lugar descargar el proyecto Visual Studio desde la cuenta de GitHub de OfficeDev/Pnp-PowerShell.

download

2.- Para poder instalar el proyecto, es necesario descargar e instalar las WiX Tools en nuestro equipo.

wix

3.- A continuación abrimos la solución que descargamos anteriormente y para poder crear la solución, necesitamos agregar dos paquetes desde Nugets. El primero de ellos es el OfficeDev Core para SharePoint Online o OnPremises, en función de para qué lo vayamos a usar.

coreoffice

4.- El siguiente paquete es la librería ADAL para la autenticación.

identity

5.- Tras esto ya se puede hacer el build del proyecto lo cual dejará instalados los Cmdlets en nuestro equipo

install

Si ahora abrimos por ejemplo el IDE de PowerShell, en la lista de comandos disponibles, si ponemos en el cajón de búsqueda SPO, filtrará todos los comandos que se han añadido.

Usando los nuevo Cmdlets

A continuación voy a mostrar un breve ejemplo de cómo podríamos usar los nuevos Cmdlets con PowerShell.

Connect-SPOnline -Url $url -Credentials (Get-Credential)

Add-SPOField -DisplayName "Example" -InternalName "Example" -Group "ExampleSPO" -Type Integer
Add-SPOField -DisplayName "Example1" -InternalName "Example1" -Group "ExampleSPO" -Type Text
Add-SPOField -DisplayName "Example2" -InternalName "Example2" -Group "ExampleSPO" -Type Choice -Choices "uno","dos","tres"

Add-SPOContentType -Name "ContentTypeExample" -Description "Description to Content Type" -Group "ExampleSPO"

Add-SPOFieldToContentType -Field "Example" -ContentType "ContentTypeExample"
Add-SPOFieldToContentType -Field "Example1" -ContentType "ContentTypeExample"
Add-SPOFieldToContentType -Field "Example2" -ContentType "ContentTypeExample"

New-SPOList -Title "List Title" -Template GenericList -EnableContentTypes
Add-SPOContentTypeToList -List "List Title" -ContentType "ContentTypeExample" -DefaultContentType

En el código de ejemplo se muestra cómo conectarse a un sitio de SharePoint OnLine, crear columnas de sitio, un tipo de contenido y asociarlo a una lista que se ha creado previamente.

Y esto es todo por hoy, por si aún no lo conocíais, espero que os sea de utilidad y que en la medida de lo posible, podáis usarlo en vuestros proyectos.

Hasta la próxima.

Azure Logic Apps II: ¿Qué más puedo hacer?

Muy buenas a todos,

En la entrada anterior os mostré mis primeros pasos con las Logic Apps de Azure, y cómo se estaban presentando como una nueva alternativa para implementar flujos de trabajo y procesos de negocio que requirieran y usaran distintos servicios, y además lo hacían de una forma sencilla por medio de un diseñador.

Azure Logic Apps I: Primeros Pasos

Obviamente, en esta primera entrada, creé un proceso de negocio secuencial y sencillo, ejecutado manualmente que poca utilidad real tenía. En la entrada de hoy os quiero enseñar algunas de las opciones que nos ofrecen las Logic Apps y como pueden hacerlas muy interesantes, ya que nos permiten crear triggers en determinados conectores, implementar recursión, trabajar con arrays de datos, etc. Vamos a intentar ver todo esto en la entrada de hoy, para profundizar en el conocimiento de las Logic Apps y en lo que podemos hacer.

Usando Triggers en una Logic App

Una de las opciones de que disponemos a la hora de crear una Logic App, es asociar su ejecución a un Trigger de uno de los conectores, estos triggers pueden actuar de dos formas:

  • Por un lado, chequear de forma recurrente en busca de nueva información, y en caso de que exista, ejecutar el resto de pasos del proceso de negocio. Para evitar que la misma información sea consumida en varias ocasiones, se borrará del origen una vez pasada a la Logic App para su consumo (Poll triggers).
  • Por otro lado, se puede estar escuchando en un destino en busca de que ocurra un determinado evento (Push triggers).

No todos los conectores pueden actuar como triggers. En el siguiente enlace podréis acceder a la información que nos permite saber cuáles de los conectores pueden ser usados de esta manera y ampliar los conocimientos sobre los tipo de triggers, etc.

https://azure.microsoft.com/en-us/documentation/articles/app-service-logic-connectors-list/

A modo de ejemplo se va a crear una Logic App que conecta una lista de peticiones de SharePoint con un proceso de negocio que añade las peticiones a una cola (Service Bus de Azure) y envía un mail cuando se recibe una nueva petición.

Captura de pantalla 2015-10-11 a las 17.16.03

En la Logic App que hay en la imagen anterior, podemos ver como se usa el conector de SharePoint Online como trigger. Este conector es de tipo (Poll triggers) por lo que su funcionamiento, en este caso, será el de buscar cada minuto, si hay nuevas peticiones y en su caso, añadir un mensaje en la cola del service bus de azure y mandar un mail al equipo de soporte.

Una vez configurados todos los conectores, salvamos y podemos probar la Logic App.

Captura de pantalla 2015-10-11 a las 17.16.42 Captura de pantalla 2015-10-11 a las 17.18.47

Captura de pantalla 2015-10-11 a las 17.18.28

En la prueba se puede ver cómo una vez creada la petición, cuando se ejecuta la Logic App, el service bus recibe el mensaje correctamente.

Recursión en las Logic Apps

Para los siguientes apartados, se va a usar la misma Logic App. En este caso, cada cierto tiempo se recorren todas las peticiones y si alguna de ellas tiene la palabra ‘Test’ se envía un mail.

Captura de pantalla 2015-10-11 a las 18.39.31

Las Logic Apps nos permiten crear procesos de negocio que se ejecuten de forma recursiva con una programación preestablecida. Para ello, como se ve en la Logic App que hemos creado para este ejemplo, se usa el conector “Recurrence” al principio de la mismaUna vez insertado en el diseñador tenemos que indicar la planificación y validarla, y habremos preestablecido la perioricidad con la que queremos que se ejecute nuestra Logic App.

Trabajando con Arrays en nuestras Logic Apps

Los conectores pueden trabajar con arrays de datos. Un conector podría devolver un array y se podría ejecutar el siguiente conector en un bucle para cada uno de los elementos de dicho valor devuelto.

En el ejemplo anterior, esto se puede ver con los dos conectores de SharePoint OnLine que se han utilizado, uno de ellos, devuelve una lista con los Id de las peticiones que hay registradas, y el otro, para cada id devuelve la información completa de la petición.

Captura de pantalla 2015-10-11 a las 18.39.52

Como podemos ver, además el segundo conector, devuelve un array con toda la información de las peticiones. Si queremos configurar un conector para trabajar con un array, debemos hacer click sobre la opción de menú superior derecha del conector y pulsar sobre “Repeat over a list”. 

Captura de pantalla 2015-10-11 a las 19.20.03

A continuación, indicamos el array sobre el que queremos ejecutar dicho conector.

Captura de pantalla 2015-10-11 a las 19.24.04

Usando condicionales

Por último, otra de las opciones que nos permiten las Logic App es ejecutar un conector bajo unas determinadas condiciones. En la Logic App que hemos creado anteriormente y que estamos usando como ejemplo, se ha usado en el conector de Office 365.

Captura de pantalla 2015-10-11 a las 18.40.06

En este caso además, vamos a evaluar la condición para todos los elementos del array devueltos por el conector anterior. Para insertar una condición tenemos que hacer click en el menú superior derecho del conector y en “Add a condition to be met”.

Captura de pantalla 2015-10-11 a las 19.32.33

Esto nos abre un recuadro, como el que se en la imagen inicial donde podremos añadir la condición que queramos. Las condiciones pueden resultar algo complejas al principio. Pueden ser simples como la que se ha creado en el ejemplo, o combinar or, and, etc. Como en cualquier operación lógica. Os dejo algunos enlaces de donde podéis sacar información de cómo hacer estas condiciones y todos los operadores que tenéis disponibles. Los dos primeros son ejemplos de cómo hacer condiciones que he usado para entender la forma de trabajar, y el último es la web de referencia de la msdn con todas las opciones de operadores que tenemos para usar.

http://devslice.net/2015/05/azure-logic-app-conditions-success-and-failure/

http://www.bizbert.com/bizbert/2015/03/25/Azure+App+Service+How+To+Implement+Conditional+Logic+And+Loops+In+A+Logic+App.aspx

https://msdn.microsoft.com/en-US/library/azure/dn948512.aspx

Y esto es todo por hoy, he podido profundizar mucho más en las opciones que permiten usar las Logic Apps, con lo que se ha podido ver el abanico de oportunidades que tenemos disponible, y seguro que empezar a tenerlas en cuenta como solución a nuestros Flujos de Trabajo y procesos de negocio.

¿Esto es todo?, si le habéis echado un vistazo a los conectores, seguro que os habéis planteado que estos pueden ser limitados a la hora de implementar un proceso de negocio en nuestros sistemas. Y puede ser cierto, así que en próximas entradas veremos cómo crear nuestros propios conectores, para lo que tendremos que adentrarnos en el concepto de API Apps.

Un saludo a todos.

Azure Logic Apps I: Primeros Pasos

Muy buenas a todos,

Hoy quiero seguir avanzando en el conocimiento de los servicios que nos ofrece Azure para desarrolladores, que son muchos. En anteriores entradas, os he hablado de cómo usar los WebJobs para crear TimerJobs en SharePoint OnLine y del Service Bus de Azure y algunas de sus opciones:

https://elblogdelprogramador.wordpress.com/2015/06/04/timer-jobs-para-sharepoint-online/

https://elblogdelprogramador.wordpress.com/2015/07/01/primeros-pasos-con-el-service-bus-de-azure-las-colas/

https://elblogdelprogramador.wordpress.com/2015/07/07/el-service-bus-de-azure-los-temas/

Hoy os quiero mostrar las Logic Apps de Azure, un servicio relativamente nuevo que nos ofrecen desde Azure e intentaré, como siempre, relacionarlo de alguna forma con SharePoint OnLine y Office 365. En esta primera entrada, de lo que espero que sea una serie en la que pueda profundizar mucho más en las Logic Apps, os quiero contar en qué consisten, como crearlas y cómo usarlas de una forma sencilla.

¿Qué son las Logic Apps?

Para explicar lo que son las Logic Apps, aunque ahora os mostraré un extracto con lo más importante, lo que os recomiendo es acudir a la página oficial de Azure.

https://azure.microsoft.com/en-us/documentation/articles/app-service-logic-what-are-logic-apps/

Las Logic Apps permiten la automatización en la ejecución de procesos de negocio y flujos de trabajo creados por medio de un diseñador visual fácil de usar. Estos flujos de trabajo ejecutan una serie de pasos y se basan en conectores que permiten trabajar sobre distintos entornos con todas las garantías de seguridad necesarias. Permiten integrar tecnologías como SharePoint (Online y Server), Office 365, CRM, SQL, redes sociales, etc.

Los conectores son el elemento fundamental en el que se basan las Logic Apps. Éstos nos proporcionan acceso a datos y servicios y se conectan entre ellos para generar los procesos de negocio. Además, algunos de ellos pueden ser utilizados como triggers. La lista completa de conectores la podéis encontrar en el siguiente enlace.

https://azure.microsoft.com/en-us/documentation/articles/app-service-logic-connectors-list/

¿Cómo podemos crear una Logic App?

A continuación, vamos a ver los pasos que debemos dar para crear una Logic App sencilla que conecte SharePoint OnLine y use servicios de Office 365. Para poder trabajar con Logic Apps, deberemos irnos al portal de vista previa de Azure.

1.- Una vez ahí vamos a Nuevo->Web y móvil->Logic App.

Captura de pantalla 2015-10-10 a las 13.34.51

2.- A continuación nos aparecen los parámetros de configuración de la Logic App, que tendremos que configurar. Indicamos el nombre y creamos un nuevo plan de servicio de aplicaciones.

Captura de pantalla 2015-10-10 a las 13.35.04

3.- El tercer paso, para terminar de configurar la Logic App es establecer el plan de precios y el grupo de recursos, como vemos en las imágenes que hay a continuación.

Captura de pantalla 2015-10-10 a las 13.35.34

Captura de pantalla 2015-10-10 a las 13.36.15

4.- Para crear la Logic App, pulsamos en crear y esperamos que se aprovisione la misma, tras esto ya podremos acceder para utilizar el diseñador y crear la lógica de negocio. Si entramos en la Logic App que se acaba de crear, tendremos todas las opciones de configuración, para acceder al panel de diseño, pulsamos sobre Triggers and actions.

Captura de pantalla 2015-10-10 a las 13.36.50

5.- Esto nos lleva a la siguiente pantalla, donde podemos seleccionar una plantilla o empezar un proceso de negocio desde 0. Pulsamos en Create from Scratch y nos encontraremos con el diseñador.

Captura de pantalla 2015-10-10 a las 13.37.22

6.- A continuación aparece la imagen con el diseñador que os encontraréis para configurar la lógica de la Logic App. En la parte superior el menú, con la opción de guardar o descartar cambios, y la posibilidad de ver el diseñador o la vista de código de la logic app principalmente. La parte central es donde se van configurando los distintos pasos, y en la parte derecha, tenemos todos los conectores que podemos añadir a nuestra Logic App.

Si queremos poder ejecutar la Logic App manualmente tenemos que indicarlo expresamente en el recuadro que nos aparece, en otro caso se iniciará por medio de un trigger que habrá que configurar o a partir de un temporizador.

Captura de pantalla 2015-10-10 a las 13.37.36

7.- En esta ocasión, vamos a añadir dos conectores, uno para SharePoint Online y otro para Office 365, el primero para añadir un elemento en una lista de mi subscripción de SharePoint Online y el segundo para enviar un mail desde mi cuenta de Office 365.

Captura de pantalla 2015-10-10 a las 13.38.02

8.- Para configurar el conector de SharePoint OnLine, tendremos que indicar la Url del sitio de SharePoint y la Url relativa de la lista con la que queremos operar. Además tendremos que autorizar el acceso del conector por medio de nuestro login en SharePoint OnLine. Una vez realizados estos pasos correctamente, nos pedirá que seleccionemos la acción que queremos realizar. En nuestro caso hemos seleccionado añadir un item en la lista. Una vez configurados los parámetros (indicados los campos de la lista), podemos salvar y continuar adelante.

Captura de pantalla 2015-10-10 a las 14.05.50

9.- Con el conector de Office 365, debemos hacer el mismo proceso, será necesario que nos autentiquemos para poder operar con él. Una vez hecho esto, podremos seleccionar entre varias opciones, en este caso hemos indicado enviar un email, donde habrá que indicar el destinatario, asunto y cuerpo del correo electrónico.

Captura de pantalla 2015-10-10 a las 15.27.33

10.- El último paso tras salvar la configuración del conector es guardar la lógica de negocio generada. Entonces, podremos pasar a probarla.

Probando la Logic App que hemos creado

Para probar la Logic App, vamos al panel principal y le damos a Run Now (este botón solo estará habilitado si hemos indicado la opción de iniciar manualmente.

Captura de pantalla 2015-10-10 a las 13.50.28

Si la ejecutamos y accedemos al sitio de SharePoint y al correo electrónico, vemos que la Logic App se ha ejecutado correctamente.

Captura de pantalla 2015-10-10 a las 15.29.03

Captura de pantalla 2015-10-10 a las 15.29.27

El ejemplo de hoy carece de una lógica real, el único motivo era mostrar cómo se tienen que crear las Logic Apps y lo sencillo que resulta conectarlas con SharePoint OnLine y Office 365. Se trata de un ejemplo secuencial y que se ejecuta manualmente, pero tenemos muchas más opciones a la hora crear estos procesos de negocio, como pueden ser, triggers, temporizadores, bucles, etc.

Y hasta aquí esta introducción sobre Logic Apps, ¿El futuro de los Flujos de Trabajo?, en mi opinión, en un entorno en el que cada vez más tenemos una gran variedad de tecnologías para tener en cuenta en nuestros proyectos, un motor como este, es un muy buen candidato, ya que nos permite trabajar sobre todas ellas y además de una forma sencilla.

En posteriores entradas, veremos más en profundidad qué podemos hacer en la definición de procesos de negocio con las Logic Apps, e incluso cómo crear nuestros propios conectores.

Como siempre, espero que os haya resultado interesante.

Un saludo a todos.

Número #24 de CompartiMOSS y nueva colaboración con la revista

Muy buenas a todos,

El pasado miércoles durante el CEUS by Iberian Conference se presentó un nuevo número de la revista especializada en SharePoint CompartiMOSS. En esta ocasión, la revista trae mucho contenido interesante y cada vez más comienzan a aparecer artículos relacionados con Azure, Machine Learning, SharePoint OnLine y siempre sin olvidar la versión de SharePoint OnPremise.

numero24

Para acceder al número de la revista, podéis hacer click aquí. Os dejo también acceso a todo el contenido del número de la revista, para que os podáis hacer una idea del contenido de la misma.

Una vez más he dejado mi pequeña aportación a esta revista que espero que os guste. En esta ocasión os escribo sobre el nuevo modelo de desarrollo que se propone desde Microsoft para SharePoint, tanto la versión OnLine como la versión OnPremise. Algo ya he comentado por aquí, con algunos artículos sobre el tema que iban saliendo mientras preparaba el artículo.

Para terminar muchas gracias a todos los que hacen posible que esta revista siga adelante.

Un saludo y hasta la próxima

Timer jobs para SharePoint OnLine

Muy buenas a todos,

El modelo de desarrollo de SharePoint OnLine, como ya es conocido, no nos permite el uso de soluciones de granja en nuestros desarrollos, basado fundamentalmente en el modelo de objetos de servidor. Por contra, nos propone un modelo basado en los mejorados modelos de cliente.

A priori, puede parecer que le modelo de objetos de cliente tiene ciertas limitaciones por medio de las cuales no podremos cubrir requisitos que impliquen por ejemplo desarrollar TimerJobs. ¿Es esto cierto?, la realidad es que con el modelo de objetos de cliente, no vamos a poder crear TimerJobs tal y como estábamos acostumbrados con las soluciones de granja, ¿significa esto que no podremos crear tareas programadas en SharePoint OnLine?, aquí la respuesta es obviamente no.

Para poder hacerlo tendremos, eso si, que combinar alguno de los servicios que pone a nuestra disposición Microsoft, a través de Azure. Usaremos los WebJobs de Azure para, en combinación con el modelo de clientes, crear una tarea programada para SharePoint OnLine.

En la entrada de hoy vamos a ver un ejemplo de un WebJob de Azure que realiza un tarea en background sobre SharePoint OnLine, crearemos un TimerJob para SharePoint OnLine. Para llevarlo a cabo he seguido estos dos tutoriales que os recomiendo por si quereis echar un vistazo.

https://msdn.microsoft.com/en-us/library/office/dn986826.aspx

https://azure.microsoft.com/es-es/documentation/articles/websites-dotnet-deploy-webjobs/

Creando el proyecto en Visual Studio 2013

Voy a desarrollar un WebJob que escribe en una lista de SharePoint OnLine un registro cada cierto tiempo. Para ello vamos a crear en Visual Studio una aplicación de consola.

Una vez que hemos creado la aplicación de consola, vamos a añadir por medio de Nuget los siguientes paquetes:

  • App for SharePoint ToolKit (for SharePoint OnLine)
  • Microsoft.SharePoint.2013.Client.16

Esto nos añadirá todos los elementos necesarios para autenticarnos y acceder a SharePoint OnLine desde nuestra Aplicación de consola.

A continuación os comparto el código del WebJob que he desarrollado.

namespace AzureWebJobExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ClientContext context = new ClientContext("https://<sharepointsiteurl>"))
            {
                // Use default authentication mode.
                context.AuthenticationMode = ClientAuthenticationMode.Default;
                context.Credentials = new SharePointOnlineCredentials(GetSPOAccountName(), GetSPOSecureStringPassword());

                try
                {
                    var list = context.Web.Lists.GetByTitle("Noticias");
                    context.Load(list);
                    context.ExecuteQuery();

                    var itemCreateInfo = new ListItemCreationInformation();
                    var listItem = list.AddItem(itemCreateInfo);
                    listItem["Title"] = "News Web Job Example Added " + DateTime.Now;
                    listItem["nwhz"] = "This is an example of a item added from a time job";
                    listItem.Update();
                    context.ExecuteQuery();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("ERROR: " + ex.Message);
                    Console.WriteLine("ERROR: " + ex.Source);
                    Console.WriteLine("ERROR: " + ex.StackTrace);
                    Console.WriteLine("ERROR: " + ex.InnerException);
                }
            }
        }
        private static SecureString GetSPOSecureStringPassword()
        {
            try
            {
                Console.WriteLine("Entered GetSPOSecureStringPassword.");
                var secureString = new SecureString();
                foreach (char c in ConfigurationManager.AppSettings["SPOPassword"])
                {
                    secureString.AppendChar(c);
                }
                Console.WriteLine("Constructed the secure password.");

                return secureString;
            }
            catch
            {
                throw;
            }
        }

        private static string GetSPOAccountName()
        {
            try
            {
                Console.WriteLine("Entered GetSPOAccountName.");
                return ConfigurationManager.AppSettings["SPOAccount"];
            }
            catch
            {
                throw;
            }
        }

    }
}

Como podéis ver el código es muy sencillo, tan solo hay que añadir dos funciones, tal y como nos cuentan en uno de los enlaces que os he indicado, para obtener del app.config el usuario y la contraseña para conectarnos a SharePoint OnLine. Tras esto, usando el modelo de objetos de cliente para C# se hacen las operaciones deseadas sobre SharePoint OnLine.

Lo que nos queda ahora, es publicar el WebJob en Azure para que funcione correctamente, que será lo que veremos en la próxima sección

Publicando el WebJob en Azure

Vamos a ver ahora los pasos para publicar nuestro WebJob en Azure y ver como funciona.

1.- Seleccionamos la opción de publicar la aplicación de consola como Azure WebJob

webjob1

2.- El siguiente es configurar el WebJob

webjob2

Es importante tener en cuenta una cosa. Este WebJob se crea en el modo gratuito (o yo no he encontrado la forma de crearlo desde visual studio en otro modo), y este modo tiene una limitación a la hora de la frecuencia permitida de como máximo una hora, por lo que si seleccionamos una frecuencia mayor, nos dará un error. Luego podremos modificar la frecuencia desde el portal de Azure si queremos hacerlo más frecuente, pero para empezar, debemos de tener en cuenta esa restricción.

3.- A continuación configuramos el website al que estará asociado el webjob

webjob3

webjob4

webjob5

webjob6

4.- Cambiando la configuración del WebJob en el portal de Azure

webjob7

En nuestro portal de Azure, en el Área de “Programador”, accedemos a la colección de trabajos que se ha creado por defecto y en “Escalar”, cambiamos del modo gratis a estándar y cambiamos el límite de frecuencia de ejecución. Tras esto entramos a trabajos y configuramos el que tenemos creado para que se ejecute a cada minuto (para poder ver como funciona el WebJob que hemos creado más rápidamente). No debemos olvidar guardar los cambios para que surtan efecto.

5.- Viendo los resultados del webjob.

webjob9

webjob10

Tanto en el sitio de SharePoint, como dentro de nuestro website de Azure se pueden ver los resultados de la ejecución del WebJob. Aquí se puede ver el resultado del TimerJob para SharePoint OnLine que hemos creado ;).

Y nada más por hoy, espero que como siempre os sea útil, evidentemente el ejemplo es muy sencillo, y podemos ir mucho más allá con esta técnica, pero simplemente os quería mostrar cómo hacerlo.

Un saludo a todos