domingo, 30 de noviembre de 2008

Adjuntos en custom list forms de SharePoint Designer

Cuando hagamos un custom list form desde SharePoint Designer nos podemos encontrar con que los adjuntos de estos formularios dejan de funcionar.
Esto tiene solución siguiendo el artículo
http://support.microsoft.com/kb/953271 de la Knowledge Base de Microsoft.

Según el artículo, hay que tener actualizado el SharePoint con la Infrastructure Update. Esto es muy importante ya que sin esta actualización, aunque hagamos las sustituciones de código que propone el artículo, los adjuntos seguirán sin funcionar.

He testeado esta solución en diferentes entornos y ha funcionado perfectamente así que, si tenéis problemas con los adjuntos en vuestros formularios hechos en SharePoint Designer, no dudéis en seguir los pasos que en se indican.

viernes, 31 de octubre de 2008

MOSS 2007 y el modificador 3GB del boot.ini

Hola,

En uno de los proyectos en los que he estado trabajando se activó en el servidor de SharePoint el modificador /PAE del boot.ini, acompañado del modificador /3GB para aprovechar toda la memoria de que disponía el servidor.

A priori todo parecía funcionar correctamente hasta que al cabo de un tiempo empezamos a notar un extraño comportamiento: los archivos adjuntos de listas y document libraries no siempre se abrían correctamente, provocando un error 404 (Page Not Found).

Después de investigar un poco más el rendimiento del servidor con mis compañeros, descubrimos que se quedaba sin entradas libres en la tabla de páginas y, en ese momento, se empezaba a dar esa situación.

La solución a este problema la encontramos en http://support.microsoft.com/kb/823440 dónde se explica que, en caso de activar el modificador /3GB, hay unos ciertos valores recomendados en el modificador /USERVA. Seguimos estas indicaciones, reiniciamos el servidor y se solucionó.


Si algún día tenéis la necesidad de modificar el boot.ini, en http://support.microsoft.com/kb/317526 tenéis los pasos a seguir.

Espero que os sea de utilidad!

domingo, 31 de agosto de 2008

Error HRESULT 0x80040E14 al aprobar items de listas de SharePoint 2007

Al aprobar ítems de listas de SharePoint puedes encontrarte con el error HRESULT 0x80040E14.

A falta de una investigación más exhaustiva, los primero que se debe verificar y que suele ser la causa del error es la activación del versionado en la lista.
Para ello, simplemente hay que acceder a la configuración de la lista y, en "configuración de versiones", poner la opción "¿Desea crear una versión cada vez que edite un elemento de esta lista?" en no.

De todas formas hay que seguir investigando soluciones (se admiten comentarios) ya que si volvemos a activar la creación de versiones en la lista volveremos a tener el mismo problema.

Espero que os sirva de ayuda.

martes, 15 de julio de 2008

Función Javascript para acceder a los campos de un formulario SharePoint

A veces es necesario editar los formularios, master pages, page layouts, etc. de SharePoint y para realizar alguna operación en ellos. Si este es el caso y lo que se necesita es acceder a algún campo de un formulario de SharePoint mediante javascript, basta con utilizar esta función:

function getTagFromIdentifierAndTitle(tagName, identifier, title) {
var len = identifier.length;
var tags = document.getElementsByTagName(tagName);

for (var i=0; i <>
var tempString = tags[i].id;
if (tags[i].title == title && (identifier == "" || tempString.indexOf(identifier) == tempString.length - len)) {
return tags[i];
}
}
return null;
}

Llamando a esta función, indicando el tipo de tag que queremos recoger, su id y su título obtendremos el objeto y podremos realizar las operaciones necesarias sobre él, mediante Javascript.

Por ejemplo, supongamos que tenemos una textarea en un formulario, la cual queremos ocultar mediante javascript:
<textarea title="dataInicial" id="dataIni" name="TextArea1" cols="20" rows="2"></textarea>
para obtener el objeto textarea tendremos que llamar a getTagFromIdentifierAndTitle de la siguiente manera:
var textAreaDataIni = getTagFromIdentifierAndTitle("textarea", "dataIni", "dataInicial");
y para hacer que no se muestre:
textAreaDataIni.style.display = "none";

