domingo, 26 de agosto de 2012

Primera instalación de SharePoint 2013 Preview Parte I

En esta primera parte veremos los requisitos que necesitamos para instalar SharePoint 2013 Preview e iniciaremos la instalación y configuración necesaria para instalar SharePoint 2013.

SharePoint 2013 puede instalarse en diferentes versiones de Windows y SQL Server para diferentes escenarios de licenciamientos posibles como a continuación lo planteo:

1) Windows Server 2008 R2 SP1 y SQL Server 2008 R2 SP1(Si es posible)

2) Windows Server 2008 R2 SP1 y SQL Server 2012  (Caso que presentare en esta serie de artículos)

3) Windows Server 2012 y SQL Server 2008 R2 SP1 (No recomendado pero probable)

4) Windows Server 2012 y SQL Server 2012 (Escenario más probable para versión final de SharePoint 2013)

Para las versiones de Windows las Ediciones Standard, Enterprise y DataCenter.  Para las versiones de SQL Server Express (para desarrollo o demostraciones), Standard y Enterprise para el caso de SQL Server 2008 R2 y para SQL Server 2012, Express(para desarrollo o demostraciones), Standard, Enterprise y la nueva versión Business Intelligence.

Resumen prerrequisitos en: http://jmhogua.blogspot.com/2012/08/primer-vistazo-tecnico-de-sharepoint.html

En este escenario vamos a partir de una Maquina virtual con Windows Server 2008 R2 Standard con 5 GB de RAM, 200 GB de disco duro virtual, un procesador virtual, sobre una Dell Latitude de 8 GB de RAM y 250 GB de disco físico SSD.

Para realizar una instalación lo más cercana a la realidad vamos agregar el Rol de Servicios de Directorio Activo, para ello vamos a ejecutar Server Manager que se encuentra en la barra de tareas.

image

Presione el botón Next.

image

Ahora seleccionaremos la opción “Active Directory Domain Services” y presionamos el botón Next.

image

Después de echarle un vistazo a la pantalla de descripción para continuar hacemos clic sobre el botón Next.

image

Para confirmar la instalación del AD presione el botón Install.

image

Luego de leer la ventana de resultados de la instalación y continuar con la configuración presionemos el botón Close.

image

Desde el botón Start de Windows y en la ventana de Run para ejecutar dcpromo.exe

image

Se leventará la siguiente ventana y luego hagamos clic sobre el botón Next.

image

El asistente del AD se levantará podemos echarle un vistazo y luego presionamos el botón Next.

image

Ahora seleccionamos la opción “Create a new domain in a new forest” y presionamos el botón Next.

image

Luego levantará una ventana de advertencia que la cuenta local de administración se convertirá en la cuenta de administración del dominio, para lo cual es lo deseado y solo necesitamos presionar el botón OK para continuar.

image

Es necesario escribir el nombre completo del dominio para este caso será demo.com.  Para continuar presionamos el botón Next.

image

El nivel de funcionalidad dependerá de las computadoras conectadas a la red que versiones de Windows están instaladas.  Para este caso Windows Server 2008 R2 será nuestra elección. Para continuar presionamos el botón Next.

image

Deberemos de espera un momento a que termine el proceso de configuración.

image

Seleccionamos la casilla DNS Server y presionamos el botón Next.

image

Es recomendado asignar una IP Fija a los servidores dentro de la red coporativa, pero para el caso de una maquina virtual de desarrollo o demostración esto no es necesario, para lo cual seleccionamos “No, I will assign static IP Addresses…”.

image

Para esta advertencia solo es necesario indicar que deseamos continuar presionando el botón Yes.

image

Luego nos solicita una contraseña en caso de necesitar restaurar los servicio del Directorio.  Escribimos la contraseña dos veces y luego presionamos el botón Next.

 

image

Esta ventana nos solicita confirmar la ubicación para la base de datos, archivos log y carpeta SYSVOL que para este caso utilizaremos los valores predeterminados y presionamos el botón Next.

image

Venta de resumen con lo cual solo debemos presionar el botón Next.

image

Seleccionamos la opción Reboot on completion para que se reinicie automáticamente.

image

Luego de iniciado el servidor vamos al botón Start, Administrative Tools, Y por ultimo Active Directory Users and Computers.

image

Ahora es necesario crear todas las cuentas que utilizaremos para la instalación y configuración de SharePoint. Vamos a crear un grupo donde vamos a ubicar todas las cuentas para ello es necesario hacer clic sobre la imagen de los dos muñequitos que representan el grupo.

image

Lo podemos nombrar SharePoint2013, Domain Local, Security y luego presionamos el botón OK.

image

El listado de cuentas a crear es el siguiente:

image

Luego el botón New User para crear los usuarios como se muestra en la imagen de abajo.

image

Ahora ingresamos la contraseña dos veces y luego seleccionamos las opciones deseas de comportamiento de las contraseñas.

image

Presionemos el botón Finish.

image

image

En esta primera parte realizamos las tareas de preparación del servidor para poder instalar SharePoint 2013 Preview. En la segunda parte veremos como instalar SQL Server 2012 Para SharePoint 2013 Preview.

SharePoint154Fun!,

Juan Manuel Herrera

domingo, 12 de agosto de 2012

Primer vistazo técnico de SharePoint 2013 Preview

Microsoft anuncio a mediados de Julio el “Preliminar” de los productos de Office 2013 incluyendo productos de servidor como SharePoint 2013.

image

En este artículo veremos un vistazo técnico de la versión preliminar de SharePoint 15 o 2013.

Requerimientos de Hardware

No cambiaron, la recomendación sigue siendo 8 GB de RAM cómo mínimo, 16 GB de RAM recomendado para instalaciones medianas. Procesador de 4 Núcleos y 8 Para medianas y grandes.  Espacio disco iniciamos igualmente desde 80 GB como mínimo.

http://technet.microsoft.com/en-us/library/cc262485(v=office.15)

Requerimientos de Software

En esto si hay cambios obvios y algunos no tanto. 

Windows Server

