9/4/08

Obtener el Servidor SMTP configurado en MOSS

Para envío de correo podemos poner el SMTP que nosotros queremos, pero si disponemos de un Sharepoint configurado con su servidor podemos utilizarlo sin problemas. Lo único que tenemos que hacer es localizarlo. Para ello insertamos el siguiente código:

using Microsoft.Sharepoint.Administration;

private string GetSmtpServer()
{
SPWebApplicationCollection spWebApplicationCollection = SPWebService.ContentService.WebApplications;
SPOutboundMailServiceInstance smtpServer = new SPOutboundMailServiceInstance();
if (spWebApplicationCollection != null)
{
foreach (SPWebApplication spWebApplication in spWebApplicationCollection)
{
smtpServer = spWebApplication.OutboundMailServiceInstance;return smtpServer.Server.Address;
}
}
return string.Empty;
}

saludos,
Juan Alcalá

Crear sitios a partir de plantillas

Podemos crear un sitio mediante código. En realidad, prácticamente todo lo que hacemos mediente Clicks en MOSS podemos implementarlo con el API de SharePoint. El código sería algo parecido a esto:

public static void CrearSitio(string urlWebPadre, string NombrePlantilla, string urlRelativaNuevoSitio, string Titulo, string Descripcion, bool EliminarSiExiste)
{
SPSite siteTop = new SPSite(urlWebPadre);
SPWeb siteRoot = siteTop.OpenWeb();
SPWebCollection myWebs = siteRoot.Webs;
//Obtenemos colección de plantillas
SPWebTemplateCollection webTemplateCollection = siteTop.GetCustomWebTemplates(3082);
//Obtenemos plantilla deseada
SPWebTemplate webTemplate = webTemplateCollection[NombrePlantilla];
//Eliminamos si existe
if (EliminarSiExiste && myWebs[urlRelativaNuevoSitio].Exists)
{
myWebs.Delete(urlRelativaNuevoSitio);
}
//Creamos sitio:
myWebs.Add(urlRelativaNuevoSitio, Titulo, Descripcion, 3082, webTemplate, true, false);
}

saludos,
Juan Alcalá

8/4/08

Windows Server 2008

Ya podemos descargarnos nuestra Trial para probar el nuevo Windows Server 2008, en vesion Standard o Enterprise.

Windows Server 2008 Enterprise (Trial 60 dias)
https://www.microsoft.com/downloads/details.aspx?familyid=13C7300E-935C-415A-A79C-538E933D5424&displaylang=es

Windows Server 2008 Standard (Trial 60 dias)
https://www.microsoft.com/downloads/details.aspx?familyid=B6E99D4C-A40E-4FD2-A0F7-32212B520F50&displaylang=es


saludos,
Juan Alcalá

Eventos en WSS 3.0

Una de las alternativas que tenemos a la creación de un workflow es utilizar eventos. Los eventos nos van a permitir controlar determinados aspectos de nuestros ítems, nuestras listas, e incluso webs.

Los eventos tienen dos formas, la que está en pasado que se llevará a cabo cuando el evento ya se ha producido, y la continua que se llevará a cabo antes de que el evento ocurra. Con todo esto, disponemos de los siguientes eventos:

En esta tabla se recogen las diferentes posibilidades:

SPItemEventReceiver
ItemAdded ItemAdding ItemAttachmentAdded ItemAttachmentAdding
ItemAttachmentDeleted ItemAttachmentDeleting ItemCheckedIn ItemCheckedOut ItemCheckingIn ItemCheckingOut ItemDeleted ItemDeleting ItemFileConverted ItemFileMoving ItemUncheckedOut ItemUncheckingOut ItemUpdated ItemUpdating

SPListEventReceiver
FieldAdded FieldAdding FieldDeleted FieldDeleting FieldUpdated FieldUpdating

SPWebEventReceiver
SiteDeleted SiteDeleting WebDeleted WebDeleting WebMoved WebMoving

Lo primero que tenemos que hacer es crearnos una clase que herede del Receiver que nos interesa:

public class MiEventHandler : SPItemEventReceiver
{ .... }


En este ejemplo queremos que:
1.- cuando se inserte un ítem, en el metadato “Datos” ponga "Nuevo .."
2.- y cuando se modifique ponga "Modificado ..".
3.- y que sólo se pueda eliminar un ítem modificado.

Para ellos sobreescribimos los eventos ItemAdded, ItemUpdated e ItemDeleting

public override void ItemAdded(SPItemEventProperties properties)
{
SPListItem listItem = properties.ListItem;
listItem["Datos"] = "Nuevo " + properties.EventType.ToString();

DisableEventFiring();
listItem.Update();
EnableEventFiring();
}


