sábado, 31 de enero de 2009

MCPD Web Developer

El próximo viernes rendiré el examen que me puede acreditar como MCPD (Microsoft Certified Professional Developer): Web Developer. Este exámen es el 70-547: PRO: Designing and Developing Web Applications by Using the Microsoft .NET Framework.

Para preparar esta certificación he estado leyendo el libro: MCPD Self-Paced Training Trainink Kit (Exam 70-547), este libro contiene los siguientes capítulos:

Chapter 1: Application Requirements and Design
Chapter 2: Decompose Specifications for Developers
Chapter 3: Design Evaluation
Chapter 4: Creating a User Interface
Chapter 5: Creating and Choosing Controls
Chapter 6: Data Validation
Chapter 7: Delivering Multimedia
Chapter 8: Component Design
Chapter 9: Component Development
Chapter 10: Reusable Software Components
Chapter 11: Application Logic Layer
Chapter 12: Logging and Monitoring
Chapter 13: Application Configuration
Chapter 14: Define and Evaluate a Testing Strategy
Chapter 15: Creating Development Tests
Chapter 16: Deploying an Application
Chapter 17: Supporting an Application

Para más información:

http://www.microsoft.com/learning/mcp/mcpd/webdev/default.mspx

viernes, 30 de enero de 2009

Logger to SharePoint Logs

Hola actualmente hemos creada una pequeña utilidad que nos permite serializar los logs utilizando el mismo sistema que utilidad Windows SharePoint Services. Lo que hemos hecho es crear una clase TraceProvider igual que nos indican en las MSDN:

http://msdn.microsoft.com/en-us/library/aa979522.aspx

Luego hemos creado una classe estática logger con un conjunto de métodos estáticos que nos facilitan a la hora de guardar los logs.


public static class Logger
{
public static void LogUnassigned(string ProductName, string Title, string Message)
{
Log(TraceProvider.TraceSeverity.Unassigned, ProductName, Title, Message);
}
public static void LogCriticalEvent(string ProductName, string Title, string Message)
{
Log(TraceProvider.TraceSeverity.CriticalEvent, ProductName, Title, Message);
}
public static void LogWarningEvent(string ProductName, string Title, string Message)
{
Log(TraceProvider.TraceSeverity.WarningEvent, ProductName, Title, Message);
}
public static void LogInformationEvent(string ProductName, string Title, string Message)
{
Log(TraceProvider.TraceSeverity.InformationEvent, ProductName, Title, Message);
}
public static void LogException(Exception e)
{
Log(TraceProvider.TraceSeverity.Exception, e.Source, e.TargetSite.ToString(), e.ToString());
}
public static void LogAssert(string ProductName, string Title, string Message)
{
Log(TraceProvider.TraceSeverity.Assert, ProductName, Title, Message);
}
public static void LogUnexpected(string ProductName, string Title, string Message)
{
Log(TraceProvider.TraceSeverity.Unexpected, ProductName, Title, Message);
}
public static void LogMonitorable(string ProductName, string Title, string Message)
{
Log(TraceProvider.TraceSeverity.Monitorable, ProductName, Title, Message);
}
public static void LogHigh(string ProductName, string Title, string Message)
{
Log(TraceProvider.TraceSeverity.High, ProductName, Title, Message);
}

public static void LogMedium(string ProductName, string Title, string Message)
{
Log(TraceProvider.TraceSeverity.Medium, ProductName, Title, Message);
}
public static void LogVerbose(string ProductName, string Title, string Message)
{
Log(TraceProvider.TraceSeverity.Verbose, ProductName, Title, Message);
}
private static void Log(TraceProvider.TraceSeverity type, string ProductName, string Title, string Message)
{
TraceProvider.RegisterTraceProvider();
TraceProvider.WriteTrace(0, type, Guid.NewGuid(), ProductName, ProductName, Title, Message);
TraceProvider.UnregisterTraceProvider();
}
}

jueves, 29 de enero de 2009

Navegación fuera de contexto en sharepoint (moss 2007)

