domingo, 17 de enero de 2021

Mostrar un enlace solo unos días de la semana

Hoy me han pedido, que querían que les creáramos una lista para recoger una serie de datos de las sedes de un organismo, pero con la particularidad, de que querían que solo lo pudieran hacer los lunes y los jueves.

SharePoint no entiende de días, pero rápidamente he visto que la solución pasaba por esconder los accesos a la lista y con JQuery mostrar el enlace al formulario de nuevo, los días que nos indicaban.

Para ello lo primero que he hecho es crear dos divs, en el primero con el enlace a formulario de Nuevo elemento y en el segundo, un texto recordatorio de que los datos solo se recogerán los lunes y los jueves:

<div id="Enlace" style="display:none;"><a href="/URLdelSitio/Lists/Seguimiento/Nuevo.aspx?Source=/UrldelaPáginaalaquelesRedirigimosTrasCompletar/" style="font-weight:bold;font-size:16pt;">Nueva incidencia</a></div>

<div id="textolunes" style="font-weight:bold;font-size:16pt;display:none;">Sólo se recogerán incidencias los lunes y jueves</div>

Ocultamos ambos divs y por último con un sencillo JavaScript, hacemos que se muestren los días de la semana que nos interese, en mi caso lunes (1) y jueves (4):

<script>

var d = new Date();

var numdia = d.getDay();

if (numdia == 1 || numdia == 4) {

   $("#Enlace").show();

 } else {

   $("#textolunes").show();

 } 

</script>

Solo recordar que el domingo es el 0 y el sábado el 6.

domingo, 5 de enero de 2020

Ocultar y mostrar elementos

Una de las cosas que más nos piden es crear una lista de preguntas frecuentes. Esto se puede hacer de manera sencilla, creando una lista con un campo pregunta y otro respuesta.

Para finalmente presentarlo agrupado por pregunta.

Los principales problemas que los usuarios le ven a esta presentación es que sale el nombre del campo y que solo se puede desplegar la respuesta, si se hace clic sobre el nombre del campo "Pregunta".

Mientras que si se hace clic sobre el texto de la propia pregunta no hace nada.

Para solucionar esto, lo que suelo hacer es hacer una vista de datos, donde reconvierto la tabla que nos suele presentar por una serie de divs, quedando por ejemplo:

<div style="border-bottom:1px dotted black;">
  <div id="
{@ID}" style="font-weight:bold;font-size:16pt;cursor:pointer;" onclick="miPregunta(Respuesta{@ID})">
    <xsl:value-of select="@Title"/>
  </div>
  <div id="
Respuesta{@ID}" style="display:none;">
    <xsl:value-of select="@Respuesta" disable-output-escaping="yes"/>
  </div>
</div>

Lo único que nos faltaría es aplicar un JQuery que haga el efecto toogle sobre la respuesta. Hay muchas opciones, la mía suele ser:

<script>
       function miPregunta() {
          $(arguments[0]).toggle();
       }
</script>


domingo, 15 de diciembre de 2019

Mostrar contenido de PDF subido a una biblioteca

 Esta semana nos han pedido que en el formulario de edición de una biblioteca, querían poder ver el contenido del PDF que subían, ya que en el mismo documento se encontraba la información para rellenar las columnas asociadas. 

Para ello, creamos una vistas de datos con el formulario de edición los incrustamos en una celda, en la otra celda lateral incluimos el objeto que nos mostrara el contenido:

<td width="70%">
  <table border="1" cellspacing="0" width="100%">
    <tr>
      <td valign="top">
        <object>
          <embed src="{concat('https://Colecciondesitios.com/Subsitio/Biblioteca/',@FileLeafRef)}" height="1040" width="100%" type="application/pdf"></embed> 
        </object>
      </td>
    </tr>
  </table>
</td>

El resultado es:



sábado, 16 de noviembre de 2019

Limpiar la cache de SharePoint Designer 2013

Un problema que podemos sufrir, es que vayamos a modificar un flujo y tras publicarlo, parece que no se reflejan los cambios.

Tras volvernos locos, descubriremos que SharePoint Designer guarda en cache los archivos y puede que esto nos de problemas.

Para solucionar este punto podremos borrar las cachés en nuestro equipo e indicarle a SharePoint Designer 2013 que no lo guarde en caché.

Para ello:

  1. Cerramos SharePoint Designer 2013
  2. Borramos los archivos que se encuentren en %USERPROFILE%\AppData\Local\Microsoft\WebsiteCache
  3. Borramos los archivos que se encuentren en %APPDATA%\Microsoft\Web Server Extensions\Cache
  4. Abrimos SharePoint Designer 2013, desde el menú Archivo, elegimos Opciones. En la ventana que se abre, en el menú General, elegimos la opción Opciones de la aplicación. La ventana que se abre desmarcaremos la opción Datos del sitio de caché a través de sesiones de SharePoint Designer.
  5. Cerramos SharePoint Designer 2013
