1

我正在尝试按照本文中提供的示例在 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);
    }
}

ServiceRegistry参考是由 Spring 注入的,它工作正常。如果我只调用loadData()from initialize(),它会执行 Lucene 查询,获取数据,然后下拉菜单会正确显示。只是它不是动态的:除非我重新启动 Alfresco 服务器,否则数据不会刷新。

getAllowedValues()每次 UI 必须显示具有此约束的属性时调用。引用帖子上的想法也是调用loadData()from getAllowedValues(),因此这些值实际上是动态的。但是当我这样做时,我没有得到任何数据。Lucene 查询是一样的,但是返回 0 个结果,所以我的下拉列表只显示-.

顺便说一句,我正在做的查询是:+TYPE:"cm:category" +@cm\:description:"something here",并且在每种情况下都是相同的。它可以从初始化开始,但不能从 getAllowedValues 开始。

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

谢谢

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

4

1 回答 1

5

这个动态值列表约束是一个坏主意,我告诉你为什么:

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

您将无法轻松解决此问题。标准 UI 将在无效状态节点上失败。简单地编辑这个值并将其设置为有效的值是行不通的。你被警告了。

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

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

于 2011-02-01T11:45:22.977 回答