AJP*_*rez 1 constraints 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);
}
}
Run Code Online (Sandbox Code Playgroud)
ServiceRegistry引用是由Spring注入的,它工作正常。如果我只调用loadData()从initialize(),它执行了Lucene查询,获取数据,并正确下拉显示。只是它不是动态的:除非重新启动Alfresco服务器,否则不会刷新数据。
getAllowedValues()每当UI必须显示具有此约束的属性时,都会调用。在提到后的想法是调用loadData()从getAllowedValues()太多,所以该值将是真正的动态。但是当我这样做时,我没有任何数据。Lucene查询是相同的,但是返回0个结果,因此我的下拉列表仅显示-。
顺便说一句,我正在执行的查询是:+TYPE:"cm:category" +@cm\:description:"something here",并且在每种情况下都是相同的。它可以从Initialize起作用,但不能从getAllowedValues起作用。
关于这种情况为什么发生的任何想法,或者我该如何解决?
谢谢
编辑:我们昨天升级到Alfresco 3.3.0g社区,但是我们仍然遇到同样的问题。
这个动态值列表约束是个坏主意,我告诉你原因:
Alfresco储存库应始终处于有效状态。您的(动态)约束列表将发生变化(这就是为什么您希望它是动态的)。添加项目不会有问题,但是编辑和删除项目是有问题的。如果要从选项列表中删除项目,则存储库中具有该属性值的节点将无效。
您将无法轻松解决此问题。标准UI将在无效状态节点上失败。简单地编辑此值并将其设置为有效值将不起作用。你被警告了。
因为ListConstraint的默认UI小部件是一个下拉列表,所以并非每个下拉列表都应该是ListConstraint。ListConstraints设计用于类似Status属性的内容:{草稿,等待批准,已批准}。不适用于客户名称列表。
在过去的几年中,我一次又一次地看到相同的话题。您真正想要的是让用户从动态选项列表(组合框)中选择一个值。这是一个UI问题,而不是字典模型问题。您应该使用web-config-context.xml(Alfresco Web UI)或Alfresco Share中的设置。最后一个更加灵活,我建议您采用这种方式。