public override void ItemUpdated(SPItemEventProperties properties)
{
SPListItem listItem = properties.ListItem;
if (listItem["Datos"].ToString().Contains("Nuevo"))
{
listItem["Datos"] = "Modificado " + properties.EventType.ToString(); ;
listItem.Update();
}
}


public override void ItemDeleting(SPItemEventProperties properties)
{
SPListItem listItem = properties.ListItem;
if (listItem["Datos"].ToString().Contains("Nuevo"))
{
properties.Cancel = true;
properties.ErrorMessage = "No se puede eliminar un elemento Nuevo";
}
}


NOTA: Utilizamos ItemDeleting y no Itemdeleted porque no queremos que el ítem se borre, queremos hacer una comprobación previa.

NOTA2: Hay que Habilitar y Deshabilitar los eventos si vemos que pueden entrar en conflicto. Por ejemplo, si en el ITemAdded modificamos un item y hacemos item.Update(); lo que estamos haciendo es lanzar automaticamente ItemUpdating y a lo mejor no nos interesa.


Para agregar la DLL a las listas que queramos nos haremos una aplicación Windows que tendrá este código:

using System;
using Microsoft.SharePoint;

namespace ConsoleTools
{
class Program
{
static void Main(string[] args)
{
SPSite site = new SPSite("SITE");
SPWeb web = site.OpenWeb();
SPList list = web.Lists[LISTA];

string ensamblado = "MiWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxx";
string clase = "MiWebPart.MiEventHandler";

list.EventReceivers.Add(SPEventReceiverType.ItemAdded, ensamblado, clase);
list.EventReceivers.Add(SPEventReceiverType.ItemUpdated, ensamblado, clase);
list.EventReceivers.Add(SPEventReceiverType.ItemDeleting, ensamblado, clase);

}
}
}

Ejecutando este código y después haciendo IISRESET veremos que el comportamiento de nuestra lista ha cambiado.
Código sacado del
Blog de Carlos Segura

saludos,
Juan Alcalá







3/4/08

Nueva Versión del AKS (Kit de Accesibilidad para SharePoint)

Acaban de lanzar la versión 1.1 de este Kit, la cual “proporciona niveles crecientes de accesibilidad a través de un ambiente de colaboración e incluye 21 nuevos adaptadores de control para los blogs y Wikis que se han desarrollado para mejorar la accesibilidad de las piezas Web y de los controles individuales dentro del servidor 2007 de Microsoft Office SharePoint”.

Saludos,
Juan Alcalá


24/3/08

Limitaciones MOSS 2007

Cuántas veces nos hemos preguntado en nuestra implantación:

¿Cuántos sites puedo crear?
¿Cuántos grupos puedo crear por site?
¿Qué tamaño de ficheros puedo subir como máximo?
etc, etc

para solucionar estas dudas tenemos esta pagina de TechNet:

http://technet.microsoft.com/en-us/library/cc262787.aspx

saludos,
Juan Alcalá

6/3/08

Issue tracking list data is not saved when you save a site as a template in Windows SharePoint Services 3.0 or in SharePoint Server 2007

Cuando intentamos guardar una lista de seguimiento (Issue tracking) como plantilla vemos que podemos guardarla pero no nos permite guardar el contenido de la misma. El checkbox está deshabilitado. 

Microsoft ha confirmado que se trata de un problema relacionado con:
• Microsoft Windows SharePoint Services 3.0
• Microsoft Office SharePoint Server 2007

ver más informacion en el KB: http://support.microsoft.com/kb/948141/en-us

De momento no hay una solución. Lo único que he podido hacer con este caso es coger una lista de tareas normal y corriente y convertirla en una de seguimiento de tareas. Para ello simplemente hay que coger las columnas necesarias, que están como columnas de sitio, e insertarlas en la nueva lista. De esta forma podremos guardarla como plantilla con todo su contenido.

saludos,
Juan Alcalá


4/3/08

Debugging Web Parts in Visual Studio

Visual Studio nos permite depurar una web parts instalada en nuestro SharePoint. El proceso es algo laborioso y puede darnos guerra pero una vez conseguido nos ahorrará mucho tiempo.

http://msdn2.microsoft.com/es-es/library/ms916837(en-us).aspx

El ejemplo se aplica sobre WSS 2.0 y Visual Studio 7.0 o superior. No os asusteis. Es totalmente aplicable a los WSS 3.0 y Visual Studio 2005 o superior.

saludos,
Juan Alcalá

Licencias Microsoft

La forma más sencilla de ver que el precio de las licencias por productos.

http://www.microsoft.com/licensing/mla/

saludos,
Juan Alcalá

SharePoint Server 2007 SDK: Software Development Kit

En febrero Microsoft sacó el nuevo Kit de Desarrollo para Sharepoint 2007.
Este kit posee codigo de ejemplo, tareas programadas, referencias, ... para facilitarnos la tarea de desarrollar en esta plataforma. Está en inglés y japonés.

