SSD: el síndrome de la Sharepoint dependencia

Sharepoint me proporciona seguridad y me hace sentir más fuerte. Las 10 cosas que más me gustan de Sharepoint.

10 puntos para entender a Project Server 2010

Microsoft Project es quizá la herramienta de gestión de proyectos más conocida y utilizada por los líderes de proyectos...

Diseño Gráfico en SharePoint

Serie de artìculos que nos ayudan a incorporar diseño gráfico en las implementaciones de SharePoint...

Revista CompartiMOSS

Artículos publicados en la revista especializada en SharePoint: CompartiMOSS.

Contacto

Enviame un correo :-)

Mostrando entradas con la etiqueta Listas. Mostrar todas las entradas
Mostrando entradas con la etiqueta Listas. Mostrar todas las entradas

miércoles, 2 de julio de 2014

Relaciones de Maestro Detalle en SharePoint 2007 con jQuery (simple y efectivo) [Parte 2]

Introducción
Un requerimiento que siempre surge en SharePoint tiene que ver con manejar relaciones de maestro-detalle. He visto y utilizado diferentes formas, con ventajas y desventajas que siempre dependen del escenario en que nos encontremos. En el artículo original mostramos un ejemplo para WSS 3.0 que utiliza programación del lado del cliente.

Si no leíste ese artículo, te recomiendo su lectura en: Relaciones de maestro detalle en SharePoint 2007.

Segunda parte
En esta segunda parte vamos a modificar uno de los 4 scripts, el del padre, para que soporte diferentes tipos de contenido en el hijo. A continuación el código (cambios resaltados):

<script type="text/javascript">

// Agregar esta CEWP debajo de la vista de la lista Padre


// Parámetros importantes

// Posición en que se encuentra la columna ID
var posicion_id = 3;
// Posición en que se encuentra la columna Tipo de Contenido
var posicion_tc = 4;
// Nombre de la lista hija
var lista_hija = "blabla";
// Texto para el botón o imagen
var texto_boton = "<img style='border: none;' src='/_layouts/images/itann.gif'/ title='Agregar ...' >";
// Estilo del botón nuevo
var estilo_boton = "";
// Título columna
var titulo_columna = "Agregar";
// Tipos de Contenido
var tipos_de_contenido = {
Proyecto:"0x010039837982075D1E4490A428B24D078C36", 
Programa:"0x01004B51B7C49BE3CE459ECEE01CACD0CF2F00C53AA5923F258A41A1C1A8354004CF68", 
Producto:"0x01004B51B7C49BE3CE459ECEE01CACD0CF2F00C53AA5923F258A41A1C1A8354004CF68"
};

// Fin de Parámetros importantes



// Id de ítem
var identificador;

// Tipo de Contenido
var tipo_contenido;

// URL del sitio
var sitio= window.location.href;
var origen = encodeURIComponent(sitio);
var posicion_listas = sitio.indexOf("Lists/");
sitio = sitio.substring(0, posicion_listas); 


// URL de nuevo elemento en el hijo
var nuevo_hijo = sitio + "Lists/" + lista_hija + "/NewForm.aspx?source=" + origen + "&padre=";


// Cambiar Título de columna
$(".ms-listviewtable > tbody > tr > th #diidSortID").text(titulo_columna);


// Cambiar columna
// Asumo que la lista usa la vista standar que posee la clase .ms-listviewtable
$(".ms-listviewtable > tbody > tr").each(function( index ) {  

// Obtengo el ID del elemento
identificador = $(this).find("td:nth-child("+posicion_id+")").text();

// Obtengo el Tipo de Contenido
tipo_contenido = $(this).find("td:nth-child("+posicion_tc+")").text();

// Cambio el ID por el botón nuevo
$( this ).find("td:nth-child("+posicion_id+")").html("<a style='" + estilo_boton + "' href='" + nuevo_hijo + identificador + "&ContentTypeId=" + tipos_de_contenido[tipo_contenido] + "'>" + texto_boton + "</a>") ;

}); 

</script>

miércoles, 11 de diciembre de 2013

Relaciones de Maestro Detalle en SharePoint 2007 con jQuery (simple y efectivo)

Introducción

Un requerimiento que siempre surge en SharePoint tiene que ver con manejar relaciones de maestro-detalle. He visto y utilizado diferentes formas, con ventajas y desventajas que siempre dependen del escenario en que nos encontremos. En este artículo vamos a mostrar un ejemplo para WSS 3.0 que utiliza programación del lado del cliente.

