Social Icons

viernes, 30 de octubre de 2009

El ViewState se pierde extendiendo el ContentByQueryWebPart

Pues parece que nuestro amigos han vuelto a hacer de las suyas al programar el CQWP y han pensado que es una gran idea cargarse el viewstate. Asi que cuando tú inocentemente le añades tu variable la próxima vez que se carga el webpart te das cuenta de que ha desaparecido mágicamente.

Bueno, la solución parcial que hemos encontrado es sobreescribir los métodos SaveViewState y LoadViewState por aquello de quedar por encima.

No es demasiado elegante, pero sí muy efectivo:

        public string Filter { get; set; }

protected override object SaveViewState()
{
object[] myViewState = new object[2];
myViewState[0] = base.SaveViewState();
myViewState[1] = Filter;

return myViewState;
}

protected override void LoadViewState(object savedState)
{
object[] myViewState = null;
if (savedState != null)
{
myViewState = (object[])savedState;
base.LoadViewState(myViewState[0]);
Filter += (string)myViewState[1];
}
}

Espero haber sido más rápido que Luis en postear, jijijiji

Publicar un comentario

martes, 27 de octubre de 2009

Reporte de uso gráfico del portal en SharePoint 2007

Vaya, una de esas cosas con las que cuentas y de repente te fallan… Y lo peor es que ahora todos los post tratan del SharePoint 2010 por lo que es más difícil encontrar cosas básicas de MOSS.

Bueno, a lo que voy, que este es cosa rápida. Resulta que tras activar los análisis de uso en la administración central y en la feature del sitio y en todos los lados conseguimos en la página de configuración del sitio un precioso link como este:

Informe de uso del sitio

Hasta aquí todo correcto, pero hoy me ha ocurrido que pulsando sobre ese link (en un MOSS) me redirigía a página de “Informe de uso del sitio” /_layouts/usageDetails.aspx, que es la página de WSS:

usageDetails.aspx - Informe de uso del sitio

Útil, sí, pero mu fea

Después de un rato de buscar por internet, en donde me fue imposible encontrar nada por culpa de las páginas de 2010, me vi obligado a preguntarle a un amigo que dónde estaba la paginita dichosa con las gráficas de uso y me dijo que era /_layouts/SpUsageWeb.aspx. Vale bien, muy bonito, pero ¿cómo accede un usuario administrador a esa página sin saberse la url? Aburrido de buscar a ojo, me fui a la página de configuración del sitio y busqué en el código un link a SpUsageWeb.aspx pero nada, tan solo creí ver pasar a lo lejos una planta rodadora…

¿No hay forma de que los usuarios lleguen a ese link? Pues No. Por lo menos, no en WSS. Resulta que la página del reporte de uso gráfico es parte de MOSS y para que se muestre tendremos que activar las “Características de sitio de Office SharePoint Server Enterprise” y con esto, el link de “Informe de uso del sitio” apuntará a /_layouts/SpUsageWeb.aspx y el usuario podrá entrar a la página de “Resumen de uso del sitio” que es la misma de antes, pero con grafiquitas, así:

SpUsageWeb.aspx - Resumen de uso del sitio

Hala, qué bonito, ahora sí que me puedo ir a casa contento…

Publicar un comentario

lunes, 26 de octubre de 2009

Creación de usuarios de FBA programáticamente

El otro día tuve que hacer una instalación de un FBA y se me ocurrió que no tenía ganas de usar el asistente de Visual Studio eso o que no tenía un Visual Studio a mano… total que se me metió en la cabeza que debía de ser facilísimo crear los usarios programáticamente. Claro, desde el portal no tiene ningún secreto, pero yo lo que quería era hacerlo desde una aplicación de consola.

Al final,como siempre, no me resultó trivial pese a ser facilísimo, y como no lo tengo subido al TFS y yo soy de los que se olvidan de este tipo de cosas, lo subo al blog.

El main no tiene ninguna complicación, se crea el usuario con un Membership.CreateUser y ser recoge el resultado de la operacion en un MembershipCreateStatue, así:


static void Main(string[] args)
{
System.Web.Security.MembershipCreateStatus Creado;
System.Web.Security.Membership.CreateUser(args[0], args[1], args[2],
Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), true, out Creado);

Console.WriteLine(Creado.ToString());
Console.ReadKey();
}

Claro, qué fáci :) pero ¿cómo sabe el Membership a dónde apuntar? pues se lo tenemos que decir añadiendo a nuestra solución un “Archivo de Configuración de Aplicación”. Yo como soy tremendamente original lo llamé App.config.


Y en este fichero .config es donde tenemos que definir todos los datos de nuestro Membership Provider. Para regocijo de todos, se puede sacar la configuración directamente desde el web.config de la aplicacion web donde tenemos montado la infraestructura del Form Based Authentication. Os pego una copia esquemática de lo que hay que añadir:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="NOMBREDELACONEXION" connectionString="server=INSTANCIA;database=BASEDEDATOS;Trusted_Connection=true" />
</connectionStrings>
<system.web>
<membership defaultProvider="NOMBERDELMEMBERSHIPPROVIDER">
<providers>
<add connectionStringName="NOMBREDELACONEXION" applicationName="/"
name="NOMBERDELMEMBERSHIPPROVIDER"
type="CLASE, ASSEMBLY, Version=X.X.X.X, Culture=neutral, PublicKeyToken=KEY" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="NOMBREDELROLEPROVIDER">
</roleManager>
</system.web>
</configuration>

Y con esto ya funciona mágicamente.


Suerte!

Publicar un comentario