what is type and aspect in alfresco?

2020-07-11 09:05发布

问题:

Right now am started working with alfresco. But am not clear about what is type and whats aspect?. please give in detail with example.

回答1:

Each node on creation has a given type, and just one type, like 'document' or 'folder'. On other hand one node can have many aspects, like 'taggable' or/and 'versionable'.

The node type of a node can change over time, but there is only one type for one node, the aspects are like property attachments, you can add them on creation or in runtime.

Aspects can be also added to many types of nodes, so if you want your model a have special property that will exist in many types, the best way is to create an aspect. Then to maintain your code you only have to maintain the aspect.

Of course you can create your own types and aspects in Alfresco, that is Customizing the content model.

Here is an example of a custom content model:

i:status is a custom aspect.

<?xml version="1.0" encoding="UTF-8"?>
    <model xmlns="http://www.alfresco.org/model/dictionary/1.0" name="i:multimediaModel">
      <description>Multimedia Model</description>
      <author>Pedro Costa</author>
      <version>1.0</version>
      <imports>
         <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d"/>
         <import uri="http://www.alfresco.org/model/content/1.0" prefix="cm"/>
      </imports>
      <namespaces>
         <namespace uri="pt.i.model" prefix="i"/>
      </namespaces>
      <constraints>
      <constraint name="i:status_constraint" type="LIST">
       <parameter name="allowedValues">
        <list>
         <value>Draft</value>
         <value>Pending</value>
         <value>Current</value>
         <value>Archived</value>
        </list>
       </parameter>       
      </constraint>
      </constraints>
      <types>  
     <type name="i:multimedia">
      <title>Multimedia Metadata Model</title>
      <parent>cm:content</parent>
      <archive>true</archive>
      <properties>          
              <property name="i:insertDate">
                  <title>Multimedia insert date</title>
                     <description>
                     Multimedia insert date can be diferent of the 
                     insert date in alfresco, this apllies to multimedia 
                     created before database migration to alfresco
                     </description>
                     <type>d:datetime</type>
                     <mandatory>false</mandatory>
                 </property>
                 <property name="i:multimediaFormat">
        <title>Multimedia Format</title>
              <description>Multimedia Format, file type</description>
              <type>d:text</type>
              <mandatory>false</mandatory>
             </property>
             <property name="i:contentLength">
              <title>Content Length</title>
              <description>The file size in bytes</description>
              <type>d:long</type>
              <mandatory>false</mandatory>
             </property> 
             <property name="i:copyright">
              <title>Copyright</title>
              <description>Copyright</description>
              <type>d:text</type>
              <mandatory>false</mandatory>
             </property>
      </properties>
      <mandatory-aspects>
        <aspect>cm:taggable</aspect>
        <aspect>cm:auditable</aspect>
        <aspect>i:status</aspect>    
      </mandatory-aspects>
     </type>    
       </types>   
       <aspects>
      <aspect name="i:status">
       <title>Multimedia Status</title>
        <properties>
         <property name="i:status">
          <title>Status</title>
          <type>d:text</type>
          <default>Draft</default>
          <constraints>
           <constraint ref="i:status_constraint" />
          </constraints>     
         </property>    
        </properties>   
      </aspect>
       </aspects>   
    </model>


回答2:

I'll try to create a shorter answer, although the long one is also useful.

As you know, model defines the "types" of data you'll store in the repository. So, a type is a form of object you'll be storing - together with it's properties like name, title, description in default model or "mytype:amount", "mytype:date" or similar in custom models. So each document in alfresco is of a certain type (an "user" type, a "folder" type, a "content" type for default model).

And aspect - it's something best described as an additional set of properties.

So, you may have a type: "invoice". It has properties like amount, due date and payee.

But you can also have an aspect, "vendor" - with additional data, like vendor name and vendor account number.

So, you can add aspects to your invoices - add additional properties like vendor name to the invoices. But you can also add this aspect to a "folder" or space in alfresco - for example, you can have a space for a vendor, or a contract or some other document - and to each of those types you can add the aspect "vendor".