En enlace de la página es:
http://www.microsoft.com/downloads/details.aspx?familyid=6D94E307-67D9-41AC-B2D6-0074D6286FA9&displaylang=en

saludos,
Juan Alcalá

3/3/08

Kit de accesibilidad para SharePoint

AKS (Accesibility Kit for SharePoint) es el nuevo kit de herramientas que ha publicado Microsoft y que ha desarrollado la empresa HiSoftware con el fín de facilitar que los sitios desarrollados bajo la plataforma SharePoint sean más accesibles.
Hasta ahora, para poder hacer que un sitio SharePoint fuese accesible, había que desarrollar a mano todos los elementos que le forman, ya sea la master page, ficheros CSS, controles, había que modificar el método render y poner atributos básicos que le faltaban en las tablas, etc.
Para evitar hacer todo esto y facilitarnos el desarrollo, este kit contiene una serie de plantillas, controles, paginas maestras, hojas de estilo y web parts que nos permiten realizar sitios de MOSS o WSS más accesibles.
La primera versión de este kit, Accessibility Kit for SharePoint(AKS) v 1.0 ya está disponible para su descarga tanto en CodePlex como desde la página de HiSoftware.
(Extraido del blog de Pablo Sousa)

26/2/08

Obtener URL principal desde Page Viewer webpart

Entre otras opciones una es utilizar cookies. La idea es meter en una cookie la URL del padre mediante javascript y despues cogerla en el codigo .CS de la aplicacion .NET que estamos visualizando. Esto es porque al ser codigo que se encuentra en el servidor no podemos acceder a datos del cliente. Es por ello que utilizamos comandos de javascript.

1.- lo primero que hacemos es generar una cookie con la URL del padre nada mas cargar la pagina. Esto lo hacemos por javascript, en la parte superior del ASPX, para que sea lo primero en hacer:


script language="javascript" type="text/javascript">
document.cookie = 'urlPadre=' + window.parent.location.href;
/script>

2.- El siguiente paso es coger esa cookie cuando lancemos un evento de servido:

La siguiente parte es de C# y es la que se lanza una vez le pinchamos al botón de ‘exportar a PDF’. Este botón cogerá la cookie y utilizará la URL que almacena para poder pintarla en PDF.

try
{
    string URLPDF = Request.Cookies["urlPadre"].Value.ToString();
    Response.Cookies["urlPadre"].Expires = DateTime.Now.AddDays(1);
    
// Le damos a la cookie un tiempo de vida para que no se acumulen …
}
catch (Exception ex)
{ }





20/2/08

Workflows de SP Designer no se inician automáticamente

Después de Crear un Workflow con Sharepoint Designer, el cual era obligatorio que se iniciara automaticamente, el mismo no lo hacia. Despues de Varias horas de analizar el problema, descubrimos que este problema se debe a la aplicacion del SP1 de Sharepoint, y esta documentado en un KB con Fecha 1/2/2008.

Link http://support.microsoft.com/kb/947284

Más información en el blog de mi colega Miguel Tabera (http://migueltabera.blogspot.com/)

18/2/08

Error listItem.Update()

Al intentar abrir una lista perteneciente a un Site podemos encontrarnos con un error de falta de permisos. Para evitar este error podemos poner el codigo en una delegada, utilizando SPSecurity:


SPSecurity.RunWithElevatedPrivileges(delegate()
{
        // Codigo para abrir el Site y modificar una lista
});

saludos,
Juan Alcalá

SharePoint Capacity Planning Tool

Para realizar una planificación correcta de una instalación, tanto de Microsoft Office SharePoint Server 2007 (MOSS) como de los Microsoft Windows SharePoint Services 3.0 (WSS).

http://technet.microsoft.com/en-us/library/bb961988.aspx

saludos,
Juan Alcalá

14/2/08

Error: "Cannot open database "WSS_Content_...." requested by the login. The login failed. Login failed for user ... "

A veces, al insertar un webpart en nuestro Site es posible que nos salga un error de este tipo:

Cannot open database "WSS_Content_xxxx" requested by the login. The login failed. Login failed for user 'xxxx'.

Este error es debido a que se está intentado acceder a la base de datos con un usuario para el que no tenemos permisos. Para comprobar esto tenemos que irnos a nuestro IIS y ver con qué usuario nos logueamos en nuestro App. Pool, tal y como se ve en la imagen:




Cuando comprobemos que nuestro usuario es correcto, si sigue fallando lo que haremos será comprobar si nuestra aplicacion o nuestro directorio virtual está apuntando a este App. Pool:





 

8/2/08

Validar el formato de un mail


public bool IsEmail(string mail)
{
Regex mailPattern = new Regex
(@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
return mailPattern.IsMatch(mail);
}