Sistema de herencias en Alfresco

cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Active Member

Sistema de herencias en Alfresco

Hola, tengo una serie de problemas y me gustaría confirmar las posibles soluciones a ellos.

Resulta que tengo un modelo hecho en Alfresco, llamemosle MODEL, en el cual tenía pensado introducir varios tipos personalizados de documento.

Cada uno de estos tipos personalizados de documento pueden o no compartir una propiedad, por ejemplo 3 documentos pueden tener la propiedad DNI, pero en estos 3 documentos uno puede tener la propiedad nombre, y otro expediente, otro puede tener nombre y expediente pero otra propiedad totalmente distinta a los otros con los que comparte almenos una propiedad.

Una solución que me viene a la cabeza es ir creando tipos que vayan heredando de otros para heredar las propiedades que comparten e ir haciendo toda la organización así, lo veo un poco engorroso pero también creo que es la única solución ¿cierto? El problema que me viene con esto es que en la aplicación que estoy desarrollando para recuperar las propiedades de los tipos de documento, no me aparecen las propiedades reflejadas, es decir utilizo esta url para realizar una petición apiRest y que me devuelva la información del tipo:

alfresco/api/-default-/private/alfresco/versions/1/cmm/MODEL/types/TIPO_PERSONALIZADO

por ejemplo si tengo el tipo_personalizado1 que tiene la propiedad DNI y luego tipo_personalizado2 que extiende de tipo_personalizado1, no me aparece la propiedad DNI en esta petición apiREST pero realmente si existe en el tipo de documento.

¿Hay alguna manera de que realizar alguna petición apiREST que me devuelva todas las propiedades, incluyendo las heredadas? ¿La única manera de llevar a cabo mi proposito con las propiedades de los documentos es de la manera que he planteado, heredando?

Saludos y gracias.

5 Replies
Highlighted
Intermediate

Re: Sistema de herencias en Alfresco

Buenas, Domingo.

Para lo que necesitas alfresco tiene una solución sencilla y eficiente: Se le llaman Aspectos. Un aspecto es similar a un grupo de propiedades que pueden ser aplicado a uno o varios tipos independientemente de las propiedades que tienen esos tipos o su naturaleza. Un ejemplo sería:

Imaginemos que tienes 3 tipos:

Documento_RRHH: Propiedades: Ninguna

Documento_Expediente: Fecha_Creacion (fecha), Activo (booleano)

Documento_Sistemas: Tipo_incidencia (texto)

Imaginemos que quieres aplicar a esos tipos la propiedad "común" ID de tipo texto. Puedes crearte un aspecto que se llame: documento_propiedades_comunes que contenga esta propiedad y asignarlo a cada uno de los tipos añadiendo lo siguiente a cada tipo:

<mandatory-aspects> <aspect>mi_tipo: documento_propiedades_comunes</aspect> </mandatory-aspects>

Se declararía así:

<aspect name="mi_tipo:documento_propiedades_comunes">
   <title>Propiedades Comunes</title>
   <properties>
      <property name="
mi_tipo:id">
         <title>ID del documento</title>
         <type>d:text</type>
      </property>
   </properties>
</aspect>

Y se "aplica al tipo" así:
<type name="mi_tipo:Documento_RRHH">
   <title>Documento RRHH</title>
   <parent>cm:content</parent>

   <mandatory-aspects>
      <aspect>
mi_tipo:documento_propiedades_comunes</aspect>
   </mandatory-aspects>
</type>

Así tu tipo documento rrhh contendrá solo una propiedad. El aspecto puedes aplicarlo a todos los tipos que quieras sin problemas, por eso encaja perfectamente con tus necesidades y creo que sería lo más acertado (además que Alfresco recomienda el uso de Aspectos y seguirías las buenas prácticas a la hora de implementar un modelo).

El ejemplo que acabo de ponerte lo acabo de hacer a mano y puede que contenga algún error sintáctico. Prefiero que te quedes con la idea de cómo funciona. Échale un vistazo a este tutorial (muy bueno): http://ecmarchitect.com/images/articles/alfresco-content/content-article-2ed.pdf

Coméntanos si tienes problemas,

Cris.

Highlighted
Customer

Re: Sistema de herencias en Alfresco

En la línea de lo comentado por Cristina, añadir además que los aspectos también permiten heredar de otros aspectos, lo que proporciona una orientación mucho más dinámica y flexible que los tipos documentales, que son por definición estáticos. 

Por último, señalar que el planteamiento de un modelo documental no es único, puedes usar y combinar tipos y aspectos, sólo tipos o incluso sólo aspectos, según convenga. Quizas el único caso donde puede ser preferible un tipo es si vas a requerir formularios de búsqueda avanzados basados en los tipos definidos.

Saludos.

--C.

Highlighted
Alfresco Employee

Re: Sistema de herencias en Alfresco

Un detalle adicional.

Estás usando una API privada de Alfresco. Fíjate en el private de la URL.

Para trabajar con modelos de contenido, debes utilizar las APIs públicas:

http://localhost:8080/alfresco/s/api/dictionary

http://localhost:8080/alfresco/s/api/classes

http://localhost:8080/alfresco/s/api/defclasses

Es importante porque Alfresco no garantiza compatibilidad para las APIs privadas a lo largo para las nuevas versiones.

Software Engineer in Alfresco Search Team.
Highlighted
Active Member

Re: Sistema de herencias en Alfresco

Muchas gracias por la ayuda aportada!

Entiendo, qué, entonces debería mis tipos personalizados y luego para las propiedades únicamente trabajar con los aspectos y a la hora de subir un fichero, asignarle este aspecto etc. no?

No sabía lo de la API, muchas gracias!

Highlighted
Intermediate

Re: Sistema de herencias en Alfresco

Sí, además puedes asignarlo con una regla a nivel de espacio/carpeta o con un script por ejemplo :-)