Más información aquí.

Espero que os sirva de ayuda!

jueves, 26 de junio de 2008

Cómo adjuntar zips a SharePoint vía API y que se puedan abrir

Hace unos días comentaba los problemas de apertura y acceso al contenido de los zips adjuntados en ítems de lista de SharePoint.
Pues bien, aquí está la solución encontrada que hace que se puedan abrir correctamente y acceder a su contenido tanto con WinZip como con WinRar:
string ficheroDatos = "C:\file.zip";
FileInfo fInfo = new FileInfo(ficheroDatos);
FileStream fStream = fInfo.OpenRead();
byte[] contents = new byte[fStream.Length];
fStream.Position = 0;
fStream.Read(contents, 0, (int)fStream.Length); //leemos todo su contenido en un array de bytes content
fStream.Close();
li.Attachments.Add(ficheroDatos, contents); //en la variable li tenemos el list item al que adjuntar el zip
li.Update();

De este modo no habrá problemas al abrir los zips adjuntos a los SPListItems de SharePoint.

lunes, 23 de junio de 2008

Error accediendo a Reporting Services en SQL Server 2005

Si alguna vez os encontráis con el error "The file you are attempting to save or retrieve has been blocked from this Web site by the server administrators" (en castellano "Los administradores de este servidor han bloqueado en este sitio Web el archivo que intenta guardar o recuperar") intentando acceder a Reporting Services desde SQL Management Studio puede deberse a un problema de configuración.

Antes de nada, intentad solucionarlo desde la herramienta de configuración de Reporting Services, verificando que tenéis acceso al servidor y que la cuenta de acceso tiene acceso a Reporting.

Aún así, es posible que os encontréis con que os sigue dando el error. En este caso, la causa puede ser una mala configuración del tag UrlRoot en el archivo rsreportserver.config.
Para solucionarlo, basta con abrir el archivo rsreportserver.config (que podéis encontrar en el path C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\rsreportserver.config) y corregir el valor del tag UrlRoot por el mismo, por ejemplo, que utilizáis para implementar los reports desde Visual Studio y que está visible desde las propiedades del proyecto.

En mi caso, tuve que editar la URL de URLRoot para que apuntase al puerto de Reporting, con esto se ha corregido el problema.

jueves, 19 de junio de 2008

Error abriendo zips almacenados en SharePoint

En esta ocasión quiero comentaros un problema que me he encontrado con los zips almacenados en listas y librerías de documentos de SharePoint.

Si se sube un fichero zip a través de la interfaz de adjuntar/cargar documentos de SharePoint, éstos se pueden abrir y descomprimir sin problema.
En cambio, si se hace la carga de documentos en SharePoint mediante la API o los Webservices (procedimiento normal para migraciones o cargas masivas) los ficheros quedan corrompidos y, dependiendo el programa que se use para abrirlos, obtendremos un resultado u otro:

  • WinZip no permitirá abrirlos, mostrando un error.
  • WinRar permitirá abrirlos, pero no descomprimirlos o acceder a su contenido y, si ejecutamos la verificación del fichero que ofrece WinRar, dirá que no es correcto.
Actualmente estamos estudiando este caso y os notificaremos los avances.

ACTUALIZACIÓN: Encontrada la solución al problema es cuestión, código fuente incluído.

lunes, 16 de junio de 2008

Error usando BeforeProperties en un EventHandler ItemUpdating

Si estáis haciendo un event handler de tipo itemUpdating (es decir, que se ejecuta durante la actualización de los elementos de una lista) os encontraréis con que podéis usar la propiedad AfterProperties para obtener los nuevos valores del ítem, pero no BeforeProperties para obtener los nuevos valores.

La solución es acceder directamente al ListItem para obtener los valores que tenía el ítem antes de la actualización.

Por ejemplo, esto se podría necesitar si se quiere poner valor3 en el campo2, cuando el valor de campo1 pase de valor1 a valor2 (yo he necesitado algo similar en un cliente).
En este caso habría que hacer algo parecido a esto:

