Social Icons

miércoles, 18 de noviembre de 2009

AvailableWebTemplates en el site definition

Desde el onet.xml de un site definition es fácil cambiar las plantillas de sitio disponibles de que tendrá en el menú de creación de sitios hijos. Simplemente habrá que añadir los sitios que necesitemos en la propiedad AvailableWebTemplate de la característica de Publishing del sitio:

<Feature ID="22A9EF51-737B-4ff2-9346-694633FE4416">
..
<Property Key="AvailableWebTemplates" Value="*-MYTEMPLATE#0" />
..
</Feature>

Y el Value se traduce en [LCID]-[TEMPLATE] de esto podemos deducir que *-MyTemplate no quiere decir todos los templates menos el mío si no que los templates disponibles serán los MyTemplate de cualquier idioma.

También podemos permitir más de un template disponible si los separamos por ;

<Property Key="AvailableWebTemplates" Value="*-MYTEMPLATE#0;*-YOURTEMPLATE#0" />

Y ahora solo falta acertar con el nombre correcto del template :) o no saldrá nada…

Publicar un comentario

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

viernes, 25 de septiembre de 2009

Microsoft reMIX España

No sé si sentirme defraudado por el evento o afortunado por haber tenido contacto con toda la tecnología novedosa que presentaban en exclusiva seis o siete meses antes de que la presentaran…

Yo como soy un joío me siento defraudado. Los speakers no estuvieron a la altura en algunos casos, el mensaje ha sido repetitivo y la presentación de Windows 7 no la vi porque cuando sonaron los primeros compases de “La Minifalda” de Manolo Escobar sentí que era demasiado para mi y me salí.

No desaprovechéis la oportunidad de ver el video, cuando lo suban a la red, y entenderéis de lo que hablo.

El evento estaba orientado a developers pero, en la línea de lo que se está viendo últimamente, crearon todo “sin necesidad de tirar ni una línea de código”, con lo cual no cumplió mis espectativas. Ya sé que lo de mis espectativas es problema mío, de hecho me pregunté un par de veces ¿y qué esperabas?

No voy a seguir criticando que somos muy pocos y al final estamos condenados a trabajar juntos, como dice mi amigo Igor “Arrieritos somos”.

Os voy a resumir las 8 horas en unas pocas líneas sin miedo a dejarme nada interesante por el camino, por si no pudisteis asistir.

  • Silverlight existe y es chulo. Los de http://www.playmusic.fm/ hicieron una presentación de su empresa y de lo que están haciendo con silverligh más que recomendable, contarán conmigo como usuario y si tengo suerte y tiempo libre como músico. Lo que tienen montado está en fase de desarrollo todavía y no lo podéis ver, pero se parece bastante al concepto de escritorio web que ya hemos visto en http://www.windows4all.com/.
  • Habemus Touch. Las nuevas librerías de W7 permiten montar interfaces multitáctiles y debemos inventar nuevas formas de representación de datos que se adecuen a este nuevo paradigma. Yo saqué en claro que esto del NUI está muy bien para algunas cosas pero que no tiene sentido ninguno para otras, al menos de momento. El que haya probado a escribir en un teclado virtual sobre una pantalla vertical ya se habrá dado cuenta que por ese camino no se llega a ninguna parte.
  • Presentación en primicia del WebsiteSpark. Se trata de un programa de apoyo a empresas con menos de 10 empleados que se dediquen a hacer webs a los que se le regalarán licencias de servers y SQL y se les dará publicidad y 2 consultas…
  • Presentación en primicia de Microsoft Web Platform Installer 2.0. Que es una aplicación con la chapa que dieron con las nuevas formas de representar la información se podían haber currado un poco la interfaz… que nos va a permitir instalar diferentes soluciones open source, de diferentes tecnologías, no solo .Net en nuestros servidores en tiempo record ya que se encarga de instalar y parametrizar todo lo necesario, por ejemplo el IIS, el SQL, etc. Con esto por ejemplo podríamos echar a correr un server de dasBlog en un ratito.

