12 de diciembre de 2017

:: Alfresco. Importación masiva de documentos

Alfresco dispone de una utilidad para llevar a cabo la importación masiva de documentos, esta está accesible en la siguiente url:


http://localhost:8383/alfresco/service/bulkfsimport


Los campos que deberemos cumplimentar son los siguientes:

Import directory
Directorio desde el que realizaremos la importación (ficheros a importar en nuestro Alfresco)

Por ejemplo: d:\software
Target space
Path
Ruta -dentro de nuestro Alfresco- al nodo (carpeta) sobre la que se realizará la importación

Por ejemplo: /Espacio de empresa/Sitios/netic360/documentLibrary/Inicio
NodeRef
Referencia al nodo sobre el que queremos importar (por ejemplo carpeta dentro de nuestro Alfresco) 
Por ejemplo: workspace://SpacesStore/844bc038-53f5-4a79-b06e-941c1b8302c1
Disable rules
Nos permitirá - si es necesario - habilitar/deshabilitar la ejecución de reglas, lo que podría ralentizar la carga masiva

Replace existing files
Marcando esta opción reemplazará los ficheros existentes con los que están siendo importados

Batch size
Es el nº de directorio y ficheros que serán importados de una sola vez
Por ejemplo: 10
Number of threads
Número de hilos de ejecución
Por ejemplo: 5

Para comprobar el estado de importación podemos acceder a la url:

http://localhost:8383/alfresco/service/bulkfsimport/status

Para obtener el path o el NodeRef es útil hacer uso de las "Herramientas de administración" > "Navegador de Nodos".

7 de diciembre de 2017

:: Alfresco. Creación de una lista de datos

En este caso, la prueba de concepto será la creación de un tipo personalizado, en concreto una lista de datos. Para ello, seguiremos los siguientes pasos:


.- Seleccionaremos la opción: "Herramientas administrativas" > "Gestor de modelos" (disponible en la versión 5.2)

.- Crearemos un nuevo modelo, cumplimentando los datos del formulario:
Espacio de nombres: http://www.alfresco.org/model/publicaciones2/1.0
Prefijo: publi2
Nombre: Publicaciones2

.- Tras cumplimentar los datos, crearemos los distintos campos a contemplar en la lista. Desde el gestor de modelos no permite la creación heredando del padre "dlListItem" por lo que una vez creado el modelo, lo exportaremos (.zip) y modificaremos los ficheros oportunos con los valores orrespondientes.


 .- Importaremos el modelo con las modificaciones, y ya tendremos a nuestra disposición la nueva lista de datos

El tipo de datos definido está compuesto por dos ficheros cuyo contenido es el siguiente:
Fichero: publicaciones2.xml
< ?xml version="1.0" encoding="UTF-8" ?>
< model xmlns="http://www.alfresco.org/model/dictionary/1.0" name="publi2:Publicaciones2" >
< description >Gestionar publicaciones< /description >
< author >neTIC360< /author >
< imports >
< import uri="http://www.alfresco.org/model/datalist/1.0" prefix="dl" />
< import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d" />
< /imports>
< namespaces>
< namespace uri="http://www.alfresco.org/model/publicaciones2/1.0" prefix="publi2" />
< /namespaces >
< data-types />
< constraints />
< types >
< type name="publi2:Publicaciones2" >
< title >Publicaciones neTIC360< /title >
< description >Listas de datos de Publicaciones< /description >
< parent >dl:dataListItem< /parent >
< properties >
< property name="publi2:titulo" >
< title >Título< /title >
< type >d:text< /type >
< mandatory >true< /mandatory >
< index enabled="true" >
< tokenised >TRUE< /tokenised >
< facetable >true< /facetable >
< /index >
< /property >
< property name="publi2:autor" >
< title >Autor< /title >
< type >d:text< /type >
< mandatory >false< /mandatory >
< index enabled="true" >
< tokenised >TRUE< /tokenised >
< facetable >false< /facetable >
< /index >
< /property >
< property name="publi2:isbn" >
< title >ISBN
< type >d:text< /type >
< mandatory >false< /mandatory >
< index enabled="true" >
< tokenised >TRUE< /tokenised >
< facetable >false< /facetable >
< /index >
< /property >
< /properties >
< associations />
< overrides />
< mandatory-aspects />
< /type >
< /types >
< aspects />
< /model >



