Generalmente, cuando trabajamos con campos calculados, nos suelen pedir comparar fechas, añadir y quitar días, meses, años, etc..
Todo esto, lo podemos encontrar en la página oficial de Microsoft:
https://msdn.microsoft.com/es-es/library/office/bb862071(v=office.14).aspx
Pero una cosa que no viene en esa página, es como sumar y/o restar horas y minutos a un campo de Fecha y hora, en SharePoint.
Si tomamos como referencia la formula de como añadir un día, tendremos una pista:
=[Fecha]+1
Entonces sí 1 es un día. Basta con utilizar la lógica. Un día son 24 horas. Así que si quisiera sumar 3 horas, sería 3/24 partes del día.
Sí 1 hora son 60 minutos y 1 días son 24 horas. Sí quisiéramos sumar 7 horas, sería 7/24/60 partes del día.
Con lo cual, nuestras formulas en la columna calculada serían:
Horas:
=[Fecha]+((1/24)*Número de horas deseadas)
Minutos:
=[Fecha]+((1/24/60)*Numero de minutos deseados)
Como se puede ver, no era muy complicado. Sólo había que seguir la lógica.
sábado, 26 de abril de 2014
sábado, 22 de marzo de 2014
¿Dónde esta el botón para vincular una reunión a un espacio de reuniones en Outlook 2010? (II)
No hace mucho, hice una entrada sobre como habilitar la opción. Ahora voy a darle una nueva vuelta de tuerca, con un artículo que he leído.
Lo primero que deberemos de hacer es entrar en la vista calendario de Outlook 2010 que se encuentra en la parte inferior izquierda:
Lo siguiente que haremos será darle a la opción de Nueva cita o a la de Nueva reunión:
En la ventana que se nos cargará, tendremos que ir a Archivo y dentro elegir Opciones:
En la ventana que se nos abrirá elegiremos la opción de Personalizar cinta de opciones y dentro de su ventana contextual, elegiremos Nueva ficha, lo que nos permitirá crear una zona en la ribbon superior de Outlook:
Por defecto, esa Nueva ficha se creará con el nombre Nueva ficha, pero podremos personalizarlo poniendo a esa pestaña el nombre deseado. En mi caso SharePoint:
Acto seguido podremos personalizar ese área de la pestaña, poniéndole el nombre que deseemos. En mi caso, Espacio de Reuniones:
Por último, lo que necesitaremos es incluir en esa zona el icono de Área de reuniones, para ello lo que haremos será Agregar el icono, a la zona de Espacio de Reuniones:
Esto nos permitirá, que a partir de ahora, ya tengamos disponible la opción de vincular una reunión a un espacio de reuniones:
La fuente que he utilizado es:
https://www.premierpointsolutions.com/training/help-and-how-to-articles/how-to-add-the-meeting-workspace-button-in-the-outlook-2010-ribbon-to-create-a-meeting-workspace/
Lo primero que deberemos de hacer es entrar en la vista calendario de Outlook 2010 que se encuentra en la parte inferior izquierda:
Lo siguiente que haremos será darle a la opción de Nueva cita o a la de Nueva reunión:
En la ventana que se nos cargará, tendremos que ir a Archivo y dentro elegir Opciones:
En la ventana que se nos abrirá elegiremos la opción de Personalizar cinta de opciones y dentro de su ventana contextual, elegiremos Nueva ficha, lo que nos permitirá crear una zona en la ribbon superior de Outlook:
Por defecto, esa Nueva ficha se creará con el nombre Nueva ficha, pero podremos personalizarlo poniendo a esa pestaña el nombre deseado. En mi caso SharePoint:
Acto seguido podremos personalizar ese área de la pestaña, poniéndole el nombre que deseemos. En mi caso, Espacio de Reuniones:
Por último, lo que necesitaremos es incluir en esa zona el icono de Área de reuniones, para ello lo que haremos será Agregar el icono, a la zona de Espacio de Reuniones:
Esto nos permitirá, que a partir de ahora, ya tengamos disponible la opción de vincular una reunión a un espacio de reuniones:
La fuente que he utilizado es:
https://www.premierpointsolutions.com/training/help-and-how-to-articles/how-to-add-the-meeting-workspace-button-in-the-outlook-2010-ribbon-to-create-a-meeting-workspace/
sábado, 8 de febrero de 2014
Como ver los nombres de archivos adjuntos de una lista de SharePoint
En las vistas de las listas, estamos acostumbrados a sólo poder ver si los elementos tienen adjuntos o no. Eso se puede ver por medio de la presencia o no, del icono de un clip en la columna de adjuntos:
Para poder acceder a los adjuntos y poder ver su nombre, tendríamos que acceder al DispForm o EditForm del elemento. Que comúnmente se hace por medio del Título.
Esto a muchos clientes les parece que no es algo ágil. Una solución a esto, es el Javascript que nos plantea Alexander Bautz en su web:
Consiste en incluir un editor de contenido en nuestra página:
Con el siguiente código:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js" type="text/javascript"></script>
<script src="/MiSitio/JS/ListAttachments.js" type="text/javascript"></script>
<script type="text/javascript">
var argObj = {hideIdColumn:true,
clickToOpen:false,
clickMouseover:"Click to open",
oneClickOpenIfSingle:true};
customListAttachments(argObj);
</script>
La clave es descargar el archivo ListAttachments.js de la siguiente dirección:
Subirlo a nuestro portal y referenciarlo:
<script src="/MiSitio/JS/ListAttachments.js" type="text/javascript"></script>
Otro punto importante, es que en la vista, deberá estar presente la columna ID, pero no hay que preocuparse si no nos interesa mostrar dicha columna porque se oculta por medio de la sentencia:
hideIdColumn:true
Y como resultado de todo esto obtendremos:
Es decir, que si nos ponemos sobre el clip nos dirá que adjuntos tiene ese elemento y si hacemos clic sobre uno de los nombres de los adjuntos, se abrirá en nueva ventana.
Y con esto, conseguiremos que nuestros clientes estén más contentos.
sábado, 25 de enero de 2014
Abrir adjuntos de una lista en nueva pestaña
Hoy uno de los clientes, nos ha solicitado que los adjuntos que se suben a una lista de SharePoint, se debieran abrir en una nueva pestaña y no sobre la misma.
La razón es porque todo tenemos la costumbre de leer y tras leer cerrar. Con lo cual en este caso perdemos la ventana.
Analizando desde el navegador el código que nos devuelve el navegador, vemos que tenemos:
<div class=AttachmentsNews id=idAttachmentsRow>
<div>
<table id=idAttachmentsTable border=0 cellSpacing=0 cellPadding=0>
<tbody>
<tr id={8529BEC4-786B-4ED2-846E-01D994333894}>
<td class=ms-vb>
<span dir=ltr>
<a tabIndex="1" onmousedown="return VerifyHref(this, event, '1', null, '');return false;" onclick="DispDocItemExWithServerRedirect(this, event, 'false', 'false', 'false', '', '1', '');return false;" href="/communication/Lists/Communiqus/Attachments/8/Documento.pdf">Documento.pdf</a>
</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
Tras ver que no habría una sobrecarga del componente que nos hiciera que su funcionamiento fuese el de apertura en una nueva pestaña.
La solución que se nos ocurrió fue, que como teníamos personalizados los DispForm, por medio de XSL, fue la de añadir código Jquery que nos lo resolviera:
<script type="text/javascript">
$(document).ready(function(){
//Recojo todos los enlaces de adjuntos para hacer que se abran en ventana nueva
elements = $("#idAttachmentsRow a");
//Tratamos cada uno de los elementos
$(elements).each(function(){
//Borro el onclick que viene por defecto
$(this).attr("onclick"," ");
//Le indico que se abra en ventana nueva
$(this).attr("target","_blank");
});
});
</script>
Y así el elemento toma el siguiente código:
<a tabIndex=1 onmousedown="return VerifyHref(this, event, '1', null, '');return false;" onclick=" " href="/communication/Lists/Communiqus/Attachments/8/Documento.pdf" target=_blank>Documento.pdf</a>
Hoy no pongo referencia, porque se me ocurrió en un momento de inspiración, pero seguro que alguien más lo ha resuelto así o de una manera más elegante.
miércoles, 18 de diciembre de 2013
Sharepoint 2007 y adjuntar elementos en formularios personalizados
Hoy me ha tocado personalizar algunos formularios de nuevo elemento (NewForm.aspx) de algunas listas en un MOSS (SharePoint 2007). Y al comprobar que todo estaba correcto he visto que el componente de adjuntar elementos no funcionaba correctamente.
Daba un error:
Este formulario se ha personalizado no funciona con archivos adjuntos
O:
No se han habilitado los archivos adjuntos en esta lista
Buscando en San Google he encontrado una entrada del "MVP" Gustavo Velez:
http://support.microsoft.com/kb/953271/es
Como Microsoft suele eliminar sus entradas, replico el contenido que Gustavo nos comenta y que funciona a la perfección:
En el código XSL que hemos generado al insertar nuestro formulario personalizado, buscaremos:
<xsl:template name="dvt_1">
<xsl:variable name="dvt_StyleName">ListForm</xsl:variable>
<xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row"/>
<table border="0" width="100%">
<xsl:call-template name="dvt_1.body">
<xsl:with-param name="Rows" select="$Rows"/>
</xsl:call-template>
</table>
</xsl:template>
Y lo reemplazamos por:
<xsl:template name="dvt_1">
<xsl:variable name="dvt_StyleName">ListForm</xsl:variable>
<xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row"/>
<div>
<span id="part1">
<table border="0" width="100%">
<xsl:call-template name="dvt_1.body">
<xsl:with-param name="Rows" select="$Rows"/>
</xsl:call-template>
</table>
</span>
<SharePoint:AttachmentUpload runat="server" ControlMode="Edit"/>
<SharePoint:ItemHiddenVersion runat="server" ControlMode="Edit"/>
</div>
</xsl:template>
Teniendo en cuenta que el ControlMode, si estamos personalizando un formulario de nuevo tendrá el valor New.
Lo siguiente a buscar es la línea:
<xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1">
Y justo antes de ella, insertamos:
<tr id="idAttachmentsRow">
<td nowrap="true" valign="top" class="ms-formlabel" width="20%">
<SharePoint:FieldLabel ControlMode="Edit" FieldName="Attachments" runat="server"/>
</td>
<td valign="top" class="ms-formbody" width="80%">
<SharePoint:FormField runat="server" id="AttachmentsField" ControlMode="Edit" FieldName="Attachments" __designer:bind="{ddwrt:DataBind('u','AttachmentsField','Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Attachments')}"/>
<script>
var elm = document.getElementById("idAttachmentsTable");
if (elm == null || elm.rows.length == 0)
document.getElementById("idAttachmentsRow").style.display='none';
</script>
</td>
</tr>
Teniendo en cuenta otra vez, que si estamos en un formulario de nuevo elemento, ControlMode tendrá el valor de New y _designer:bind, tendrá como primer parámetro "i" (insert), en lugar de "u" (update) que se utilizaría para los formularios de edición.
Tras esto, guardamos nuestro formulario y magia... Ya se adjuntan los documentos.
Y para ver los documentos adjuntos en un formulario de vista de datos (DispForm.aspx) bastaría con añadir:
<SharePoint:AttachmentsField ControlMode="Display" FieldName="Attachments" runat="server" Visible="true"/>
Nota: Vuelvo a recordar que no he inventado la rueda. Esto es una copia del artículo de Gustavo Velez que a mi me ha resultado muy útil.
Daba un error:
Este formulario se ha personalizado no funciona con archivos adjuntos
O:
No se han habilitado los archivos adjuntos en esta lista
Buscando en San Google he encontrado una entrada del "MVP" Gustavo Velez:
http://support.microsoft.com/kb/953271/es
Como Microsoft suele eliminar sus entradas, replico el contenido que Gustavo nos comenta y que funciona a la perfección:
En el código XSL que hemos generado al insertar nuestro formulario personalizado, buscaremos:
<xsl:template name="dvt_1">
<xsl:variable name="dvt_StyleName">ListForm</xsl:variable>
<xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row"/>
<table border="0" width="100%">
<xsl:call-template name="dvt_1.body">
<xsl:with-param name="Rows" select="$Rows"/>
</xsl:call-template>
</table>
</xsl:template>
Y lo reemplazamos por:
<xsl:template name="dvt_1">
<xsl:variable name="dvt_StyleName">ListForm</xsl:variable>
<xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row"/>
<div>
<span id="part1">
<table border="0" width="100%">
<xsl:call-template name="dvt_1.body">
<xsl:with-param name="Rows" select="$Rows"/>
</xsl:call-template>
</table>
</span>
<SharePoint:AttachmentUpload runat="server" ControlMode="Edit"/>
<SharePoint:ItemHiddenVersion runat="server" ControlMode="Edit"/>
</div>
</xsl:template>
Teniendo en cuenta que el ControlMode, si estamos personalizando un formulario de nuevo tendrá el valor New.
Lo siguiente a buscar es la línea:
<xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1">
Y justo antes de ella, insertamos:
<tr id="idAttachmentsRow">
<td nowrap="true" valign="top" class="ms-formlabel" width="20%">
<SharePoint:FieldLabel ControlMode="Edit" FieldName="Attachments" runat="server"/>
</td>
<td valign="top" class="ms-formbody" width="80%">
<SharePoint:FormField runat="server" id="AttachmentsField" ControlMode="Edit" FieldName="Attachments" __designer:bind="{ddwrt:DataBind('u','AttachmentsField','Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Attachments')}"/>
<script>
var elm = document.getElementById("idAttachmentsTable");
if (elm == null || elm.rows.length == 0)
document.getElementById("idAttachmentsRow").style.display='none';
</script>
</td>
</tr>
Teniendo en cuenta otra vez, que si estamos en un formulario de nuevo elemento, ControlMode tendrá el valor de New y _designer:bind, tendrá como primer parámetro "i" (insert), en lugar de "u" (update) que se utilizaría para los formularios de edición.
Tras esto, guardamos nuestro formulario y magia... Ya se adjuntan los documentos.
Y para ver los documentos adjuntos en un formulario de vista de datos (DispForm.aspx) bastaría con añadir:
<SharePoint:AttachmentsField ControlMode="Display" FieldName="Attachments" runat="server" Visible="true"/>
Nota: Vuelvo a recordar que no he inventado la rueda. Esto es una copia del artículo de Gustavo Velez que a mi me ha resultado muy útil.
sábado, 23 de noviembre de 2013
Vista dinámica en Sharepoint
Normalmente en Sharepoint, las vistas que se hacen sobre las listas y/o bibliotecas, suelen ser estáticas. Es decir, se muestran las entradas de un determinado campo que cumplan una condición. Por ejemplo, mostrar sólo los elementos que tienen un campo con un determinado valor.
El problema que nos presentaba esto, era que no podíamos (por defecto y sin programar) crear un valor dinámico que nos sirviera para filtrar. Pero con un poco tiempo y gracias a los campos [Hoy] ([Today]) y [Yo] ([Me]), podemos crear algún caso dinámico que puede solucionarnos algún que otro problema.
Este era mi problema, durante un proyecto se me pidió que la vista por defecto sólo mostrara los elementos del año actual, sin tener que andar año tras año, modificando la vista.
En mi caso, había un campo llamado Year, en el que el usuario introducía el año de la entrada, ya que mucha de la información subida, era de años anteriores al actual, con lo cual los campos Created y Modified, no me servían.
Con lo que los usuarios sólo tenían que indicar a que año pertenecía el elemento subido. Y luego por medio de dos campos calculados obtenía dos campos de tipo fecha que contenían el 1 de Enero de dicho año (Valid Since) y el 31 de Diciembre del mismo año (Valid Until).
Esto se puede hacer por medio de las fórmulas:
=DATE([Year];1;1)
=DATE([Year];12;31)
Es importante acordarnos, que son columna calculadas de tipo fecha.
Y por último sólo nos quedaría crear la vista filtrada en SharePoint:
Esto nos permitiría ver de manera dinámica los elementos validos para el año actual, sin tener que crear una vista para cada año que comienza.
Otra vista que también nos pidieron fue una vista de los elementos a caducar en los próximos 30 días para ello, utilizamos la columna Valid Until de nuevo y creamos una vista con las siguiente condición:
Esto me evito, tener que hacer vistas donde las condiciones fueran desde el 1/1/2013 al 31/12/2013 y al año siguiente tener que crear otra vista con 2014. Ya que sólo les interesaba ver los elementos del año en curso.
Referencia útil:
http://office.microsoft.com/en-us/windows-sharepoint-services-help/examples-of-common-formulas-HA001160947.aspx
El problema que nos presentaba esto, era que no podíamos (por defecto y sin programar) crear un valor dinámico que nos sirviera para filtrar. Pero con un poco tiempo y gracias a los campos [Hoy] ([Today]) y [Yo] ([Me]), podemos crear algún caso dinámico que puede solucionarnos algún que otro problema.
Este era mi problema, durante un proyecto se me pidió que la vista por defecto sólo mostrara los elementos del año actual, sin tener que andar año tras año, modificando la vista.
En mi caso, había un campo llamado Year, en el que el usuario introducía el año de la entrada, ya que mucha de la información subida, era de años anteriores al actual, con lo cual los campos Created y Modified, no me servían.
Con lo que los usuarios sólo tenían que indicar a que año pertenecía el elemento subido. Y luego por medio de dos campos calculados obtenía dos campos de tipo fecha que contenían el 1 de Enero de dicho año (Valid Since) y el 31 de Diciembre del mismo año (Valid Until).
Esto se puede hacer por medio de las fórmulas:
=DATE([Year];1;1)
=DATE([Year];12;31)
Es importante acordarnos, que son columna calculadas de tipo fecha.
Y por último sólo nos quedaría crear la vista filtrada en SharePoint:
Esto nos permitiría ver de manera dinámica los elementos validos para el año actual, sin tener que crear una vista para cada año que comienza.
Otra vista que también nos pidieron fue una vista de los elementos a caducar en los próximos 30 días para ello, utilizamos la columna Valid Until de nuevo y creamos una vista con las siguiente condición:
Esto me evito, tener que hacer vistas donde las condiciones fueran desde el 1/1/2013 al 31/12/2013 y al año siguiente tener que crear otra vista con 2014. Ya que sólo les interesaba ver los elementos del año en curso.
Referencia útil:
http://office.microsoft.com/en-us/windows-sharepoint-services-help/examples-of-common-formulas-HA001160947.aspx
sábado, 19 de octubre de 2013
¿Dónde esta el botón para vincular una reunión a un espacio de reuniones en Outlook 2010?
En uno de los clientes para los que trabajo, tenían Outlook 2003 y han decidido actualizar a Outlook 2010. La primera duda que me han planteado tras la migración, era como podían vincular una reunión a un espacio de reuniones de SharePoint 2007. No porque no supieran como, sino porque en Outlook 2010 no aparecía la opción.
Pues bien, para habilitar dicha opción es relativamente sencillo, basta con seguir tres pasos. El primero, si nos ponemos en la vista calendario de Outlook, tendremos que acceder al menú contextual superior, para habilitar más comandos:
Esto nos abrirá una nueva ventana en al que debemos buscar el comando de Reunión y agregarlo:
Tras ello, ya tendremos disponible el icono para vincular nuestra convocatoria de reunión a un área de reuniones:
Y así, ya podremos vincular nuestras reuniones con nuestro espacio de reuniones de SharePoint.
Pues bien, para habilitar dicha opción es relativamente sencillo, basta con seguir tres pasos. El primero, si nos ponemos en la vista calendario de Outlook, tendremos que acceder al menú contextual superior, para habilitar más comandos:
Esto nos abrirá una nueva ventana en al que debemos buscar el comando de Reunión y agregarlo:
Y así, ya podremos vincular nuestras reuniones con nuestro espacio de reuniones de SharePoint.
Suscribirse a:
Entradas (Atom)















