Alfresco形式过滤器

时间:2011-12-12 15:12:29

标签: java alfresco

我正在尝试创建一个表单过滤器,它会对表单进行一些后处理。

我想要实现的目标: 每次创建或修改节点时,都应在节点持久化后应用过滤器。

当我编辑/修改现有文件时,它运行得很好,但在创建新节点后它不会运行。

这是我的代码:

    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!!");

    }

}

我可以看到beforeGenerateafterGenerate始终被调用,即使在查看时也是如此,这是有道理的。 但是,afterPersist仅在编辑节点时运行,但在创建新节点时不运行。

我做错了什么或遗失了什么?维基/文档在这一点上相当无用,阅读http://wiki.alfresco.com/wiki/Forms_Developer_Guide#Form_Filter只是告诉我查看DOD5015模块,它提供了一个示例,但并没有真正提供任何答案。

我正在使用Alfresco 4.0.b社区版。

编辑:更多澄清

2 个答案:

答案 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只在提交时被调用,因为在查看时你不会“持久”任何数据。

所以在大多数情况下,你只需要在之前/之后生成。