viernes, 14 de diciembre de 2012

Cómo recuperar elementos web de una página de SharePoint

En mi trabajo diario, en la parte de soporte. Hay un problema que es recurrente. Generalmente, tenemos clientes que son colaboradores o propietarios de la solución y se dedican a añadir contenido, editarlo y/o eliminarlo.

Pero muchas veces, por desconocimiento o por descuido, hacen clic sobre la opción Cerrar de un Elemento Web:


Y la llamada más común, es para decirme que no saben como, pero les ha desaparecido de tal página el componente. Entonces, me sonrió para mí y les pido un momento.

Accedo al sitio en cuestión, por ejemplo:
http://misitio/default.aspx

Y añado:
?contents=1

Quedando:
http://misitio/default.aspx?contents=1

Y esto nos llevará a una página de administración, similar a:


Donde podremos detectar ese componente que se ha escondido, ya que será el que tenga valor a NO, en la columna ¿Abrir en la página?.

Para hacer que vuelva a aparecer, bastará con seleccionar su cajetilla que hay a la izquierda y elegir la opción Restablecer:


Cuando volvamos a la página en cuestión, veremos que nuestro elemento ha vuelto a aparecer.

Si no es así, puede ser que haya algo en nuestro SharePoint que no este bien (Ya me ha pasado en un cliente) y la alternativa sería, abrir el espacio con SharePoint Designer.

Será fácilmente detectable la zona en cuestión, ya que en la vista en Diseño, será el que se presente como traslucido:



Bastaría con hacer clic con el botón derecho sobre esa zona y seleccionar Propiedades de elementos Web:


Y en la ventana que se nos abre, deberemos desmarcar la opción Cerrar el elemento Web y tras Aceptar en esa ventana y guardar todos los cambios, podremos ver como hemos recuperado dicho Elemento Web:



Si nuestro Elemento Web, no aparece en ninguna de estas dos opciones, será porque nuestros usuarios lo habrán eliminado de la pagina. Y eso es otro caso...

sábado, 24 de noviembre de 2012

Recordatorio de vencimiento de tareas (II)

En una entrada anterior, ya aborde este tema:
http://sharepointyamigos.blogspot.com.es/2012/07/recordatorio-de-vencimiento-de-tareas.html

En dicha entrada comente:
Esto se debe a que el evento que lanza el flujo es la creación de la tarea (la opciones posibles son manual, creación del elemento y/o modificación del elemento) y no una fecha.
Esto es cierto, pero hay una manera de conseguir que una lista y/o una biblioteca lancen un flujo en una fecha determinada.

Por medio de la Configuración de la directiva de administración de la información, para ello, lo primero que deberemos hacer, es acceder a la configuración de la lista o biblioteca:


Y en la ventana que nos redirigirá, buscaremos la columna Permisos y administración. Donde encontraremos la opción deseada:



Y comenzaremos a Definir una directiva:



En la ventana que nos redirigirá, deberemos Habilitar la Caducidad:


Al hacerlo, veremos como nos aparecen una serie de opciones:


Donde nos permitirá jugar con los campos de tipo fecha que haya en la lista o biblioteca, lo cual será nuestra condición para lanzar los flujos. 

En nuestro caso, tenemos una columna de tipo fecha (Fecha envio), que es directamente la fecha en la que queremos que se lance nuestro flujo. Con lo cual, nosotros sumaremos 0 días a dicha fecha.

Y lo siguiente que haremos será establecer la acción (Enviar correo), que en nuestro caso será un flujo asociado a esta lista o biblioteca, que simplemente envía un correo. Creado con SharePoint Designer.

Pero lo que será importante sera dejar desmarcadas las opciones de Iniciar automáticamente cuando se creen un nuevo elemento y cuando se cambie un elemento, para evitar que el flujo se lance también cuando creemos o modifiquemos elementos: 


Con esto conseguiremos que se envié el correo en la fecha señalada, sin necesidad de dejar flujos en espera en el servidor. El evento que lanzará el flujo será un campo de tipo fecha.



