sábado, 25 de abril de 2015

Obtener parámetros de la URL

Constantemente utilizamos la URL para pasar parámetros cuando estamos trabajando con SharePoint. De hecho el propio SharePoint es el primero que lo hace y el caso más fácil de ver, es cuando accedemos a un elemento de lista, ya sea en forma de edición o de presentación:

http://misitoweb/Lists/Alertas/EditForm.aspx?ID=39&Source=http%3A%2F%2Fmisitioweb%2FLists%2FAlertas%2FAllItems%2Easpx

En este ejemplo, podemos ver que tenemos dos parámetros ID y Source, que sirven para identificar el elemento y a dónde nos va a llevar una vez aceptemos o cancelemos la edición del elemento.

Normalmente para obtener y tratarlo, utilizaríamos JavaScript y/o JQuery, y trataríamos la URL.

La idea que propongo en esta entrada es encapsular una función que ya nos lo obtenga y que incluyéndola en un archivo .js, nos permitiría referenciarla en la página maestra y utilizar en nuestro portal.

El código sería sencillo:

function getUrlVars() {
  var vars = {};
  var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
    vars[key] = value;
  });
  return vars;
}


Esto nos permitiría recuperar dicho parámetro haciendo algo tan sencillo como:

var elemento = getUrlVars()["ID"];
var destino = getUrlVars()["Source"];

Y poder trabajar con ellas. Como se ve, es algo fácil y sencillo.

La idea la obtuve de:
http://papermashup.com/read-url-get-variables-withjavascript/

miércoles, 18 de marzo de 2015

Otra manera de abrir en nueva ventana en una vista de datos

Buscando por internet como abrir documentos en otra ventana, encontré una manera curiosa:

<script src="https://ajax.microsoft.com/ajax/jquery/jquery-1.3.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
  $("a[href$='#openinnewwindow']").each(function() {
    $(this).attr("target", "_blank");
    $(this).attr("href", $(this).attr("href").replace(/#openinnewwindow/, ''));
  });
});
</script>


Traducido significa, que en una vista de datos, en una consulta de contenido o en un resultado de búsqueda, todos los enlaces que yo quiera que se abran en nueva ventana, basta con que los marque con id="openinnewwindow" y este código que puede ir en la página maestra, en un archivo js referenciado o directamente en un editor de contenido, hará que busque todos estos elementos, les ponga un target="_blank" y elimine del id el valor openinnewwindow reemplazándolo por ''.

Fácil y sencillo.

 La página donde encontré esta curiosa propuesta es:
http://blog.scoreman.net/2010/10/open-sharepoint-links-in-new-window-using-jquery/

sábado, 21 de febrero de 2015

Abrir PDF's en nueva ventana

En uno de los clientes, me han pedido que los PDF no se abrieran en el navegador.

Esto les supone un problema porque al cerrar el PDF, suelen cerrar el navegador y luego tiene que volver a entrar.

Para resolver este problema, en la configuración avanzada de la biblioteca, existe la posibilidad de abrir los documentos en la aplicación nativa:


Pero en nuestro caso, esto no funciona porque en la configuración del propio Adobe Reader, tienen marcado que se abra en el navegador. Cambiar esto les supone un gran trastorno dentro de la empresa, así que tome la opción de hacerlo vía JQuery:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script>

/*Que se ejecute cuando ya se haya cargado toda la página*/
$(document).ready(function(){

     /*Buscamos todos los documentos que acaben en .pdf*/
    $('[href$=".pdf"]').each(function(){ 

        /*Vacio el onclick que suele traer*/    
       $(this).attr('onclick','');

        /*Y le pongo el atributo target="_blank"*/
       $(this).attr('target','_blank');
    });
});
</script>


Incluyendo dicho código en la pagina maestra, ya lo tendríamos disponible para toda la colección de sitios.

Fácil y sencillo. Y el cliente ha quedo contento.

miércoles, 21 de enero de 2015

Imprimir una zona de una vista de datos

Uno de los clientes para los que trabajo, pidió que hiciera una vista de datos en la que salían unas peticiones mensuales. Hasta aquí, nada nuevo.

Lo siguiente que se le ocurrió, era que quería imprimirse esa vista de datos. Para ello, ni corto, ni perezoso, le propuse que diera a imprimir desde el navegador.

Esa solución, como no podía ser de otra manera, no le gusto. Quería imprimir sólo los datos, pero que no saliera la URL, ni partes del portal, sólo los datos.

Para ello, decidimos hacerlo con jquery, para ello en el table que se crea antes de recorrer todos los valores:

<table border="0" width="100%" cellpadding="2" cellspacing="0">
<tr valign="top">
<xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1">
<th class="ms-vh" width="1%" nowrap="nowrap"></th>
</xsl:if>
<th class="ms-vh" nowrap="nowrap">Título</th>
<th class="ms-vh" nowrap="nowrap">Cuerpo</th>
<th class="ms-vh" nowrap="nowrap">Caduca</th>
</tr>
       <xsl:call-template name="dvt_1.body">
<xsl:with-param name="Rows" select="$Rows"/>
<xsl:with-param name="FirstRow" select="1" />
<xsl:with-param name="LastRow" select="$dvt_RowCount" />
</xsl:call-template>
</table>

Lo que haremos será ponerle un class="ZonaImprimible" quedando:
<table border="0" width="100%" cellpadding="2" cellspacing="0" class="ZonaImprimible">

Esto nos servirá para definir que parte será la que imprimiremos, en este caso todo el table.
Tras la tabla, pondremos un botón que nos sirva para imprimir:
</table>
<p><input type="button" class="Impresora" value="Imprimir"/></p>

