¿has visto la agenda de CEUS by Iberian SharePoint Conference?

Ya hemos publicado la Agenda definitiva para la conferencia, basándonos en las siguientes temáticas:

  • Casos de éxito de Clientes – Customer Sucess Stories
  • Creación de nuevas Experiencias de Computación Personal- Create more personal computing
  • Reinvención de la Productividad y Procesos de Negocio – Reinvent Productivity  & Business Process
  • Diseñar y Construir un Cloud Inteligente – Build an intelligent Cloud
    ¿A qué esperas para registrarte?
  • De entre todas las sesiones que hemos recibido, os destaco las siguientes:

    Por mi parte, tendré una sesión denominada “Office 365 y Azure: guía de desarrollo para maximizar la nube” donde explicaré las ventajas y características que tenemos en Azure para implementar soluciones y/o aplicaciones de negocios para Office 365. 

    Además, hemos reservado un track para el Community Business Corner donde os iremos contando a lo largo de los próximos días las mesas redondas que montaremos y quienes van a participar en ellas. 

    ¿Qué os parece la agenda? Son seis tracks con las mejores sesiones. 

    Cambios en los límites de SharePoint 2016

    Cuando definimos un plan de gobernanza para SharePoint, tenemos que tener claro cuáles son los límites de la versión que tenemos en producción. Estos límites nos afectan a la hora de diseñar la arquitectura de la información de nuestra infraestructura y, como en cada nueva versión de SharePoint, tendremos nuevos límites en SharePoint 2016.

    En la conferencia Microsoft Ignite, Bill Baer, Senior Technical Product Manager en Microsoft, nos enseñó, dentro de su sesión “What’s new for IT Professionals in SharePoint Server 2016″, cuáles van a ser los límites implementandos en la nueva versión de SharePoint. Si los comparamos con la versión actual, nos quedamos con los siguientes valores:

    …Leer más en SharePoint para los Negocios: http://blogs.encamina.com/negocios-sharepoint/2015/05/25/nuevos-limites-en-sharepoint-2016/

    ¿Te vienes al CEUS by Iberian SharePoint Conference?

    ¿Qué pasa si unimos todo el potencial de negocio de CEUS con las tecnología de Iberian SharePoint Conference?

    Hemos diseñado un nuevo concepto de conferencia como punto de encuentro para los mayores expertos en tecnologías y plataformas de productividad, desde la perspectiva “Mobile First, Cloud First”.

    CEUS es la Conferencia Española de Usuarios de SharePoint organizada por Microsoft, donde año tras año nos encontrábamos con los mejores casos de éxito, los clientes y los Partners que giran alrededor de la Productividad.

    Iberian SharePoint Conference es la conferencia que reúne a los mayores expertos nacionales e internacionales para hablar de la tecnología que gira entorno a SharePoint.

    Desde estos dos conceptos de conferencias ha nacido “CEUS by Iberian SharePoint Conference“, que se celebrará el 9 y 10 de junio en las oficinas de Microsoft en Madrid. La conferencia más importante donde os contaremos la visión en Productividad, Cloud, Mobile y Social sin perder los dos puntos de vista claves: “negocio” y “técnico“.

    …Leer más en SharePoint para los Negocios: http://blogs.encamina.com/negocios-sharepoint/2015/05/11/se-acerca-ceus-by-iberian-sharepoint-conference/ 

    Tenemos fechas para SharePoint Server 2016

    Hace poco menos de 3 años que llego a nuestros servidores SharePoint Server 2013 y ya conocemos las fechas de lanzamiento de la versión 2016. Su disponibilidad está planificada para el segundo cuarto de 2016, podemos probar una beta en el último cuarto de 2015 y lo veremos por primera vez en el Microsoft Ignite del próximo mayo.

    Teniendo como principal objetivo la integración con Office 365, mejorando los modelos de integración híbrida, SharePoint Server 2016 ofrecerá mejoras y nuevas funcionalidades principalmente en las siguientes áreas:

    • Experiencia de Usuarios
    • Infraestructura inspirada en la nube
    • Conformidad e Informes

    …Leer más en SharePoint para los Negocios: http://blogs.encamina.com/negocios-sharepoint/2015/04/20/ya-en-camino-sharepoint-server-2016/ 

    Evento. Web & Cloud Tour en Valencia

    Este próximo miércoles, con el apoyo de la comunidad .NET de Valencia, de Microsoft y de ENCAMINA, tenemos el placer de participar en el Web & Cloud Tour de Valencia. Un evento en el que os hablaremos de Azure, Web, .NET y esas nuevas tecnologías que Microsoft tiene por vicio ir actualizando casi mes a mes. El lugar de celebración será el Colegio Oficial de Ingenieros de Telecomunicación, en la Avda de Jacinto Benavente, 12 de Valencia y os podéis registrar en el siguiente enlace.

    A mi me ha tocado hacer de maestro de ceremonia y os hablaré de Azure y algunas novedades que han salido y están por salir. Compartiendo cartel con Adrian Diaz y Santiago Porras, y acompañados de profesionales que se pelean día a día con estas tecnologías, la agenda será la siguiente:

    Horario Sesión Cloud
    09:00 – 09:30 Registro
    09:30 – 10:30 Introducción a Microsoft Azure
    10:30 – 11:30 Soluciones PaaS con servicios en el Cloud y Azure WebSites
    11:30 – 12:00 Descanso
    12:00 – 13:00 Datos, SQL Azure y Azure Storage
    13:00 – 14:00 Gestión masiva de datos en la era IoT
    Horario Sesión Web
    15:00 – 16:00 Introducción a ASP.NET y Visual Studio Web Tooling
    16:00 – 17:00 Construyendo aplicaciones web con ASP.NET MVC
    17:00 – 17:30 Descanso
    17:30 – 18:30 Creación de API REST con WebAPI
    18:30 – 19:30 Aplicaciones en tiempo real con SignalR

     

    Os esperamos a todos…

     

    SharePoint 2013. Búsqueda con parámetro opcionales

    El servicio de búsqueda de SharePoint 2013 permite realizar consultas usando la sintaxis KQL (Keyword Query Language). Esta sintaxis nos permite combinar consultas del tipo texto libre con consultas del tipo restricciones de propiedades. Veamos algunos ejemplos.

    Consultas de texto libre (Free-text queries)

    Una consulta de texto libre nos permite enviar palabras o frases para que recuperemos contenido que se encuentra en el índice del buscador. Se puede usar la palabra o frase completa, parte de la misma u operadores como comodines, de cercanía, etc.

    relevancia del motor de búsqueda

    rele* del motor de búsqueda

    “relevancia” NEAR(n=3) “búsqueda”

     

    Consultas de restricciones de propiedades

    Aquellas propiedades que estén marcadas como Queryable en el esquema de búsqueda se pueden utilizar para realizar consultas sobre el valor de estas y no sobre todo el índice del buscador.

    ArticleAuthor:”Gustavo Velez”

    MagazineNumber:”Número 21″

     

    Parámetros opcionales

    Teniendo en cuanta que cuando enviamos una consulta al buscador nos va a devolver un conjunto de resultados que cumplan con las restricciones de texto libre o propiedades que le hayamos enviado, se nos hace necesario el poder enviar parámetros que sean opcionales. Por ejemplo, en el Web Part de Consulta de Búsqueda podemos recoger variables del contexto de la página para la consulta. Variables del tipo QueryString, Campo de una página, etc.

     

    La siguiente consulta nos devuelve el contenido que contengan la frase “relevancia del motor de búsqueda” cuyo autor sea el que pasamos por QueryString a la página:

    relevancia del motor de búsqueda ArticleAuthor:{QueryString.Autor}

    La consulta anterior se comportaría adecuadamente siempre que el los parámetros de la página encuentre la clave “Autor” para poder realizar la consulta, en caso contrario, no devolvería ningún resultado.

    Para convertir la consulta por propiedad “ArticleAuthor” en opcional, tenemos que utilizar el operador “?” de la siguiente forma:

    relevancia del motor de búsqueda {? ArticleAuthor:{QueryString.Autor}}

    Con ese operador le estamos diciendo que si la consulta de propiedad restrictiva no devuelve resultados que no la tengamos en cuenta en el conjunto de resultados que nos tiene que devolver. Así podemos navegar a la página con o sin el parámetro.

    http://www.compartimoss.com/Paginas/testsearch.aspx

    http://www.compartimoss.com/Paginas/testsearch.aspx?Autor=”Gustavo Velez”

     

    Ya hemos hablado otras veces del servicio de búsqueda, uno de los grandes valores que aporta SharePoint al conjunto de servicios que permiten trabajar con la plataforma. En este post hemos visto un pequeño truco de cómo implementar consultas desde el Web Part de consultas de búsqueda con la ayuda de la sintaxis KQL.

     

    Saludos a todos…

     

    Off topic. Seguimos buscando compañeros de fatiga (trabajo)

    ¿Eres Desarrollador .NET? ¿Sabes de Azure, SharePoint, MVC, …? ¿Sabes .NET y quieres aprender Azure, SharePoint, …?

     

    Estamos buscando alguien como tú que lees cualquier blog de Geeks.ms porque te gusta la tecnología y quieres ser mejor día a día.

    Nuestro universo gira entorno al diseño, creación e implementación de soluciones avanzadas de negocio con tecnología Microsoft. Formarás parte de un GRAN EQUIPO de especialistas, profesionales y excelentes compañeros donde esperamos que aportes tu especial ADN para conseguir un mundo mejor.

    Date una vuelta por Suma Tu Talento, nuestro blog de RRHH y conoce más sobre nosotros y envíanos tu curriculum.

     

    Azure. WebJobs para ejecutar procesos programados en SharePoint Online

    Con SharePoint On-Premises podemos programar trabajos que ejecutan procesos sobre los sitios de la granja. La propia granja ejecuta trabajos programados que mantienen la plataforma, por ejemplo, para el rastreo de los sitios para el servicio de búsqueda, y en On-Premises podemos implementar y desplegar nuestros propios Time Jobs.

    ¿Qué pasa con SharePoint Online?

    Como los Timer Jobs de SharePoint se ejecutan a nivel de granja tienen privilegios elevados para permitir que un tenant pueda desplegar sus propios trabajos. Por este motivo, no están disponibles en SharePoint Online y tenemos que buscar alternativas válidas para poder implementar procesos programados.

    Ya que estamos en la nube y a nuestra suscripción de Office 365 le podemos asociar una suscripción de Azure, podemos implementar ciertos servicios para conectarnos a SharePoint Online, y hoy hablaremos de los Trabajos Web o WebJobs que tenemos disponibles en Sitios Web de Azure.

    ¿Qué es un WebJob?

    Es una característica de los WebSite de Azure que nos permiten ejecutar programas o scripts bajo demanda, continuos o con una programación. La idea es subir un script ejecutable que realizar las tareas que necesitamos para luego ejecutarlo bajo demando o atendiendo a una programación.

    Un Script ejecutable puede ser del siguiente tipo:

    • .cmd, .bat, .exe (con Windows cmd)
    • .ps1 (con PowerShell)
    • .sh (con bash)
    • .php (con php)
    • .py (con Phyton)
    • .js (con node)

    Para nuestro caso, creamos un .exe que use el modelo de objetos de cliente de SharePoint (CSOM) para leer los datos de una lista y generar un fichero de texto con esos datos en un Blob Storage.

    Un CMD que descarga elementos de una lista

    Simplemente con una aplicación de consola tenemos para crear nuestro trabajo web en Azure.

    Creamos el proyecto en Visual Studio y añadimos las referencias a Microsoft.SharePoint.Client.dll y Microsoft.SharePoint.Client.Runtime.dll, junto con la consulta a la lista:


    static
    void Main(string[] args)

    {

    DownloadLlamadas();

    }

    Ese método instancia un contexto de cliente de SharePoint Online, ejecuta una consulta a una lista y pasa los datos a un método que escribe el fichero de texto en un Blob Storage de Azure.


    private
    static
    void DownloadLlamadas()

    {


    var username = ConfigurationManager.AppSettings[“AccountUsername”];


    var pwd = ConfigurationManager.AppSettings[“AccountPassword”];

     


    using (var context = GetContentFromSharePointOnline(username, pwd, “https://tenant.sharepoint.com/ “))

    {


    var list = context.Web.Lists.GetByTitle(“Llamadas”);

     


    var query = new
    CamlQuery();

    query.ViewXml = “<View><Query><Where><Geq><FieldRef Name=’ID’ /><Value Type=’Number’>1</Value></Geq></Where></Query></View>”;

     


    var items = list.GetItems(query);

    context.Load(items);

    context.ExecuteQuery();

     


    var listaLlamadas = new
    List<LlamadaCSV>();

     


    foreach (ListItem item in items)

    {


    var currentLlamada = new
    LlamadaCSV()

    {

    Title = GetStringFromItem(item[“Title”]),

    TipoLlamada = GetStringFromItem(item[“TipoLlamada”]),

    Cliente = GetStringFromItem(item[“NombreCliente”]),

    Creado = GetStringFromItem(item[“Created”])

    };

     

    listaLlamadas.Add(currentLlamada);

    }

     

    WriteListToAzureStorageFile(listaLlamadas);

     

    listaLlamadas.ForEach(llamada =>

    {


    Console.WriteLine(llamada);

    });

    }

     

    }

    Para abrir un contexto en SharePoint Online, hacemos uso de la clase Microsoft.SharePoint.Client.SharePointOnlineCredentials que nos permite autenticarnos frente al servicio de Office 365 con un usuario y contraseña.


    private
    static
    ClientContext GetContentFromSharePointOnline(string username, string password, string url)

    {


    char[] pwdChars = password.ToCharArray();

    System.Security.SecureString pwd = new System.Security.SecureString();


    for (int i = 0; i < pwdChars.Length; i++)

    pwd.AppendChar(pwdChars[i]);

     


    var context = new
    ClientContext(url);

    context.Credentials = new
    SharePointOnlineCredentials(username, pwd);

     


    return context;

    }

    Por último, escribimos los elementos de la lista en un fichero de texto en un Blob Storage:


    private
    static
    void WriteListToAzureStorageFile(List<LlamadaCSV> listaLlamadas)

    {


    var fileText = string.Join(System.Environment.NewLine, listaLlamadas);

     


    var storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings[“StorageConnectionString”]);


    var blobClient = storageAccount.CreateCloudBlobClient();


    var container = blobClient.GetContainerReference(“llamadas”);

    container.CreateIfNotExists();

     


    var blob = container.GetBlockBlobReference(“llamadas” + DateTime.Now.ToString(“yyyyMMdd”) + “.csv”);

     

    blob.UploadText(fileText);

    }

    Nos queda compilar, generar un .ZIP con todos los ensamblados de nuestra aplicación de consola y crear el trabajo en Azure.

    Creamos el WebJob en un Sitio Web

    En la pestaña de WebJob de un Sitio Web, tenemos la opción de añadir un nuevo trabajo web con la opción de ‘ADD’

    Subimos nuestro ZIP y elegimos el modo de ejecución, que puede ser “Continuo”, “Programado” y “Bajo demanda”. En nuestro caso, elegimos “Run on a Schedule” para programar la ejecución del script cada cierto tiempo.

    Una vez que se crea el WebJob, podemos ejecutarlo manualmente para comprobar su correcto funcionamiento y acceder a los LOGS para ver que todo está correcto y, en este caso, además de enviar los datos a Azure, los escribimos en la Consola.

    Usando el SDK de WebJob

    Aunque con lo que ya tenemos implementado es más que suficiente para simular el Timer Job de SharePoint, tened en cuenta que usando el paquete de Nuget del SDK de WebJob, podemos mejorar las capacidades de diagnóstico y logging además de otras funcionalidades como, por ejemplo, conectar con Azure Queue para que el script del trabajo web se ejecute cuando se introduzca un elemento a la cola. Un ejemplo de esto lo tenemos en la documentación de Azure: http://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-sdk-get-started/

    Aunque podemos dar un paso más y usar OAuth para conectarnos a SharePoint Online con un contexto de Aplicación y no depender de la contraseña del usuario, la idea de este artículo era conocer los WebJob y que podemos usarlos para generar tareas programadas, simulando los Timer Job, que no tenemos disponibles en SharePoint Online.

     

    Saludos a todos…

    Azure. Automation para no dejarte una VM de desarrollo encendida

    Para los que usamos máquinas virtuales en Azure para desarrollar, nos preocupa enormemente dejarnos encendida una VM cuando terminamos el día de trabajo. Sobre todo, cuando llegan días festivos y en medio de la cena de navidad nos llega el flash ‘¿He apagado las VM?, ups, creo que no L.

    Para los despistados como yo, tenemos un servicio en Azure que nos permite automatizar scripts PowerShell. Azure Automation nos ayuda a simplificar la administración de la nube con la automatización de tareas repetitivas.

     

    Cuentas de Automatización

    El servicio, nos permite crear una o varias cuentas de automatización donde implementaremos los Windows PowerShell Workflows y programaremos la automatización de estos scripts.

     

    Runbooks

    Los Runbooks contienen los flujos de procesos y las programaciones que permiten ejecutar el scripts cuando sea necesario.

     

    En los Runbooks de nuestra cuenta de Automation, creamos un Runbooks que acceda a la suscripción de Azure y obtenga las máquinas virtuales que se encuentren en estado “Ready”.

    workflow Get-VMStatusByEmail

    {

    # Obtenemos de la cuenta de automatización, las credenciales de conexión a Azure

    $cred = Get-AutomationPSCredential -Name “automation@adiazcanhotmail.onmicrosoft.com”

    # Conectamos a Azure y obtenemos la suscripción activa

    Add-AzureAccount -Credential $cred

    $currentAzure = Get-AzureSubscription -current

    $subject = “Active VM. “ + $currentAzure.SubscriptionName

    $vms = “”

    #Construimos una variable con las VM que estén encendidas

    $vms = InlineScript {

    Get-AzureVM | Where-Object {$_.Status -like “Ready*”} | ForEach-Object {

    # Hay que tener en cuenta que hay servicios Cloud que también se consideran VM,

    # por ejemplo, este corresponde a la web de TenerifeDev y no a una VM

    if ($_.ServiceName -ne “tenerifedev”) {

    $vms += “ServiceName: “ + $_.ServiceName + ” – Name: “ + $_.Name + “`n”

    }

    }

    Write-Output $vms

    }

    $vms

    }

    Si lo probamos, escribirá en el “PANEL DE SALIDA” el listado de VM encendidas de la suscripción a la que nos hemos conectado.

     

    Para almacenar las credencias de forma segura, las cuentas de automatización tienen una sección de activos donde se almacenan, junto a otros recursos como módulos PowerShell o Programaciones.

     

    Con el comando Get-AutomationPSCredential podemos obtener a las credenciales y hacer uso de ellas en nuestro proceso, como podemos ver en las primeras líneas del script.

    Para el envío del email, nos crearemos otros Runbook que recibe por parámetros los datos a enviar, se conecta al SMTP de Office 365 y hace el envío del correo.

    workflow Send-Mail

    {

    param (

    [Parameter(Mandatory=$False)]

    [string] $MessageBody = “No hay mensaje en el cuerpo del correo”,

    [Parameter(Mandatory=$False)]

    [string] $MessageSubject = “No hay asunto del mensaje”

    )

    $AzureO365Credential = Get-AutomationPSCredential -Name “AzureO365Credential”

    if ($AzureO365Credential)

    {

    $MessageFrom = $AzureO365Credential.Username

    Write-Output “Enviando email con asunto $MessageSubject…”

    Send-MailMessage -To adiazcan@hotmail.com -Subject $MessageSubject -Body $MessageBody -UseSsl -Port 587 -SmtpServer ‘smtp.office365.com’ -From $MessageFrom -BodyAsHtml -Credential $AzureO365Credential

    Write-Output “Email enviado correctamente”

    }

    }

    y en nuestro primer script ponemos el siguiente IF que ejecuta el script Send-Mail si existen VM encendidas.

    # Si exiesten VM encendidas, enviamos un email ejecutando otro Runbooks de la cuenta de Automation

    if ($vms) {

    Send-Mail -MessageBody $vms -MessageSubject $subject

    }

    Programación

    Sólo nos queda agregar una programación al primer Runbook para que, con la frecuencia deseada, se ejecute comprobando si tenemos alguna VM encendida y nos envíe un email.

     

    Con este pequeño paso, todas las noches se ejecutará el script para que comprueba las VM que me he dejado encendida y me envía un email recordatorio por si las tengo que apagar.

    Pensad en todas las tareas que podemos automatizar, desde encendido programado de máquinas virtuales a Warm-Up de Web Sites, etc.

    Si necesitamos ejemplos, existe una galería de Runbook bastante completita.

     

    Saludos a todos…