Funcionalidades que necesitamos

En esta lista detallo lo que necesitamos. A lo largo del artículo veremos cómo implementaremos cada caso:

· ¿Cómo vincular en las listas al padre y al hijo?

· ¿Cómo mostrar los hijos de un padre?

· ¿Cómo tener un botón que dispare la creación un hijo para el padre seleccionado?

· ¿Cómo crear un hijo sin tener que completar manualmente los datos del padre?

· ¿Cómo ocultar los datos del padre en el momento de editar el hijo?

¿Cómo vincular en las listas el padre y al hijo?

Para vincular, yo prefiero usar el campo ID del padre como referencia en el hijo. No creo que ese campo necesite ser de tipo “búsqueda”, con lo cual, simplemente creamos en el hijo un campo con estas características:

· Nombre = Padre (o lo que se adapte mejor a nuestro caso)

· Tipo = Texto

· Obligatorio

¿Cómo mostrar los hijos de un padre?

Una forma sencilla para evitar programación es usar las conexiones entre elementos web. Con lo cual, simplemente creamos una página de elementos web en donde:

· Agregamos en la parte superior una lista del padre

· Agregamos en la parte inferior la lista con los hijos

· Conectamos los dos elementos web, vinculando el ID del elemento web de arriba con el Padre del elemento web de abajo.

¿Cómo tener un botón que dispare la creación un hijo para el padre seleccionado?

Para disparar la creación de un hijo, vamos a agregar un botón llamado “Nuevo” en cada fila de la lista padre. Este botón puede ser simplemente un enlace. En principio existen al menos tres enfoques para agregar este botón:

· Mediante un flujo de trabajo

· Mediante un manejador de eventos

· Mediante código JavaScript

En este caso vamos a trabajar con código JavaScript. ¿Por qué? Porque las dos primeras opciones son asincrónicas y puede generar la necesidad de que el usuario tenga que actualizar la pantalla luego del alta del padre, para poder ver el botón “Nuevo”. Esto es difícil de explicar al usuario final.

Nuestro enfoque consistirá en:

· Un elemento web de edición de contenido (CEWP) que ejecute código Java Script que reemplace la columna ID por el nuevo botón.

· Para ello trabajaremos con jQuery

· El contenido de la CEWP lo almacenaremos en un archivo en una librería, para facilitar futuros cambios: maestro_dedalle_boton_nuevo.html

A continuación vemos el código necesario.

 

<script type="text/javascript">

// Agregar esta CEWP debajo de la vista de la lista Padre

// Parámetros importantes

// Posición en que se encuentra la columna ID

var posicion_id = 3;

// Nombre de la lista hija

var lista_hija = "Registros SP";

// Texto para el botón o imagen

var texto_boton = "<img style='border: none;' src='/_layouts/images/itann.gif'/ title='Agregar registro' >";

// Estilo del botón nuevo

var estilo_boton = "";

// Título columna

var titulo_columna = "Agregar";

// Fin de Parámetros importantes

// Id de ítem

var identificador;

// URL del sitio

var sitio= window.location.href;

var origen = encodeURIComponent(sitio);

var posicion_listas = sitio.indexOf("Lists/");

sitio = sitio.substring(0, posicion_listas);

// URL de nuevo elemento en el hijo

var nuevo_hijo = sitio + "Lists/" + lista_hija + "/NewForm.aspx?source=" + origen + "&padre=";

// Cambiar Título de columna

$(".ms-listviewtable > tbody > tr > th #diidSortID").text(titulo_columna);

// Cambiar columna

// Asumo que la lista usa la vista standar que posee la clase .ms-listviewtable

$(".ms-listviewtable > tbody > tr > td:nth-child("+posicion_id+")").each(function( index ) {

// Obtengo el ID del elemento

identificador = $( this ).text();

// Cambio el ID por el botón nuevo

$( this ).html("<a style='" + estilo_boton + "' href='" + nuevo_hijo + identificador + "'>" + texto_boton + "</a>") ;

});

</script>

En la imagen, podemos ver cómo se ve la lista antes y cómo se ve luego:

clip_image002

¿Cómo crear un hijo sin tener que completar manualmente los datos del padre?

Dentro de la pantalla NewForm vamos a realizar lo siguiente:

· Completar el valor del campo Padre

· Ocultar el campo Padre (la fila completa)

A continuación el código necesario:

<script type="text/javascript">

// Agregar esta CEWP en la parte de abajo de la pantalla NewForm.aspx

// Para que se abra el editor, utilizar ?toolpaneview=2

// Parámetros importantes

// Nombre del campo Padre

var campo_padre = "ID.";

// Fin de Parámetros importantes

// Completamos el valor del campo Padre

var valor_padre = url_param("padre");

$('input[title="' + campo_padre + '"]').attr("value",valor_padre);

$('input[title="' + campo_padre + '"]').parent().parent().parent().css("display","none");

// Función para leer un valor de parámetro de URL

function url_param ( name ){

name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");

var regexS = "[\\?&]"+name+"=([^&#]*)";

var regex = new RegExp( regexS );

var results = regex.exec( window.location.href );

if( results == null )

return "";

else

return results[1];

}

</script>

¿Cómo ocultar los datos del padre en el momento de editar el hijo?

Esto aplica tanto a la pantalla de edición, como a la pantalla de display. A continuación el código requerido:

Para la pantalla DispForm:

<script type="text/javascript">

// Agregar esta CEWP en la parte de abajo de la pantalla DispForm.aspx

// Para que se abra el editor, utilizar ?toolpaneview=2

// Parámetros importantes

// Nombre del campo Padre

var campo_padre = "ID_x002e_";

// Fin de Parámetros importantes

// Ocultar la fila

$('a[name="SPBookmark_' + campo_padre + '"]').parent().parent().parent().css("display","none");

</script>

 

Para la pantalla EditForm:

<script type="text/javascript">

// Agregar esta CEWP en la parte de abajo de la pantalla EditForm.aspx

// Para que se abra el editor, utilizar ?toolpaneview=2

// Parámetros importantes

// Nombre del campo Padre

var campo_padre = "ID.";

// Fin de Parámetros importantes

// Ocultar la fila

$('input[title="' + campo_padre + '"]').parent().parent().parent().css("display","none");

</script>

Conclusión

Hemos visto un método bastante simple y efectivo para crear relaciones de maestro detalle en SharePoint 2007. No requiere programación del lado del servidor y soporta cambios futuros a las listas al no requerir la programación de pantallas a medida.

Espero les resulte útil. Hasta la próxima.

miércoles, 9 de octubre de 2013

Trucos para vincular dos listas en SharePoint Designer

Les dejo un par de trucos para vistas sobre orígenes combinados de listas en SharePoint Designer. Si nunca armaron una de estas vistas, en este enlace pueden encontrar un paso a paso de cómo crearlas:

http://www.codeproject.com/Articles/194252/How-to-Link-Two-Lists-and-Create-a-Combined-Ciew-i

Truco 1: vincular dos listas a través de un campo de búsqueda

La forma más sencilla de hacerlo, sin meterse en XLST, es agregar el ID del elemento padre como columna a mostrar en el campo de búsqueda (nueva funcionalidad en SP 2010) y armar el join con ese campo. Este muy bien explicado en este enlace:

http://deannaschneider.wordpress.com/2011/11/11/joined-subviews-with-linked-datasources-in-sharepoint-2010/

Truco 2: vincular tareas creadas por un flujo de trabajo

¿Qué pasa si queremos mostrar las tareas asociadas a un ítem de lista creadas por un flujo de trabajo? En este caso se utiliza el campo WorkflowLink. ¿Pero cómo hacemos para desarmar este campo y que sólo me muestre el ID de la tarea? Con un poco de XLST, muy bien explicado en este artículo:

http://deannaschneider.wordpress.com/2012/07/25/joining-the-task-list-with-related-content-in-a-dvwp/

Espero les haya resultado útil. Hasta la próxima!

lunes, 29 de julio de 2013

Error al insertar o modificar un campo de búsqueda

En caso que resivan el siguiente error:

The list item could not be inserted or updated because invalid lookup values were found for the following field(s) in the list...

o

No se pudo insertar ni actualizar el elemento de lista porque se encontraron valores de búsqueda no válidos para el siguiente campo o campos en la lista:...

Una posible solución es quitar las opciones de integridad referencial del campo en la lista. Funciona bien.

En caso que esto no sea una solución para ustedes, existe un parche (que no he probado) disponible en: http://support.microsoft.com/kb/2687375

Más información en: http://answers.flyppdevportal.com/categories/sharepoint2010/sharepoint2010general.aspx?ID=fc14a846-403c-4abb-85c6-af27a1dee159

