Sunday, September 28, 2008

Validación de fechas en Forms

Situación
En un form de inserción de items en una lista, necesitamos validar que dos columnas con fechas sean correctamente ingresadas por el usuario (por ejemplo que EndDate no sea menor que StartDate).

Solución
Inspirado en las soluciones propuestas por Res Cogitans y por Autosponge y agregando una Content Editor Web Part oculta en la página NewForm.aspx (mediante el truco de agregar &ToolPaneView=2 al final de la URL)*, introducimos el siguiente código JavaScript:

<script type="text/javascript">
function PreSaveAction()
{

var date1 = getTagFromIdentifierAndTitle("INPUT","DateTimeFieldDate","StartDate");
var date2 = getTagFromIdentifierAndTitle("INPUT","DateTimeFieldDate","EndDate");
var arrDate1 = date1.value.split("/");
var useDate1 = new Date(arrDate1[2], arrDate1[1]-1, arrDate1[0]);
var arrDate2 = date2.value.split("/");
var useDate2 = new Date(arrDate2[2], arrDate2[1]-1, arrDate2[0]);
if(useDate1 > useDate2)
{

alert("La fecha EndDate no puede ser menor que StartDate");
return false; // Cancel the item save process
}

return true; // OK to proceed with the save item
}

function getTagFromIdentifierAndTitle(tagName, identifier, title)
{
var len = identifier.length;
var tags = document.getElementsByTagName(tagName);
for (var i=0; i < tags.length; i++)
{
var tempString = tags[i].id;
if (tags[i].title == title && (identifier == "" || tempString.indexOf(identifier) == tempString.length - len))
{
return tags[i];
}
}
return null;
}
</script>



Variante que valida que se registre una fecha futura y correspondiente a un dìa de la semana determinado, lunes en el ejemplo, dado que la función getDay() devuelve 1 para lunes, 2 para martes, ...:


<script type="text/javascript">
function PreSaveAction()
{
var date1 = getTagFromIdentifierAndTitle("INPUT","DateTimeFieldDate","StartDate");
var arrDate1 = date1.value.split("/");
var useDate1 = new Date(arrDate1[2], arrDate1[1]-1, arrDate1[0]);
var today = new Date();
var DiaSemana =useDate1.getDay();
if(DiaSemana != 1 || useDate1 < today)
{

alert("La fecha de inicio debe ser un Lunes futuro" + DiaSemana);
return false; // Cancel the item save process
}

return true; // OK to proceed with the save item
}

function getTagFromIdentifierAndTitle(tagName, identifier, title)
{
var len = identifier.length;
var tags = document.getElementsByTagName(tagName);
for (var i=0; i < tags.length; i++)
{
var tempString = tags[i].id;
if (tags[i].title == title && (identifier == "" || tempString.indexOf(identifier) == tempString.length - len))
{
return tags[i];
}
}
return null;
}
</script>


* El truco que menciono es el siguiente: clickear "New Item" sobre la lista con la cual se está trabajando. Sobre el final de la URL que muestra el browser, agregar &ToolPaneView=2... Magia! aparece la posibilidad de agregar web parts a la página!

Saturday, September 27, 2008

Crear Permisos de acceso customizados

Situación
Cuando se necesita que determinado grupo de usuarios pueda agregar documentos a una biblioteca o items a una lista, pero no que pueda editarlos o borrarlos. En otras palabras, los permisos standard que provee el sistema son en algún caso o muy restrictivos ("Read Only") o habilitan más cosas que las necesarias.

Solución
Se pueden definir "Niveles de Permisos" customizados y luego asignar uno de estos niveles a los grupo de usuarios que se necesite.
Tomando como ejemplo una lista a la cual queremos que un grupo pueda agregar items, debemos proceder del siguiente modo:

1) En Home/ Site Settings/ Permissions/ Permision Levels se puede seleccionar Edit Permission Level o New Permission level se define por ejemplo un nivel "AddToList" y se le asignan las opciones de Add items y Read items.

2) Una vez creado este nivel de permisos, se le asigna al grupo en el cual estamos interesados, ingresando en Home/ Site Settings/ People and Groups

