Inherits Cloud

Loving Microsoft Cloud, specially Office 365

Mes: mayo 2012

SharePoint 2010: Como sacar la fecha de creación de un elemento en los resultados de la búsqueda

Si usamos la búsqueda de SharePoint 2010, vemos que por defecto, tenemos disponibles los siguientes campos:


Para ver qué campos tenemos disponibles, podemos seguir los pasos de este post:

http://sharepointmalarkey.wordpress.com/2011/01/31/search-core-results-web-part-how-to-view-raw-xml/

Que básicamente consiste en usar este xslt en el webpart de Resultados de la búsqueda:


Volviendo al listado de los campos por defecto, fijaros como en dichos campos, tenemos un campo llamado “Write”, que si vemos los resultados de la búsqueda, parece la fecha de creación del elemento. Digo parece, porque en realidad no es esa fecha.

Si quitáis la programación de la indexación de contenidos del buscador, creáis varios elementos en listas y bibliotecas de SharePoint, y pongamos, una hora después, hacéis una indexación completa de contenidos desde el buscador. Veréis que la fecha/hora que aparece en los resultados de la búsqueda, no es la fecha de creación real del ítem, sino la fecha/hora en la que se indexó el elemento en el índice del buscador.

Pero entonces, ¿cómo podemos sacar la fecha/hora real de creación del elemento?

Pues bien, para ello, vamos a tener que crear nosotros una nueva propiedad administrada, y vincularla a varias propiedades rastreadas.

Antes de hacerlo, comentaros que en este link, tenéis un listado de las propiedades rastreadas que existen por defecto en un servicio de búsqueda recién creado. Tened en cuenta que cuando SharePoint realiza una indexación, ese listado de propiedades rastreadas va cambiando. Es importante conocer cuáles están por defecto, por si nuestra aplicación necesita configurar alguna propiedad administrada, que se apoya en una rastreada. Si la rastreada no existe por defecto, también tendremos que crearla.

Volviendo a las propiedades rastreadas por defecto, vemos que, curiosamente, no aparece ninguna propiedad rastreada, que esté mapeada a la propiedad “write”. Sin embargo, os aseguro que la propiedad administrada “write”, existe por defecto. Supongo que el motivo será que no está completa la documentación.

También vemos que existe una propiedad rastreada llamada “ows_Created(Text)”, pero, extrañamente, al vincularla a una propiedad administrada, y sacarla en los resultados de la búsqueda, nos aparece sin ningún valor.

¿Qué propiedad debemos utilizar? Pues parece ser qué la propiedad también depende del tipo de contenido que se rastrea e indexa. Yo he trabajado con listas personlizadas, que heredan del tipo de contenido base “Item”. En esos casos, la propiedad rastrada que debemos mapear es: Basic:15(Date and Time)

Aquí tenemos la configuración de la propiedad administrada que he creado para tener acceso a la fecha de creación de un ítem, en los resultados de la búsqueda:

image

Como os digo, esto puede depender del tipo de contenido, así que es posible que en vuestro caso, debáis vincular otras propiedades administradas. Según he podido leer, sería:

  1. Basic:15(Date and Time)
  2. ows_Start_x0020_Date(Date and Time)
  3. ows_StartDate(Date and Time)
  4. Office:12(Date and Time)
  5. creationdate(Date and Time)

Espero que os sirva.

Saludos!!

SharePoint 2010: Formateando los DateTime, según las regional settings del cliente (II)

En el post anterior, vimos como podemos averiguar la zona horaria del usuario que visita nuestra web, para así formatear una fecha con dicha zona horaria.

Sin embargo, hay una pequeña apreciación para el post anterior, que tiene que ver con los resultados de las búsquedas, devueltos por el buscador de SharePoint.

Si estás haciendo búsquedas de forma programática, y has conseguido sacar el campo que indica la fecha de creación del item (cosa que no es nada sencilla, y que os intentaré contar en otros posts), todavía os podéis llevar una sorpresa, si aplicáis lo que os contaba en el post anterior.

El problema está en que, como os decía, cuando el modelo de objetos te devuelve el DateTime de la fecha de creación de un SPListItem, ya le aplica la diferencia horaria con el servidor SharePoint. Es decir, si eran las 10:00h en UTC, y el servidor SharePoint está configurado en la zona horaria de España, el modelo de objetos te dirá que son las: 12:00 (España es UTC +2 en horario de verano).

