Alfresco的动态列表约束

时间:2010-07-07 06:31:23

标签: constraints alfresco

我正在尝试按照this post中提供的示例,在Alfresco 3.3中创建动态列表约束。

所以,我创建了自己的类ListOfValuesConstraint

public class MyConstraint extends ListOfValuesConstraint {
    private static ServiceRegistry registry;

    @Override
    public void initialize() {
        loadData();
    }

    @Override
    public List getAllowedValues() {
        //loadData();
        return super.getAllowedValues();
    }

    @Override
    public void setAllowedValues(List allowedValues) {
    }

    protected void loadData() {
        List<String> values = new LinkedList<String>();
        String query = "+TYPE:\"cm:category\" +@cm\\:description:\"" + tipo + "\"";
        StoreRef storeRef = new StoreRef("workspace://SpacesStore");
        ResultSet resultSet = registry.getSearchService().query(storeRef, SearchService.LANGUAGE_LUCENE, query);
        // ... values.add(data obtained using searchService and nodeService) ...

        if (values.isEmpty()) {
            values.add("-");
        }
        super.setAllowedValues(values);
    }
}
Spring引用了

ServiceRegistry引用,它工作正常。如果我只从loadData()调用initialize(),它会执行Lucene查询,获取数据,下拉列表会正确显示。只是它不是动态的:除非我重新启动Alfresco服务器,否则数据不会刷新。

每次UI必须显示具有此约束的属性时,都会调用

getAllowedValues()。推荐帖子的想法是从loadData()调用getAllowedValues(),因此值实际上是动态的。但是当我这样做时,我没有得到任何数据。 Lucene查询是相同的,但返回0结果,因此我的下拉列表仅显示-

顺便说一句,我正在做的查询是:+TYPE:"cm:category" +@cm\:description:"something here",每个案例都是一样的。它适用于初始化,但不是来自getAllowedValues。

关于为什么会发生这种情况的任何想法,或者我该如何解决?

由于

编辑:我们昨天升级到Alfresco 3.3.0g社区,但我们仍然遇到同样的问题。

1 个答案:

答案 0 :(得分:4)

这种动态值列表约束是一个坏主意,我告诉你原因:

Alfresco存储库应始终处于有效状态。您的(动态)约束列表将发生变化(这就是您希望它变为动态的原因)。添加项目不是问题,但编辑和删除项目是。如果要从选项列表中删除项目,则具有此属性值的存储库中的节点将无效。

您将无法轻松解决此问题。标准UI将在无效状态节点上失败。只需编辑此值并将其设置为有效的值将无效。你被警告了。

因为ListConstraint的默认UI小部件是下拉列表,所以并非每个下拉列表都应该是ListConstraint。 ListConstraints的设计类似于Status属性:{Draft,Waiting Approval,Approved}。不是客户名单。

在过去的几年里,我看到同样的话题一再出现。你真正想要的是让用户从动态的选项列表中选择一个值(组合框)。这是一个UI问题,而不是字典模型问题。您应该使用web-config-context.xml(Alfresco Web UI)或Alfresco Share设置类似的内容。最后一个更灵活,我建议采取这条道路。