Extraer metadatos de nombre de fichero

cancel
Showing results for 
Search instead for 
Did you mean: 
sexus6
Member II

Extraer metadatos de nombre de fichero

Tenemos definidas de hace tiempo una serie de nomenclaturas para el nombre de los ficheros de documentos desde hace tiempo.
Tipo:
ITEM-EMPRESA-CLIENTE-FECHA.PDF

De tal forma que puede aparecernos:
factura-empresa1-cliente1-22012010.pdf

El problema es que como estos pdf son escaneados, el extractor de metadatos de alfresco no recoge información relevante alguna de dentro del pdf.

Me preguntaba si alfresco sería capaz de extraer estos datos del nombre del fichero, que en todos los casos, sigue esta estructura y separado por el carácter "-". Si es así, me podríais orientar de como debo hacerlo? En el wiki no me he aclarado demasiado de como debería hacerlo ya que los ejemplos que ponen son para sacar datos del interior del propio pdf.

Un saludo y gracias
8 Replies
venzia
Senior Member

Re: Extraer metadatos de nombre de fichero

Te puedes crear una regla .. que ejecute un script el cual hara algo similar a esto :
var props=document.name.split("-");
//props[0] ITEM
//props[1] EMPRESA
//props[2] CLIENTE
//props[3] FECHA
document.properties["prefix:item"]=props[0];
….
document.save();
Espero que te sirva.
Saludos,
sexus6
Member II

Re: Extraer metadatos de nombre de fichero

Perfecto

He creado un aspecto con esos campos, y luego el script que me comentas.

Tal vez peco de mega novato, pero no he conseguido que el último campo me lo sacara bien…al hacer split con ("-"), con este ejemplo:
ITEM-EMPRESA-CLIENTE-FECHA-NUMERO.pdf
el valor del último campo NUMERO = "NUMERO.pdf"

Claro esta el .pdf me sobra. Para quitarlo he intentado lo siguiente:

var props2 = props[4].split(".");
document.properties["prefix:numero"]=props2[0];
document.save();

Y tambien

document.properties["prefix:numero"]=props[4].split(".")[0]
document.save()

Pero nada, en todos los casos me da error alfresco:

Caused by: org.alfresco.service.cmr.repository.datatype.TypeConversionException: The property value is not compatible with the type defined for the property:
   property: Name: {my.new.model}numero
