La metida de pata continuada, o la saga del SDK de SharePoint
Un pajarito me ha traído un regalo la semana pasada: el nuevo SDK de SharePoint, que todavía no está disponible para los simples mortales (las malas lenguas dicen que aparecerá en junio). Así que, fuera de haberle dado una mirada superficial, esta mañana, para solucionar el primer problema de la semana, he sacado a relucir mi nuevo SDK para ver qué me aconseja... Mejor que no lo hubiera hecho...
Nota: para los que no lo han visto, en alguna oportunidad me encontré 8 errores en 15 líneas de código en un ejemplo del SDK)
Veamos: necesito encontrar el valor de un campo de la Base de Datos de Perfiles de MOSS, y quiero usar el WebService "UserProfileService" por aquello de que usar un impersonador nos lo ha hecho tan difícil en el nuevo SharePoint (gracias señores de Microsoft, mientras más difícil me lo hagan, más puedo pedir de aumento de sueldo). El SDK recomienda (véalo en la versión OnLine, si no me cree http://msdn2.microsoft.com/en-us/library/ms550407.aspx):
UserProfileWebService.localhost.PropertyData[] properties = myService.GetUserProfileByName("domainname\\username");
for (int i = 0; i < properties.Length; i++)
{
Console.WriteLine(properties[ i ].Name);
Console.WriteLine(properties[ i ].Value);
}
En donde "UserProfileWebService" es la instancia local del WebService "UserProfileService".
Primero que todo, el WebService no tiene nada que se parezca a "localhost", pero si tiene un "PropertyData", asi que hay algo que sobra...
Luego, el "PropertyData[]" no posee una propiedad "Value"... Afortunadamente hay dos o tres programadores que hacen las cosas bien en Microsoft, y la Intellisense de Visual Studio me dice que la propiedad es "ValueS", y no es una simple string, sino que es del tipo "ValueData[]".
En resumidas cuentas, el ejemplo debería ser:
UserProfileWebService.PropertyData[ ] properties = myService.GetUserProfileByName("domainname\\username");
for (int i = 0; i < properties.Length; i++)
{
Console.WriteLine(properties[ i ].Name);
UserProfileWebService.ValueData[ ] myValues = properties[ i ].Values;
for (int a = 0; a < myValues.Length; a++)
{
Console.WriteLine(" - " + myValues[ a ].Value);
}
}
Y aquí se te ocurre la pregunta de paraqué usar un array de valores, si cada propiedad solamente tiene un valor?
Ya se va convirtiendo en costumbre: buscas algo en el SDK de SharePoint, miras con desconfianza, intentas reproducir el ejemplo, no funciona (por supuesto), lo tiras y lo intentas por tu cuenta... hasta que un día bote todo el SDK a un pozo sin fondo, solamente para disfrutar del gozo infinito proporcionado por la liberación de la esclavitud sdkiana (que exagerado...)
Gustavo - http://www.gavd.net/servers/
Escriba un Comentario que me haga reir...