如何以编程方式更新Alfresco中的链接?

时间:2016-10-28 18:44:57

标签: java alfresco

我需要以编程方式为文件夹中的所有文档创建链接。 我设法成功创建了链接,我的文件链接节点看起来类似于以下内容:

 linkNode = nodeService.createNode(
   linkFolderNode, 
   ContentModel.ASSOC_CONTAINS,
   QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, display_Name),
   ApplicationModel.TYPE_FILELINK,
   props
 ).getChildRef();

display_Name here指的是显示的文件名。

但是,如果更新原始文件的名称,则会生成另一个指向更新文件的链接。是否可以避免此问题并仅维护指向文件的单个链接?

1 个答案:

答案 0 :(得分:1)

  

display_Name here指的是显示的文件名。

display_Name只是链接的名称,可能与链接的对象名称不同。

NodeService.createNode()返回ChildAssociationRef类,表示创建的两个节点(parentchild - link之间的子关系。 ChildAssociationRef.getChildRef()返回已创建的link NodeRef,例如:workspace://SpacesStore/8dc27c51-cf23-4262-9431-f154edc913d0NodeRef.toString())。如果更改链接节点的名称,则其NodeRef将不会更改。

尝试此实施:

public NodeRef createLink(NodeRef parentRef, NodeRef toLinkRef, 
                          boolean isDocument, String linkName){

    linkName = QName.createValidLocalName(linkName);
    QName linkQName = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, linkName);

    Map<QName, Serializable> props = new HashMap<QName, Serializable>();
    props.put(ContentModel.PROP_NAME, linkName);
    props.put(ContentModel.PROP_LINK_DESTINATION, toLinkRef);

    final NodeRef linkRef = nodeService.createNode(
        parentRef,
        ContentModel.ASSOC_CONTAINS,
        linkQName,
        isDocument ? ApplicationModel.TYPE_FILELINK : ApplicationModel.TYPE_FOLDERLINK,
        props
    ).getChildRef();
    return linkRef;
}

您也可以使用documentLinkService.createDocumentLink(toLinkRef,parentRef),只需注入它:

 <property name="documentLinkService" ref="DocumentLinkService" />