sábado, 20 de octubre de 2012

Jugando con las fechas en XSL

Muchas veces en las vistas de datos o consultas de contenido. Si utilizamos SharePoint Designer e introducimos una fecha, lo hacemos de la manera:

<xsl:value-of select="@Date"/>

Dándonos como resultado una fecha como:

2015-10-23T01:10:00Z

Casi seguro, este no será el formato deseado en el que queremos que nos muestre la fecha. Afortunadamente tenemos la función ddwrt:FormatDate que nos permitirá formatear la fecha a nuestra conveniencia.

La manera de utilizarla es muy sencilla. Bastará con poner:

<xsl:value-of select="ddwrt:FormatDate(@Date, 3082, 1)"/>


Dando lugar al formato:

23/10/2012

Para conseguir esto, deberemos asegurarnos que en la cabecera hemos hecho la declaración al espacio de nombre:

xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime

Quedando nuestra cabecera de la siguiente manera:

<xsl:stylesheet 
  version="1.0" 
  exclude-result-prefixes="x d xsl msxsl cmswrt"
  xmlns:x="http://www.w3.org/2001/XMLSchema" 
  xmlns:d="http://schemas.microsoft.com/sharepoint/dsp" 
  xmlns:cmswrt="http://schemas.microsoft.com/WebParts/v3/Publishing/runtime"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"
  xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime">
    
    <xsl:template name="Default" match="*" mode="itemstyle">
<xsl:value-of select="ddwrt:FormatDate(@Date, 3082, 1)"/>
    </xsl:template>
   
</xsl:stylesheet>

Alguno ejemplos de formatos serían:

1    23/10/2015
2    10/23/2015 1:10 AM
3    viernes, 23 de octubre de 2015
4    3:10
5    23/10/2015 3:10
6    10/23/2015 1:10 AM
7    viernes, 23 de octubre de 2015 3:10
8    10/23/2015 1:10 AM
9    10/23/2015 1:10 AM
10  10/23/2015 1:10 AM
11  10/23/2015 1:10 AM
12  3:10:00
13  23/10/2015 3:10:00
14  10/23/2015 1:10 AM
15  viernes, 23 de octubre de 2015 3:10:00

Y alguno de los lcid que nos podrían interesar serían:

1033  Inglés Estados Unidos
2057  Inglés Reino Unido
1036  Francés Francia
1031  Alemán Alemania
1040  Italiano Italia
2070  Portugués Portugal
1027  Catalán
1110  Gallego
1069  Euskera

Para lcid del resto de paises se puede consultar la siguiente página:
https://support.microsoft.com/es-es/kb/221435

Fuentes:
http://blogs.msdn.com/b/joshuag/archive/2009/03/25/custom-date-formats-in-sharepoint-xsl.aspx
https://panvega.wordpress.com/2008/12/08/ddwrtformatdate-with-different-formatflags/
https://msdn.microsoft.com/es-es/goglobal/bb964664.aspx

viernes, 21 de septiembre de 2012

SharePoint no siempre me deja ver a YouTube

En algunos proyectos, ya me ha pasado, que los clientes tienen vídeos en YouTube y nos piden que los mostremos en sus Intranets.

Las opciones para esto, van desde incluirlas en un Editor de Contenido, hacer una Vista de Datos, si es un listado de vídeos, etc..

El problema es que YouTube, como todo en esta vida, se ha modernizado (Por HTML5) y si intentamos insertar un vídeo con el código que nos proporcionan, tendremos algo como:

<iframe width="420" height="315" src="https://www.youtube.com/embed/Tn58-Nl9NYw" frameborder="0" allowfullscreen></iframe>

El problema es que algunas versiones de SharePoint, no permiten que pongamos iframe en editores de contenido. Para ello, la solución, es utilizar el viejo código de inserción, que es de la forma:

