使内容节点成为节点的主父节点

时间:2019-09-12 14:48:51

标签: java alfresco

我尝试使用Alfresco NodeService来使内容节点(QName cm:content)成为另一个内容节点的主要父级NodeService提供了一种方法

public ChildAssociationRef moveNode(
        NodeRef nodeToMoveRef,
        NodeRef newParentRef,
        QName assocTypeQName,
        QName assocQName)
        throws InvalidNodeRefException;

假设节点theNodeToMove的当前主要父级是文件夹,文件夹中节点的主要父级assoc引用是primaryAssocRef。假设theTargetContentNode为目标 content 节点。

像这样调用以上消息

nodeService.moveNode(theNodeToMove,
                     theTargetContentNode,
                     primaryAssocRef.getTypeQName(),
                     primaryAssocRef.getQName());

失败。 Alfresco报道了诚信违规

The association source type is incorrect:
   Source Node: workspace://SpacesStore/27a97736-222c-4bac-8610-f15ce312b074 
   Association: Association[ class=ClassDef[name={http://www.alfresco.org/model/content/1.0}folder], name={http://www.alfresco.org/model/content/1.0}contains, target class={http://www.alfresco.org/model/system/1.0}base, source role=null, target role=null]
   Required Source Type: {http://www.alfresco.org/model/content/1.0}folder
   Actual Source Type: {http://www.alfresco.org/model/content/1.0}content

甚至有可能使现有内容节点的 content节点主要父级

1 个答案:

答案 0 :(得分:3)

是,不是。是的,因为内容节点可以有子节点,不是的,因为您不能使用“包含”关联。

基本上,当您创建“父子”关系时,需要声明其关联类型。您可以有许多这样的类型,例如rm:rendition是这些类型之一。

在文件夹下创建文档时使用的“主要”关联类型为cm:contains,并且其设置方式不允许内容节点具有子代。这是通过模型定义完成的,看起来像这样:

<type name="cm:folder">
     <title>Folder</title>
     <parent>cm:cmobject</parent>
     <archive>true</archive>
     <associations>
        <child-association name="cm:contains">
           <source>
              <mandatory>false</mandatory>
              <many>true</many>
           </source>
           <target>
              <class>sys:base</class>
              <mandatory>false</mandatory>
              <many>true</many>
           </target>
           <duplicate>false</duplicate>
           <propagateTimestamps>true</propagateTimestamps>
        </child-association>
     </associations>
</type>