AnsweredAssumed Answered

Basic Aspect creation

Question asked by jdowntain on May 24, 2012
Latest reply on May 31, 2012 by jdowntain
I am trying to create a basic aspect. I followed the below instructions and when I restart and log back in it gives me an error as if I entered a bad user name or password. I attached the instructions I followed along with the .xml files.

Go to the extensions folder (/tomcat/shared/classes/alfresco/extensions) and rename the custom-model-context.xml.sample to custom-model-context.xml if you haven't extended the model yet.
Open customModel.xml file and add your custom aspect at the end of the file, right above "</model>". For e.g. you can add the following, this will add a custom aspect called ProductDetails
<aspects>
<aspect name="custom:ProductDetails">
<title>Product Details</title>
<properties>
<property name="custom:ProductName">
<title>Product Name</title>
<type>d:text</type>
<protected>false</protected>
<mandatory>true</mandatory>
<multiple>false</multiple>
</property>
<property name="custom:ProductDescription">
<title>Product Description</title>
<type>d:text</type>
</property>
<property name="custom:ProductID">
<title>Product ID</title>
<type>d:int</type>
</property>
</properties>
</aspect>
</aspects>
Now modify web-client-config-custom.xml file in the extension folder. This will enable the web client application to recognize the new custom aspect and display it in the web interface.
Add the following XML code at the end of the file, right above </alfresco-config>. This will list our custom aspect in the business rules "Set action values" page.
<config evaluator="string-compare" condition="Action Wizards">
<aspects>
<aspect name="custom:ProductDetails"/>
</aspects>
</config>
Still in web-client-config-custom.xml file. Add the following right after the above code block. The code below will ensure that the custom properties will be displayed in the content's view details page.
<config evaluator="aspect-name" condition="custom:ProductDetails">
<property-sheet>
<separator name="sepProduct1" display-label="Product Details" component-generator="HeaderSeparatorGenerator" />
<show-property name="custom:ProductName"/>
<show-property name="custom:ProductDescription"/>
<show-property name="custom:ProductID"/>
</property-sheet>
</config>
Now we have our custom aspect defined with our additional properties that we want to capture based on our business rules. Lets restart alfresco now for the bootstrap to load this information.
Use custom aspect as a business rule.
Log in to alfresco as an admin and navigate to the space where you want to capture additional properties.
While in the space for e.g. Company Home > Products, click "More Actions" and then "Manage Content Rules"
Click "Create Rule", this is a 4 step process
Step1: Select Condition: All Items
Step2: Select Action: Add aspect to item; Set Values: Product Details
Step3: Type: Inbound; Title: <some title>; Description: <some description>; Check apply rule to sub spaces;
Step4: Review and click Finish
Thats it you are done! try adding documents to the "Product" space, you will see your custom properties.


CustomModel.xml

<?xml version="1.0" encoding="UTF-8"?>

<!– Custom Model –>

<!– Note: This model is pre-configured to load at startup of the Repository.  So, all custom –>
<!–       types and aspects added here will automatically be registered –>

<model name="custom:customModel" xmlns="http://www.alfresco.org/model/dictionary/1.0">

   <!– Optional meta-data about the model –>  
   <description>Custom Model</description>
   <author></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>

   <!– Introduction of new namespaces defined by this model –>
   <!– NOTE: The following namespace custom.model should be changed to reflect your own namespace –>
   <namespaces>
      <namespace uri="custom.model" prefix="custom"/>
   </namespaces>
 





<aspects>
<aspect name="custom:ProductDetails">
<title>Product Details</title>
<properties>
<property name="custom:ProductName">
<title>Product Name</title>
<type>d:text</type>
<protected>false</protected>
<mandatory>true</mandatory>
<multiple>false</multiple>
</property>
<property name="custom:ProductDescription">
<title>Product Description</title>
<type>d:text</type>
</property>
<property name="custom:ProductID">
<title>Product ID</title>
<type>d:int</type>
</property>
</properties>
</aspect>
</aspects>


</model>

Custom-model-context.xml


<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<beans>

    <!– Registration of new models –>   
    <bean id="extension.dictionaryBootstrap" parent="dictionaryModelBootstrap" depends-on="dictionaryBootstrap">
        <property name="models">
            <list>
                <value>alfresco/extension/customModel.xml</value>
            </list>
        </property>
    </bean>
         
</beans>

web-client-config-custom.xml