public override void ItemUpdating(SPItemEventProperties properties)
{

if (properties.AfterProperties["campo1"]=="valor1" && properties.ListItem["campo1"]=="valor2")
{
//Hacer las operaciones correspondientes
properties.AfterProperties["campo2"] = "valor3";
}
}

sábado, 31 de mayo de 2008

Campos que no aparecen en custom layouts de SharePoint Designer

Estos días un compañero de Raona se encontró con un problema, estaba haciendo un custom layout con SharePoint Designer pero algunos de los campos no se dibujaban, sin seguir ninguna lógica aparente.

Después de darle un par de vueltas, nos dimos cuenta de que el problema está en los nombres que utiliza SharePoint Designer, ya que se limita a codificar el nombre del campo por completo (que debe corresponder con el InternalName del campo) pero el Internal Name tiene una longitud limitada a 32 caracteres que se puede ver desbordada por la sustitución de los espacios y caracteres extraños por la codificación del tipo _x0020_

Conclusión: con una pequeña aplicación de consola que te extraiga el InternalName del campo podrás solucionar esta situación, corrigiéndolo luego en SharePoint Designer:
SPSite site = new SPSite("http://miservidor");
SPWeb web = site.OpenWeb();
SPList list = web.Lists["nombreLista"];
SPField fld = list.Fields["campo"];
System.Console.WriteLine(InternalName: + "fld.InternalName");

Raona presenta el SharePoint Day en Barcelona

martes, 29 de abril de 2008

Examen 70-631 "MCTS: Windows SharePoint Services 3.0 - Configuring" también superado!

Pues sí, tal como anuncia el título del post esta mañana he superado con éxito el examen 70-631 sumando una nueva certificación para mi y para Raona

Con esto ya tengo las certificaciones a nivel de configuración de SharePoint, ahora hay que ir a por las de desarrollo.

domingo, 27 de abril de 2008

Ocultar campos en SharePoint 2007

Una de las cosas que se echa de menos en MOSS 2007 es la no existencia de seguridad a nivel de campo (Field) pero, al menos, existe la posibilidad de decidir si un campo se muestra o no en los formularios de las listas.

Para ello disponemos de una serie de atributos que definen si un campo debe ser visible en los formularios de New, Edit, Display y en el historial de versiones, aunque no son modificables a través de SharePoint directamente, sino que deberemos recurrir a la API.

Supongamos que queremos ocultar el campo "nombreCampo" de la lista "nombreLista" a los usuarios lectores pero que siendo posible editar su contenido, el código sería como sigue:

//Creamos el site

SPsite site = new SPSite("http://miservidor");


//Abrimos el objeto web

SPWeb web = site.OpenWeb();

//Cogemos la lista en la que queramos ocultar los campos
SPList list = web.Lists["nombreLista"];

//Cogemos el campo de la lista a ocultar
SPField field = list.Fields["nombreCampo"];

//Seteamos las propiedades del campo
field.ShowInDisplayForm = false; //El campo no se mostrará en el formulario de display de los ítems
field.ShowInEditForm = true; //El campo se mostrará en el formulario de edición de ítems
field.ShowInNewForm = true; //El campo se mostrará en el formulario de nuevos ítems
field.ShowInVersionHistory = false; //El campo no se mostrará en el historial de versiones
field.ShowInListSettings = true; //El campo se mostrará en la configuración de la lista

//Actualizamos el campo
field.Update();


Una forma sencilla de decidir en qué formularios son visibles determinados campos, eso sí, no hay que olvidar hacerlo para todas las listas en las que el campo esté presente.

lunes, 14 de abril de 2008

Examen "70-630 - TS: Microsoft Office SharePoint Server 2007, Configuring" superado!

Para empezar con el blog decir que el Viernes superé con éxito el examen 70-630 (TS: Microsoft Office SharePoint Server 2007, Configuring) con lo que ya soy MCTS en Microsoft Office SharePoint Server 2007 - Configuration. Una certificación más dentro de la gran cantidad de certificaciones de Raona.

Ahora creo que empezaré a preparar el 70-631 (TS: Windows SharePoint Services 3.0, Configuring).

Saludos!