Sin embargo, cuando trabajas con un ResultSet del modelo de objetos del buscador, y accedes a un campo DateTime, éste simpre te vendrá en formato UTC, por lo que, si luego nosotros, volvemos a aplicar:


Obtendremos un valor no deseado. Por ejemplo, si seguimos con el servidor de SharePoint configurado con la zona horaria de España, y el buscador, nos devuelve una fecha/hora: 25/05/2012 11:00h (que YA está en formato UTC), y volvemos a llamar a ToUniversalTime(), lo que obtenemos es: 25/05/2012 9:00h (-2h de la fecha incial, ya que el servidor está configurado en la zona horaria)

Para solucionar esto, es tan sencillo como no invocar a la función ToUniversalTime(). O bien, si ya tenemos encapsulada la función de formateo que recibe un DateTime, y que siempre llama al ToUniversalTime(), lo que podemos hacer es que, en el momento de invocar a nuestra función, pasamos el DateTime al tiempo local (esto es lo que digo que el SPListItem, ya hace de forma automática al recuperar la columna). Resumiendo:


Espero que os sirva.

Saludos!!

SharePoint 2010: Formateando los DateTime, según las regional settings del cliente

Antes de entrar en materia, vamos a ver el escenario final:

Lo que pretendemos es que, cuando se muestre la fecha de creación de un ítem de una lista, desde un webpart personalizado (o control, o lo que sea), esa fecha y hora, esté ajustada a la zona horaria del usuario que está viendo la web.

Lo otro a considerar, es que SharePoint, almacena (en su BBDD) la fecha, en modo UTC

Con esto, lo que buscamos es lo siguiente:

Si el ítem se creó cuando eran las 25/05/2012 18:00 en UTC time, queremos que cuando un usuario ve la web desde, pongamos España, tengamos: 25/05/2012 20:00 (UTC +2). El +2 es ahora, en horario de verano. Fuera del horario de verano, sería: 25/05/2012 19:00 (UTC +1). Y para acabar con el ejemplo, si la web la visita un usuario de Sidney, cuya diferencia horaria con UTC es de +10, pues la fecha hora sería: 26/05/2012 03:00 (es decir, que hemos pasado al día siguiente).

Pero, ¿Cómo puedo saber la configuración horaria que tiene el PC del usuario?, pues bien, por desgracia, esta información, no la tenemos disponible en las cabeceras HTTP de la petición, por lo que es algo complicadillo.

Por suerte, podemos enviar código JavaScript al cliente que, en caso de que no bloquee el JavaScript, este código haga:

  1. Consulte la fecha hora del cliente, y extraiga la diferencia horaria, con respecto al UTC
  2. Cree una cookie, donde se guarde esa diferencia
  3. Reenvíe la petición al servidor, para que éste recoja la cookie, y calcule la fecha de creación del ítem, según dicho offset con respecto al UTC

¿Y cómo hacemos todo eso en SharePoint?

Existen varias formas para poder inyectar ese JavaScript: Crear un HTTPModule, usar un DelegateControl, y alguna más. Por no hacerlo muy complicado, en este caso, vamos a crear un control, que incluiremos en la MasterPage del site.

Primero creamos el control de SharePoint:


Sobre el render del Control, lo que primero hacemos, es comprobar si el navegador acepta cookies. Si las acepta, lo siguiente es comprobar si ya hemos creado la cookie. Si ya la hemos creado, luego la usaremos para formatear el DateTime. Si no la hemos creado, registramos el código JavaScript necesario para ello.


Y aquí el código que invoca la funciones JS


Fijaros como en el código anterior, estableces el “window.location” a sí mismo. De esta forma recargamos la página, y la cookie llega al servidor.

Es importante notar que toda la parte de JavaScript, sólo se inserta y utiliza, si no existe la cookie con el Offset del UTC. Así se optimiza el tamaño de página.

OK, ya tenemos la cookie con el offset, ahora ¿cómo la usamos?

Primero obtenemos el valor de la cookie:


Asumimos que tenemos una variable DateTime, con la fecha de creación de un ítem de lista de SharePoint. Para aplicar el offset UTC del cliente, hacemos:


Es decir, sumamos/restamos las horas de diferencia horaria.

Pero, si habías dicho que SP guarda los DateTime en UTC ¿por qué estás pasando el DateTime a ToUniversalTime? pues sencillamente, porque cuando el modelo de objetos de SharePoint, te devuelve el valor de la columna del SPListItem, te lo da aplicando la hora local del servidor, por lo que hay que pedirle, explícitamente, que te dé la hora UTC.

Con esta técnica, podemos formatear la fecha/hora, según la configuración del cliente. Algo que para soluciones globalizadas, puede ser de gran ayuda.

Espero que os sirva.

Un saludo!!

SharePoint 2010: The content type is part of an application feature (error al borrar un Tipo de contenido)

Acabo de sufrir en “mis cannes”, este bonito error, justo cuando intentaba eliminar un tipo de contenido, que había creado una feature de una solución personalizada, que había desarrollado.

Lo primero a comprobar, que yo ya había hecho, es que ese tipo de contenido, no puede estar siendo usado en ninguna lista ni biblioteca. Además, debes comprobar que ese tipo de contenido, no sea tipo base, de algún otro contenido que sí se está usando. También puedes usar alguna herramienta del estilo SharePoint Manager, donde tienes un atributo Usage, que te dirá si se está usando en algún sitio.

Si ya has hecho esta comprobación, y aún así, te sigue dando el error, lo siguiente a comprobar (que ha sido mi salvación), es que NO tengas nada en la papelera de reciclaje. Y recuerda, que SharePoint tiene “2 papeleras”:

clip_image002[4]

clip_image002

clip_image002[7]

Tras esto, si desactivas la feature, el tipo de contenido debería de desaparecer.

Espero que os sirva, y si no, ya sabes:

Sonrisa

Saludos!!

Office 365: Diferencias entre las funciones de Excep Web App y Excel 2010

Hoy me preguntaba cuántas funciones del Excel 2010 (el cliente, el de toda la vida), son compatibles con Excel Web App (en el Explorador). Pues bien, están perfectamente documentadas por Microsoft, y la sorpresa es que prácticamente todas las de Excel 2010, están disponibles para Excel Web App.

El listado de todas las funciones, lo tenemos aquí:

http://office.microsoft.com/en-us/web-apps-help/excel-functions-alphabetical-HA010342655.aspx

Mientras que las diferencias que nos podemos encontrar, entre usarlas en Excel 2010, o en Excel Web App, se resumen en la siguiente tabla:

image

Y también tenemos el Intellisense desde el navegador!

image

Por otro lado, os cuento algo que me ha extrañado muchísimo, y que me ha hecho perder 10 minutos de búsqueda:

Desde Excel Web App, NO se pueden añadir (ni eliminar) hojas al libro.

Por si no os lo creéis (yo no me lo creía…), aquí os dejo un post del foro de Office 365, donde un ingeniero de MS lo confirma:

http://community.office365.com/en-us/f/175/t/8239.aspx

Para añadir y eliminar hojas del libro, hay que pasar por el Excel cliente.

Saludos!!

Office 365: Añadir usuarios externos a listas de distribución

En este post vamos a ver como podemos añadir usuarios externos a la organización, en una lista de distribución.

Para ello, deberemos ser un usuario con permisos para administrar la organización. Una vez logado en OWA, nos vamos a “Opciones”:

image

Dentro de “Todas las opciones”, nos aseguramos de seleccionar “Administrar Mi organización”

image

Dentro de “Usuarios y grupos”, entramos en “Contactos externos”, y añadimos los emails externos que queremos añadir a la lista de distribución.

image

image

Una vez añadido el contacto externo, ya podemos añadirlo a nuestra lista de distribución.

image

Editamos nuestra lista de distribución, seleccionando la lista, y pulsando en “Detalles”

En la pantalla de edición de lista, pulsamos en la sección “Pertenencia”, y en el botón “Agregar”

image

En la ventana de selección de usuarios, buscamos los usuarios externos que añadimos anterioremente. Fijaros como los usuarios externos, tienen un icono diferente a los usuarios de la organización.

image

Añadimos el usuario, guardamos nuestra lista de distribución, y ya lo tenemos.

Espero que os sirva.

Saludos!!

© 2024 Inherits Cloud

Tema por Anders NorenArriba ↑