La Buena noticia es que SP 2013 podrá instalarse sobre Windows 2008 R2 Service Pack 1.0 (Windows 7 SP1 para desarrolladores, no recomendado realmente pero posible) y Windows Server 2012 Release Candidate Standard o Datacenter.

SQL Server

Sobre SQL Server 2008 R2 SP1 y SQL Server 2012 soportando desde la edición Express en adelante.

Microsoft .NET Framework

Lo más interesante de la infraestructura disponible en Software es Microsoft .NET Framework version 4.5 Release Candidate (RC).  Esto permitirá incluir aplicaciones MVC y la Entity Framework 4.0 en adelante un avance considerable para el desarrollo en SharePoint.  También incluye Windows Server AppFabric  y Microsoft WCF Data Services 5.0 para OData para agilizar el desarrollo Web.

Soporte de Navegadores

Esto siempre es un tema importante ya que en instalaciones grandes la actualización de la versión de navegador es una tarea que puede demorar meses e su ejecución.  Internet Explore 7.0 es excluido en esta nueva versión y solo es soportado 8.0 en adelante y el resto de navegadores en sus ultimas versiones a excepción de Safari con funcionalidades limitadas (http://technet.microsoft.com/en-us/library/cc263526(v=office.15)).

Arquitectura de Capas y Servicios

En arquitectura se mantiene los 3 roles de Servidor Front-End (Presentación), Application Server (Aplicación) y Base de Datos (Capa de datos)

Servicios de Aplicación

Son adicionados algunos y excluidos otros.  La noticia a considerar aquí es que Office Web apps deja de ser un servicio de Aplicación dentro de SharePoint para convertirse en un producto de Servidor por separado.  Web Analytics también es excluido de los servicios y es incorporado al Servicio de Search y apoyado por nuevas funcionalidades de BI para la reportería.

De los Nuevos tenemos una nueva versión adicional de Access Service, App Management Service, Machine Translation Service y Work Management.

image

http://technet.microsoft.com/es-gt/sharepoint/fp142376

Apps en SharePoint 2013

Nuevo concepto en SharePoint 2013 que no sustituye las soluciones existentes (WSP), sino que son aplicaciones que estarán disponibles en el Market Place que pueden ser Instaladas, actualizadas y desinstaladas por los administradores del portal y que utilizarán SharePoint como el lugar donde se hospedan.  La otra noticia importante es que las soluciones SandoBox han sido marcadas como obsoletas y aunque son soportadas aún en esta versión MS recomienda utilizar las nuevas Apps. http://msmvps.com/blogs/windsor/archive/2012/07/21/sharepoint-2013-sandboxed-solutions-deprecated.aspx

Características Obsoletas

Las buenas noticias es que en cuanto a migración no habrá problema será soportado, por otro lado los usuarios que utilizan las características menos utilizadas estarán molestos porque ya no podrán utilizar mas aquellas que fueron creadas con anterioridad.

image

http://technet.microsoft.com/en-us/library/ff607742(v=office.15).aspx

El diseño visual fue mejorado, limpiado y reenfocado, es muy sensible a las peticiones del usuario y agradable en su navegación, algo que puede vender fácilmente al usuario final.

image

 

Otras mejoras en cuanto al desempeño están:

Shredded Storage (Actualice solamente los cambios del contenido en el almacén)

Cache Service (Mejore el desempeño distribuyen el cache a través de los servidores)

Request Management (Redireccionamiento de las peticiones a servidores específicos)

En este artículo dimos un vistazo rápido de las mejoras y cambios que habrán en la próxima versión de SharePoint 2013 y que ahora podemos revisar, probar y documentarnos en su versión preliminar algo que no tiene precedentes aunque si con antecedentes y que nos permitirá de primera mano interactuar con la plataforma de colaboración para la empresa y el internet.

SharePoint154Fun,

Juan Manuel Herrera Ocheita

domingo, 5 de agosto de 2012

De SharePoint 2007 a 2010 creando una ventana de dialogo Parte II

En la primera parte http://jmhogua.blogspot.com/2012/08/de-sharepoint-2007-2010-creando-una.html vimos la creación de la Application Page que se utilizará como contenedor de la ventana de dialogo.

El evento Load() del elemento Web en los comentarios “// your code here…”  escribiremos el código de JavaScript para invocar la ventana de dialogo.

/// <summary>
       /// Ensures that the CreateChildControls() is called before events.
       /// Use CreateChildControls() to create your controls.
       /// </summary>
       /// <param name="e"></param>
       protected override void OnLoad(EventArgs e)
       {
           if (!_error)
           {
               try
               {
                   base.OnLoad(e);
                   this.EnsureChildControls();

                   // Your code here...
               }
               catch (Exception ex)
               {
                   HandleException(ex);
               }
           }
       }

Esta sería la línea de código a insertar:

Page.ClientScript.RegisterStartupScript(this.GetType(), "Info-Dialog", Script4OpenDialog(Vinculo,URL));

El método que tiene la parte medular de la invocación la explicaremos a continuación:

Para ejecutar la ventana de dialogo utilizaremos el framework sp.js que es el modelo de objetos de SharePoint 2010 para JavaScript, utilizaremos el método ExecuteOrDelayUntilScriptLoaded con la siguiente sintaxis: 

 ExecuteOrDelayUntilScriptLoaded(‘//código aqui’,’sp.js’);

Dentro del método invocaremos “SP.UI.$create_DialogOptions();” para crear las opciones del dialogo.

Luego la invocación de la ventana de dialogo a través del método showModalDialog() pasando las opciones que se crearon para el dialogo SP.UI.ModalDialog.showModalDialog(dialogOptions);

Por último la invocación del método de JavaScript que encapsula todo este código, pero utilizaremos Jquery para asegurarnos que si se invoca, y que para el caso especifico de esta solución ya esta invocado en el portal que se va instalar en la master page (<script language="javascript" src="jquery-1.4.2.min.js" type="text/javascript"></script>).

$(document).ready(function () {
OpenDialog('/_layouts/infoware/infoenlace.aspx?nlc={0}&vncl={1}&mg={2}'); \n", enlace.Descripcion, enlace.URL, urlImagen);
}

private string Script4OpenDialog(Enlace enlace, string urlImagen)
{
    var scripting = new StringBuilder();
    scripting.Append("<script type=\"text/javascript\"> \n");
    scripting.Append("//<![CDATA[ \n");
    scripting.Append("ExecuteOrDelayUntilScriptLoaded(function () { \n");
    scripting.Append("function OpenDialog(strPageURL) \n");
    scripting.Append("{ \n");
    scripting.Append("var dialogOptions = SP.UI.$create_DialogOptions(); \n");
    scripting.Append("dialogOptions.url = strPageURL; \n");
    scripting.Append("dialogOptions.width = 800; \n");
    scripting.Append("dialogOptions.height = 600; \n");
    scripting.Append("dialogOptions.dialogReturnValueCallback = Function.createDelegate( null, CloseCallback); \n");
    scripting.Append("SP.UI.ModalDialog.showModalDialog(dialogOptions); \n");
    scripting.Append(" return false; \n");
    scripting.Append("} \n");
    scripting.Append("function CloseCallback(strReturnValue, target) \n");
    scripting.Append("{ \n");
    scripting.Append("if (strReturnValue === SP.UI.DialogResult.OK) \n");
    scripting.Append("{ \n");
    //scripting.Append("alert('ok'); \n");
    scripting.Append("} \n");
    scripting.Append("if (strReturnValue === SP.UI.DialogResult.cancel) \n");
    scripting.Append("{ \n");
    //scripting.Append("alert('cancel'); \n");
    scripting.Append("} \n");
    scripting.Append("} \n");
    scripting.Append("$(document).ready(function () { \n");
    //scripting.Append("alert('Invoco javascript'); \n");
    scripting.AppendFormat("OpenDialog('/_layouts/infoware/infoenlace.aspx?nlc={0}&vncl={1}&mg={2}'); \n", enlace.Descripcion, enlace.URL, urlImagen);
    scripting.Append("}); \n");
    scripting.Append("}, 'sp.js'); \n");
    scripting.Append("//]]>");
    scripting.Append("</script>");
    return scripting.ToString();
}

Ahora veamos el resultado en SP 2010:

image

Y ahora ejecutamos el botón Aceptar para ir al enlace indicado que es una encuesta en este caso.

image

En este artículo vimos como invocar el ventana de dialogo utilizando el modelo de objetos de SharePoint para JavaScript.  Es clave no perder de vista ninguno de los detalles ya que de lo contrario no funcionará como se espera.

SharePoint4Fun!,

Juan Manuel Herrera Ocheita

sábado, 4 de agosto de 2012

De SharePoint 2007 a 2010 creando una ventana de dialogo Parte I

Una solución (WSP) para 2007 ahora el portal migrado en 2010 se necesita que levante una ventana de dialogo de 2010 que permita desplegar un mensaje y un enlace o link que el usuario podrá acceder.

Para utilizar la ventana de Dialogo necesitamos crear una Application Page que nos servirá como un contenedor para el mensaje y el enlace.  La estructura de esta página es la siguiente:

<%@ Assembly Name="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<%@ Page Language="C#" MasterPageFile="~/_layouts/application.master" Inherits="Microsoft.SharePoint.WebControls.LayoutsPageBase"
EnableViewState="false" EnableViewStateMac="false" %>

<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
</asp:Content>
<asp:Content ID="PageTitle" runat="server" ContentPlaceHolderID="PlaceHolderPageTitle">
</asp:Content>
<asp:Content ID="PageTitleInTitleArea" runat="server" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea">
</asp:Content>

image

* La buena noticia es que aunque estemos haciendo referencia al ensamblado de SharePoint Version 12 que es equivalente a SharePoint 2007 funciona para 2010 también.

Esta página será depositada en un directorio virtual para que pueda ser accedido desde cualquier sitio de SharePoint y la ubicación es será: /_layotus/[miempresa] en el proyecto ser verá de la siguiente forma:

image

* Otra cosa de no preocuparse aunque apunta al directorio 12 SharePoint 2010 interpretará que es para el SharePoint Root, así que lo depositará en su lugar.  LAYOUTS es el directorio virtual que esta accesible para cualquier sitio dentro de SharePoint.

La lógica de la página es la siguiente:

1) Recibirá los parámetros; nombre del enlace, el vínculo y la dirección URL de una imagen.  Con Script de ASP.NET que se ejecutará de lado del servidor vamos a leerlos y a depositar en los controles de servidor de la página ASP.NET. 

image

2) Serán desplegados en la página que estará embebida dentro de la ventana de dialogo de SP2010.  Abajo la declaración en ASP.NET de los controles

image

3) Con la ayuda de JavaScript a través de los botones Aceptar y Cancelar daremos la funcionalidad a la página cerrando la ventana de Dialogo y dirigiéndonos al vínculo que recibió la página como parámetro.