Aprendimos que existe el SketchFlow hacer wireframes es una de las tareas más comunes a las que se tiene que enfrentar un programador. Aprendimos que hacer streaming de video por internet es caro y es por esto que hay que poner anuncios. Aprendimos que es más importante un diseñador que un programador ya que Quasimodo era hermoso por dentro pero al final no se tira a Esmeralda.

Por cierto y ya paro de despotricar, nos dan unas bolsas de comida con un bocata, una ensaladita y un refresco y 5 minutos más tarde transformamos la nave del SIMO en un campo de refugiados postnuclear. Todos arrastrándonos por el suelo, comiendo entre nuestra propia basura. ¿Me estoy haciendo viejo o ya nací viejo?

Publicar un comentario

viernes, 7 de agosto de 2009

El RSS de los ContentByQueryWebPart

El CQWP también conocido como Elemento Web Consulta de Contenido es amado por pocos los que saben usarlo y odiado por muchos el resto de los mortales entre los que me incluía yo hasta ahora.

Que no quiero decir que haya aprendido a usarlo ni muchísimo menos, quiere decir que, a base de ver cómo se usa, por fin le estoy encontrando ciertas opciones que sí que me parecen interesantes. Y para aprovechar estas ventajas no es necesario hacer una consulta CAML ni siquiera modificar el XSL nada, nada, esta es de las que trae SharePoint solito. Hombre la verdad es que queda más potente si le añadimos una consulta CAML de nuestra cosecha, pero no es necesario pare este experimento.

Se trata de hacer clic la opción “Habilitar fuente para este elemento Web” de las propiedades del webpart.

image

Con este simple gesto obtenemos en nuestro webpart un iconito que claramente representa la idiosincrasia de la página a la que nos conducirá con la forma que esperamos, que apuntará una página RSS que SharePoint nos habrá generado con todas las entradas que nos mostraba nuestro ContentByQueryWebpart en la página de SharePoint.

Esto y un poco de toqueteo de CAML nos abre un enorme abanico de posibilidades. Por ejemplo podríamos tener un RSS de varias listas de páginas diferentes o un RSS de documentos o un RSS de sitios que se van creando o incluso podríamos mezclar esto… ¿mezclando esto salen “Variaciones con repetición de 3 elementos tomadas de 3 en 3”? pues vaya abanico.

Y en las fechas que estamos, y dado que me he venido a mi tierra, el que necesita ahora mismo un enorme abanico soy yo.

Me voy a ver si encuentro un olivo tupidito o algo así.

Saludos.

Publicar un comentario

viernes, 26 de junio de 2009

Spenta es Public Sector, Government Partner of the Year

A ver a quien le toca cenar con Steve Ballmer. Yo no voy porque se me solapa con las vacaciones, pero vamos que estoy seguro de que Ballmer ha preguntado por mi expresamente… Con lo alegre que es él seguro que le dió bajón cuando se enteró de que había declinado su invitación.

http://www.digitalwpc.com/Awards#Public-Sector-Government-Partner-of-the-Year

¡Esto es muy fuerte, Doc!

¿Solo buenas noticias? Esta no es mi vida…

Publicar un comentario

Promocaixa en Producción

En este portal no he tenido nada que ver absolutamente, pero me ha encantado el trabajo que han hecho los compañeros de Spenta.

De vez en cuando llega algún correo (o feed) de esos de “Fijaos lo que se puede con sharepoint”. Pues este post es de esos: http://www.promocaixa.es.

Cuántas veces habré oido que las webs con SharePoint son aburridas y que solo se pueden usar un par de recursos de diseño. Y lentas. Ay cuanto consultor de Siguiente, Siguiente, Aceptar hay por España…

Congratulaciones a los partícipes. Gran trabajo.

Publicar un comentario

viernes, 12 de junio de 2009

Salida a producción del nuevo portal web del Tribunal Constitucional de España

Sé perfectamente que casi todas o mejor dicho todas las personas que leéis mi blog me conocéis personalmente y que sabéis que he estado desarrollando parte del portal del Tribunal Constitucional. También sé que muchos de vosotros o mejor dicho todos ya os habéis enterado de la noticia, pero es que no puedo resistirme a publicar este post.

