jueves, 17 de junio de 2010

Comandos STSADM

En muchos casos necesitamos ejecutar comandos STSADM y, a mí por lo menos, en más de una ocasión se me ha olvidado ir al directorio “C:\Archivos de programa\Archivos comunes\Microsoft Shared\web server extensions\12\BIN” antes de ejecutar el comando.

Para evitar esto (que a mí personalmente se me hace algo pesado) os propongo dos soluciones:

1. Crear un script

Una opción para no tener que introducir la ruta a mano es crear un ficheo de texto (.txt), introducir la siguiente línea

cd C:\Archivos de programa\Archivos comunes\Microsoft Shared\web server extensions\12\BIN

y renombrar este fichero a .bat.

Desde mi punto de vista, esto es bastante útil para introducirlo en scripts de despliegue para que los administradores de los servidores sólo tengan que hacer doble-click en un archivo.

2. Variables de entorno

La segunda opción es agregar la ruta (“C:\Archivos de programa\Archivos comunes\Microsoft Shared\web server extensions\12\BIN”) como Variable de Sistema. Esto permitirá que el comando stsadm.exe esté disponible desde cualquier ubicación.

Hacer esto es tan sencillo como:

  1. Pinchar con el botón derecho del ratón en Mi PC y después con el izquierdo en la opción "Propiedades".
  2. Seleccionar la pestaña "Opciones avanzadas" y pulsar en el botón "Variables de entorno".
  3. En la tabla "Variables del sistema" seleccionar la variable PATH y pulsar en el botón modificar.
  4. En el formulario que ha aparecido, pinchar en el segundo cuadro de texto "Valor de la variable", ir hasta el final y agregar la siguiente línea:

;C:\Archivos de programa\Archivos comunes\Microsoft Shared\web server extensions\12\BIN

Esta opción viene muy bien para las máquinas virtuales en las que desarrollamos y hacemos pruebas.

jueves, 10 de junio de 2010

Obtener valores web.config

En el archivo web.config se pueden guardar valores que nos convenga cambiar sin necesidad de actualizar DLLs ni tocar código. Para ello introduciremos una pareja clave valor en la sección appsettings como se muestra a continuación:


<appSettings>

<add key="Clave" value="Valor"/>

</appSettings>

Cuando necesitemos recuperar el valor introducido para esa clave sólo tendremos que poner la siguiente línea de código:


string valor = System.Configuration.ConfigurationManager.AppSettings[“Clave”];

lunes, 25 de enero de 2010

Delay Workflow Sharepoint - Hotfix

Llevo unos días dando vueltas a un flujo en el que tengo una actividad "Delay" dentro de otra de bucle While con el objetivo de ejecutar el flujo a una hora determinada que el usuario introduce pero esto no funciona. Lo primero que probé fue cambiar estas dos actividades por otra de código y utilizar:
System.Threading.Thread.Sleep(SleepTime);

Pero esto tampoco funciona. El flujo nunca sale de esa actividad, es como si muriera cuando termina el bucle... Ante esta situación me puse a buscar en Google y lo pimero que encontré fue el siguiente Hotfix:

http://support.microsoft.com/default.aspx?scid=kb;en-us;932394

Como había actualizaciones posteriores no se podía instalar pero, tras instalar el SP2 del framework 3.0 (que en teoría incluye este hotfix) siguió sin funcionar así que volví a Google pero lo que he encontrado esta vez no es muy alentador:

http://social.msdn.microsoft.com/Forums/en/sharepointworkflow/thread/2390dcee-d2f3-4a55-a024-6ad14913568e

¿Realmente Microsoft no ha sido capaz de sacar una solución para este problema en 3 años?

jueves, 19 de noviembre de 2009

Macro actualizar campos Ms Word

Algo muy común cuando usamos Sharepoint, sobretodo WSS para intranets, es tener plantillas de documentos con campos en los que se muestran algunos metadatos del ítem.

El otro día me comentó un cliente que estos campos no se actualizaban automáticamente y muchos usuarios guardaban el documento sin actualizar los campos, lo cual era un problema para ellos. La solución fue práctiacamente instantánea; una macro que actualice dichos campos al abrir el documento de forma automática:

 Dim rango As Range 
Dim campo As Field
For Each rango In ActiveDocument.StoryRanges
For Each campo In rango.Fields
campo.Update
Next campo
Next rango

Espero que os resulte útil.

Un saludo.

Subir archivos grandes a Sharepoint

El otro día me encontré con una migración de documentos de un gestor documental a Sharepoint. Sabía que por defecto, el tamaño máximo de los archivos que puedes subir es 50 mb pero a pesar de haber cambiado esto el proceso no funcionaba como debía. Buscando un poco vi que había que modificar un par de cosillas más y tras este cambio funcionó todo perfectamente.

Para poder subir arhivos grandes (en mi caso los más grande tiene unos 500 mb) hay que realizar otros dos cambios:

  • Incrementar el tiempo de espera de la aplicación en el IIS (en la pestaña sitio web, apartado conexiones).
  • Modificar en el web.config, dentro del apartado System.Web, los atributos executionTimeout y maxRequestLength de la etiqueta httpRuntime:



domingo, 25 de octubre de 2009

SPQuery no filtra, devuelve todos los elementos de la lista

Cuando usamos un objeto de SPQuery para filtrar elementos de una lista con el método GetItems(query) y éste nos devuelve todos los elementos de la lista no es porque el método falle sino porque nuestra consulta está mal.

Para construir las querys hay un programa muy útil de U2U llamado Caml Query Builder, pero hay que tener cuidado, ya que este programa devuelve la query incluyendo la etiqueta <query></query> y si queremos que la consulta funcione debemos quitarla, es decir, debería quedar así:


SPQuery query = new SPQuery();

query.Query = "Item1";

SPListItemCollection collItems = list.GetItems(query);

Un saludo.

miércoles, 23 de septiembre de 2009

Cómo escribir en el event log

Escribir una entrada en el event log es tan simple como:
System.Diagnostics.EventLog.WriteEntry("Source", "Message");

Si queremos usar esto para mostrar excepciones, podemos poner el siguiente código en lugar de "Message":

"Excepción: " + ex.Message

Saludos.