Title: null
Description: null
Default Value: null
DataType Name: {http://www.alfresco.org/model/dictionary/1.0}text
ContainerClass Name: {my.new.model}documentosTrabajo
isMultiValued: false
isMandatory: false
isMandatoryEnforced: false
isProtected: false
isIndexed: true
isStoredInIndex: false
isIndexedAtomically: true
indexTokenisationMode: TRUE

   value: org.mozilla.javascript.Undefined@1b185fd
   value type: class org.mozilla.javascript.Undefined

El tipo de datos del campo NUMERO es texto. Aunque lleve numeros son codigos que a veces llevan 0 por delante, de ahi no usar numericos.
venzia
Senior Member

Re: Extraer metadatos de nombre de fichero

El valor de "prefix" debe adecuarse a tu modelo de contenido ..
pega el contenido del fichero donde declaras los aspectos y te digo cual es.
Lo del split para quitar el .pdf esta bien planteado .. tambien se puede hacer un "props[4].substring(0,props[4].indexOf("."))"
Saludos,
sexus6
Member II

Re: Extraer metadatos de nombre de fichero

Realmente he usado un prefijo hecho por mi, ya que el prefix que he definido y algunos textos lleva el nombre de mi empresa, para no pastearlo por aqui.Para no liar, he puesto el prefix original de tu post. Igual lo he liado mas.
Te pasteo modelo:


<?xml version="1.0" encoding="UTF-8"?>
<model name="viu:visiounifymodel" xmlns="http://www.alfresco.org/model/dictionary/1.0">

   <description>Modelo para Documentación</description>
   <author>sexus6</author>
   <version>1.0</version>

   <imports>
         <!– Import Alfresco Dictionary Definitions –>
         <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d"/>
         <!– Import Alfresco Content Domain Model Definitions –>
         <import uri="http://www.alfresco.org/model/content/1.0" prefix="cm"/>
   </imports>

   <namespaces>
      <!– Define a Namespace for my new definitions –>
      <namespace uri="my.new.model" prefix="viu"/>
   </namespaces>

   <!– Type and Aspect definitions go here –>

   <aspects>
        <aspect name="viu:documentos">
                <title>Documentos</title>
                <properties>
                        <property name="viu:item">
                                <type>d:text</type>
                        </property>
                        <property name="viu:empresa">
                                <type>d:text</type>
                        </property>
                        <property name="viu:cliente">
                                <type>d:text</type>
                        </property>
                        <property name="viu:fecha">
                                <type>d:text</type>
                        </property>
                        <property name="viu:numero">
                                <type>d:text</type>
                        </property>
                </properties>
        </aspect>
   </aspects>
</model>


Luego el script ha quedado tal que asi:


var props=document.name.split("-");
document.properties["viu:item"]=props[0];
document.properties["viu:empresa"]=props[1];
document.properties["viu:cliente"]=props[2];
document.properties["viu:fecha"]=props[3];
document.properties["viu:numero"]=props[4];
//document.properties["viu:numero"]=document.properties["viu:numero"].split(".")[0]
document.save();

He comentado con // lo que me da el error que te posteado antes….
Tal cual esta al coger el props[4] me coge el .pdf, y todo lo demás perfecto. Por lo que entiendo que el modelo no esta mal creado no?
venzia
Senior Member

Re: Extraer metadatos de nombre de fichero

Ok, tienes razon .. entre el error y lo de prefix me habia despistado.
me da que es por que utilizas la propiedad .. y antes de hacer el save esta no tiene valor asignado .. prueba con esto :
var props=document.name.split("-");
document.properties["viu:item"]=props[0];
document.properties["viu:empresa"]=props[1];
document.properties["viu:cliente"]=props[2];
document.properties["viu:fecha"]=props[3];
document.properties["viu:numero"]=props[4].split(".")[0]
document.save();
Ya nos cuentas
Saludos,
sexus6
Member II

Re: Extraer metadatos de nombre de fichero

Pues nada al final lo he solucionado de esta forma que me aconsejaste:

var props=document.name.split("-");
document.properties["viu:item"]=props[0];
document.properties["viu:empresa"]=props[1];
document.properties["viu:cliente"]=props[2];
document.properties["viu:fecha"]=props[3];
document.properties["viu:numero"]=props[4].substring(0,props[4].indexOf("."))
document.save()

Y va perfecto. El problema es que haciendo pruebas de esto, he definido dos espacios: SCAN y PRUEBAS. En ambos espacios he definido 2 reglas para todos los documentos entrantes:
- Regla que aplica el aspecto que he creado con estos campos (item, empresa, cliente, etc).
- Regla que ejecuta el script que he pasteado, para que a partir del nombre del fichero relleno estos campos.

Claro esta mi intención es que si muevo el fichero entre los espacios SCAN <-> PRUEBAS, cada vez que entran el fichero, se ejecuta de nuevo las dos reglas (por si acaso cambiamos el nombre del fichero se actualize la info, o por si el fichero aun no tiene aspecto ni datos rellenados).

La primera vez que entra un fichero en alguno de estos dos espacios va perfecto. Aplica el aspecto y rellena los datos. El problema es que si corto/pego el fichero y lo paso a el otro espacio (da igual el orden), me aparece o este error:
   
No se puede pegar elemento debido a un error del sistema: Node has been pasted into its own tree.

o este

Caused by: org.alfresco.error.AlfrescoRuntimeException: 05160010 TypeError: Cannot call method "substring" of undefined 

En ambos casos no se que ocurre o por que me da estos errores.

Un saludo y gracias
venzia
Senior Member

Re: Extraer metadatos de nombre de fichero

El primer error tiene pinta de ser un bug .. echale un vistazo al siguiente articulo del jira de Alfresco https://issues.alfresco.com/jira/browse/ETHREEOH-3323?page=com.atlassian.jira.plugin.system.issuetab....
El segundo error viene dado porque en el nombre del documento no encuentra el nº .. es decir .. q solo lleva ITEM-EMPRESA-CLIENTE-FECHA.pdf .. confirmalo pues no tiene sentido que este error se deba a otra causa.
Saludos,
calvo
Senior Member

Re: Extraer metadatos de nombre de fichero

Para este error:
Caused by: org.alfresco.error.AlfrescoRuntimeException: 05160010 TypeError: Cannot call method "substring" of undefined

Se debe utilizar "substr".
De esta forma, quedaría:
document.properties["viu:numero"]=props[4].substr(0,props[4].indexOf("."))