Desde el día 09/06/2009 es posible visitar el nuevo portal del Tribunal Constitucional de España desde su URL oficial http://www.tribunalconstitucional.es/.

v_virtual

Es un portal de publicación hecho por supuesto con Microsoft Office Sharepoint Server 2007 al que hemos añadido una serie de módulos para que se adecue más específicamente a las necesidades del Tribunal.

Entre otras características remarcables que hemos añadido cabe destacar:

  • Accesibilidad AA: El portal genera código accesible. Esto puede ser fácilmente comprobable usando herramientas como el W3C Markup Validator Service.
  • Portal traducible: La funcionalidad estándar de MOSS ha sido ampliada para dar un mejor soporte a las variaciones. Sí ya se que no está todo traducido, pero lo importante es que todo se puede traducir.
  • Gestión personalizada para la Jurisprudencia Constitucional: Basándonos en las herramientas que nos proporciona MOSS hemos mejorado la gestión de Autos, Sentencias y Declaraciones del Tribunal. Podéis ver cómo ha quedado el sitio Jurisprudencia constitucional.
  • Buscador de Jurisprudencia: Ya sé que está englobado dentro del apartado anterior, pero tenéis que pasaros por el Buscador de Jurisprudencia Constitucional.
  • Gestión personalizada para Componentes del Tribunal: También apoyándonos sobre las características de SharePoint.
  • Gestión personalizada para la Galería Fotográfica: Este visto desde fuera no parece muy especial, pero a mi me gusta mucho cómo se gestiona internamente… para gustos hay colores.

Y más cosas que hay, sobre todo un montón de trabajo de diseño, usabilidad y desarrollo que hemos realizado desde Spenta.

Muchas gracias a todos los que habéis participado directamente en el portal y a los que habéis participado indirectamente creando las clases de las que hemos heredado. En general muchas gracias a todos los compañeros de Spenta porque el portal es fruto del trabajo de todos y cada uno de vosotros.

Y gracias a los compañeros del Tribunal por vuestro trabajo y sobre todo por soportarme.

Lo pongo en mi blog y se cree la gente que lo he hecho todo yo solito, ji, ji.

Publicar un comentario

viernes, 8 de mayo de 2009

stsadm can inadvertently delete a root site collection if erroneous URL path used

¡Qué peligro! como se nos explica en el kb968474 si usamos el comando stsadm –o restore con el parámetro –overwrite y nos equivocamos en la url stsadm se carga la colección de sitios raíz.

Claro, poner un mensaje de error no tendría sentido ya que es completamente imposible que nadie pueda equivocarse a la hora de escribir una url…

Yo sigo siendo más amigo del SQLServer que del stsadm a la hora de hacer estas cosas. También he probado soluciones de terceros como http://www.avepoint.com/ y también me fio más de ellas.

Como todo en este blog esta es mi humilde opinión personal.

Publicar un comentario

martes, 5 de mayo de 2009

CSP for Tourism para Surface

¿Faltará mucho para que llegue la UX y el multitouch a todo? Bueno, de momento a algunas cosas si que está llegando.




Muy bueno el desarrollo, mi enhorabuena al equipo Surface de Spenta.


Abrazos a todos.


¿Para cuando una aventura rolera?

Publicar un comentario

An error has occurred in the script on this page

[EDIT: Lee los comentarios antes de seguir este método]

Hoy se me ha dado este caso, y no es la primera vez que veo esto, así que post al canto.

Internet Explorer Script Error


Line: 3031
Char: 2
Error: ‘RTE_ToggleEnableShortcuts’ is undefined
Code: 0
Y el fichero que nos canta es el /_layouts/1033/HtmlEditor.js

El error se nos produce al teclear en una ventana de editor de texto enriquecido de un webpart editor de contenido.

¿No os ha ocurrido un error parecido a esto? si trabajáis con portales en “en-US” os pasará.

