我需要以编程方式为文件夹中的所有文档创建链接。 我设法成功创建了链接,我的文件链接节点看起来类似于以下内容:
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指的是显示的文件名。
但是,如果更新原始文件的名称,则会生成另一个指向更新文件的链接。是否可以避免此问题并仅维护指向文件的单个链接?
答案 0 :(得分:1)
display_Name here指的是显示的文件名。
display_Name
只是链接的名称,可能与链接的对象名称不同。
NodeService.createNode()返回ChildAssociationRef类,表示创建的两个节点(parent
和child
- link
之间的子关系。
ChildAssociationRef.getChildRef()返回已创建的link
NodeRef,例如:workspace://SpacesStore/8dc27c51-cf23-4262-9431-f154edc913d0
(NodeRef.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" />