Una forma de recorrer una jerarquia de sites de publicación en MOSS 2007 desde fuera del contexto web (es decir desde una aplicación de consola, aplicación windows, etc. ) seria utilizando las propiedades CurrentNavigationNodes y GlobalNavigationNodes de la clase PublishingWeb.

De esta forma podemos obtener la navegación de los usuarios respetando cosas como pueden ser el orden que se ha establecido o si queremos mostrar subsites, páginas, etc.

Aquí añado un poco de código donde se muestran un uso de estas propiedades:

NOTA: Es necesario referencial la dll Microsoft.SharePoint.Publishing.dll


using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Publishing;
using Microsoft.SharePoint.Navigation;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
try
{
using (SPSite siteCollection = new SPSite("http://localhost"))
{
using (SPWeb site = siteCollection.OpenWeb())
{
PublishingWeb pw = PublishingWeb.GetPublishingWeb(site);
Console.WriteLine("Navegación actual de la site Nombre: {0}, Url: {1} ",site.Title,site.Url);
foreach (SPNavigationNode nodo in pw.CurrentNavigationNodes)
{
Console.WriteLine("Titulo: {0}, Url: {1}", nodo.Title, nodo.Url);
}
Console.WriteLine("Navegación global de la site Nombre: {0}, Url: {1} ", site.Title, site.Url);
foreach (SPNavigationNode nodo in pw.GlobalNavigationNodes)
{
Console.WriteLine("Titulo: {0}, Url: {1}", nodo.Title, nodo.Url);
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}
}

miércoles, 28 de enero de 2009

Acceder al QueryString con JavaScript

Este post lo hago simplemente para recordarlo, que siempre se me olvida y me vuelvo loco buscando un ejemplo:

//Devuelve un array con la coleccion de parametros del queryString
function queryString() {

var qsParm = new Array();
var query = window.location.search.substring(1);
var parms = query.split('&');

for (var i=0; i<parms.length; i++) {

var pos = parms[i].indexOf('=');

if (pos > 0) {

var key = parms[i].substring(0,pos);
var val = parms[i].substring(pos+1);
qsParm[key] = val;

}
}

return qsParm;
}

ConnectionString en SharePoint (MOSS 2007)

La cadena de conexión para la base de datos de configuración es persistida en una clave de registro, consultando la clave específica podemos obtener la cadena de conexión.

1. Inicio --> Ejecutar: regedit
2. Navega por: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\12.0\Secure\configdb

Trozo de código para obtenerla:

RegistryKey key = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\12.0\Secure\configdb");

DSN = (string) key.GetValue("DSN");

SQLServerInstance = new string[]{this.DSN.Split(new char[] { '=', ';' })[1]};

key.Close();

Deshabilitar Mi Sitio y Mis vínculos en SharePoint (MOSS 2007)

Para poder configurar quien puede ver Mi Sitio y Mis Vínculos en Microsoft Office SharePoint Server 2007 tendremos que seguir los siguientes pasos:

1. Ir a la Administración Central
2. In a la Administración de los Servicios Compartidos
3. Permisos de servicios de personalización
4. Agregarmos el grupo al que queremos dar permisos para crear sitios personales y marcamos los checkbox:
- Crear un sitio personal
- Utilizar características personales
5. Eliminamos el grupo NTAuthority\Authenticated Users que es el que viene por defecto.

De esta forma ya habremos limitado esta características a un grupo de directorio activo particular.

Si lo que queremos es simpelemente que ningún usuario vea estos links lo que podemos hacer es desactivar la feature que nos muestra estos links, en la master.page tenemos un sharepoint delegate control que se complementa con un user control a partir de una feature que está activada en el ámbito de toda la granja de servidores. Para deshabilitar esta feature:

C:\Program Files\Microsoft Shared\web server extensions\12\bin\>stsadm -o deactivatefeature -name MySite

Información extraida de:
http://geekswithblogs.net/RogueCoder/archive/2006/11/01/95766.aspx