Tras darnos un paseito por /layouts/1033 y mirar las fechas de los ficheros js comparándolos con los de, por ejemplo, /layouts/3082 nos damos de que hay ciertos ficheros que no están actualizados…

En este momento podemos hacer dos cosas, solucionarlo por la vía rápida o leer un poco sobre el tema.

Leyendo un poco sobre el tema nos enteraremos de que dependiendo de si instalas el sharepoint con el SP1 o si instalas el sharepoint y luego pasas el update estos ficheros pueden no estar actualizados y que hay que hacerlo a mano.

Y ahora lo solucionamos por la vía rápida: copiamos desde el directorio 3082 al 1033 todos estos ficheros nuevos:

  • FORM.JS
  • INIT.JS
  • CORE.JS
  • BFORM.JS
  • OWS.JS

Hacemos el IISRESET de rigor y a teclear.

Saludos.

Publicar un comentario

domingo, 3 de mayo de 2009

MCTS en todo lo que huela a MOSS

Esta es una de las razones por las que he estado un poco desconectado del foro y más cosas.

Por fin he encontrado tiempo para sacarme las certificaciones que me quedaban. Mira qué bonito queda ahora el logo.

MCTS en MOSS

Y yo me estaba preguntando ¿merece la pena hacer un post solo para contar esto que no le interesa a nadie más que a mi? y me he respondido: esto es lo mismo que hacerlo con Jessica Alba, que si no lo cuentas pierde el 90% de la gracia.

Saludos certificados,

Publicar un comentario

jueves, 30 de abril de 2009

Agregar Tipo de resultado y/o Restricciones de propiedades

Uf ya se me había olvidado cómo se llamaba el blog :)

No, en realidad es que he estado liado y un poco falto de inspiración ¿Cuándo he andado yo sobrao de eso? estos últimos dos meses. ¡¡DOS MESES!!

Bueno, a lo que voy.

Modificar el webpart Cuadro de búsqueda avanzado da un poco de miedo, pero la verdad es que si nos acostumbramos a su interfaz podemos lograr cositas muy interesantes con muy poco esfuerzo.

Por ejemplo:

Tengo un ámbito creado (MiAmbito) que contiene solo los elementos de una lista y dentro de esa lista tengo un metadato que se llama TextoLista que está dado de alta en las Asignaciones de propiedades de metadatos. ¿Podría añadir yo a mi sitio de Buscador avanzado un Tipo de resultado llamado “Mi lista” y una Restricción de propiedad específica para mi metadato “TextoLista”?

Pues nada más fácil.

Primero editamos el webpart Cuadro de búsqueda avanzado y abrimos el texto que se esconde en Propiedades—> Propiedades:

image

En la ventana que se nos abre podremos ver muy mal por cierto, mejor que trabajar ahí es hacer un c&p al visual studio un xml que (entre otras cosas) define las propiedades que estarán disponibles para los tipos de resultado <PropertyDefs> y los diferentes tipos de resultado que se mostrarán en el webpart de búsqueda <ResultTypes>

Bien pues a trabajar. Añadiremos nuestra propiedad “TextoLista” dentro de PropertyDefs para poderla usar luego.

<PropertyDefs>
<PropertyDef Name="Path" DataType="text" DisplayName="dirección URL"/>
<PropertyDef Name="Size" DataType="integer" DisplayName="Tamaño"/>
<PropertyDef Name="Write" DataType="datetime" DisplayName="Fecha de la última modificación"/>
<PropertyDef Name="FileName" DataType="text" DisplayName="nombre"/>
<PropertyDef Name="Description" DataType="text" DisplayName="descripción"/>
<PropertyDef Name="Title" DataType="text" DisplayName="Título"/>
<PropertyDef Name="Author" DataType="text" DisplayName="autor"/>
<PropertyDef Name="DocSubject" DataType="text" DisplayName="tema"/>
<PropertyDef Name="DocKeywords" DataType="text" DisplayName="palabras clave"/>
<PropertyDef Name="DocComments" DataType="text" DisplayName="comentarios"/>
<PropertyDef Name="Manager" DataType="text" DisplayName="jefe"/>
<PropertyDef Name="Company" DataType="text" DisplayName="compañía"/>
<PropertyDef Name="Created" DataType="datetime" DisplayName="fecha de creación"/>
<PropertyDef Name="CreatedBy" DataType="text" DisplayName="creado por"/>
<PropertyDef Name="ModifiedBy" DataType="text" DisplayName="modificado por última vez por"/>
<PropertyDef Name="TipoResolucion" DataType="text" DisplayName="Tipo de resolución"/>
</PropertyDefs>

