A nice thing about Alfresco Share is that, you get a lot of functionality for free and it is very adaptable. But often you want more client-side adaptability and the first think that comes into mind is client-side Javascript. To avoid client-side javascript customization on Share I made a special form evaluator, which gives you the power to have different forms for the same node type, depending on the state/metadata values.
Normally you define a node type form for view and edit of existing nodes:
<config evaluator="node-type" condition="my:nodeType"> ...
This is one time solution for alle nodes of this type and lifecycle. To use a facetted approach, you could now add form configuration depending on a metadata property, like:
<config evaluator="facet-node-type" condition="my:nodeType,my:state=open">
and another
<config evaluator="facet-node-type" condition="my:nodeType,my:state=closed">
This means (given this facet-node-type exists and works :) you should have a resulting form configuration of the 'node-type' and one 'facet-node-type' given your node either have state 'open' or 'closed'
This evaluation is done Share-server-side, so the state (my:state) should preferable be read-only in the resulting forms.
In my example we could have a text field for an 'open' node and none for a 'closed' on.
To make this work we need to define the 'facet-node-type' in the form-config xml
<alfresco-config>
<plug-ins>
<evaluators>
<evaluator id="facet-node-type" class="com.redpill-linpro.alfresco.web.config.forms.FacetNodeTypeEvaluator" />
</evaluators>
</plug-ins>
...
and mainly the java code Source FacetNodeTypeEvaluator.java
Finally lets show the full 'condition' definition available:
General format
condition="<node-type>,<property-evals>"
Where <node-type> is the prefix-nodetype like in the standard node-type evaluator ...
Where <property-evals> is of the format:
<property-eval>[,<property-eval>]*
And <property-eval> is of the format
<property-name>=<property-value>[|<property-value>]*
So I could write the following to select only 'my:node-type' nodes with 'my:state' 'open' or 'closed' and 'my:color' set to 'blue'
condition="my:nodeType,my:state=open|closed,my:color=blue"
This can be used to have a form definition where one-large common form (section) is defined and various small modifications of this is in facet-node-type sections depending on the metadata of the node.
No comments:
Post a Comment