<object width="420" height="315">
<param name="movie" value="http://www.youtube.com/v/
Tn58-Nl9NYw?version=3&amp;hl=es_ES" />
<param name="allowFullScreen" value="true" />
<param name="allowscriptaccess" value="always" />
<embed src="http://www.youtube.com/v/
Tn58-Nl9NYw?version=3&amp;hl=es_ES" type="application/x-shockwave-flash" width="420" height="315" allowscriptaccess="always" allowfullscreen="true"></embed>
</object>


He remarcado con negrita, la partes que deberíamos "rescatar" del nuevo código, para ponerlo en el viejo y que nos mantuviera el ancho, el alto y el vídeo en cuestión.

Y con esto, magia, todo vuelve a verse...

viernes, 17 de agosto de 2012

SharePoint modifica mi código

Más de una vez veréis que en SharePoint al añadir un editor de contenido y ponéis código HTML en él.

Y tras guardar, no aparece lo que se supone que debiera aparecer. Volvéis a editarlo y descubrís que mágicamente, el código ha cambiado.

No, no es magia es SharePoint. El truco del día, no es gran cosa. Consiste en darle una vuelta de tuerca.

Poned ese código en un editor (Bloc de notas, Notepad++, etc...) y lo guardais como archivo. La extensión del archivo puede ser txt, html, css, js,... Eso dependerá de si estáis escribiendo un texto, estilos, javascript,...

Subimos ese archivo a una biblioteca de SharePoint (recomendable que no sea una biblioteca de trabajo de los usuarios. De hecho, yo modificaría los permisos de la biblioteca, dejando a todo el mundo permiso de lectura, salvo a los desarrolladores).

Y en el editor de texto utilizaremos el campo de Vínculo de contenido donde pondremos la URL de nuestro documento en el portal:



Y ya no volveremos a tener este problema.

lunes, 30 de julio de 2012

Recordatorio de vencimiento de tareas

Hoy me han planteado una duda sencilla. Tenían una lista de tareas de SharePoint en un MOSS y querían que se enviará un correo X días antes del vencimiento de la tarea, recordando el vencimiento de la misma. Siendo X un número de días que se pudiera determinar por el usuario.

Entonces para ello he creado una nueva columna en la lista que fuese Días de preaviso de tipo número, donde el usuario fijará el número de días antes que quiere que le llegue la alerta. He marcado como obligatorias las columnas Días de preaviso y Fecha de vencimiento (columna por defecto en las listas de tareas de SharePoint).
Ahora vamos a crear nuestro flujo de trabajo, para que nos lleguen las alertas. Abrimos el sitio donde se encuente la lista, con SharePoint Designer y creamos un nuevo flujo de trabajo:



Daremos nombre al flujo, seleccionaremos la lista a la que queremos asociar el flujo y le diremos que se lance automáticamente en la creación de un elementos de la lista:


Tras darle a Siguiente, esto nos llevará a la ventana donde podremos configurar las condiciones y acciones de los primeros pasos. Comenzaremos fijando las condiciones, en este caso, queremos comparar el campo Fecha de vencimiento de nuestra lista Tareas con la fecha de Hoy.



Tras seleccionar la opción de Comparar campo Tareas, pondremos la condición, para asegurarnos que el flujo sólo se lanza si la Fecha de vencimiento no ha pasado.


Ahora crearemos una variable en el flujo, de tipo fecha, para almacenar la fecha en la que se debe enviar dicha notificación, a la cual he llamado Fecha envio:



Tras volverme loco buscando una acción que me permitiera restar a la Fecha de vencimiento, el número de Días de preaviso, para obtener el valor de la Fecha envio. Descubro, que no existe dicha posibilidad en SharePoint Designer, pero en cambio si que existe la opción de agregar. Con lo cual decido, que Días de preaviso, debe ser una variable negativa, para poder utilizar esta función. Y establezco mi acción:


Ahora agregaremos un nuevo paso al flujo, en el que nos aseguraremos de que la Fecha envio, no ha superado el día de Hoy y enviaremos el correo electrónico:


En primer paso comprobaremos la condición que hemos mencionado:


El siguiente paso será detener el flujo de trabajo hasta la Fecha envio, que será cuando se envie el correo electrónico:


Esto se debe a que el evento que lanza el flujo es la creación de la tarea (la opciones posibles son manual, creación del elemento y/o modificación del elemento) y no una fecha.
De esta manera lanzamos el flujo cuando se cree la tarea, y dejamos en espera el envio del correo.

El siguiente paso sería la creación del correo en si. Por defecto, en el cuerpo del correo, el texto sólo nos permitirá que sea texto plano, pero si etiquetamos el contenido dentro de etiquetas html, nos permitirá tener un cuerpo del correo enriquecido. Permitiéndonos poner enlaces a la propia tarea o todo lo que queramos, desde la inclusión de logos, cualquier maquetación que se nos ocurra...


Y con esto podremos dar por finalizado nuestro flujo de trabajo. Pero hay que tener en cuenta varias observaciones importantes:
  • ¿Se podía haber utilizado una columna calculada de la lista, para obtener la Fecha envio?
    • La respuesta es que no, ya que las columnas calculadas dan problemas a la hora de utilizarlas en los flujos de trabajo. Se puede ver información más detallada en el siguiente artículo.
  • ¿Esta manera de trabajar, presenta algún problema?
    • Podría perderse el envió del correo, si se reinicia el servidor, ya que es un proceso que esta en espera y que no se lanza ante una fecha concreta.
Actualización: Método más eficiente en la entrada:

jueves, 28 de junio de 2012

Columna Año, sin punto en columna calculada

Hoy he tenido una incidencia curiosa, la cual me ha costado tiempo encontrarle solución, pero finalmente tenía solución.

En una lista de SharePoint, tenía una columna de tipo fecha, pero luego para ordenar la información por Año, hemos creado una columna calculada en la que obteníamos el año de la columna fecha:



Hasta aquí ningún problema. Lo curioso ha sido, cuando alguien importante en el cliente y versado en gramática y ortografía. Nos ha dicho que eso estaba mal y que no podía quedar así, que los años no deben llevar punto, ni coma en la unidades de millar. De hecho, hasta me ha enviado un enlace a la R.A.E., donde el apartado 5.1. así lo comenta.

El código de la columna calculada, es el que desde Microsoft se recomienda:


Pero buscando por Internet, he comprobado que es un error bastante común y que la manera correcta de sacarlo es seleccionar el año de la fecha y convertirlo a texto. Para ello he empleado la siguiente fórmula:


Con ello, he conseguido obtener el año, tal y como la R.A.E. indica, es decir, sin comas, ni puntos. Y al final todos contentos ;-P :

viernes, 25 de mayo de 2012

Enlace a una página de Excel

Hace unos días, me pidieron que creará un enlace a una zona en concreto de una Excel, con la finalidad hacer varios enlaces apuntando al mismo documento, pero que cada uno abriera una página diferente del Excel.

Tras buscar en Internet, encontré que se hacia de una manera muy simple:
<a title="" href="http:URL/NombredelExcel.xls#Nombredelahoja!Celda o Área a mostrar">Texto a mostrar en la página web</a>

En mi navegador, que es un IE 8.0.6., esto funcionó, pero en el de otros usuario, que eran versiones inferiores, dio algún problema.

Lo que si presento problemas, fue el hecho de crear los nombres de las pestañas con espacios. Nosotros embebimos estás url en un elemento web editor de contenido de Sharepoint. Y para solucionar este problema, sustituimos los espacios por su código: "%20", pero el elemento web de Sharepoint nos lo sustituye por espacios.

Así que la solución fue que todos los nombres de las hojas del Excel, fueran sin espacios.

miércoles, 11 de abril de 2012

Embeber una hoja Excel en un elemento web de Sharepoint

En la línea del anterior post, se me pidió que mostrará en una página de Sharepoint una hoja de Excel en concreto, de un Libro.
Tras buscar por Internet, encontré un post interesante, en el que te enseñan a meter una gráfica de Excel en una página de Sharepoint y que se actualice al realizar modificaciones en dicho Excel.

Para mi problema, lo primero cree una biblioteca donde contener dicho Excel:



Seleccionaremos el archivo Excel de su origen:


Ya tendremos nuestro documento subido a nuestra biblioteca:


Una vez, este en nuestra biblioteca, lo editamos:


Tras editarlo o simplemente comprobar que todo esta correcto, bastaría con guardarlo como página Web:


Nos pedirá que le indiquemos el nombre con el que deseamos guardarlos y dejaremos seleccionada la hoja en la que estábamos, por medio del la selección de hoja y marcaremos el recuadro de Agregar interactividad, esto nos permitirá que nuestra página Web actualice su contenido dinámicamente:






Tras darle a Publicar, nos llevará a otra ventana, en la que seleccionaremos que elementos queremos publicar y con que queremos agregar la interactividad y le decimos que se vuelva a publicar automáticamente cada vez que se guarde el libro:



Tras darle a publicar, ya tendremos nuestra página en la misma biblioteca que el documento Excel:





Podemos acceder a dicha página haciendo clic sobre su nombre, para ver el contenido:



Para añadir dicha página a cualquier página de SharePoint, bastará con agregar un elemento Web visor de páginas:


Tras ello, bastará con configurar dicho elemento Web, indicándole donde podrá encontrar la página que hemos creado anteriormente:


Finalmente, ya tendremos nuestra página de Excel, embebida en SharePoint:



Cualquier modificación posterior en el documento Excel, quedará reflejada automáticamente en está página que hemos embebido, creando una situación dinámica.

Referencia en Internet:
http://blogs.inetium.com/blogs/justin_vogt/archive/2006/10/11/401.aspx

viernes, 16 de marzo de 2012

Jugando con las vistas dinámicas

Muchas veces en el trabajo te suelen pedir vistas dinámicas, sobre listas de Sharepoint. Generalmente, la mayoría suelen ser juegos con una fecha y la fecha del día actual.

Como por ejemplo, mostrar en una vista, los elementos que estén a menos de 30 días de llegar a la fecha de expiración marcada por el usuario.

Para ello, en el formulario de creación de elementos de la lista, había un campo de tipo Fecha, que el usuario debía rellenar. Este campo, lo llamamos Valid Until a petición del usuario, en el se marcaba la fecha en que expiraba una oferta, la cual debía ser revisada por un administrador. Para facilitarle el trabajo, se creo la vista que he comentado.

Para ello, basto con un simple juego de lógica con la columna Valid Until y los filtros de una lista:



Como se puede apreciar en la imagen, se le dijo que mostrará sólo los elementos que el campo que Valid Until fuese menor o igual que la fecha de Hoy más 30 (Valid Until ≤ Today + 30), si restamos 30 a ambos lados de la desigualdad (Valid Until - 30 ≤ Today), veremos que estamos fijando el limite inferior, es decir a partir de que día estamos empezando a mostrar las entradas: 30 días antes de que expiren.

Ahora nos quedaría fijar el límite superior, es decir, hasta cuando queremos que nos lo muestre.

Tal y como vemos en la imagen, ese límite debe ser para cuando estemos en un fecha anterior o igual a la fecha de expiración (Today ≤ Valid Until),

Pero a nosotros sólo nos interesa mostrar los que cumplen ambas condiciones, por eso uniremos las dos condiciones con un AND lógico. Con ello, ya habremos conseguido la vista que nos pedía el cliente.

Esta entrada tiene más utilidad como recordatorio personal, que como novedad, pero siguiendo la línea de este blog, la muestro, por si a alguien le pudiera ser de utilidad.

viernes, 10 de febrero de 2012

Presentación

Un saludo a quien lea esto,

Esto es un blog, que no pretende ser la respuesta a los problemas y/o dudas que Sharepoint pueda presentar. Sino, la explicación de las soluciones que he ido encontrando, para los problemas o dudas que me ha planteado Sharepoint durante mi relación con él.

Posiblemente las soluciones presentadas no sean las mejores, ni las únicas soluciones, pero a mi me han servido para enfrentarme a los problemas que he encontrado.

Espero que sea de ayuda, David.