Y por último añadiremos un nuevo ResultType dentro de ResultTypes, así:

<ResultTypes>
<ResultType DisplayName="Todos los resultados" Name="default">
<Query/>
<PropertyRef Name="Author" />
<PropertyRef Name="Description" />
<PropertyRef Name="FileName" />
<PropertyRef Name="Size" />
<PropertyRef Name="Path" />
<PropertyRef Name="Created" />
<PropertyRef Name="Write" />
<PropertyRef Name="CreatedBy" />
<PropertyRef Name="ModifiedBy" />
</ResultType>
<ResultType DisplayName="Documentos" Name="documents">
<Query>IsDocument=1</Query>
<PropertyRef Name="Author" />
<PropertyRef Name="DocComments"/>
<PropertyRef Name="Description" />
<PropertyRef Name="DocKeywords"/>
<PropertyRef Name="FileName" />
<PropertyRef Name="Size" />
<PropertyRef Name="DocSubject"/>
<PropertyRef Name="Path" />
<PropertyRef Name="Created" />
<PropertyRef Name="Write" />
<PropertyRef Name="CreatedBy" />
<PropertyRef Name="ModifiedBy" />
<PropertyRef Name="Title"/>
<PropertyRef Name="Manager" />
<PropertyRef Name="Company"/>
</ResultType>
<ResultType DisplayName="Documentos de Word" Name="worddocuments">
<Query>FileExtension='doc' Or FileExtension='docx' Or FileExtension='dot'</Query>
<PropertyRef Name="Author" />
<PropertyRef Name="DocComments"/>
<PropertyRef Name="Description" />
<PropertyRef Name="DocKeywords"/>
<PropertyRef Name="FileName" />
<PropertyRef Name="Size" />
<PropertyRef Name="DocSubject"/>
<PropertyRef Name="Path" />
<PropertyRef Name="Created" />
<PropertyRef Name="Write" />
<PropertyRef Name="CreatedBy" />
<PropertyRef Name="ModifiedBy" />
<PropertyRef Name="Title"/>
<PropertyRef Name="Manager" />
<PropertyRef Name="Company"/>
</ResultType>
<ResultType DisplayName="Documentos de Excel" Name="exceldocuments">
<Query>FileExtension='xls' Or FileExtension='xlsx' Or FileExtension='xlt'</Query>
<PropertyRef Name="Author" />
<PropertyRef Name="DocComments"/>
<PropertyRef Name="Description" />
<PropertyRef Name="DocKeywords"/>
<PropertyRef Name="FileName" />
<PropertyRef Name="Size" />
<PropertyRef Name="DocSubject"/>
<PropertyRef Name="Path" />
<PropertyRef Name="Created" />
<PropertyRef Name="Write" />
<PropertyRef Name="CreatedBy" />
<PropertyRef Name="ModifiedBy" />
<PropertyRef Name="Title"/>
<PropertyRef Name="Manager" />
<PropertyRef Name="Company"/>
</ResultType>
<ResultType DisplayName="Presentaciones" Name="presentations">
<Query>FileExtension='ppt'</Query>
<PropertyRef Name="Author" />
<PropertyRef Name="DocComments"/>
<PropertyRef Name="Description" />
<PropertyRef Name="DocKeywords"/>
<PropertyRef Name="FileName" />
<PropertyRef Name="Size" />
<PropertyRef Name="DocSubject"/>
<PropertyRef Name="Path" />
<PropertyRef Name="Created" />
<PropertyRef Name="Write" />
<PropertyRef Name="CreatedBy" />
<PropertyRef Name="ModifiedBy" />
<PropertyRef Name="Title"/>
<PropertyRef Name="Manager" />
<PropertyRef Name="Company"/>
</ResultType>
<ResultType DisplayName="Mi lista" Name="MiLista">
<Query>"scope"='MiAmbito'</Query>
<PropertyRef Name="DocSubject"/>
<PropertyRef Name="Path" />
<PropertyRef Name="Created" />
<PropertyRef Name="CreatedBy" />
<PropertyRef Name="ModifiedBy" />
<PropertyRef Name="Title"/>
<PropertyRef Name="TextoLista"/>
</ResultType>
</ResultTypes>