Y por último, pondremos la referencia a jquery y los archivos que necesitamos. El código que nos hará que se imprima sólo la tabla será:
<script src="/PruebasVarias/Biblioteca/jquery-1.10.2.js"></script>
<script src="/PruebasVarias/Biblioteca/jquery-ui-1.10.4.custom.js"></script>
<script src="/PruebasVarias/Biblioteca/jquery.PrintArea.js"></script>

<script type="text/javascript">
$(document).ready(function() {
   $(".Impresora").bind("click",function() {
       $(."ZonaImprimible").printArea(mode : "popup", popClose : true);
   });
});

</script>

Esto hará que se nos imprima sólo la tabla y que veamos en un popup lo que vamos a imprimir.
Es importante tener en cuenta, que si no metemos la hoja de estilos dentro de la zona a imprimir, lo que imprimiremos será sólo texto plano.

Para más información y más posibilidades, se puede consultar:
https://plugins.jquery.com/PrintArea/
http://www.jqueryscript.net/other/Print-Specified-Area-Of-A-Page-PrintArea.HTML

Como siempre, tome la idea de:
http://www.martiniglesias.eu/blog/imprimir-un-area-determinada-del-documento-con-jquery/207

viernes, 19 de diciembre de 2014

Cómo editar una página de SharePoint que aparece la edición deshabilitada

En un cliente, que trabaja con un SharePoint 2007, he detectado que la master tiene errores de código, producidos al intentar personalizarla.

Eso ha dado como resultado, que al intentar editar la página de inicio, he visto que la opción Editar página, que sale del menú de Acciones de sitio, aparece deshabilitada.

Necesitaba agregar una nueva lista a una Zona de Elementos Web. Así que buscando por internet, he encontrado una solución, que consiste en añadir a la URL el parámetro "?ToolPaneView=2".

En caso de que en la URL ya aparezca algún parámetro, como por ejemplo:
http://misitio/default.aspx?ID=12

Lo que deberíamos hacer es añadirlo como "&ToolPaneView=2".

La idea la encontré en:
http://davidandrewsmith.us/2009/09/11/edit-page-option-greyed-out-or-missing-or-disabled/

sábado, 22 de noviembre de 2014

SharePoint 2007 en modo sólo lectura

En un cliente para el cual estamos haciendo una migración de SharePoint 2007 a 2013.

Y uno de los pasos que hemos decidido tomar, es poner SharePoint 2007 en modo sólo lectura, para que los usuarios sigan pudiendo acceder a consultar los datos, pero que no tenga permisos para modificar nada.

Para ello, entraremos en la administración central e iremos a "Application Management > Site Collection quotas and locks".



En la ventana que se nos abrirá seleccionaremos la Colección de Sitios deseada y veremos en que estado se encuentra:


En dicha ventana, podremos fijar el estado de la colección de sitios a sólo lectura y definir el mensaje que los usuarios verán:


Tras aceptar estos cambios, veremos en la colección de sitios, que ya no nos aparecerán la opciones de añadir contenidos, independientemente del nivel de permisos que tengamos. Y que el menú de acciones estará vacío.

lunes, 6 de octubre de 2014

¿Dónde están las Migas en SharePoint 2013?

Hoy me ha tocado acceder a un SharePoint 2013, que hemos instalado a un cliente que conocía las versiones anteriores de SharePoint. Como son viejos conocidos, le he hecho una presentación de todo lo nuevo que trae... Sigo enamorado de las búsquedas...
Y el cliente ha quedado encantado, pero lo primero que ha echado de menos han sido las migas.

Como no era mi primer SharePoint 2013, no he entrado en pánico y simplemente  le he dicho la verdad. SharePoint 2013 no muestra las migas. Pero tranquilo, que puedo hacer que aparezcan.

Para ello, he descargado una copia de Seattle.master (es de buenas prácticas no tocar los archivos de Microsoft, sino crear una copia y trabajar con ellos). La he renombrado y he comenzado ha modificar el archivo. 

Lo primero que he hecho, ha sido localizar la zona que pone:
<div class="ms-breadcrumb-dropdownBox" style="display:none;">

Ya que por defecto están dejando toda la zona oculta, por eso quitaremos style="display:none;", quedando:
<div class="ms-breadcrumb-dropdownBox">

En la siguiente línea tendremos el control:
<SharePoint:AjaxDelta id="DeltaBreadcrumbDropdown" runat="server">
    <SharePoint:PopoutMenu
        Visible="false"
        runat="server"

Que como vemos esta oculto, por el código Visible="false", así que lo pondremos a "true":
<SharePoint:AjaxDelta id="DeltaBreadcrumbDropdown" runat="server">
    <SharePoint:PopoutMenu
        Visible="true"
        runat="server"

Puede que dependiendo del tema que tengamos aplicado, puede que no se pinte correctamente el icono, para ello, basta con poner antes de cerrar el div de la clase ms-breadcrumb-dropdownBox, lo siguiente:
<script type="text/javascript">
document.getElementById("GlobalBreadCrumbNavPopout-anchor").innerHTML='<img style="border-width:0;position:absolute;left:-215px !important;top:-120px !important;" alt="Navigate Up" src="/_layouts/15/images/spcommon.png?rev=27">';
</script>

Tras esto, he guardado los cambios en el archivo y he subido el archivo desde la configuración del sitio raíz de la colección de sitios, seleccionando la opción:


Y tras publicar como versión principal, nuestro archivo, lo he aplicado desde la configuración del sitio raíz, por medio de la opción:

Y nos quedaría algo tan útil como:

Si, queremos unas migas de pan horizontales, recomiendo el siguiente enlace: