Tuesday, April 22, 2014

Custom Rule - Alfresco


Custom rule is necessary when we want to perform our custom action based on content entry/update/deletion action.

When specific content enters into space, we will perform our custom action on it.
e.g. ranaming file/allow only specific type of files etc. etc.

Lets have steps to create custom rule
I have used alfresco 4.2.x version.

#1) context file [custom-rule-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>
<bean id="custom-rule-executer" class="com.example.alfresco.repo.action.CustomRuleExecutor" parent="action-executer">
<property name="nodeService">
<ref bean="NodeService" />
</property> 
<property name="fileFolderService">
<ref bean="fileFolderService"/>
</property>
</bean>

<bean id="custom-rule-executer-messages" class="org.alfresco.i18n.ResourceBundleBootstrapComponent">
<property name="resourceBundles">
<list>
<value>alfresco.extension.custom-rule-messages</value>
</list>
</property>
</bean>
</beans>





#2) Properties File [custom-rule-messages.properties]

custom-rule-executer.title=My Custom Rule.

custom-rule-executer.description=This action will allow Custom Rule files.

custom-rule-executer.param_tags.display-label=My Custom Rule files.


#3) Custom Rule class [CustomRuleExecutor.java]

public class CustomRuleExecutor extends ActionExecuterAbstractBase {

 Logger logger = Logger.getLogger(CustomRuleExecutor.class);
 private NodeService nodeService;
 private FileFolderService fileFolderService;

@Override
 protected void executeImpl(Action action, NodeRef addedFile) {
try {

  //add your code here for custom action
} catch (InvalidNodeRefException ine) {
 logger.error("### Node Invalid");
 throw ine;
 } catch (FileExistsException e) {
 e.printStackTrace();
 
 } catch (FileNotFoundException e1) {
 e1.printStackTrace();
 
 }
}
 @Override
 protected void addParameterDefinitions(List<ParameterDefinition> arg0) {

 }
 public NodeService getNodeService() {
 return nodeService;
 }
 public void setNodeService(NodeService nodeService) {
 this.nodeService = nodeService;
 }


 public FileFolderService getFileFolderService() {
 return fileFolderService;
 }

 public void setFileFolderService(FileFolderService fileFolderService) {
 this.fileFolderService = fileFolderService;
 }
}
Place context file and properties file in /tomcat/shared/classes/alfresco/extension folder and
restart alfresco



===============
Ghanshyam  Rathod

India

No comments:

Post a Comment