Aceptamos, aceptamos publicamos y probamos.

A mi me ha funcionado ¿y a ti?

Publicar un comentario

jueves, 26 de febrero de 2009

Asignar palabras como ruido (noise) en las búsquedas

Hay ocasiones en que no queremos permitir que se busque por una palabra determinada podemos decirle a SharePoint que esa palabra es ruido de forma que se la omita en las consultas que se realicen al motor y no devuelva nada.

Por ejemplo, no queremos que cuando alguien busque por el nombre de nuestro dominio "DOMAIN" se le muestren todas las páginas, ¿Qué hacer?

Nos vamos a C:\Archivos de programa\Microsoft Office Servers\12.0\Data\Office Server\Applications\<GUID>\Config y allí editamos el fichero noiseesn.txt añadimos al final la palabra DOMAIN (por cierto no es case sensitive) y guardamos.

Para que tenga efecto nuestra modificación hacemos un net stop osearch y un net start osearch y ya podemos probar. Con un poco de suerte obtendremos este resultado:

image

Prueba superada, y esto está bien, pero los diccionarios (thesaurus) son bastante más potentes, tengo que hacer otro post al respecto.

Editar el noiseneu.txt no parece tener ningún efecto se ve que hace realmente honor a su nombre y es neutral, una pena en los portales multiidioma...

Publicar un comentario

miércoles, 18 de febrero de 2009

xhtml 1.0 strict en SharePoint es posible

Tras pasar las validaciones WAI-AA y XHTML con el Total Validator y con el TAW me dispuse a pasarlas también con el validator del W3C, pero cuál sería mi sorpresa al darme cuenta de que precisamente con éste último no valida...

Tras decirle que me mostrase el código fuente me fijé en que el renderizado que estaba mandando SharePoint al validator.w3.org no era el mismo que el que mandaba a Explorer, Firefox, Opera, Safari etc. (Faltaba un "div"; debajo del "form" y, al no estar contenidos, todos los "inputs" se entendían como erróneos). Esto me hizo pensar en que debía añadir un "browser" específico para el "analizador".



Y tras un ratito charlando con mi amigo google encontré un par de browsers que, tras mezclarlos entre si quedaron:


<browser id="w3cValidator" parentID="default">
<identification>
<userAgent match="^W3C_Validator" />
</identification>
<capture>
<userAgent match="^W3C_Validator/(?'version'(?'major'\d+)(?'minor'\.\d+)\w*).*" />
</capture>
<capabilities>
<capability name="browser" value="w3cValidator" />
<capability name="majorversion" value="${major}" />
<capability name="minorversion" value="${minor}" />
<capability name="version" value="${version}" />
<capability name="ecmaScriptVersion" value="1.2" />
<capability name="javascript" value="true" />
<capability name="supportsCss" value="true" />
<capability name="tables" value="true" />
<capability name="xml" value="true" />
<capability name="w3cdomversion" value="1.0" />
<capability name="tagWriter" value="System.Web.UI.HtmlTextWriter" />
</capabilities>
</browser>


No fue suficiente, pero ya lo tuve fácil. Faltaba añadir en el web.config, debajo del <system.web>

<xhtmlConformance mode="Strict" />

Para finalizar, un leve toque de iisreset y listo.


A disfrutar del Congratulations!


Todo lo que podais porque entre unas cosas y otras dura poco

Publicar un comentario