miércoles, 10 de julio de 2013

¿Cómo mostrar el campo ID en EditForm y DispForm en SharePoint 2007?

Insertando una CEWP que contenga el siguiente código:

<script type="text/javascript">

function MostrarIdItem() {

// Obtengo el ID de las URL
var regex = new RegExp("[\\?&]"+"ID"+"=([^&#]*)","i");
var query_string = regex.exec(window.location.href);
var item_id = query_string[1];

// Armo el HTML del campo ID
var TD1 = document.createElement("TD");
TD1.className = "ms-formlabel";
TD1.innerHTML = "<h3 class='ms-standardheader'>ID</h3>";
var TD2 = document.createElement("TD");
TD2.className = "ms-formbody";
TD2.innerHTML = item_id;
var fila_elemento = document.createElement("TR");
fila_elemento.appendChild(TD1);
fila_elemento.appendChild(TD2);

// Inserto el HTML
var item_tbody = GetSelectedElement(document.getElementById("idAttachmentsRow"),"TABLE").getElementsByTagName("TBODY")[0];
item_tbody.insertBefore(fila_elemento,item_tbody.firstChild);
}

_spBodyOnLoadFunctionNames.push("MostrarIdItem");

</script>

Fuente: http://blog.pathtosharepoint.com/2009/01/18/item-id-in-display-and-edit-forms/

viernes, 1 de febrero de 2013

¿Cómo extraer el CAML de una vista de SharePoint?

¿Alguna vez te interesó conocer cuál es el CAML que hay detrás de una vista creada en SharePoint en forma manual? Pues hay varias formas de hacerlo, pero una muy sencilla es a través de la siguiente URL:

http://SERVER/SITE/_vti_bin/owssvr.dll?Cmd=ExportList&List={GUID}&View={GUID}

Espero que te resulte útil. Aquí enlaces relacionados:





Validaciones de lista condicionales en SharePoint 2010

SharePoint 2010 nos permite realizar validaciones de algunas reglas de negocio gracias a la posibilidad de definir a nivel de lista o de columna, ciertas validaciones.

image

En este breve artículo veremos cómo resolver un requerimiento de validación particular:

Requerimiento

  1. No se realizan validaciones en el alta.
  2. Se realizan validaciones en la edición, basadas en el valor de campo 1.
    1. Si campo 1 no toma valor, es un error.
    2. Si toma valor “Yes”, entonces campos 2 y 3 deben tener valor.
    3. Si toma valor “No”, entonces campos 2 y 3 no deben tener valor.

Enfoque

  • Se trabajará con validaciones a nivel de lista, no de columna.
  • Se usarán validaciones de tipo IF para realizar controles condicionales
  • Se comparará la fecha de creación con la de modificación. Si es la misma, entonces se trata de un alta. En caso contrario se asume una modificación.

La fórmula

=IF(Created=Modified,TRUE,IF([campo 1]="Yes",IF([campo 2]<>"",IF([campo 3]<>"",TRUE,FALSE),FALSE),IF([campo 1]="",IF([campo 3]="",IF([campo 1]="",FALSE,TRUE),FALSE),FALSE)))

Espero les haya servido. Hasta la próxima!

martes, 9 de octubre de 2012

Filtros avanzados en Vistas en SharePoint

Les dejo algunos enlaces interesantes sobre manejo avanzado de filtros en SharePoint:


Filtros por rangos de fechas con FilterZen – Paso a paso

Hace un tiempo había mencionado el producto FilterZen (no es gratis) para habilitar filtros por rangos de fechas en nuestras listas en SharePoint 2007 en este post. Hoy vamos a ver un paso a paso para instalar una webpart de filtro por rangos de fechas. Esta funcionalidad es parte de la licencia Ultimate, que pueden ver en: http://roxority.com/filterzen-license/. Espero les resulte útil.

 

Paso 1: instalación

Descargamos el productos desde http://d2xb0ojpdnuh0h.cloudfront.net/roxority_FilterZen.zip y lo instalamos en el servidor de SharePoint. Podemos elegir la colección correspondiente.

 

Paso 2: configuración

A continuación vamos a enumerar los pasos para configurar un filtro por rango de fechas típico en donde queremos buscar aquellos elementos cuya fecha se encuentre en un rango. Para ello seguimos el siguiente instructivo: http://roxority.com/sharepoint-zen/sharepoint-value-range-filtering-the-new-simplified-way.html.