image

En esta primera parte vimos como crear una Application Page que funcionará como un contenedor para desplegar la información y proveer la funcionalidad esperada que será embebida en la ventana de Dialogo de SP 2010.  El reto aquí es que estamos desarrollándolo en una solución de 2007 debido a que ya existía esta y solo la estamos mejorando.

En la segunda parte revisaremos como invocar la ventana de dialogo a través del framework SP.JS disponible en SP2010.

Happy SharePointing!,

Juan Manuel Herrera

Ahora el detalle de todo el código de la página:

<%@ Assembly Name="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<%@ Page Language="C#" MasterPageFile="~/_layouts/application.master" Inherits="Microsoft.SharePoint.WebControls.LayoutsPageBase"
    EnableViewState="false" EnableViewStateMac="false" %>

<script runat="server">
    protected override void OnLoad(EventArgs e)
    {
        string valorMensaje = Request.QueryString.Get("nlc");
        if (string.IsNullOrEmpty(valorMensaje))
            valorMensaje = "no paso parametro";
        lblSiteTitle.Text = valorMensaje;

        string valorUrl = Request.QueryString.Get("VNCL");

        string valorImg = Request.QueryString.Get("MG");

        LBRedireccion.Text = valorUrl;

        if (string.IsNullOrEmpty(valorImg))
            Imagen.Visible = false;
        else
        {
            Imagen.Visible = true;
            Imagen.ImageUrl = valorImg;
        }
    }
</script>

<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
    <link href="/_layouts/images/styles/InfoEnlace.css" type="text/css" rel="stylesheet" />

    <script type="text/javascript">
        //<![CDATA[
        function getUrlParams() {
            var result = {};
            var params = (window.location.search.split('?')[1] || '').split('&');
            for (var param in params) {
                if (params.hasOwnProperty(param)) {
                    paramParts = params[param].split('=');
                    result[paramParts[0]] = decodeURIComponent(paramParts[1] || "");
                }
            }
            return result;
        }
        function OpenNewWindow() {
            var results = getUrlParams();
            var urlPage = results["vncl"];
            window.open(urlPage, "_blank");
            window.frameElement.commitPopup();
        }

        function CloseDialog() {
            window.frameElement.commitPopup();
        }
        //]]>
    </script>

    <span id="MensajeOculto" runat="server" style="display: none"></span>
    <div class="InfoEnlace-Contenedor">
        <div class="InfoEnlace-Contenido">
            <table cellpadding="4" cellspacing="0" class="InfoEnlace-Tabla">
                <tr>
                    <td>
                        <asp:Image ID="Imagen" runat="server" CssClass="InfoEnlace-Imagen" />
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:Label ID="lblSiteTitle" runat="server" CssClass="InfoEnlace-Titulo" />
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:Label ID="LBRedireccion" runat="server" CssClass="InfoEnlace-URL" />
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:Button ID="Aceptar" runat="server" Text="Aceptar" OnClientClick="OpenNewWindow();" />&nbsp;&nbsp;
                        <asp:Button ID="Cancelar" runat="server" Text="Cancelar" OnClientClick="CloseDialog();" />
                    </td>
                </tr>
            </table>
        </div>
    </div>
</asp:Content>
<asp:Content ID="PageTitle" runat="server" ContentPlaceHolderID="PlaceHolderPageTitle">
</asp:Content>
<asp:Content ID="PageTitleInTitleArea" runat="server" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea">
</asp:Content>

domingo, 15 de julio de 2012

Creando entradas de blog en SharePoint 2010 desde el envío de correo

Esto es posible gracias a la opción “Incoming E-mail” disponible en SharePoint 2010 en cualquiera de sus versiones (Foundation,Standard,Enterprise).  En este artículo vamos a ver como configurarlo y que problemas podemos encontrar y posibles soluciones.

Los pasos resumidos a seguir son los siguientes:

1) Configurar el servicio SMTP en el Front-End de SharePoint.

2) Configurar la opción Incoming E-mail en el Central Administration.

3) Configurar la lista de Blog.

4) Validar registros MX y Puertos.

5) Realizar las pruebas de funcionalidad.

Veamos a detalle cada uno de estos pasos.

Breve explicación del proceso

El servicio SMTP de Windows nos permitirá escuchar en el puerto 25 (el predeterminado) los correos que se redirecciones al servidor Front-End de SharePoint, los cuales serán descargados en una carpeta de correo de descarga, luego el mensaje será tomado por el Timer Service de SharePoint 2010 a través del Timer-Job llamado  (que esta disponible hasta después de realizar el paso 2).  Y este redirige el mensaje a la lista que tiene la cuenta de correo especificada (Paso 3), donde es depositada.  No todas las listas tiene esta opción de recibir correos como entradas (por ejemplo las tareas) y no todas las listas acepta el formato del correo como (el calendario, necesario un evento con formato ics), pero entre las mas usadas las bibliotecas y los blogs.

Paso 1:

Valide si ya tiene el Servicio SMTP en el servidor Front-End de SharePoint, sino  siga el enlace de abajo.

Para instalar el servicio de SMTP de Windows Server favor seguir este enlace: http://technet.microsoft.com/es-es/library/cc772058(v=ws.10).aspx

Una vez que ya tenga el servicio instalado en el Front-End lo configuraremos haciendo lo siguiente:

Creando un nuevo alias:  Ejecute el IIS 6.0 Manager, luego presione clic derecho sobre Domains, New y luego Domain…

image

Luego seleccione la opción Alias y luego presione el botón Next.

image

Seleccione un alias para este servicio.  Para este ejemplo escogeremos smtp.infowareplus.com por ultimo presione el botón Finish.

image

 

Nota:  No se olvide de configurar el servicio para que inicie automáticamente y su recuperación en caso de falla es que se reinicie cada 5 minutos como se muestra en las imágenes de abajo:

image

image

Ahora solo vamos a copiar la ruta del directorio de descarga o Drop Directory que utilizaremos en el próximo paso.  Para ello para el nombre de dominio Predeterminado (Default) haga clic derecho y seleccione la opción Properties, levantará una ventana donde le mostrará el directorio de descarga.  Copie la ruta Ctrl+C.

 

image

Paso 2:

En este paso configuraremos SharePoint para habilitar en las listas y bibliotecas la recepción de correo entrante. 

Desde el Central Administration, seleccione System settings y luego el enlace “Configure incoming e-mail settings”

image

Seleccione los siguientes valores para las siguientes casillas:

Enable sites on this server to receive e-mail?

Yes

Settings mode:

Advanced

E-mail server display address:  (ingrese el alias del dominio configurado en el smtp service)

smtp.infowareplus.com

image

En la casilla E-mail drop folder: Pegue o escriba la ruta de la carpeta de descarga o drop folder.   Y por ultimo presione el botón Finish.

image

Ahora vamos a verificar el permiso de la cuenta que ejecuta el Timer Service de SharePoint en el directorio de descarga o Drop foler. Para ello ejecute la consola de servicios: services.msc

image