Fichero: CMM_publicaciones2_Model.xml
< ?xml version="1.0" encoding="UTF-8"? >< module >
< id >CMM_Publicaciones2< /id >
< auto-deploy >true< /auto-deploy >
< configurations >


< config condition="DocumentLibrary" evaluator="string-compare" replace="false" >
< types >
< type name="dl:dataListItem" >
< subtype label="" name="publi2:Publicaciones2" />

< /types >
< /config >


< config condition="publi2:Publicaciones2" evaluator="node-type" >
< forms >
< form >
< field-visibility >
< show force="true" id="dl:title" />
< /field-visibility >
< appearance >
< set appearance="whitespace" id="publi2:Publicaciones2_cmm_set0" />
< field id="dl:title" set="publi2:Publicaciones2_cmm_set0" >
< /field >
< /appearance >
< /form >


< form id="doclib-simple-metadata" >
< edit-form template="../documentlibrary/forms/doclib-simple-metadata.ftl" />
< field-visibility >
< show force="true" id="dl:title" />
< /field-visibility >
< appearance >
< set appearance="whitespace" id="publi2:Publicaciones2_cmm_set0" />
< field id="dl:title" set="publi2:Publicaciones2_cmm_set0" >
< /field >
< /appearance >
< /form >


< form id="doclib-inline-edit" >
< field-visibility>
< show id="dl:name" />
< show force="true" id="dl:content" />
< show force="true" id="dl:title" />
< show force="true" id="dl:description" />
< /field-visibility >
< appearance >
< field id="dl:name" >
< control >
< control-param name="maxLength" >255< /control-param >
< /control >
< /field >
< field id="dl:title" >
< control template="/org/alfresco/components/form/controls/textfield.ftl" />
< /field >
< field id="dl:content" label-id="" >
< control>
< control-param name="editorAppearance" >explorer< /control-param >
< control-param name="forceEditor" >true< /control-param >
< /control >
< /field >
< /appearance >
< /form >
< /forms >
< /config >




< config condition="FormDefinition" evaluator="string-compare" >
< form-definition id="Publicaciones2">[{"elementconfig":{"label":"","appearance":"bordered-panel"},"pseudonym":"cmm/editor/layout/1cols","label":"cmm.form-editor.palette.one-column","type":["layout"],"column":[{"pseudonym":"cmm/editor/property/text","id":"cm:title","elementconfig":{"infoname":"cm:title","infolabel":"Título","infotype":"d:text","force":true},"label":"Título [cm:title]","type":["property"]}]}]< /form-definition >
< /config >
< /configurations >
< /module >

30 de noviembre de 2017

:: Sombras en CSS

En CSS3 podemos establecer sombras sobre diversos elementos por medio de "text-shadow" y "box-shadow".
Un sencillo ejemplo de su uso sería el siguiente:
< !DOCTYPE html >
< html lang="es" >
< head >
< meta charset="UTF-8" >
< title >Text Shadow y Box Shadow< /title >
< style >
body{
font-family: trebuchet ms;
display: flex;
justify-content: space-around;
flex-direction: column;
margin: 40px;
}
h1{
color: #000;
text-shadow: 0 0 20px #dadada;
}
input{
font-size: 1em;
background-color: #fff;
border: 1px solid #dcdcdc;
border-radius: 5px;
padding: 8px;
width: 400px;
box-shadow: 0 0 20px #dedede;
}
div {
padding: 20px;
background-color: #333;
color: #ddd;
width: 300px;
font-size: 1em;
box-shadow: 0 0 20px #dcdcdc;
border-radius: 5px;
}
< /style >
< /head >
< body >
< h1 >Texto con sombra< /h1 >
< br />
< input type="text" placeholder="Introduzca un valor" />
< br />
< div >Efecto sobre una capa< /div >
< /body >
< /html >