2.1 Agregar la webpart

El primer paso es agregar la webpart:

image

Una vez agregada, la misma aparecerá en este estado:

image

2.2 Conectar la webpart

Conectamos las webparts usando la opción “Send Filter Valurs To”:

image

2.3 Activar el modo CAML

Luego activamos la opción CAML Direct filtering mode:

image

Presionamos Aplicar y la webpart se verá de esta forma:

image

2.4 Agregar un filtro

En All Filters seleccionamos la columna por la que queremos filtrar y luego presionamos el botón “+”:

image

Luego, en opciones avanzadas seleccionamos la opción “range: >= x and <= y”:

image

2.5 Aplicar los cambios

Finalmente, aplicamos los cambios:

image

Y aplicamos las propiedades de la webpart. Obtendremos una webpart como la siguiente:

image

 

Paso 3: agregar más filtros

Para agregar más filtros, simplemente repetimos a partir del paso 2.4.

image

Y obtendremos algo como lo siguiente:

image

 

Paso 4: modificar los estilos

La modificación de estilos es muy sencilla, ya que puede ser realizada con CSS. Por ejemplo:

.rox-ifilter-all {
    background: none !important;
    border-color: #C1C3C5 !important;
}

.rox-ifilter-label {
    color: black !important;
}

.rox-filter-button {
    height: 23px;
    width: 66px;
}

En caso que quieran cambiar el texto del botón de filtrado, un método muy sencillo es usar jQuery:

$(".rox-filter-button").text('Filtrar');

Y así obtendrán algo como lo siguiente:

image

viernes, 10 de agosto de 2012

Ajustar ancho de columnas de SharePoint 2007 con jQuery

Probablemente se hayan encontrado con situaciones en donde las vistas estándar de listas de SharePoint no ajusten las columnas de la forma más adecuada a nuestras necesidades. A continuación les dejo un script en jQuery que permite ensanchar una columna en particular.

A tener en cuenta:
  • El script asume que la vista de la lista está en el elemento web con id "WebPartWPQ4"
  • Asume que la clase utilizada para el estilo de la vista es ".ms-summarystandardbody"
  • Asume que la columna a ensanchar es la 3 y que un 60% es aceptable
Pueden ajustar estos valores según sus necesidades o incluso crear una función más genérica.

Código jQuery:

function ajustar_estilo () {

    // Header
    $('#WebPartWPQ4 .ms-summarystandardbody .ms-viewheadertr th:eq(2)').css("width","60%"); 

    // Filas
      $('#WebPartWPQ4 .ms-summarystandardbody tbody > tr').each(function(index) {
        $(this).children("td").each(function(index2) {
            if (index2 == 2)  { 
                $(this).css("width","60%"); 
                }
               });
           });
}

Código a ser insertado en una CEWP:

<script type="text/javascript" src="/Internal/jquery142min.js"></script>
<script type="text/javascript" src="/Internal/ajustar_estilo.js"></script>

<script type="text/javascript">
 ajustar_estilo ();
</script>

Espero les resulte útil. Hasta la próxima!

lunes, 23 de julio de 2012

Ocultar columnas en base al valor de otra columna en SharePoint 2007

Introducción

En este breve artículo vamos a explicar cómo ocultar o mostrar columnas en base al valor que tome una columna en la pantalla NewForm.aspx. La solución la implementaremos a través de jQuery y JavaScript dentro de una CEWP (content editor webpart).

Comportamiento de la pantalla

Imaginemos que tenemos una pantalla de alta que posee una columna llamada “SiNo” y que dependiendo del valor de esa columna, queremos que se muestren u oculten otras columnas. Si el valor de la columna “SiNo” es “Si”, entonces queremos que la pantalla se vea de esta manera:

image

Pero si el valor de la columna “SiNo” es NO, entonces queremos que se oculte el campo “Eleccion” y se muestren los campos “Texto” y “Busqueda”

image

Enfoque de la solución

Para ello trabajamos con una solución que agrega un evento “click” en la casilla de verificación “SiNo”. Este evento oculta o muestra campos en base al valor de esta casilla.

Esta porción de código está realizada con jQuery y está basada en la idea de este artículo: http://www.codeproject.com/Articles/252468/Hide-column-in-SharePoint-custom-list-based-on-val

