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);

sábado, 23 de febrero de 2019

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

Siguiendo con la anterior entrada, lo siguiente que nos pedían eran unos botones para poder avanzar y retroceder 7 días, para eso bastaba con ponerle una llamada a la siguiente función:

function moverdia(num){
var dir = window.location.href;
var fechad = dir.split('date=')[1];
var fechai = dir.split('date=')[0];
var nuevod = new Date(fechad);
nuevod.setDate(nuevod.getDate(fechad) + num);
var ano = nuevod.getFullYear();
var mes = (nuevod.getMonth()+1);
mes = ("0" + mes).slice(-2);
var dia = nuevod.getDate();
dia = ("0" + dia).slice(-2);
window.location.href= fechai + 'date=' + ano + '-' + mes + '-' + dia;
}

Gracias a esta función recogemos la fecha de la URL, añadimos el número de días que le pasamos como parámetro (positivo o negativo), nos aseguramos que el mes tenga dos dígitos y redireccionamos con la nueva fecha como parámetro de la URL.

sábado, 19 de enero de 2019

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

Recientemente quería que en una vista de datos de SharePoint 2013 que ya tenía hecha con SharePoint Designer. Querían que filtrará por la fecha actual. Para ello bastaría con poner el filtro de la propia vista a la fecha actual:



Tras ello, me pidieron que existiera  un botón que les permitiera avanzar 7 días o retroceder 7 días.
Entonces, tuve que darle una vuelta al planteamiento.
Se me ocurrió cambiar el filtro de fecha actual por el de cadena de consulta en la URL:



Entonces para generar la fecha actual en la URL, tuve que incluir el siguiente código en el head, para evitar que se note la recarga:

<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script>
var direccion = window.location.href;
if( direccion.indexOf('date=') == -1){
var d = new Date();
var ano = d.getFullYear();
var mes = (d.getMonth()+1);
mes = ("0" + mes).slice(-2);
var dia = d.getDate();
dia = ("0" + dia).slice(-2);
window.location.href= direccion + '?date=' + ano + '-' + mes + '-' + dia;
}
</script>

Con esto conseguimos que la fecha actual este en la URL de la forma date=2019-01-19. Y conseguimos que la vista de datos nos muestre los elementos cuya fecha por la que filtramos coincida con el día actual.