jueves, 12 de febrero de 2009

Auto-Update del SQLServer Express ¡CUIDADO!

Sinceramente espero que esto sólo me haya pasado a mí en todo el mundo, pero me da en la nariz que el mundo es muy grande.

La última actualización (SP3 creo) del SQL Server Express que tengo en un servidor de desarrollo, albergando un SharePoint cómo no..., me ha borrado la instancia OFFICESERVERS con todas sus bases de datos y a cambio me ha creado una prístina instancia nueva llamada SQLEXPRESS.

Si instalaste SharePoint con el método "to p'alante" desconfía de las actualizaciones del SQL Server Express o te puedes encontrar con esto:

image

Luego dicen que el puenting quema adrenalina... Hombre de Dios, ¡desarrolla un poco para SharePoint y sabrás lo que es el miedo!

Publicar un comentario

miércoles, 28 de enero de 2009

Configurando el IFilter de Adobe para PDF en x64

Vaya, pues resulta que lo sacaron en diciembre del 2008 y ni me había enterado qué raro cuando yo estoy pulsando ctrl+f5 cada 10 segundos en la web de adobe por si acaso.

Ya había perdido la esperanza después de los años que han tardado, pero al final lo han sacado haciendo así realidad la peor pesadilla de los de Foxit que por muy bien que vaya no es gratis.

Sin más dilación paso a presentarles...

El tan esperado Adobe PDF iFilter 9 para plataformas de 64-bits

Voy a instalarlo a ver qué tal y os cuento.

... me lo bajo ... lo subo ... descomprimo ... doble click ... Math.Pow(Next,n) ... Close

Por otro lado me voy a la administración de búsquedas del SSP, Tipos de archivo y añado el PDF.

Paso de la henna de ponerle el iconito :P

Como siempre hago un Restablecer todo el contenido rastreado, por qué no, un un toquecito de iisreset y luego los consabidos net stop osearch, net stop spsearch, net start spsearch y net start osearch para luego hacer un rastreo completo y rezar mientras se completa.