La salida del código anterior sería algo como esto:


24 de noviembre de 2017

:: Liferay. Configurando urlrewrite

Para llevar a cabo esta tarea, Liferay utiliza una libreria de "tuckey" de forma similar al mod-rewrite de Apache. Esta librería nos permite tener un sistema de gestión de redirecciones en las fases iniciales de procesado de peticiones.

El filtro que viene configurado por defecto en el fichero: "liferay-web.xml" es el siguiente:
< filter > < filter-name >URL Rewrite Filter< /filter-name > < filter-class >com.liferay.portal.servlet.filters.urlrewrite.UrlRewriteFilter< /filter-class > < init-param > < param-name >logLevel< /param-name > < param-value >ERROR< /param-value > < /init-param > < init-param > < param-name >statusEnabled< /param-name > < param-value >false< /param-value > < /init-param > < init-param > < param-name >url-regex-ignore-pattern< /param-name > < param-value >(^/combo/)|(^/html/.+\.(css|gif|html|ico|jpg|js|png)(\?.*)?$)< /param-value > < /init-param > < /filter >
En este mismo fichero podría llevarse a cabo la siguiente modificación para evitar que se procese el filtro con cada una de las peticiones realizadas a nuestro portal.
De esta manera, para evitar que ejecute peticiones innecesarias podemos modificar la expresión regular por la siguiente:

< param-value >(^/combo/)|(^/image/)|(^/document/)|(^.*\.(css|gif|html|ico|jpg|js|png|woff|ttf|eot|bmp).*)|(^/html/.+\.(css|gif|html|ico|jpg|js|png)(\?.*)?$)< /param-value >

Más información: http://tuckey.org/urlrewrite/

17 de noviembre de 2017

:: Esquema SMS

El esquema SMS permite mostrar una pantalla para enviar un SMS desde nuestras aplicaciones web.
< a href="sms:+34 123456789?body=SMS desde la web" >Envíanos un SMS< /a >

El enlace anterior mostraría la opción de enviar un SMS con el texto: "SMS desde la web".

De todas formas, es necesario señalar que no todos los dispositivos soportan el parámetro "?body". Por ejemplo, en IOS no podemos especificar este parámetro para que el SMS aparezca con el cuerpo ya cumplimentado y tendremos que llevar a cabo esta tarea de manera manual.

12 de noviembre de 2017

:: Alfresco. Obtener los mimetypes definidos (Tip)

En Alfresco 5.2 podemos consultar los mimetypes definidos invocando la siguiente url:


http://{Alfresco}/alfresco/s/mimetypes
http://localhost:8383/alfresco/s/mimetypes?mimetype=* (Obtendremos las transformaciones disponibles)



Obtendremos un listado con los tipos definidos en nuestra instalación de Alfresco (simpre que tengamos permisos para llevar a cabo esta llamada):


De esta manera podemos obtener los detalles sobre las posibles conversiones soportadas por Alfresco.

9 de noviembre de 2017

:: Traducir textos desde Excel (Tip)

En ocasiones necesitamos llevar a cabo traducciones de un ficheros de recursos, y aunque lo normal es contratar un servicio de traducción profesional, para aquellos proyectos en los que no importe demasiado o bien se desee realizar las traducciones con Google Translate, una opción sería utilizar Excel para automatizar este proceso.



Los pasos a seguir serían:
1.- Crear una hoja excel en Google Drive
2.- En la columna A insertaremos los términos a traducir (uno por fila)
3.- En la columna B1 insertaremos la fórmula siguiente, por ejemplo para traducir del español al inglés:

=GOOGLETRANSLATE(A1;"ES";"EN");

4.- Aplicaremos esta misma fórmula al resto de celdas de la columna

De esta manera tendremos los términos traducidos de una manera rápida.

:: Liferay. Script para ir al inicio de la página

En diversos temas de apariencia es necesario contar un enlace que permita al usuario realizar un scroll al inicio de la página. Este comport...