La cuenta que ejecuta este servicio debe de tener los permisos Modify.  En esta caso la cuenta spfarm tiene permisos de administrador local, por lo que no debo de preocuparme, pero usted valide si esto es así para la cuenta que ejecuta este servicio en su instalación.

image

Paso 3:

Ahora vamos a configurar  el blog del perfil de usuario que esta disponible en SharePoint Server 2010.  En la parte superior derecha donde esta el usuario conectado haga clic sobre el luego haga clic sobre My Profile.

image

Seleccione el enlace My Content

image

Luego haga clic en la opción Create Blog (si aún no lo tiene creado).

image

En Blog Tools seleccion Manage Posts

 

image

Haga clic en List en el Ribbon y luego List Settings.

image

Luego en la sección Communications, seleccione la opción Incoming e-mail settings  (sino le aparece y no es una lista de Tareas, es porque no realizó el paso 2 o hubo algún error).

image

Seleccione la opción  Allow this list to receive e-mail? Yes

En la casilla E-mail address: escriba la cuenta de correo ficticia que utilizará para enviar el correo y lo pueda redirigir SharePoint al Blog. 

En la casilla E-Mail Security seleccione la opción: Accept e-mail messages based on list permissions.  Este opción es la recomendada para que solo acepte corres enviados de usuarios que tiene correo electrónico asociado y que tiene permiso asignado al sitio o a la lista de Blog.  Si estas dos condiciones no se cumplen le mostrará a nivel del USLogs de SharePoint error de acceso denegado al procesar el mensaje.

En la casilla Post Publishing seleccione la opción que mas le haga sentido y que cubra sus objetivos.  Para finalizar presione el botón Ok.

image

 

Paso 4:  Validar los registros MX y Puertos

En este paso deberá registrar el alias que coloco en el paso 1  para que todos los correos enviados a este alias sea redireccionado al servidor de SharePoint. 

Luego revise el Firewall local del Servidor y de la red interna validando que el puerto 25 (el predeterminado) o el puerto que esta escuchando el Servicio SMTP este abierto.

Paso 5: Realizar las pruebas de funcionalidad

Revise lo siguiente:

1) Si al enviar el correo a la dirección de ejemplo no le regresa un correo de rechazo.

2) Si el mensaje aparece como un archivo en el directorio c:\inetpub\mailroot\drop de extensión eml.

3) Si no llega a la biblioteca y al revisar los registros de bitácora de SharePoint da un error de acceso denegado es porque el usuario no tiene permisos en la biblioteca o bien el usuario no tiene cuenta de correo electrónico asociada, esto lo puede revisar en el perfil de SharePoint.

El contenido del archivo eml es el siguiente:

x-sender: micorreo@gmail.com
x-receiver: miblog@alias.dominio.com
Received: from mail.google.com ([ip address]) by x-corporation with Microsoft SMTPSVC(7.5.7601.17514);
     Tue, 10 Jul 2012 10:02:04 -0600
Received: by lbdb5 with SMTP id b5so64129lbd.3
        for <miblog@alias.dominio.com>; Tue, 10 Jul 2012 09:02:11 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=google.com; s=20120113;
        h=mime-version:in-reply-to:references:date:message-id:subject:from:to
         :content-type:x-gm-message-state;
        bh=saQCDmOD7S38FXhx34I61T3upzX4EI8+pRbIkW3qkMU=;
        b=KoQccQW+6o2mVZbtPb+IYCdx9DP4/BSsoNKQ93StWohV4sx1+1FCNFpAjrfyW/2ad7
         cklTN0Xz0Oqwt1gSLgwlXRGSyrFLHQBCSaqdmdN59VGrKX+3PmIP1ZjdzhrooBbRqmaf
         bpRC1nVUFXYh2JZr0eI7+MKud5rPkwYhkjCeagXe59aXmDjDl4G5Z7Jb9WTTaZse464b
         hZRrT80BF5HSIpwN23/G0Mf/GduXCYKRbO90fnYZ1OHlsoS6cVddP2Ps1m5TT0a99U1s
         NRPoBjaTHH4W2cn3RKUpn2EFYqwTt53MLP9491Z/RBmTwdtWrb1kwVhwhiNnlYZnbY++
         op1g==
MIME-Version: 1.0
Received: by 10.152.127.98 with SMTP id nf2mr9706519lab.4.1341936131436; Tue,
10 Jul 2012 09:02:11 -0700 (PDT)
Received: by 10.114.38.104 with HTTP; Tue, 10 Jul 2012 09:02:11 -0700 (PDT)
In-Reply-To: <CACRdqqpPyxPtUH_WQQJ2Cjhy-sPjPDj8arMr_biJXa3HHXdw_w@mail.gmail.com>
References: <CACRdqqpPyxPtUH_WQQJ2Cjhy-sPjPDj8arMr_biJXa3HHXdw_w@mail.gmail.com>
Date: Tue, 10 Jul 2012 10:02:11 -0600
Message-ID: <CACRdqqoxE3SYEzp6s=JTvcd8CjH0ARDCpBKwLW8Q-BqCrykmWg@mail.gmail.com>
Subject: Fwd: Testing from gmail
From: micorreo@gmail.com
To: miblog@alias.dominio.com
Content-Type: multipart/mixed; boundary=f46d042d05aa6cf14304c47bda2f
X-Gm-Message-State: ALoCoQkgxOizZKw6JloykgwZwy9e+tQjs8GmEH1doXgmXGPRO4a3SkvLeHJMCueeFRBl6aHJwg3T
Return-Path: micorreo@gmail.com
X-OriginalArrivalTime: 10 Jul 2012 16:02:05.0304 (UTC) FILETIME=[59D81F80:01CD5EB5]

--f46d042d05aa6cf14304c47bda2f
Content-Type: multipart/alternative; boundary=f46d042d05aa6cf13f04c47bda2d

--f46d042d05aa6cf13f04c47bda2d
Content-Type: text/plain; charset=ISO-8859-1

*Articulo*

