我正在尝试创建一个表单过滤器,它会对表单进行一些后处理。
我想要实现的目标: 每次创建或修改节点时,都应在节点持久化后应用过滤器。
当我编辑/修改现有文件时,它运行得很好,但在创建新节点后它不会运行。
这是我的代码:
public class CaseFormFilter extends AbstractFilter<Object, NodeRef>
{
protected ServiceRegistry registry;
protected NodeService nodeService;
protected SearchService searchService;
protected SiteService siteService;
protected NamespaceService namespaceService;
public void setServiceRegistry (ServiceRegistry registry)
{
this.registry = registry;
this.nodeService = this.registry.getNodeService();
this.searchService = this.registry.getSearchService();
this.siteService = this.registry.getSiteService();
this.namespaceService = this.registry.getNamespaceService();
}
@Override public void afterPersist(Object item, FormData data, NodeRef persistedObject)
{
System.out.println("Persisting!");
}
@Override public void afterGenerate(Object item, List fields, List forcedFields, Form form, Map context)
{
System.out.println("Calling afterGenerate!!");
}
@Override public void beforeGenerate(Object item, List fields,
List forcedFields, Form form, Map context)
{
System.out.println("Calling beforeGenerate!!");
}
@Override public void beforePersist(Object item, FormData data)
{
System.out.println("Calling beforePersist!!");
}
}
我可以看到beforeGenerate
和afterGenerate
始终被调用,即使在查看时也是如此,这是有道理的。
但是,afterPersist
仅在编辑节点时运行,但在创建新节点时不运行。
我做错了什么或遗失了什么?维基/文档在这一点上相当无用,阅读http://wiki.alfresco.com/wiki/Forms_Developer_Guide#Form_Filter只是告诉我查看DOD5015模块,它提供了一个示例,但并没有真正提供任何答案。
我正在使用Alfresco 4.0.b社区版。
编辑:更多澄清
答案 0 :(得分:4)
您必须注册表单过滤器两次。我猜你现在只用nodeFilterRegistry
注册它。对于基于内容模型的表单(创建节点),您需要使用typeFilterRegistry
注册过滤器。
以下是两个注册表的表单过滤器配置示例:
<bean id="yourFormFilterNode" class="com.domain.YourFormFilter" parent="baseFormFilter">
<property name="filterRegistry" ref="nodeFilterRegistry" />
<property name="nodeService" ref="nodeService" />
</bean>
<bean id="yourFormFilterType" class="com.domain.YourFormFilter" parent="baseFormFilter">
<property name="filterRegistry" ref="typeFilterRegistry" />
<property name="nodeService" ref="nodeService" />
</bean>
答案 1 :(得分:0)
很明显,AfterPersist只在提交时被调用,因为在查看时你不会“持久”任何数据。
所以在大多数情况下,你只需要在之前/之后生成。