Daniel Frigola
jueves, 31 de enero de 2013
Sharepoint & JavaScript. Validación formularios edición
Tenemos un formulario de creación o edición de elementos de lista y nos encontramos que queremos validar algunos de los valores introducidos en el navegador. Se podría realizar en el servidor con EventHandlers pero el usuario no es informado del error al ser una validación en el servidor posterior. ¿Cómo lo podemos validar en el navegador?
Una opción es insertar código Javascript y aprovechar que los formularios de edición de elementos de lista antes de gravar el valor buscan si existe la función PreSaveAction en la página y si existe se ejecuta. Solo gravará el elemento si esta función retorna cierto. Así que podemos insertamos código javascript en esta función para realizar nuestra validación personalizada.
Como ejemplo, la siguiente función que siempre retorna falso insertado en una página de edición de elemento de lista nos impediría que este sea gravado.
<SCRIPT>
function PreSaveAction()
{
return false;
}
</SCRIPT>
Este código puede ser insertado en la página editando esta y añadiendo un elemento web de editor de contenido. También es recomendable añadir una referencia a jquery que nos puede facilitar la localización del control y la validación.
Sharepoint 2010. El tamaño del contenido en detalle
Un problema habitual en Sharepoint es llegar al limite màximo recomendado de los 100GB para una base de datos de contenido. ¿Pero donde tenemos tanto contenido?
En la base de datos SQL podemos ver el tamaño de la base de datos de contenido, pero si estamos reduciendo contenido obsoleto vemos que el tamaño no se reduce, SQL se lo reserva para el siguiente contenido que almacenaremos.
Entonces vamos a mirar en Sharepoint a ver que es lo que nos detalla. En la administración central podemos ver el numero de col.lecciones de sitios que hay en la misma base de datos. Esta información la tenemos en Central Administration > Manage Content Databases. En esta página seleccionando la web application y nos informa de las bases de datos de esta y el numero de col·lecciones de sitios en cada base de datos. Si tenemos una base de datos muy grande con varias colecciones de sitios en esta entonces será recomendable crear una nueva base de datos de contenido y mover una de las colecciones a la nueva base de datos. (Se explicará en otro post como mover pero mientras podeis buscar Move-SPSite en Power Shell).
¿Pero que tamaño tienen las colecciones que queremos mover?
En Central Administration > Application Management > Site Collection Quotas and Locks podemos seleccionar una coleccion de sitios y nos muestra el tamaño que ocupa por un lado y tambien podemos poner como lectura la colección como paso previo al movimiento de base de datos si la queremos mover.
lunes, 7 de enero de 2013
PowerShell. Iniciar flujos en servidor Sharepoint.
En algunas ocasiones nos encontramos que hemos creado un nuevo flujo en una lista o biblioteca y lo queremos ejecutar para todos los elementos (pueden ser muchos) sin tener que ir elemento a elemento para iniciar manualmente.
Para resolver este problema lo podremos automatizar usando powershell. Iniciamos la consola y ejecutamos el siguiente codigo.
#Configuració
$NomLlistaWF = "Titulo de la lista o biblioteca";
$NomWorkflow = "Flujo a ejecutar";
en las dos lineas anteriores almacenamos en una variable los nombres de la lista o biblioteca donde tenemos el flujo y el nombre del flujo.
A continuación cargamos el modulo de sharepoint si no lo teniamos previamente cargado
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Sharepoint")
Y creamos en variables los objetos para el sitio (indicando la url del servidor), web (indicando url donde esta la lista) y la lista (que tomara el nombre configurado anteriormente). Tenemos que activar las modificaciones en el objeto web con AllowUnsafeUpdates.
$spsite = new-object Microsoft.SharePoint.SPSite("http://servidor");
$spweb = $spsite.OpenWeb("/UrlSubWeb");
$spweb.AllowUnsafeUpdates = $true;
$splist = $spweb.Lists[$NomLlistaWF];
A continuación cargamos en una variable el flujo que ejecutaremos para cada elelmento de la lista
# Administrador de Fluxes
$manager=$spsite.WorkFlowManager
$association=$splist.WorkFlowAssociations | where {$_.Name -eq $NomWorkflow}
$association.AllowAsyncManualStart = $true
$association.AllowManual = $true
Y para cada elemento de la lista iniciamos el flujo. Se ha incluido una espera (Start-Sleep) de 1 segundo por si se trata de listas o bibliotecas muy grandes no ejecutar demasiados flujos simultaneos. Este valor lo podremos ejecutar si son flujos muy grandes que requieren mucho tiempo en ejecutar o en llegar a una actividad de espera (aprovación, cambio de estado,...).
# Iniciar per tots els elements.
foreach ($item in $splist.Items) { Start-Sleep -s 1; $data=$association.AssociationData; $wf=$manager.StartWorkFlow($item,$association,$data); }
Una vez finalizado liberamos los objetos web y sitio
# Alliberar objectes
$spweb.Dispose();
$spsite.Dispose();
viernes, 4 de enero de 2013
PowerShell. Conversión de Date a String para Sharepoint
En alguna ocasión nos podemos encontrar que tenemos una variable fecha que queremos pasar a texto o un una fecha que después de operar en texto queremos guardar en un campo de SharePoint de tipo fecha y no se nos permite. Si tenemos alguna manera de usar PowerShell podemos usar
$fecha=[datetime]::Now.Date;
o
$fecha=Get-Date;
para obtener la fecha actual y esta la podemos pasar a texto para tratar en texto como
$FechaString=[string]$fecha;
También podemos querer usar una fecha fija
$fecha = Get-Date 4/8/2003
o obtener de un campo fecha de una lista o biblioteca
$fecha=$item['Fecha'];
Si guardamos una cadena de texto con la fecha en un campo SharePoint no nos va a permitir el formato anterior, tendremos que convertir la cadena a un formato valido. Por ejemplo para guardar en un campo fecha el día actual sin las horas, minutos y segundos le tendremos que indicar el siguiente formato
$fecha=Get-Date -uformat "%Y-%m-%dT00:00:00Z";
$item['Fecha']=[string]$fecha;
Si ya tenemos la variable tipo fecha en $fecha pero queremos mostrar como DD/MM/AAAA en lugar de usar en elemento SharePoint podemos realizar la siguiente transformación
$date=Get-Date $Fecha -uformat "%d/%m/%Y";
$FechaString=[string]$date;
Suscribirse a:
Entradas (Atom)