There are few out of the box content models are available
which can be used to design the custom content types.
File
|
Namespace
|
dictionaryModel.xml
|
model/dictionary/1.0
|
systemModel.xml
|
model/system/1.0
system/registry/1.0
system/modules/1.0
|
contentModel.xml
|
model/content/1.0
|
bpmModel.xml
|
model/bpm/1.0
|
forumModel.xml
|
model/forum/1.0
|
All these models are placed in WEB-INF\classes\alfresco\model.
Create Sample Custom Model
Hope development environment and Alfresco 4.x already in place. We can use two approaches for
building the alfresco custom application. One using the war file creation and
other is amp creation. It depends on the requirement which is applicable for
you.
For custom content model need to follow below steps
1)
Create directory structure
2)
Create a model file
3)
Create custom model context file
4)
Create property file for resource bundle
5)
Create custom web-client-config
6)
Build war or amp
7)
Deploy in tomcat and Restart
Create Directory structure
I would suggest to follow the following the
directory structure which is easy to maintain for large scale development.
Create a model file
Create content model file
sampleContentModel.xml in /src/main/config/model.
<?xml version="1.0"
encoding="UTF-8"?>
<!--
Definition of new Model -->
<model name="ss:contentmodel"
xmlns="http://www.alfresco.org/model/dictionary/1.0">
<!-- Optional meta-data about the
model -->
<description>Sample Content Model</description>
<author>Saket S</author>
<version>1.1</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" />
<import uri="http://www.alfresco.org/model/bpm/1.0"
prefix="bpm" />
</imports>
<namespaces>
<namespace uri="http://www.saketsaraf.com/model/content/1.0"
prefix="ss"
/>
</namespaces>
<types>
<type name="ss:sampleFolder">
<title>Sample Folder</title>
<parent>cm:folder</parent>
</type>
<type name="ss:sampleContent">
<title>Sample Content</title>
<parent>cm:content</parent>
<properties>
<property name="ss:name">
<type>d:text</type>
</property>
</properties>
</type>
</types>
</model>
|
In above code
- <parent> is
a type of content which could be file or folder or custom.
- <namespace>
uri could be anything with proper format. Version plays very important role and
it should be incremental for major changes.
Create
custom model context file
For context file either you can create
custom context file or make an entry in existing module-context.xml file.
Depends on complexity of application you can make the decision.
For this example will create the custom
context file sample-bootstrap-context.xml in /src/main/config/context/ folder.
<beans>
<bean id="extensioniop.dictionaryBootstrap"
parent="dictionaryModelBootstrap"
depends-on="dictionaryBootstrap">
<property name="models">
<list>
<value>
alfresco/module/${artifactId}/model/sampleContentModel.xml
</value>
</list>
</property>
<property name="labels">
<list>
<value>
alfresco.module.${artifactId}.messages.webclient
</value>
</list>
</property>
</bean>
<bean id="sample_alfresco_module.resourceBundlesWebApp"
class="org.alfresco.web.app.ResourceBundleBootstrap">
<property name="resourceBundles">
<list>
<value>
alfresco/module/${artifactId}/messages/webclient
</value>
</list>
</property>
</bean>
</beans>
|
In above code {artifactId} is module id
which mentioned in the pom file. So whenever this code deploys in alfresco it resides
in Module folder with the {artifactId} value.
Create property file for resource bundle
Create property file webclient.properties in
/src/main/config/messages.
name=Name
sample-folder=Sample Folder
|
Create custom web-client-config
In web-clinet-config file add the following
lines in particular sections
<config evaluator="node-type"
condition="ss:sampleContent">
<property-sheet>
<show-property name="ss:name"
display-label-id="name"
/>
</property-sheet>
</config>
<config evaluator="string-compare"
condition="Content Wizards">
<content-types>
<type name="ss:sampleContent"
/>
</content-types>
</config>
<config evaluator="node-type"
condition="ss:sampleFolder">
</config>
<!-- To add in custom Space Types
-->
<config evaluator="string-compare"
condition="Space Wizards">
<folder-types>
<type name="ss:sampleFolder"
description="Sample Folder"
display- label="Sample Folder" />
</folder-types>
</config>
<config
evaluator="string-compare" condition="Action Wizards">
<specialise-types>
<type name="ss:sampleFolder" display-label-id="sample-folder" />
</specialise-types>
</config>
<config evaluator="string-compare"
condition="Advanced Search">
<folder-types>
<type name="ss:sampleFolder" display-label-id="sample-folder" />
</folder-types>
</config>
|
Build war or amp
Time to build the war or amp file using
maven or ant. Verify the logs if any error.
Deploy in tomcat and Restart
Deploy the war in tomcat and restart the
server.
Login to alfresco and verify the sample code.
You should be able to see the custom content type and folder
Happy Coding.