我已将以下自定义方面添加到我的内容模型中:
<aspect name="my:locationDocumentClassification">
<title>My Location Document Classification</title>
<parent>cm:classifiable</parent>
<properties>
<property name="my:locationDocumentCategory">
<title>Location Document Categories</title>
<type>d:category</type>
<mandatory>false</mandatory>
<multiple>false</multiple>
<index enabled="true">
<atomic>true</atomic>
<stored>true</stored>
<tokenised>false</tokenised>
</index>
</property>
</properties>
</aspect>
现在我希望能够将一组类别填充到分类中。我使用以下Webscript填充类别:
protected Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache) {
// NodeRef newRootCat = categoryService.createRootCategory(
// StoreRef.STORE_REF_WORKSPACE_SPACESSTORE,
// ContentModel.ASPECT_GEN_CLASSIFIABLE,
// "testroot");
// LOGGER.log(Level.INFO, "Created: {0}", newRootCat.toString());
// NodeRef newCategory = categoryService.createCategory(newRootCat, "testcat");
// LOGGER.log(Level.INFO, "Created: {0}", newCategory.toString());
// NodeRef locationDocumentClassification = categoryService.createClassification(
// StoreRef.STORE_REF_WORKSPACE_SPACESSTORE,
// MyModel.ASPECT_MY_LOCATION_DOCUMENT_CLASSIFICATION,
// "locationDocumentClassification");
// LOGGER.log(Level.INFO, "Created: {0}", locationDocumentClassification.toString());
NodeRef locationDocumentRootCat = categoryService.createRootCategory(
StoreRef.STORE_REF_WORKSPACE_SPACESSTORE,
MyModel.ASPECT_MY_LOCATION_DOCUMENT_CLASSIFICATION,
"testroot");
LOGGER.log(Level.INFO, "Created: {0}", locationDocumentRootCat.toString());
NodeRef klantDocCat = categoryService.createCategory(locationDocumentRootCat, "testcat");
LOGGER.log(Level.INFO, "Created: {0}", klantDocCat.toString());
return new HashMap<>();
}
当我执行代码时,出现以下错误:
10170041 Wrapped Exception (with status template): 10170014 Missing classification: {http://my.company.com/model/content/1.0}locationDocumentClassification
代码中前两个注释掉的语句是来自Alfresco的示例代码,它可以正常工作。第三个注释掉的声明是我试图首先创建一个分类,看看是否有效。取消注释createClassification
语句时出现的错误:
java.lang.UnsupportedOperationException at org.alfresco.repo.search.impl.lucene.LuceneCategoryServiceImpl.createClassification(LuceneCategoryServiceImpl.java:369)
那里没有运气。我希望有人可以看到这个问题。我阅读了有关此内容的所有帖子和论坛,但无法找到答案。
我使用的是Alfresco 5.0d社区版。
答案 0 :(得分:0)
如果您下载SDK的源文件,您将看到您正在触发以下代码:
public NodeRef createRootCategory(StoreRef storeRef, QName aspectName, String name)
{
Set<NodeRef> nodeRefs = getClassificationNodes(storeRef, aspectName);
if (nodeRefs.size() == 0)
{
throw new AlfrescoRuntimeException("Missing classification: " + aspectName);
}
NodeRef parent = nodeRefs.iterator().next();
return createCategory(parent, name);
}
private Set<NodeRef> getClassificationNodes(StoreRef storeRef, QName qname)
{
ResultSet resultSet = null;
try
{
resultSet = indexerAndSearcher.getSearcher(storeRef, false).query(storeRef, "lucene",
"PATH:\"/" + getPrefix(qname.getNamespaceURI()) + ISO9075.encode(qname.getLocalName()) + "\"", null);
etc....
}
所以基本上它正在尝试做的是搜索已经创建的类别并创建一个根。
所以你需要做的只是使用代码在cm:category
中创建category_root
类型的节点并添加你的方面。
在TYPE:"cm:category_root"
上搜索并创建它。
或创建自己的类型,其父级为cm:category。唯一的问题是你需要更改很多UI元素,因为它们只检查cm:category类型。