我需要以编程方式为文件夹中的所有文档创建链接。 我成功创建了链接,我的文件链接节点看起来类似于以下内容:
linkNode = nodeService.createNode(
linkFolderNode,
ContentModel.ASSOC_CONTAINS,
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, display_Name),
ApplicationModel.TYPE_FILELINK,
props
).getChildRef();
这里的display_Name是指显示的文件名。
但是,如果您更新原始文件的名称,它会生成另一个指向更新文件的链接。是否可以避免此问题并仅维护给定文件的单个链接?
最佳答案
display_Name here refers to the file name displayed.
display_Name
只是链接的名称,可能与链接对象名称不同。
NodeService.createNode()返回ChildAssociationRef类,表示两个节点之间的子关系(parent
和 child
- 创建的 link
)。
ChildAssociationRef.getChildRef()返回创建的链接
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)
同样,只需注入(inject)它:
<property name="documentLinkService" ref="DocumentLinkService" />
关于java - 如何以编程方式更新 Alfresco 中的链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40311383/