Lorem ipsum ad his scripta blandit partiendo, eum fastidii accumsan
euripidis in, eum liber hendrerit an. Qui ut wisi vocibus suscipiantur, quo
dicit ridens inciderint id. Quo mundi lobortis reformidans eu, legimus
senserit definiebas an eos. Eu sit tincidunt incorrupte definitionem, vis
mutat affert percipit cu, eirmod consectetuer signiferumque eu per. In usu
latine equidem dolores. Quo no falli viris intellegam, ut fugit veritus
placerat per. Ius id vidit volumus mandamus, vide veritus democritum te
nec, ei eos debet libris consulatu. No mei ferri graeco dicunt, ad cum veri
accommodare. Sed at malis omnesque delicata, usu et iusto zzril meliore.
Dicunt maiorum eloquentiam cum cu, sit summo dolor essent te. Ne quodsi
nusquam legendos has, ea dicit voluptua eloquentiam pro, ad sit quas
qualisque. Eos vocibus deserunt quaestio ei. Blandit incorrupte quaerendum
in quo, nibh impedit id vis, vel no nullam semper audiam. Ei populo graeci
consulatu mei, has ea stet modus phaedrum. Inani oblique ne has, duo et
veritus detraxit. Tota ludus oratio ea mel, offendit persequeris ei vim.
Eos dicat oratio partem ut, id cum ignota senserit intellegat. Sit inani
ubique graecis ad, quando graecis liberavisse et cum, dicit option eruditi
at duo. Homero salutatus suscipiantur eum id, tamquam voluptaria expetendis
ad sed, nobis feugiat similique usu ex. Eum hinc argumentum te, no sit
percipit

--f46d042d05aa6cf13f04c47bda2d
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<strong><u>Articulo</u></strong><br><br>Lorem ip=
sum ad his scripta blandit partiendo, eum fastidii accumsan euripidis in, e=
um liber hendrerit an. Qui ut wisi vocibus suscipiantur, quo dicit ridens i=
nciderint id. Quo mundi lobortis reformidans eu, legimus senserit definieba=
s an eos. Eu sit tincidunt incorrupte definitionem, vis mutat affert percip=
it cu, eirmod consectetuer signiferumque eu per. In usu latine equidem dolo=
res. Quo no falli viris intellegam, ut fugit veritus placerat per. Ius id v=
idit volumus mandamus, vide veritus democritum te nec, ei eos debet libris =
consulatu. No mei ferri graeco dicunt, ad cum veri accommodare. Sed at mali=
s omnesque delicata, usu et iusto zzril meliore. Dicunt maiorum eloquentiam=
cum cu, sit summo dolor essent te. Ne quodsi nusquam legendos has, ea dici=
t voluptua eloquentiam pro, ad sit quas qualisque. Eos vocibus deserunt qua=
estio ei. Blandit incorrupte quaerendum in quo, nibh impedit id vis, vel no=
nullam semper audiam. Ei populo graeci consulatu mei, has ea stet modus ph=
aedrum. Inani oblique ne has, duo et veritus detraxit. Tota ludus oratio ea=
mel, offendit persequeris ei vim. Eos dicat oratio partem ut, id cum ignot=
a senserit intellegat. Sit inani ubique graecis ad, quando graecis liberavi=
sse et cum, dicit option eruditi at duo. Homero salutatus suscipiantur eum =
id, tamquam voluptaria expetendis ad sed, nobis feugiat similique usu ex. E=
um hinc argumentum te, no sit percipit=20
</div><br>
</div><br>

--f46d042d05aa6cf13f04c47bda2d--
--f46d042d05aa6cf14304c47bda2f
Content-Type: text/plain; charset=US-ASCII; name="blog.txt"
Content-Disposition: attachment; filename="blog.txt"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_h4h5tdy90

