Reputation: 28705
I have one aspect which is the parent aspect of two other aspects.
<aspect name="my:parentAspect">
</aspect>
<aspect name="my:subAspect1">
<parent>my:parentAspect</parent>
</aspect>
<aspect name="my:subAspect2">
<parent>my:parentAspect</parent>
</aspect>
Now I want to use the "aspect"-evaluator in my share-config-custom to apply some customization if a node directly has the aspect "my:parentAspect" or if the node has an aspect that has inherited from "my:parentAspect" by having it as a parent.
<config evaluator="aspect" condition="my:subAspect1">...</config>
<config evaluator="aspect" condition="my:subAspect2">...</config>
works, but I would prefer to use
<config evaluator="aspect" condition="my:parentAspect">...</config>
because the configs for each subAspect are actually all the same.
However, this does not work for nodes that don't have the my:parentAspect directly attached bu only inheriting the aspect.
What's the best practice to check for an aspect regardless whether it's directly applied or inherited somewhere down the hierarchy?
Upvotes: 1
Views: 1465
Reputation: 4079
regarding your own comments: don't mix form configs & doclib configs!
org.alfresco.web.config.forms.AspectEvaluator is the Evaluator for form configs like
<config evaluator="aspect" condition="my:parentAspect">...</config>
org.alfresco.web.evaluator.HasAspectEvaluator.java is used for aspect-related evaluator within
<config evaluator="string-compare" condition="DocumentLibrary">
e.g. for indicators, metadata-templates etc. So, org.alfresco.web.config.forms.AspectEvaluator is the one here. It's a subclass of org.alfresco.web.config.forms.NodeMetadataBasedEvaluator that uses the api/metadata Webscript to get the Metadata of the given node:
/api/metadata?nodeRef=" + nodeString + "&shortQNames=true"
This webscript uses org.alfresco.repo.jscript.ScriptNode.toJson() which only includes directly attached aspects.That could be your starting point for a custom Evalutor.
Upvotes: 3