La forma de encontrar, ocultar y mostrar columnas en SharePoint se realiza a través de JavaScript, aprovechando los comentarios de SharePoint que indican los nombres internos de las columnas. Nos basamos en este artículo: http://www.cleverworkarounds.com/2008/02/28/more-sharepoint-branding-customisation-using-javascript-part-2/

Configuración del código

Para utilizar el código, podemos pegar el mismo en una CEWP o integrarlo dentro de alguna librería JavaScript. El código posee tres partes a configurar:

1. La indicación de cuál es el campo que nos permite decidir qué campos mostrar u ocultar. Debe ser un campo de tipo “Si/No”

image

2. La especificación de los campos a mostrar u ocultar cuando el valor es Si

image

3. La especificación de los campos a mostrar u ocultar cuando el valor es No

image

Código de la solución

Por último les dejo el código completo, espero les sea útil. Hasta la próxima!

<!--

Esta función oculta y muestra un conjunto de columnas de acuerdo al valor de un campo Si/No
Se aplica dentro de una CEWP en la página NewForm.aspx

Utiliza una variante de la función de CleverWorkarounds para ocultar y encontrar controles de SharePoint
http://www.cleverworkarounds.com/2008/02/28/more-sharepoint-branding-customisation-using-javascript-part-2/

Utiliz una variante de la función de CodeProject para agregar el evento click con jQuery a una columna Si/No
http://www.codeproject.com/Articles/252468/Hide-column-in-SharePoint-custom-list-based-on-val

Requiere jQuery

El código puede ser insertado dentro de una CEWP

-->

<script src="/internal/jquery-1.7.2.min.js">
</script>

<script type="text/javascript">

OcultarMostrarCondicional ('SiNo'); // Internal Name del campo de tipo Si/No que decide

/* Completar en esta función los controles a mostral u ocultar cuando la opción es SI */

function OcultarMostrar_Cuando_SI () {
ocultar_control('Texto');
ocultar_control('Busqueda');
mostrar_control('Eleccion');
}

/* Completar en esta función los controles a mostral u ocultar cuando la opción es NO */

function OcultarMostrar_Cuando_NO () {
mostrar_control('Texto');
mostrar_control('Busqueda');
ocultar_control('Eleccion');
}

/*************************************/
/* A PARTIR DE ACA NO MODIFICAR NADA */
/*************************************/

function OcultarMostrarCondicional (CampoSiNo) {

// Busco el campo Si/No que decide que campos ocultar y qué campos mostrar
var SiNo = retornar_id_control(CampoSiNo);

// Situación predeterminada de la pantalla
if($("#"+SiNo).is(':checked')) {
OcultarMostrar_Cuando_SI ();
}
else {
OcultarMostrar_Cuando_NO ();
}


// Agrego el evento click
$("#"+SiNo).bind('click',function() {

if($(this).is(':checked')) {
OcultarMostrar_Cuando_SI();
}
else {
OcultarMostrar_Cuando_NO();
}
});

}

function ocultar_control (FieldName) {
var arr = document.getElementsByTagName("!");
for (var i=0;i < arr.length; i++ ) {
if (arr[i].innerHTML.indexOf("FieldInternalName=\""+FieldName+"\"") > 0) {
arr[i].parentNode.parentNode.style.display="none";
}
}
}

function mostrar_control (FieldName) {
var arr = document.getElementsByTagName("!");
for (var i=0;i < arr.length; i++ ) {
if (arr[i].innerHTML.indexOf("FieldInternalName=\""+FieldName+"\"") > 0) {
arr[i].parentNode.parentNode.style.display="inline";
}
}
}

function retornar_id_control (FieldName) {
var arr = document.getElementsByTagName("!");
for (var i=0;i < arr.length; i++ ) {
if (arr[i].innerHTML.indexOf("FieldInternalName=\""+FieldName+"\"") > 0) {
return arr[i].parentNode.lastChild.firstChild.id;
}
}
}

</script>

martes, 12 de junio de 2012

¿Cómo ordenar un campo lookup por ID?

La respuesta nos la da Marcos Turrós en los foros, editando EditForm.aspx:
http://social.msdn.microsoft.com/Forums/es-ES/mossdeves/thread/3f31f461-da08-41e0-bad4-c1bf4b02bf7f
Espero les resulte útil!

sábado, 2 de junio de 2012

¿Cómo aplicar filtros en un campo lookup de SharePoint 2007?