DQoNCkxvcmVtIGlwc3VtIGFkIGhpcyBzY3JpcHRhIGJsYW5kaXQgcGFydGllbmRvLCBldW0gZmFz
dGlkaWkgYWNjdW1zYW4gZXVyaXBpZGlzIGluLCBldW0gbGliZXIgaGVuZHJlcml0IGFuLiBRdWkg
dXQgd2lzaSB2b2NpYnVzIHN1c2NpcGlhbnR1ciwgcXVvIGRpY2l0IHJpZGVucyBpbmNpZGVyaW50
IGlkLiBRdW8gbXVuZGkgbG9ib3J0aXMgcmVmb3JtaWRhbnMgZXUsIGxlZ2ltdXMgc2Vuc2VyaXQg
ZGVmaW5pZWJhcyBhbiBlb3MuIEV1IHNpdCB0aW5jaWR1bnQgaW5jb3JydXB0ZSBkZWZpbml0aW9u
ZW0sIHZpcyBtdXRhdCBhZmZlcnQgcGVyY2lwaXQgY3UsIGVpcm1vZCBjb25zZWN0ZXR1ZXIgc2ln
bmlmZXJ1bXF1ZSBldSBwZXIuIEluIHVzdSBsYXRpbmUgZXF1aWRlbSBkb2xvcmVzLiBRdW8gbm8g
ZmFsbGkgdmlyaXMgaW50ZWxsZWdhbSwgdXQgZnVnaXQgdmVyaXR1cyBwbGFjZXJhdCBwZXIuIEl1
cyBpZCB2aWRpdCB2b2x1bXVzIG1hbmRhbXVzLCB2aWRlIHZlcml0dXMgZGVtb2NyaXR1bSB0ZSBu
ZWMsIGVpIGVvcyBkZWJldCBsaWJyaXMgY29uc3VsYXR1LiBObyBtZWkgZmVycmkgZ3JhZWNvIGRp
Y3VudCwgYWQgY3VtIHZlcmkgYWNjb21tb2RhcmUuIFNlZCBhdCBtYWxpcyBvbW5lc3F1ZSBkZWxp
Y2F0YSwgdXN1IGV0IGl1c3RvIHp6cmlsIG1lbGlvcmUuIERpY3VudCBtYWlvcnVtIGVsb3F1ZW50
aWFtIGN1bSBjdSwgc2l0IHN1bW1vIGRvbG9yIGVzc2VudCB0ZS4gTmUgcXVvZHNpIG51c3F1YW0g
bGVnZW5kb3MgaGFzLCBlYSBkaWNpdCB2b2x1cHR1YSBlbG9xdWVudGlhbSBwcm8sIGFkIHNpdCBx
dWFzIHF1YWxpc3F1ZS4gRW9zIHZvY2lidXMgZGVzZXJ1bnQgcXVhZXN0aW8gZWkuIEJsYW5kaXQg
aW5jb3JydXB0ZSBxdWFlcmVuZHVtIGluIHF1bywgbmliaCBpbXBlZGl0IGlkIHZpcywgdmVsIG5v
IG51bGxhbSBzZW1wZXIgYXVkaWFtLiBFaSBwb3B1bG8gZ3JhZWNpIGNvbnN1bGF0dSBtZWksIGhh
cyBlYSBzdGV0IG1vZHVzIHBoYWVkcnVtLiBJbmFuaSBvYmxpcXVlIG5lIGhhcywgZHVvIGV0IHZl
cml0dXMgZGV0cmF4aXQuIFRvdGEgbHVkdXMgb3JhdGlvIGVhIG1lbCwgb2ZmZW5kaXQgcGVyc2Vx
dWVyaXMgZWkgdmltLiBFb3MgZGljYXQgb3JhdGlvIHBhcnRlbSB1dCwgaWQgY3VtIGlnbm90YSBz
ZW5zZXJpdCBpbnRlbGxlZ2F0LiBTaXQgaW5hbmkgdWJpcXVlIGdyYWVjaXMgYWQsIHF1YW5kbyBn
cmFlY2lzIGxpYmVyYXZpc3NlIGV0IGN1bSwgZGljaXQgb3B0aW9uIGVydWRpdGkgYXQgZHVvLiBI
b21lcm8gc2FsdXRhdHVzIHN1c2NpcGlhbnR1ciBldW0gaWQsIHRhbXF1YW0gdm9sdXB0YXJpYSBl
eHBldGVuZGlzIGFkIHNlZCwgbm9iaXMgZmV1Z2lhdCBzaW1pbGlxdWUgdXN1IGV4LiBFdW0gaGlu
YyBhcmd1bWVudHVtIHRlLCBubyBzaXQgcGVyY2lwaXQg
--f46d042d05aa6cf14304c47bda2f--

En este artículo vimos como configurar el correo entrante en SharePoint y así poder alimentar un blog desde el envió de un correo.

SharePoint4Fun,

 

Juan Manuel Herrera Ocheita

jueves, 5 de julio de 2012

Error de Acceso denegado intermitente en SharePoint 2010 no importando los permisos que se asignen

Este error es en la mayoría de ocasiones difícil de rastrear su origen y por lo tanto su solución.  Pero al final es muy sencillo resolverlo. 

Los síntomas son los siguientes:

1) Al parecer la primera vez que visitamos la página no nos da el error pero si regresamos a la misma  nos muestra un error de acceso denegado.

2)A pesar que el usuario tenga permisos de administrador de la colección de sitios, le muestra el mismo error de acceso denegado.

3)La única forma de brindar acceso pareciera con una policita de usuario a nivel de la aplicación Web.

El problema:

SharePoint 2010 tiene una opción para configurar el cache de objetos con el propósito de agilizar la navegación en las páginas del portal.  Y eso lo hace por medio de dos cuentas de dominio que no deberían ser ni la cuenta administradora de la granja SPFarm, ni tampoco SPAdmin.  Sino algo como SPSuperUser y SPSuperReader. 

El problema se inició con el siguiente mensaje de error que reporta el visor de Windows en el Servidor de SharePoint.

Object Cache: The super user account utilized by the cache is not configured. This can increase the number of cache misses, which causes the page requests to consume unneccesary system resources.
To configure the account use the following command 'stsadm -o setproperty -propertyname portalsuperuseraccount -propertyvalue account -url webappurl'. The account should be any account that has Full Control access to the SharePoint databases but is not an application pool account.
Additional Data:
Current default super user account: SHAREPOINT\system

Entonces ejecutamos estas líneas de comando con las cuentas nuevas recién creadas y por un tiempo todo parece estar bien hasta que el cache es depurado o se inicia el IIS o el servidor.  Entonces todos los síntomas arriba mencionados se hacen presentes.

La Solución:

Debe darle permisos a nivel de cada Aplicación Web a las cuentas Super User  de Control Total  y Super Reader de Lectura.  Esto lo puede hacer según la documentación por medio de línea de comando o bien desde el Central Administration.

Personalmente me gusta más hacerlo a nivel de Central Administration para asegurarme que los permisos fueron dados. 

Pero aquí el artículo con la solución: http://technet.microsoft.com/en-us/library/ff758656#section2

O bien por brevedad ´la solución por línea de comando:

$wa = Get-SPWebApplication -Identity "<WebApplication>"

$wa.Properties["portalsuperuseraccount"] = "<SuperUser>"

$wa.Properties["portalsuperreaderaccount"] = "<SuperReader>"

$wa.Update()

* Esto debe de ejecutarse en una ventana de PowerShell que tenga cargadas las librerías de SharePoint .

En este artículo vimos como resolver el misterioso error de acceso denegando que sucede al parecer intermitentemente.

 

SharePoint4Fun!,

Juan Manuel Herrera

miércoles, 4 de julio de 2012

Recuperando un documento de una base de datos de contenido desconectada SharePoint 2010

Suele suceder en el manejo de documentos dentro de SharePoint 2010 que un documento con modificaciones recientes es reemplazado por uno más antiguo o vacío y sino se tiene habilitada la opción de versionamiento en la biblioteca no podrá el usuario final recuperar la versión anterior tendrá que escalar el requerimiento al departamento de IT para restaurar una copia de respaldo y aquí es donde entra la opción nueva de SharePoint 2010 denominada “Recover data from an unattached content database” dentro del Central Administration.  Esta opción nos permitirá restaurar una copia de respaldo de SQL Server con otro nombre y de forma desconectada extraer el contenido del mismo para recuperarlo.