3) Por último, en la lista a la cual queremos que ese grupo acceda, en List Settings/ List Permissions, agregamos el grupo, cuyos derechos aparecerán automáticamente asignados.

Tuesday, September 23, 2008

Menú de navegación con íconos y texto

Situación
Deseamos crear un menú de navegación con íconos "subtitulados".

Solución
La Content Editor Web Part nos habilita esta posibilidad. Se debe insertar una tabla HTML (se puede hacer usando el Rich Text Editor) que es la que contendrá un ícono y su respectivo texto en cada celda.

Para lograr el efecto de pasar el mouse sobre el ícono se resalte el texto bajo el mismo, el código dentro de cada celda de la tabla debe tener el siguiente formato:

_____________________________________________________________________________________

<TD width=150 height=121>
<STRONG>
<A title="" href="http://MyPagePath.aspx" target="">
<P align=center>
<IMG style="BORDER-RIGHT: 0px solid; BORDER-TOP: 0px solid; BORDER-LEFT: 0 px solid; WIDTH: 50px; BORDER-BOTTOM: 0px solid" src="http://MyImagePath.jpg" border=0>
</P>
<P align=center><STRONG>MYTITLE</STRONG></P>
</A>
<P align=center></STRONG>&nbsp;</P>
</TD>

____________________________________________________________________________________

Wednesday, September 17, 2008

SharePoint en Windows Vista!!!

Luego de trabajar algunas largas horas durante las noches, estudiando las distintas formas de instalar un ambiente de desarrollo para SharePoint en una PC, me decidí y logré instalar Windows SharePoint Services 3.0 en una laptop, con Windows Vista Business. Al momento no he avanzado mucho más en el uso del ambiente, pero la performance parece más que buena. Eso sí: obviamente Microsoft no soporta este tipo de instalaciones...

Para quien quiera intentarlo, transcribo los principales artículos y software en los que me basé:

Bamboo Solutions:

How to install Windows SharePoint Services 3.0 ...

(conviene leer atentamente todo el artículo antes de empezar a instalar, comentarios incluídos. TIP: se menciona en el artículo que el SQL Server es opcional, pero probablemente se trata de un error, dado que el instructivo está armado para usarlo).

Tambien comviene pegarle una mirada al siguiente artículo relativo a cómo instalar y configurar el SQL Sever:

Instrucciones para instalar SQLServer 2008 Express

En este proceso tuve que superar un error de instalación con la ayuda de este artículo, entre otros.

La secuencia para instalar el software en el equipo es la siguiente:

1) .NET Framework 3.5
2) Windows Installer 4.5
3) SQL Server 2008 Express

En este punto, se debe tener el WSS 3.0 ya bajado a disco, pero no intentar su instalación sino a través del:
4) Setup Helper de Bamboo Solutions

Si hay interés, puliré esta entrada brindando más detalles.

Monday, September 15, 2008

Regresar a una página específica luego de acceder a un Form de edición

Situación
Cuando accedemos desde un hyperlink insertado en una CEWP (Content Editor Web Part) de una web page a un formulario de agregado o edición de items de una lista, cuando el usuario clickea sobre "OK" o "CANCEL", por default SharePoint retorna a la vista default de la lista. A veces queremos que el navegador regrese a la página desde la cual partimos.

Solución
Para modificar este comportamiento default, sobre el final de la URL correspondiente al formulario de edición insertada en el hiperlink, hay que agregar lo siguiente:

?Source=mi página

Ejemplo de sintaxis:

http://MiDominio/sites/MiSite/Lists/ListaDePrueba/NewForm.aspx?Source=http://MiDominio/sites/MiSite/PaginasDelSite/PaginaPrincipal.aspx

OJO: ARMAR EL URL CON NOTEPAD Y LUEGO USAR RICH TEXT EDITOR para editar el hiperlink. SE DEBE ELIMINAR LA SECCION ?RootFolder Y LA DIRECCION DE RETORNO DEFAULT que aparece en la URL de la pàgina del Form de ediciòn.