El propósito de este artículo es hacer una demostración de aplicación de filtros en un campo lookup de SharePoint 2007. Para llevar adelante esta tarea trabajaremos con el proyecto de CodePlex llamado SharePoint Filtered Lookup Field que pueden acceder en este enlace: http://filteredlookup.codeplex.com/.

Las características descriptas en CodePlex para este proyecto son:

  • Lookup sobre listas que estén este sitio o en otros sitios de la misma colección
  • Filtro de datos utilizando vistas o CAML
  • Mismo look & feel que los campos estándar de SharePoint

Un punto importante a tener en cuenta es que este tipo de columna es adicional a los ya existentes en SharePoint, no se trata de una mejora al campo estándar. Por lo tanto, si lo que se quiere es aplicar los filtros en una lista ya existente, se necesita crear un campo nuevo y copiar los datos desde el campo viejo. Luego se puede eliminar el campo viejo.

En este enlace se puede encontrar información sobre la licencia de este producto: http://filteredlookup.codeplex.com/license

A continuación se detalla el paso a paso de instalación y uso.

Instalación

El proyecto está armado en un paquete de instalación de Windows que usa el instalador de soluciones de SharePoint. El primer paso es descargarlo desde: http://filteredlookup.codeplex.com/downloads/get/70292

image

Luego crear una colección de sitios de prueba y ejecutar el instalador:

image

image

image

image

image

image

 

Verificación de Instalación

Antes de empezar a utilizar el producto, verificar que esté correctamente instalado. Para ello crear una columna en una lista para verificar que exista este nuevo tipo de columna:

image

image

 

Configuración

Probar con un ejemplo sencillo. En este caso existen dos listas:

  • Una lista llamada Temas Pendientes (lista de tipo seguimiento de asuntos de SharePoint)
  • Otra lista de Clientes (con un campo estado que indica si el cliente esta activo o no)

La lista de tipo de Clientes posee 5 clientes, dos de ellos en estado inactivos:

image

Crear una vista que muestre únicamente los clientes activos:

image

En la lista de Temas Pendientes crear un campo fileteed lookup hacia la lista de Clientes, pero que únicamente muestre los clientes activos:

image

image

La configuración es tan sencilla como seleccionar la opción “Apply List View Filter” y luego elegir la lista de Activos.

 

Prueba de uso

Realizar una prueba: el primer paso es generar un alta en la lista de Temas Pendientes. Observar como sólo se muestran los 3 clientes activos:

image

image

Hacer clic sobre “Cliente 1” para probar su correcto funcionamiento:

image

Verificar qué sucede si Cliente 1 pasa a estado inactivo:

image

Al intentar modificar el tema pendiente que tenía asignado el tema 1, me permite modificar el registro con el Cliente que ahora está inactivo. Este era el funcionamiento que al menos yo esperaba:

image

Por supuesto si intento crear un nuevo tema pendiente, la opción de Cliente 1 ya no aparece:

image

Una prueba adicional es crear un vista que agrupe por este campo, para verificar que funcione de la misma forma que el campo estándar de SharePoint:

image

 

Conclusión

Ese proyecto de CodePlex permite agregar una funcionalidad muy necesaria en SharePoint, haciendo que las aplicaciones sean más amigables y permitan agregar algo de lógica de negocio. El producto funciona correctamente y es estable.

Personalmente, como contra le veo que utiliza un nuevo tipo de campo que no es el estándar de SharePoint, pero si pensamos que SharePoint ofrece la creación de este tipo de campos como forma de extender el estándar, no lo veo mal.

Por otro lado, el código fuente es público, lo cual siempre es importante, en caso que su autor discontinúe el mantenimiento del mismo o no brinde más soporte: http://filteredlookup.codeplex.com/downloads/get/70293.

También existe una versión para SharePoint 2010, que si bien escapa al alcance de este artículo su prueba de funcionamiento y su posibilidad de migración, da una idea de que es posible seguir usando el producto cuando cambiemos de versión: http://sp2010filteredlookup.codeplex.com/.

viernes, 24 de febrero de 2012

Tooltips para formularios de #SharePoint 2007 y 2010

Los artículos de Alexander no tienen desperdicio. En esta oportunidad nos brinda un solución para agregar tooltips a las campos de los formularios estándar de SharePoint. Gracias Alexander.

Les dejo el enlace: http://sharepointjavascript.wordpress.com/2012/02/24/form-field-tooltip-for-sharepoint-2007-and-sharepoint-2010/

lunes, 13 de febrero de 2012

viernes, 20 de enero de 2012