Esta opción no existía en 2007 y se tenía que recurrir a herramientas de terceros o a restaurar todo un ambiente de granja de SharePoint separado para realizarlo.   Hoy con SharePoint 2010 aunque no es una opción tan automatizada como se desearía si nos brinda el camino para realizar una restauración relativamente sencilla.

El procedimiento que realizaremos para la recuperación es el siguiente:

0) Identificar el nombre de la base de datos de Contenido donde esta el documento que se desea recuperar.  Ejecute en PowerShell for SharePoint 2010 la siguiente línea de comando:

Get-SPContentDatabase –site [url site collecction]

El resultado debería ser similar al siguiente:

Id               : 33cc84ba-3243-4e69-b542-c1d5ec18f6c8
Name             : WSS_Content_Administracion
WebApplication   : SPWebApplication Name=SharePoint - 80 - Portal Infoware
Server           : Infoware-WFE-01
CurrentSiteCount : 1

En la línea “Name” encontrará el nombre de la base de datos de contenido que esta buscando.

1) Restaurar la copia de respaldo de la base de datos de contenido deseada en el Servidor de SQL Server disponible (si es el mismo de SharePoint restaurar la base de datos de contenido con otro nombre)

image

Para mas información de cómo restaurar una base de datos en SQL Server ir a: http://technet.microsoft.com/en-us/library/ms177429.aspx

2) Ahora nos conectamos al Central Administration por medio del navegador y vamos a la opción “Backup and Restore” y seleccionamos la opción “Recover data from and unattached content database”

image

3) Llenamos los campos requeridos.  En este caso es solo necesitamos el nombre de la base de datos de contenido y presionar el botón Next.

image

4) Seleccione la colección de sitios, el sitio donde esta la biblioteca y en list: la biblioteca donde esta el documento a restaurar.  Por ultimo seleccione la opción “Export site or list”, y presione el botón Next.

image

 

5) Escriba en la casilla “FileName:” la ruta y el nombre del archivo donde desea depositar el contenido.  En esta caso como solo vamos a recuperar un documento no nos interesa recuperar la seguridad.  Continue el proceso presionando el botón  Start Export.

image

6) Espere a que le indique que a finalizado el proceso .

image

7) Ahora vamos a crear una base de datos de contenido nueva solo para depositar el backup y extraer el documento que deseamos.  Para eso ejecute la siguiente línea de comando:

        New-SPContentDatabase –Name [DatabaseName] –WebApplication [WebApplication]

Reemplace [DatabaseName] con algo como WSS_Content_Recuperacion.  Y [WebApplication] con el nombre de la aplicación Web a la que va asociar esta nueva base de contenido.  Por ejemplo: http://miportal

8) Ahora vamos a crear el sitio primario de la colección de sitios de esta nueva base de datos para que podamos importar el contenido extraído anteriormente.  Ejecute la siguiente línea de comando en una instancia de PowerShell for SharePoint 2010:

        New-SPSite –Url [FullUrl] –Template [Template] –ContentDatabase [DatabaseName] –Name [Title]  -owneralias [PrimaryOwner]  -Language [Language]

Reemplace [FullUrl] por la ruta donde va a crear la nueva colección de sitios. Ejemplo: http://miportal/area/recuperacion

Reemplace [Template] por el nombre de la plantilla equivalente al contenido extraído. Que en este caso en una plantilla de Equipo por lo que debe de escribir STS#0.  Para listar las plantillas disponibles y sus codigos ejecute la línea de comando: Get-SPWebTemplate o consulte http://technet.microsoft.com/en-us/library/ff607910.aspx.

Reemplace [DatabaseName] por el nombre de la base de datos de contenido recién creada para este propósito.  El nombre utilizado es WSS_Content_Recuperacion.

Reemplace [Title] por el título del sitio primario entre comías si lleva espacios, algo como: “Recuperación]

Reemplace [PrimaryOwner] por el nombre del usuario que esta utilizando para realizar este proceso.  Ejemplo: midominio\esteusuario.

Reemplace [Language] por el código del lenguaje del contenido a recuperar.  En este caso es inglés entonces corresponde el código 1033 y si fuera español por ejemplo es 3082.  Para conocer la lista completa de códigos de idiomas utilizados en SharePoint vea: http://technet.microsoft.com/en-us/library/ff463597.aspx.

 

9) Si todo fue un éxito podrá navegar a la dirección y ver el sitio como le muestro a continuación:

image

10) Listo el sitio donde vamos a recuperar el documento, vamos a ejecutar la línea de comando desde PowerShell for SharePoint 2010 que importará el contenido a este sitio.  Ejecute la siguiente línea:

import-SPWeb http://portal.infowareguate.com/area/recuperacion -path c:\temp\documentoArecuperar.cmp -updateversions overwrite

Reemplace el valor del parámetro  -SPWeb por la url que corresponda a su instalación y el valor del parámetro –path donde este tiene ubicado el archivo .cmp donde extrajo el contenido.  Al finalizar el proceso le indicará que ha creado un archivo log, reviselo para validar que el contenido pudo ser extraído.

Log file generated:
        c:\temp\documentoArecuperar.cmp.import.log

11) Ahora el ultimo paso depende de usted y es que valide con el usuario final si es el documento con la información que espera.  Si lo es solo le queda descargar el archivo de la biblioteca y subirlo a la biblioteca indicada.

image

 

En este artículos vimos como recuperar un documento de una copia de respaldo de la base de datos de contenido en SQL Server, utilizando la opción “Recover data from an unattached content database” el Central Administration de SharePoint 2010.  Y por ultimo favor habilítele al usuario el versionamiento en la biblioteca, limitando la cantidad de versiones por documento para controlar el crecimiento de la biblioteca. Cómo hacerlo en la siguiente dirección: http://technet.microsoft.com/es-es/library/ff718246 .

SharePoint4Fun!,

 

Juan Manuel Herrera Ocheita