Hago una búsqueda para probar y... nada :(

Me leo las instrucciones del ifilter y me dice que tengo que agregar al path el directorio bin, así que Panel de control, Sistema, Opciones avanzadas, Variables de entorno y a la Variable de sistema Path le añado al final ;C:\Archivos de programa\Adobe\Adobe PDF iFilter 9 for 64-bit platforms\bin

Para intentar ahorrarme el reinicio añado el path a mano, y vuelvo a crawlear, pero nada :(

La desesperación se apodera de mi y me decido a leerme las instrucciones, pero cual no sería mi sorpresa al darme cuenta de que el fichero de instrucciones que hay alojado en la página de Adobe conduce a un PDF que no se puede leer... bueno pues a buscar otro poco.

Despues de un ratito dando vueltas encontré en el blog de Alexander un señor muy respetable a juzgar por la foto, un link al dichoso manual colgando de un servidor que no es el de Adobe si no queréis ir os ahorro el viaje al blog Configuring PDF iFilter for MS Sharepoint 2007.pdf.

Vale, antes de nada hago una copia del registro que nunca está de más y sigo las instrucciones... y reestablezco y rastreo y rezo y nada :'(

Y ya claro, me termino por enfadar y como ya había hecho una copia del registro pues en un arrebato berserker me fui a la parte más alta del arbol del registro y desde allí me dediqué a buscar y reemplazar todas las apariciones de la cadena {4C904448-74A9-11D0-AF6E-00C04FD8DC02} por la que nos aconsejan en las instrucciones {E8978DA6-047F-4E3D-9C78-CDBE46041603}... y reestablezco y rastreo y rezo y ...

¡¡CONSEGUIDO!!

Pero el resultado de la búsqueda queda muy feo sin el iconito de PDF... venga se lo añado ¿En los demás frontends también? si, en todos.

Por cierto, para no tener problemas con los de Adobe más nos vale usar su iconito corporativo, lo podemos bajar de aquí.

Enhorabuena a los de Adobe que han sabido responder ágilmente a las súplicas de toda la comunidad, es una suerte que todavía no se haya inventado ninguna forma de escribir en el registro con un instalador y nos brinden la oportunidad de hacerlo nosotros manualmente. Enhorabuena también por el esmero que han puesto para regalarnos a los que no somos de los EEUU este acertijo extra ¿Os funciona sin hacer lo de el reemplazo en el registro?

Y mis condolencias a los de foxit.

Soy el peor... pa lo que me ha costao, encima con exigencias...

<edit>NOO00o, al día siguiente probé y no buscaba :( finalmente deshice el cambio de los guids y reinstalé el ifilter y sorprendentemente funcionó, esto me pasa por postear sin dejar pasar dos meses de garantía</edit>

Publicar un comentario

miércoles, 14 de enero de 2009

Un listado de SharepointWebControls

El otro día me volvió a pasar que no encontraba el nombre de un control para una columna de SharePoint al escribir un layout. Como es natural busqué un poco en los foros y me encontré con una entrada de Hezser sobre How to use the SharePoint Web Controls.


Qué pedazo de entrada... y encima, no es de esos que publica en su idioma, el tío lo hace en inglés para que todo el mundo pueda leerlo sin problemas, todos los bloggers deberían de aprender de él.

Esta tabla me ha servido además para lo que estoy haciendo hoy por lo que se la voy a plagiar, un poquito solo:

Columna tipo

Nombre del control

Una línea de texto

SharepointWebControls:TextField

Texto plano

SharepointWebControls:NoteField

Texto enriquecido

SharepointWebControls:RichTextField

Texto enriq. mejorado

SharepointWebControls:RichTextField

Menú desplegable

SharepointWebControls:DropDownChoiceField

Menú elección

SharepointWebControls:RadioButtonChoiceField

Número

SharepointWebControls:NumberField

Moneda

SharepointWebControls:CurrencyField

Fecha y hora

SharepointWebControls:DateTimeField

Búsqueda (simple)

SharepointWebControls:LookupField

Búsqueda (múltiple)

SharepointWebControls:MultipleLookupField

Sí/No

SharepointWebControls:BooleanField

Persona o grupo

SharepointWebControls:UserField

Enlace o foto

SharepointWebControls:UrlField

Calculado

SharepointWebControls:UrlField

En su sitio explica además cómo usarlos en C#, muy aconsejable, si señor.

Publicar un comentario

jueves, 8 de enero de 2009

Problemas rastreando listas grandes en Sharepoint

Las listas de SharePoint pueden contener, como todo el mundo sabe, millones de elementos sin despeinarse aro,aro, y a mi me tocó la lotería pero vengo a trabajar porque no se me ocurre donde gastarme el dinero.

Bien, pues pese a que hayas hecho una columna de índice y además hayas hecho una vista de tus elementos en la que salgan poquitos (no te canses SharePoint, tu no hagas esfuerzos, tenemos buenos comerciales), es posible que cuando hagas un rastreo completo de tu sitio te de un error y te diga en el Registro de Rastreo:

"Puede que el elemento sea demasiado grande o que esté dañado. Compruebe también si tiene la versión más reciente del iFiler."

Si, si y yo por si acaso busqué el iFiler, pero claro es que el que estaba haciendo el motor también metió la zarpita a la hora de escribir el mensaje de error y escribió mal iFilter... ¡Ay!

¿Pero qué es este error? 2300 elementos no pueden tumbar a un motor de búsqueda... En el entorno x86 daba error del webservice y lo pasamos a x64 y ni aún así...

¡¿QUÉ HAGO, QUÉ HAGO?!

Bueno pues haces un rastreo incremental y ya si funciona. Nos quejamos por vicio.

Ahora solo hay que tener en cuenta que si tienes que programar un rastreo incremental después del completo, porque parece que el incremental es más completo que el completo cuando se trata de rastrear y al pasar el completo te borra los resultados que el incremental te encuentra claro, muy coherente.

Bueno, pues mosqueo para ser el primer post del año, menos mal que por lo menos, al final funcionó.

Publicar un comentario