无法创建自定义分类

时间:2015-11-17 17:45:39

标签: alfresco

我已将以下自定义方面添加到我的内容模型中:

<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社区版。

1 个答案:

答案 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类型。