<alfresco-config>

   <!– Example of overriding the from email address –>
   <!–
   <config>
      <client>
         <from-email-address>someone@your-domain.com</from-email-address>
         <search-max-results>100</search-max-results>
      </client>
   </config>
   –>

   <!– Example of adding languages to the list in the login page –>
   <!–
   <config evaluator="string-compare" condition="Languages">
      <languages>
         <language locale="ca_ES">Catalan</language>
         <language locale="hr_HR">Croatian</language>
         <language locale="cs_CZ">Czech</language>
         <language locale="da_DK">Danish</language>
         <language locale="de_DE">German</language>
         <language locale="es_ES">Spanish</language>
         <language locale="el_GR">Greek</language>
         <language locale="fi_FI">Finnish</language>
         <language locale="fr_FR">French</language>
         <language locale="it_IT">Italian</language>
         <language locale="ja_JP">Japanese</language>
         <language locale="du_NL">Dutch</language>
         <language locale="pl_PL">Polish</language>
         <language locale="pt_PT">Portuguese</language>
         <language locale="pt_BR">Portuguese (Brazilian)</language>
         <language locale="ru_RU">Russian</language>
         <language locale="sv_SV">Swedish</language>
         <language locale="tr_TR">Turkish</language>
         <language locale="zh_CN">Simplified Chinese</language>
      </languages>
   </config>
   –>
  
   <!– Example of configuring advanced search –>
   <!–
   <config evaluator="string-compare" condition="Advanced Search">
      <advanced-search>
         <content-types>
         </content-types>
         <custom-properties>
            <meta-data aspect="app:simpleworkflow" property="app:approveStep" />
         </custom-properties>
      </advanced-search>
   </config>
   –>

   <!– Example of changing the sort direction for a view in the client –>
   <!–
   <config evaluator="string-compare" condition="Views">
      <views>
         <view-defaults>
            <topic>
               <sort-direction>ascending</sort-direction>
            </topic>
         </view-defaults>
      </views>
   </config>
   –>

   <!– Example of adding a custom icon to the Create Space dialog –>
   <!–
   <config evaluator="string-compare" condition="cm:folder icons">
      <icons>
         <icon name="space-icon-custom" path="/images/icons/space-icon-custom.gif" />
      </icons>
   </config>
   –>

   <!– The config below shows how to incorporate the example model–>
   <!– into the web client, for this to work you will need to –>
   <!– rename example-model-context.xml.sample to example-model-context.xml –>
   <!–
   <config evaluator="string-compare" condition="Content Wizards">
      <content-types>
         <type name="my:sop" />
      </content-types>
   </config>

   <config evaluator="node-type" condition="my:sop">
      <property-sheet>
         <show-property name="mimetype" display-label-id="content_type"
                        component-generator="MimeTypeSelectorGenerator" />
         <show-property name="size" display-label-id="size"
                        converter="org.alfresco.faces.ByteSizeConverter"
                        show-in-edit-mode="false" />              
         <show-property name="my:publishedDate" />
         <show-association name="my:signOff" />
         <show-property name="my:authorisedBy" />
         <show-child-association name="my:processSteps" />
      </property-sheet>
   </config>

   <config evaluator="aspect-name" condition="my:imageClassification">
      <property-sheet>
         <show-property name="my:width"/>
         <show-property name="my:height"/>
         <show-property name="my:resolution"/>
      </property-sheet>
   </config>

   <config evaluator="aspect-name" condition="cm:storeSelector">
      <property-sheet>
         <show-property name="cm:storeName" component-generator="StoreSelectorGenerator" />
      </property-sheet>
   </config>
   <config evaluator="string-compare" condition="Action Wizards">
      <aspects>
         <aspect name="cm:storeSelector"/>
      </aspects>
   </config>

   <config evaluator="string-compare" condition="Action Wizards">
      <aspects>
         <aspect name="my:imageClassification"/>
      </aspects>
   </config>

   <config evaluator="string-compare" condition="Advanced Search">
      <advanced-search>
         <content-types>
            <type name="my:sop" />
         </content-types>
         <custom-properties>
            <meta-data type="my:sop" property="my:authorisedBy" />
            <meta-data aspect="my:imageClassification" property="my:resolution" />
         </custom-properties>
      </advanced-search>
   </config>
   –>

<config evaluator="string-compare" condition="Action Wizards">
<aspects>
<aspect name="custom:ProductDetails"/>
</aspects>
</config>

<config evaluator="aspect-name" condition="custom:ProductDetails">
<property-sheet>
<separator name="sepProduct1" display-label="Product Details" component-generator="HeaderSeparatorGenerator" />
<show-property name="custom:ProductName"/>
<show-property name="custom:ProductDescription"/>
<show-property name="custom:ProductID"/>
</property-sheet>
</config>

</alfresco-config>

As always thanks for your continued support!

Outcomes