Encontré esta gran aportación en:

sábado, 4 de mayo de 2019

Modificar una solución de un sitio de SharePoint y volver a usarla

Esta semana por una serie de problemas con los tipos de contenidos, hemos creado, borrado y vuelto a crear un tipo de contenido con el mismo nombre que tenía antes. Todo ello, para utilizar un sitio como plantilla. Al ir a crear un sitio utilizando esa plantilla (Solución en SharePoint) he recibido el siguiente mensaje:


En mi caso, se debe a que aunque sólo es utilizando el nuevo tipo de contenido, internamente en el sitio queda una referencia a los tipos de contenidos utilizados. Y como todo en SharePoint, lleva una referencia de tipo numérico.

Lo que hemos hecho es acceder a la raiz de nuestra colección de sitios y acceder al sitio donde se almacenan las soluciones:

http://misitio/_catalogs/solutions/Forms/AllItems.aspx?InitialTabId=Ribbon%2ESolution&VisibilityContext=WSSTabPersistence

He descargado la solución haciendo clic en el nombre de la misma. Esto me permite descargar un archivo con la extensión WSP. Lo renombre a la extensión ZIP y lo descomprimo con 7ZIP.

Observaré una tenemos una serie de carpetas como:


Lo siguiente que hemos hecho es lanzar Notepad++ y buscar la referencia al tipo de contenido que tenemos duplicado:


Eliminaremos la referencia a la que ya no utilizamos, para eso hemos buscado en los tipos de contenido de nuestra colección de sitios el tipo de contenido que tenemos ahora y en la URL hemos encontrado algo como:

http://misitio//_layouts/15/ManageContentType.aspx?ctype=0x010010D822ECD615024BB1FFCE750764AA52

De donde se que el tipo de contenido que debo de dejar es que acaba en 52 y borrar la etiqueta completa ContentType que acaba en D6.

Parece que ya lo tenemos, pero no. Ahora si volvemos a comprimirlo y cambiarle la extensión a WSP, veremos que nos da un error de que no tiene el CAB correspondiente.

Para ello, lo que haremos será descargar MakeDDF de su página oficial:


Copiaremos el archivo makeddf.exe en la carpeta donde hemos descomprimido el ZIP y lanzaremos un simbolo de comandos, nos posicionaremos en la carpeta correspondiente mediante el comando cd. Y tras ello ejecutaremos algo como:

makeddf.exe /p "Plantilla" /d "Plantilla.ddf" /c "Plantilla.cab"

Esto nos creará un archivo .ddf, tras ello ejecutaremos algo como:

makecab /f Plantilla.ddf

Esto nos creara el archivo .CAB. El cual renombraremos a nuestro deseo y le cambiaremos la extensión a WSP. Y ya por ultimo lo subiremos a nuestra colección de sitios como nueva solución, la cual activaremos desde el entorno de ventana.

Referencia en Inglés:

sábado, 20 de abril de 2019

Mostrar el nombre de un archivo en una vista de datos

 Al hacer una EditForm personalizado con SharePoint Designer, nos incluirá todos los campos salvo el nombre del archivo.

Para mostrarlo nosotros, bastará con llamar a: FileLeafRef

Quedando algo como:

<SharePoint:FormField runat="server" id="ff1{$Pos}" ControlMode="Edit" FieldName="FileLeafRef" __designer:bind="{ddwrt:DataBind('u',concat('ff1',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@FileLeafRef')}"/>

<SharePoint:FieldDescription runat="server" id="ff1description{$Pos}" FieldName="FileLeafRef" ControlMode="Edit"/>


sábado, 16 de marzo de 2019

Filtra una vista de datos por la fecha actual (III)

Siguiendo la última entrada, me pidieron que desde una caja se pudiera introducir la fecha, para que esto pudiera funcionar basto con poner un input con el id="fecha" e incluir el siguiente código:

$("#fecha").change(function(){
    var dir = window.location.href;
var fechad = dir.split('date=')[1];
var fechai = dir.split('date=')[0];
var nuevafecha = $("#fecha").val();
window.location.href= fechai + 'date=' + nuevafecha;
}); 

Esto hace que recogemos la URL, no quedamos con la parte fija, recogemos la fecha del input y redireccionamos a la concatenación de ambos.

Y para recuperar de la URL la fecha y ponerla en el campo input, bastaría con:

var direccion = window.location.href;
var fecha = direccion.split('date=')[1];
$( "#fecha" ).val(fecha);