Pantallas dinámicas en #Sharepoint

¿Qué pasaría si las pantallas de alta y modificación de listas pudieran variar la obligatoriedad o visibilidad de sus campos de acuerdo a una condición?


Pues esto es lo que propone Alexander en su blog. Les dejo el enlace:
http://sharepointjavascript.wordpress.com/2012/01/19/dynamic-forms-for-sharepoint/

Qué lo disfruten!

miércoles, 16 de noviembre de 2011

Crear un ítem y redireccionar a la pantalla del ítem creado

Una pregunta bastante común en los foros es si es posible que luego de crear un ítem en una lista, SharePoint nos redireccione en forma automática a la pantalla DispForm o EditForm del ítem creado.

Si bien este no es el comportamiento estándar de SharePoint, otra ves Alexander Bautz (http://sharepointjavascript.wordpress.com) nos propone una solución que a continuación resumo:

  • Agregar una CEWP en NewForm para realizar el direccionamiento a la pantalla DispForm o EditForm.
  • Agregar una CEWP en la página DispForm que sólo se ejecuta cuando el ID es 0. Lo que hace es buscar el último elemento creado por el usuario y enviarnos a la pantalla correspondiente.

Un enfoque muy interesante que pueden descargar desde el blog del autor en http://sharepointjavascript.wordpress.com/2011/04/23/redirect-from-newform-to-dispform-or-editform/.

Espero les sea útil. Hasta la próxima!

Establecer o leer valores en las pantallas estándar de SharePoint

Una de las problemáticas más comunes que interesan resolver en SharePoint es cómo establecer u obtener un valor en las pantallas estándar de SharePoint sin romperlas. Nos referimos a estas pantallas:

  • NewForm
  • EditForm
  • DispForm

Existen algunos enfoques para realizar esto utilizando código JavaScript. Uno de los más nombrados es aquel sobre el que escribimos hace mucho en este artículo: http://surpoint.blogspot.com/2010/04/preseleccionar-u-ocultar-valores-en-las.html (data del año 2007).

Existe otro enfoque, que aún no he tenido tiempo de probar, pero que está desarrollado por Alexander Bautz (http://sharepointjavascript.wordpress.com), un astro de JavaScript, jQuery y SharePoint desde mi humilde punto de vista.

El enfoque que propone Alexander es muy interesante especialmente por las opciones que utilizan sus funciones:

  • getFieldValue
  • setFieldValue

image

image

Los invito a leer el artículo y probar esta herramienta que pueden encontrar en:

http://sharepointjavascript.wordpress.com/2010/05/28/get-or-set-value-for-sharepoint-field-in-newform-editform-and-dispform-get-only-in-dispform/

Espero que les sea útil. Hasta la próxima!

lunes, 27 de junio de 2011

Listas vs Excel vs InfoPath vs Access

¿Alguna ves tuvieron la inquietud de no saber si usar una lista. Excel, Access o InfoPath para encarar una implementación SharePoint? Es posible.

Si es así, les dejo este breve artículo proveniente de Sharepoint.Sharon, que incluye algunas reflexiones al respecto:

http://www.sharepointsharon.com/2011/06/managing-data/

Que lo disfruten, hasta la próxima!

image

Leer el artículo completo en: http://www.sharepointsharon.com/2011/06/managing-data/

lunes, 14 de marzo de 2011

Accordion for SharePoint forms v2.0

Para los seguidores de Alexander Bautz, ya tenemos disponible la nueva versión de este componente que nos permite agrupar columnas de SharePoint en secciones, tal como muestra la siguiente imagen:

Pueden acceder al código fuente y a las explicaciones de cómo utilizarlo en este enlace: http://sharepointjavascript.wordpress.com/2011/03/12/accordion-for-sharepoint-forms-v2-0/.

Transcribo las principales características:

Features
  • Full SP2007 and SP2010 support for both lists and document libraries
  • Works for all standard field types (Custom field types are not guaranteed to work)
  • A field can be used in multiple section
  • You can have a section displaying all fields
  • You can have a section catching all orphans (fields that are not displayed in any other section). Useful if one adds columns to a list without updating the script call.
  • Highlights section if a field fails validation upon save
Browser compatibility tested in:
  • IE6 (Works in SP2007 only due to SP2010 incompatibility with IE6)
  • IE7
  • IE8
  • Firefox 3.6.13
  • Google Chrome 8.0.552.237
  • Safari 5.0.2

Que les sea útil!!